Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jul 28, 2022
2 parents fba3207 + 59b0e36 commit 1f670da
Show file tree
Hide file tree
Showing 12 changed files with 367 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,11 @@ protected void onClick(AjaxRequestTarget target) {

private Tile<QName> createTileForRelation(QName name) {
RelationSelectionType config = getRelationConfiguration();
RelationsDefinitionType relations = config != null ? config.getRelations() : new RelationsDefinitionType();

String icon = DEFAULT_RELATION_ICON;
String label = name.getLocalPart();

for (RelationDefinitionType rel : relations.getRelation()) {
for (RelationDefinitionType rel : config.getRelation()) {
if (!name.equals(rel.getRef())) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand Down Expand Up @@ -45,6 +46,7 @@
import com.evolveum.midpoint.gui.impl.component.tile.ViewToggle;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.OrgFilter;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
Expand All @@ -60,6 +62,7 @@
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.self.dto.AssignmentViewType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
Expand Down Expand Up @@ -126,6 +129,51 @@ public IModel<String> getTitle() {
return () -> getString("RoleCatalogPanel.title");
}

private ObjectQuery createQueryFromOrgRef(ObjectReferenceType ref, boolean scopeOne) {
return getPrismContext()
.queryFor(OrgType.class)
.isInScopeOf(ref.getOid(), scopeOne ? OrgFilter.Scope.ONE_LEVEL : OrgFilter.Scope.SUBTREE)
.asc(ObjectType.F_NAME)
.build();
}

private ObjectQuery createQueryFromCollectionRef(ObjectReferenceType collectionRef) {
PrismObject<ObjectCollectionType> collection = WebModelServiceUtils.loadObject(collectionRef, getPageBase());
ObjectCollectionType objectCollection = collection.asObjectable();

try {
QName type = objectCollection.getType();
if (type == null) {
type = RoleType.COMPLEX_TYPE;
}
ObjectTypes ot = ObjectTypes.getObjectTypeFromTypeQName(type);

ObjectFilter filter = getPageBase().getQueryConverter().createObjectFilter(ot.getClassDefinition(), objectCollection.getFilter());
return getPrismContext()
.queryFor(ot.getClassDefinition())
.filter(filter)
.asc(ObjectType.F_NAME)
.build();
} catch (Exception ex) {
LOGGER.debug("Couldn't create search filter", ex);
getPageBase().error("Couldn't create search filter, reason: " + ex.getMessage());
}

return null;
}

private ObjectQuery createQueryFromCollectionUri(String collectionUri) {
AssignmentViewType view = AssignmentViewType.getViewByUri(collectionUri);
if (view == null) {
return null;
}

return getPrismContext()
.queryFor(view.getType())
.asc(ObjectType.F_NAME)
.build();
}

private void initLayout() {
setOutputMarkupId(true);

Expand Down Expand Up @@ -159,31 +207,13 @@ protected ObjectQuery getCustomizeContentQuery() {
}

if (item.orgRef() != null) {
ObjectReferenceType ref = item.orgRef();

return getPrismContext()
.queryFor(OrgType.class)
.isInScopeOf(ref.getOid(), item.scopeOne() ? OrgFilter.Scope.ONE_LEVEL : OrgFilter.Scope.SUBTREE)
.asc(ObjectType.F_NAME)
.build();
return createQueryFromOrgRef(item.orgRef(), item.scopeOne());
}

if (item.collectionRef() != null) {
PrismObject<ObjectCollectionType> collection = WebModelServiceUtils.loadObject(item.collectionRef(), getPageBase());
ObjectCollectionType objectCollection = collection.asObjectable();

try {
QName type = objectCollection.getType();
if (type == null) {
type = RoleType.COMPLEX_TYPE;
}
ObjectTypes ot = ObjectTypes.getObjectTypeFromTypeQName(type);

return getPageBase().getQueryConverter().createObjectQuery(ot.getClassDefinition(), objectCollection.getFilter());
} catch (Exception ex) {
LOGGER.debug("Couldn't create search filter", ex);
getPageBase().error("Couldn't create search filter, reason: " + ex.getMessage());
}
return createQueryFromCollectionRef(item.collectionRef());
} else if (item.collectionUri() != null) {
return createQueryFromCollectionUri(item.collectionUri());
}

return null;
Expand Down Expand Up @@ -402,13 +432,32 @@ private List<ListGroupMenuItem<RoleCatalogQueryItem>> createMenuFromRoleCollecti
List<ListGroupMenuItem<RoleCatalogQueryItem>> items = new ArrayList<>();
for (RoleCollectionViewType collection : collections) {
try {
String name = null;
RoleCatalogQueryItem rcq = new RoleCatalogQueryItem();

ObjectReferenceType collectionRef = collection.getCollectionRef();
PrismObject<ObjectCollectionType> objectCollection = WebModelServiceUtils.loadObject(collectionRef, getPageBase());
if (collectionRef != null) {
PrismObject<ObjectCollectionType> objectCollection = WebModelServiceUtils.loadObject(collectionRef, getPageBase());

rcq.collectionRef(collectionRef);
name = WebComponentUtil.getDisplayNameOrName(objectCollection, true);
}

String collectionUri = collection.getCollectionUri();
if (StringUtils.isNotEmpty(collectionUri)) {
AssignmentViewType view = AssignmentViewType.getViewByUri(collectionUri);
if (view != null) {
rcq.collectionUri(collectionUri);
name = getString(view);
}
}

if (name == null) {
continue;
}

String name = WebComponentUtil.getDisplayNameOrName(objectCollection, true);
ListGroupMenuItem<RoleCatalogQueryItem> item = new ListGroupMenuItem<>(name);
item.setValue(new RoleCatalogQueryItem()
.collectionRef(collectionRef));
item.setValue(rcq);

items.add(item);
} catch (Exception ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public class RoleCatalogQueryItem implements Serializable {

private ObjectReferenceType collectionRef;

private String collectionUri;

public ObjectReferenceType orgRef() {
return orgRef;
}
Expand All @@ -48,4 +50,13 @@ public RoleCatalogQueryItem scopeOne(boolean scopeOne) {
this.scopeOne = scopeOne;
return this;
}

public String collectionUri() {
return collectionUri;
}

public RoleCatalogQueryItem collectionUri(String collectionUri) {
this.collectionUri = collectionUri;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@
package com.evolveum.midpoint.web.page.self.dto;

import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType;

/**
* Created by honchar.
*/
public enum AssignmentViewType {

ROLE_CATALOG_VIEW(SchemaConstants.OBJECT_COLLECTION_ROLE_CATALOG_URI, AbstractRoleType.class),
ROLE_TYPE(SchemaConstants.OBJECT_COLLECTION_ALL_ROLES_URI, RoleType.class),
ORG_TYPE(SchemaConstants.OBJECT_COLLECTION_ALL_ORGS_URI, OrgType.class),
Expand All @@ -23,7 +27,7 @@ public enum AssignmentViewType {
private String uri;
private Class type;

AssignmentViewType(String uri, Class type){
AssignmentViewType(String uri, Class type) {
this.uri = uri;
this.type = type;
}
Expand All @@ -32,8 +36,21 @@ public String getUri() {
return uri;
}

public Class getType(){
public Class getType() {
return type;
}

public static AssignmentViewType getViewByUri(String uri) {
if (uri == null) {
return null;
}

for (AssignmentViewType a : values()) {
if (uri.equals(a.getUri())) {
return a;
}
}

return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ public String dumpSingleLine() {
@Override
public String debugDump(int indent) {
StringBuilder sb = new StringBuilder();
DebugUtil.debugDumpMapMultiLine(sb, getAliasReducedMap(), 1);
DebugUtil.debugDumpMapMultiLine(sb, getAliasReducedMap(), indent);
return sb.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,16 @@
<xsd:element name="allowOtherRelations" type="xsd:boolean" minOccurs="0">

</xsd:element>
<xsd:element name="relations" type="tns:RelationsDefinitionType" minOccurs="0"/>
<xsd:element name="includeDefaultRelations" type="xsd:boolean" minOccurs="0">

</xsd:element>
<xsd:element name="relation" type="tns:RelationDefinitionType" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>
Definition of a single (custom) relation.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>
Expand Down Expand Up @@ -426,8 +435,10 @@
</xsd:annotation>
<xsd:sequence>
<xsd:element name="identifier" type="xsd:string"/>
<xsd:element name="default" type="xsd:boolean" minOccurs="0"/>
<!-- todo mark deprecated or remove entirely -->
<!--<xsd:element name="collectionViewIdentifier" type="xsd:string" minOccurs="0"/>-->
<xsd:element name="collectionUri" type="xsd:string" minOccurs="0"/>
<xsd:element name="collectionRef" type="tns:ObjectReferenceType" minOccurs="0"/>
<xsd:element name="details" type="tns:ContainerPanelConfigurationType" minOccurs="0"/>
</xsd:sequence>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import javax.annotation.PostConstruct;

import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.util.exception.*;

import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -92,19 +93,21 @@ private void modify(PrismObject<? extends ObjectType> object, boolean dryRun, Mo

private ObjectDelta<? extends ObjectType> createDelta(ObjectType object, ObjectDeltaType deltaBean)
throws ScriptExecutionException, SchemaException {
if (deltaBean.getChangeType() == null) {
deltaBean.setChangeType(ChangeTypeType.MODIFY);
ObjectDeltaType deltaBeanClone = deltaBean.clone();
if (deltaBeanClone.getChangeType() == null) {
deltaBeanClone.setChangeType(ChangeTypeType.MODIFY);
}
if (deltaBean.getOid() == null && deltaBean.getChangeType() != ChangeTypeType.ADD) {
deltaBean.setOid(object.getOid());
if (deltaBeanClone.getOid() == null && deltaBeanClone.getChangeType() != ChangeTypeType.ADD) {
deltaBeanClone.setOid(object.getOid());
}
if (deltaBean.getObjectType() == null) {
if (object.asPrismObject().getDefinition() == null) {
if (deltaBeanClone.getObjectType() == null) {
PrismObjectDefinition<? extends ObjectType> definition = object.asPrismObject().getDefinition();
if (definition == null) {
throw new ScriptExecutionException("No definition for prism object " + object);
}
deltaBean.setObjectType(object.asPrismObject().getDefinition().getTypeName());
deltaBeanClone.setObjectType(definition.getTypeName());
}
return DeltaConvertor.createObjectDelta(deltaBean, prismContext);
return DeltaConvertor.createObjectDelta(deltaBeanClone, prismContext);
}

@Override
Expand Down

0 comments on commit 1f670da

Please sign in to comment.