Skip to content

Commit

Permalink
Add missing default relation resolution (MID-3581)
Browse files Browse the repository at this point in the history
ObjectTypeUtil.createObjectRef (and related methods) took prismContext
from objects; this was not entirely correct, so now the prismContext
is to be supplied explicitly by the caller.
  • Loading branch information
mederly committed Sep 10, 2018
1 parent 3ddbf52 commit 333aae4
Show file tree
Hide file tree
Showing 89 changed files with 214 additions and 225 deletions.
Expand Up @@ -18,24 +18,17 @@
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.RelationTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.RelationDropDownChoicePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.Model;

import javax.xml.namespace.QName;
import java.util.ArrayList;
Expand Down Expand Up @@ -94,8 +87,7 @@ protected ObjectDelta prepareDelta(){
Class classType = WebComponentUtil.qnameToClass(pageBase.getPrismContext(), getObjectType().getTypeQName());
delta = ObjectDelta.createEmptyModifyDelta(classType, "fakeOid", pageBase.getPrismContext());
AssignmentType newAssignment = new AssignmentType();
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(getAbstractRoleTypeObject());
ref.setRelation(getRelationValue());
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(getAbstractRoleTypeObject(), getRelationValue());
newAssignment.setTargetRef(ref);

pageBase.getPrismContext().adopt(newAssignment);
Expand Down
Expand Up @@ -19,24 +19,16 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.RelationTypes;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskCategory;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.page.admin.roles.AbstractRoleMemberPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.EnumChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import javax.xml.namespace.QName;
import java.util.ArrayList;
Expand Down Expand Up @@ -93,8 +85,7 @@ protected void onUpdate(AjaxRequestTarget target) {
@Override
protected ObjectDelta prepareDelta(){
Class classType = WebComponentUtil.qnameToClass(getPageBase().getPrismContext(), getObjectType().getTypeQName());
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(getAbstractRoleTypeObject());
ref.setRelation(getRelationValue());
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(getAbstractRoleTypeObject(), getRelationValue());
return ObjectDelta.createModificationAddReference(classType, "fakeOid",
ObjectType.F_PARENT_ORG_REF, getPageBase().getPrismContext(),
ref.asReferenceValue());
Expand Down
Expand Up @@ -161,7 +161,9 @@ protected Map<String, AssignmentType> getSelectedAssignmentsMap(){
ShadowKindType kind = getKindValue();
String intent = getIntentValue();
selectedObjects.forEach(selectedObject -> {
assignmentList.put(selectedObject.getOid(), ObjectTypeUtil.createAssignmentWithConstruction(selectedObject.asPrismObject(), kind, intent));
assignmentList.put(selectedObject.getOid(),
ObjectTypeUtil.createAssignmentWithConstruction(
selectedObject.asPrismObject(), kind, intent, getPageBase().getPrismContext()));
});
return assignmentList;
}
Expand Down
Expand Up @@ -165,9 +165,7 @@
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.xml.namespace.QName;

import java.io.Serializable;
import java.util.*;

/**
Expand Down Expand Up @@ -358,7 +356,7 @@ protected Integer load() {
Task task = createSimpleTask(OPERATION_LOAD_WORK_ITEM_COUNT);
S_FilterEntryOrEmpty q = QueryBuilder.queryFor(WorkItemType.class, getPrismContext());
ObjectQuery query = QueryUtils.filterForAssignees(q, getPrincipal(),
OtherPrivilegesLimitationType.F_APPROVAL_WORK_ITEMS).build();
OtherPrivilegesLimitationType.F_APPROVAL_WORK_ITEMS, getPrismContext()).build(); // TODO MID-3581
return getModelService().countContainers(WorkItemType.class, query, null, task, task.getResult());
} catch (SchemaException | SecurityViolationException | ExpressionEvaluationException | ObjectNotFoundException | CommunicationException | ConfigurationException e) {
LoggingUtils.logExceptionAsWarning(LOGGER, "Couldn't load work item count", e);
Expand Down
Expand Up @@ -2489,7 +2489,8 @@ public static boolean getElementVisibility(UserInterfaceElementVisibilityType vi
return true;
}

public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleConfirmationMessage(String actionName, ColumnMenuAction action, MainObjectListPanel<AR> abstractRoleTable, PageBase pageBase) {
public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleConfirmationMessage(String actionName,
ColumnMenuAction action, MainObjectListPanel<AR> abstractRoleTable, PageBase pageBase) {
List<AR> selectedRoles = new ArrayList<>();
if (action.getRowModel() == null) {
selectedRoles.addAll(abstractRoleTable.getSelectedObjects());
Expand All @@ -2499,7 +2500,11 @@ public static <AR extends AbstractRoleType> IModel<String> createAbstractRoleCon
OperationResult result = new OperationResult("Search Members");
boolean atLeastOneWithMembers = false;
for (AR selectedRole : selectedRoles) {
ObjectQuery query = QueryBuilder.queryFor(FocusType.class, pageBase.getPrismContext()).item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(ObjectTypeUtil.createObjectRef(selectedRole).asReferenceValue()).maxSize(1).build();
ObjectQuery query = QueryBuilder.queryFor(FocusType.class, pageBase.getPrismContext())
.item(FocusType.F_ROLE_MEMBERSHIP_REF)// TODO MID-3581
.ref(ObjectTypeUtil.createObjectRef(selectedRole, pageBase.getPrismContext()).asReferenceValue())
.maxSize(1)
.build();
List<PrismObject<FocusType>> members = WebModelServiceUtils.searchObjects(FocusType.class, query, result, pageBase);
if (CollectionUtils.isNotEmpty(members)) {
atLeastOneWithMembers = true;
Expand Down Expand Up @@ -2601,6 +2606,10 @@ public static List<RelationDefinitionType> getRelationDefinitions(ModelServiceLo
return pageBase.getModelInteractionService().getRelationDefinitions();
}

public static RelationDefinitionType getRelationDefinition(QName relation) {
return getRelationRegistry().getRelationDefinition(relation);
}

public static <T> DropDownChoice createTriStateCombo(String id, IModel<Boolean> model) {
final IChoiceRenderer<T> renderer = new IChoiceRenderer<T>() {

Expand Down
Expand Up @@ -33,7 +33,6 @@
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory;
import com.evolveum.midpoint.web.component.prism.PropertyOrReferenceWrapper;
import com.evolveum.midpoint.web.component.prism.ValueStatus;
import com.evolveum.midpoint.web.page.error.PageError;
import com.evolveum.midpoint.web.page.login.PageLogin;
Expand Down Expand Up @@ -160,7 +159,7 @@ public static <O extends ObjectType> List<ObjectReferenceType> createObjectRefer

for(PrismObject<O> object: objects){
referenceMap.put(object.getOid(), WebComponentUtil.getName(object));
references.add(ObjectTypeUtil.createObjectRef(object));
references.add(ObjectTypeUtil.createObjectRef(object, page.getPrismContext()));

}
return references;
Expand Down
Expand Up @@ -20,7 +20,6 @@
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectQuery;
Expand All @@ -30,7 +29,6 @@
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.column.IsolatedCheckBoxPanel;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -174,7 +172,7 @@ private void onPolicyAddedOrRemoved(PrismObject<AbstractRoleType> assignmentTarg
if (added){
//TODO: not sure if this is correct way of creating new value.. this value is added directly to the origin object... what about deltas??
PrismContainerValue<AssignmentType> newAssignment = assignmentsModel.getObject().getItem().createNewValue();
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(assignmentTargetObject);
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(assignmentTargetObject, getPageBase().getPrismContext());
AssignmentType assignmentType = newAssignment.asContainerable();
assignmentType.setTargetRef(ref);
Task task = getPageBase().createSimpleTask("Creating new applicable policy");
Expand Down
Expand Up @@ -160,7 +160,7 @@ private void toggleRole(PrismObject<R> role) {
}
}

AssignmentType newAssignment = ObjectTypeUtil.createAssignmentTo(role);
// AssignmentType newAssignment = ObjectTypeUtil.createAssignmentTo(role, prismContext);
//TODO
//create ContainerValueWrapper for new assignment
// getAssignmentModel().getObject().add(newAssignment);
Expand Down
Expand Up @@ -125,7 +125,7 @@ protected boolean isEditButtonEnabled() {
}

protected void replaceIfEmpty(ObjectType object) {
ObjectReferenceType ort = ObjectTypeUtil.createObjectRef(object);
ObjectReferenceType ort = ObjectTypeUtil.createObjectRef(object, getPageBase().getPrismContext());
getModel().setObject((T) ort.asReferenceValue());

}
Expand Down
Expand Up @@ -108,8 +108,7 @@ public QName getObject(String id, IModel choices) {

@Override
public Object getDisplayValue(QName object) {
RelationDefinitionType def =
ObjectTypeUtil.findRelationDefinition(WebComponentUtil.getRelationDefinitions(RelationDropDownChoicePanel.this.getPageBase()), object);
RelationDefinitionType def = WebComponentUtil.getRelationDefinition(object);
if (def != null){
DisplayType display = def.getDisplay();
if (display != null){
Expand Down
Expand Up @@ -48,14 +48,12 @@
import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails;
import com.evolveum.midpoint.web.page.admin.reports.component.AuditLogViewerPanel;
import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto;
import com.evolveum.midpoint.web.page.admin.users.PageUserHistory;
import com.evolveum.midpoint.web.page.admin.users.PageXmlDataReview;
import com.evolveum.midpoint.web.session.AuditLogStorage;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventStageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;

/**
* Created by honchar.
Expand Down Expand Up @@ -166,7 +164,7 @@ protected long getCurrentPage() {

private AuditSearchDto createAuditSearchDto(F focus) {
AuditSearchDto searchDto = new AuditSearchDto();
ObjectReferenceType ort = ObjectTypeUtil.createObjectRef(focus);
ObjectReferenceType ort = ObjectTypeUtil.createObjectRef(focus, getPrismContext());
searchDto.setTargetNames(asList(ort));
searchDto.setEventStage(AuditEventStageType.EXECUTION);
return searchDto;
Expand Down
Expand Up @@ -42,8 +42,6 @@
import org.apache.wicket.model.*;
import org.jetbrains.annotations.NotNull;

import java.util.List;

/**
* @author mederly
*/
Expand Down Expand Up @@ -147,7 +145,7 @@ public void onClick(AjaxRequestTarget target) {
PrismContainerValue<?> value = getModelObject().getScene().getSourceValue();
if (value != null && value.getParent() instanceof PrismObject) {
PrismObject<? extends ObjectType> object = (PrismObject<? extends ObjectType>) value.getParent();
WebComponentUtil.dispatchToObjectDetailsPage(ObjectTypeUtil.createObjectRef(object), getPageBase(), false);
WebComponentUtil.dispatchToObjectDetailsPage(ObjectTypeUtil.createObjectRef(object, getPageBase().getPrismContext()), getPageBase(), false);
}
}
};
Expand Down
Expand Up @@ -449,7 +449,7 @@ public void applyState() {
ResourceType resourceType = resource.asObjectable();
resourceType.setName(PolyStringType.fromOrig(resourceNameModel.getObject()));
resourceType.setDescription(resourceDescriptionModel.getObject());
resourceType.setConnectorRef(ObjectTypeUtil.createObjectRef(connector));
resourceType.setConnectorRef(ObjectTypeUtil.createObjectRef(connector, prismContext));
delta = ObjectDelta.createAddDelta(resource);
} else {
PrismObject<ResourceType> oldResourceObject =
Expand All @@ -470,7 +470,7 @@ public void applyState() {
String oldConnectorOid = oldResource.getConnectorRef() != null ? oldResource.getConnectorRef().getOid() : null;
String newConnectorOid = connector.getOid();
if (!StringUtils.equals(oldConnectorOid, newConnectorOid)) {
i = i.item(ResourceType.F_CONNECTOR_REF).replace(ObjectTypeUtil.createObjectRef(connector).asReferenceValue());
i = i.item(ResourceType.F_CONNECTOR_REF).replace(ObjectTypeUtil.createObjectRef(connector, prismContext).asReferenceValue());
}
if (!isConfigurationSchemaCompatible(connector)) {
i = i.item(ResourceType.F_CONNECTOR_CONFIGURATION).replace();
Expand Down
Expand Up @@ -142,7 +142,7 @@ private ObjectQuery createQuery() throws SchemaException, ObjectNotFoundExceptio
} else {
// not authorized to see all => sees only allocated to him (not quite what is expected, but sufficient for the time being)
query = QueryUtils.filterForAssignees(q, SecurityUtils.getPrincipalUser(),
OtherPrivilegesLimitationType.F_APPROVAL_WORK_ITEMS)
OtherPrivilegesLimitationType.F_APPROVAL_WORK_ITEMS, getPrismContext()) // TODO MID-3581
.and().item(CaseWorkItemType.F_CLOSE_TIMESTAMP).isNull().build();
}
IsolatedCheckBoxPanel includeClosedCases = (IsolatedCheckBoxPanel) getCaseWorkItemsSearchField(ID_SEARCH_FILTER_INCLUDE_CLOSED_CASES);
Expand All @@ -161,8 +161,10 @@ private ObjectQuery createQuery() throws SchemaException, ObjectNotFoundExceptio
ObjectType resource = resources.get(0);
if (resource != null) {
query.addFilter(
// TODO MID-3581
QueryBuilder.queryFor(CaseWorkItemType.class, getPrismContext())
.item(PrismConstants.T_PARENT, CaseType.F_OBJECT_REF).ref(ObjectTypeUtil.createObjectRef(resource).asReferenceValue()).buildFilter()
.item(PrismConstants.T_PARENT, CaseType.F_OBJECT_REF).ref(ObjectTypeUtil.createObjectRef(resource,
getPrismContext()).asReferenceValue()).buildFilter()
);
}
}
Expand All @@ -175,9 +177,10 @@ private ObjectQuery createQuery() throws SchemaException, ObjectNotFoundExceptio
if (assignees != null && assignees.size() > 0) {
ObjectType assignee = assignees.get(0);
if (assignee != null) {
// TODO MID-3581
query.addFilter(
QueryBuilder.queryFor(CaseWorkItemType.class, getPrismContext())
.item(CaseWorkItemType.F_ASSIGNEE_REF).ref(ObjectTypeUtil.createObjectRef(assignee).asReferenceValue()).buildFilter()
.item(CaseWorkItemType.F_ASSIGNEE_REF).ref(ObjectTypeUtil.createObjectRef(assignee, getPrismContext()).asReferenceValue()).buildFilter()
);
}
}
Expand Down Expand Up @@ -432,7 +435,7 @@ private void searchFilterPerformed(AjaxRequestTarget target) {

private Function<ObjectType, ObjectReferenceType> objectReferenceTransformer =
(Function<ObjectType, ObjectReferenceType> & Serializable) (ObjectType o) ->
ObjectTypeUtil.createObjectRef(o);
ObjectTypeUtil.createObjectRef(o, getPrismContext());

private static class ButtonBar extends Fragment {

Expand Down
Expand Up @@ -57,12 +57,14 @@ public class CertCaseOrWorkItemDto extends Selectable {
private String objectName;
private String targetName;
private String deadlineAsString;
private QName defaultRelation;

CertCaseOrWorkItemDto(@NotNull AccessCertificationCaseType _case, PageBase page) {
this.certCase = _case;
this.objectName = getName(_case.getObjectRef());
this.targetName = getName(_case.getTargetRef());
this.deadlineAsString = computeDeadlineAsString(page);
this.defaultRelation = page.getPrismContext().getDefaultRelation();
}

// ugly hack (for now) - we extract the name from serialization metadata
Expand Down Expand Up @@ -107,7 +109,7 @@ public QName getTargetType() {
}

public ObjectReferenceType getCampaignRef() {
return ObjectTypeUtil.createObjectRef(getCampaign());
return ObjectTypeUtil.createObjectRef(getCampaign(), defaultRelation);
}

public Long getCaseId() {
Expand Down
Expand Up @@ -51,7 +51,6 @@
import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.button.CsvDownloadButtonPanel;
import com.evolveum.midpoint.gui.api.component.path.ItemPathDto;
import com.evolveum.midpoint.gui.api.component.path.ItemPathPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
Expand Down Expand Up @@ -363,7 +362,7 @@ public boolean isVisible() {
// Serializable as it becomes part of panel which is serialized
private Function<ObjectType, ObjectReferenceType> objectReferenceTransformer =
(Function<ObjectType, ObjectReferenceType> & Serializable) (ObjectType o) ->
ObjectTypeUtil.createObjectRef(o);
ObjectTypeUtil.createObjectRef(o, getPageBase().getPrismContext());

// Serializable as it becomes part of panel which is serialized
private Function<ObjectType, String> stringTransformer =
Expand Down

0 comments on commit 333aae4

Please sign in to comment.