diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ChooseFocusTypeAndRelationDialogPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ChooseFocusTypeAndRelationDialogPanel.java index 7c918fd2c95..e7005e5fecc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ChooseFocusTypeAndRelationDialogPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ChooseFocusTypeAndRelationDialogPanel.java @@ -53,7 +53,6 @@ protected void onInitialize() { } private void initLayout(){ - DropDownFormGroup type = new DropDownFormGroup(ID_OBJECT_TYPE, Model.of(getDefaultObjectType()), Model.ofList(getSupportedObjectTypes()), new QNameObjectTypeChoiceRenderer(), createStringResource("chooseFocusTypeAndRelationDialogPanel.type"), "chooseFocusTypeAndRelationDialogPanel.tooltip.type", true, "col-md-4", "col-md-8", false); @@ -116,14 +115,12 @@ protected List getSupportedObjectTypes() { return WebComponentUtil.createFocusTypeList(true); } - private QName getDefaultObjectType() { + protected QName getDefaultObjectType() { List supportedObjectTypes = getSupportedObjectTypes(); if (CollectionUtils.isEmpty(supportedObjectTypes)) { return FocusType.COMPLEX_TYPE; } - return supportedObjectTypes.iterator().next(); - } protected List getSupportedRelations() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java index a27d66f937e..39ae9f9f218 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java @@ -19,6 +19,7 @@ import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.model.api.ModelExecuteOptions; +import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget; import com.evolveum.midpoint.model.api.context.EvaluatedConstruction; @@ -848,16 +849,13 @@ public List showAllAssignmentsPerformed(AjaxRequestTarget aja private AssignmentInfoDto createAssignmentsPreviewDto(EvaluatedAssignmentTarget evaluatedAbstractRole, Task task, OperationResult result) { return createAssignmentsPreviewDto(evaluatedAbstractRole.getTarget(), evaluatedAbstractRole.isDirectlyAssigned(), - evaluatedAbstractRole.getAssignment(), task, result); + evaluatedAbstractRole.getAssignmentPath(), evaluatedAbstractRole.getAssignment(), task, result); } - protected AssignmentInfoDto createAssignmentsPreviewDto(ObjectReferenceType reference, - Task task, OperationResult result) { + protected AssignmentInfoDto createAssignmentsPreviewDto(ObjectReferenceType reference, Task task, OperationResult result) { PrismObject targetObject = WebModelServiceUtils.resolveReferenceNoFetch(reference, PageAdminFocus.this, task, result); - - return createAssignmentsPreviewDto(targetObject, true, - null, task, result); + return createAssignmentsPreviewDto(targetObject, true, null, null, task, result); } protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType assignment, Task task, OperationResult result) { @@ -872,7 +870,7 @@ protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType isDelegable = targetObject.asObjectable().isDelegable(); } if (Boolean.TRUE.equals(isDelegable)) { - return createAssignmentsPreviewDto(targetObject, true, assignment, task, result); + return createAssignmentsPreviewDto(targetObject, true, null, assignment, task, result); } } } @@ -880,7 +878,7 @@ protected AssignmentInfoDto createDelegableAssignmentsPreviewDto(AssignmentType } private AssignmentInfoDto createAssignmentsPreviewDto(PrismObject targetObject, - boolean isDirectlyAssigned, AssignmentType assignment, + boolean isDirectlyAssigned, AssignmentPath assignmentPath, AssignmentType assignment, Task task, OperationResult result) { AssignmentInfoDto dto = new AssignmentInfoDto(); dto.setTargetOid(targetObject.getOid()); @@ -889,6 +887,7 @@ private AssignmentInfoDto createAssignmentsPreviewDto(PrismObject List createAttributeDefinit return map; } - ItemPath attributePath = ShadowType.F_ATTRIBUTES; - for (ResourceAttributeDefinition def : ocDef.getAttributeDefinitions()) { - if (!(def instanceof PrismPropertyDefinition) && !(def instanceof PrismReferenceDefinition)) { - continue; - } - - map.add(new SearchItemDefinition(ItemPath.create(attributePath, def.getName()), def, null)); + map.add(new SearchItemDefinition(ItemPath.create(ShadowType.F_ATTRIBUTES, getAttributeName(def)), def, null)); } return map; } + + private ItemName getAttributeName(ResourceAttributeDefinition def) { + if (def.getNativeAttributeName() != null) { + return ItemName.fromQName(new QName(MidPointConstants.NS_RI, def.getNativeAttributeName())); + } + + return def.getName(); + + } @Override protected ModelExecuteOptions createModelOptions() { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java index 1066c597793..8da3098405c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java @@ -26,17 +26,14 @@ import com.evolveum.midpoint.model.api.AssignmentCandidatesSpecification; import com.evolveum.midpoint.model.api.AssignmentObjectRelation; -import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.query.QueryFactory; import com.evolveum.midpoint.prism.query.builder.S_FilterEntryOrEmpty; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.exception.ConfigurationException; -import com.evolveum.midpoint.web.component.AjaxIconButton; import com.evolveum.midpoint.web.component.MultifunctionalButton; import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction; -import com.evolveum.midpoint.web.page.admin.PageAdminObjectList; import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction; import com.evolveum.midpoint.web.session.MemberPanelStorage; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -92,8 +89,6 @@ import com.evolveum.midpoint.web.security.GuiAuthorizationConstants; import com.evolveum.midpoint.web.session.UserProfileStorage.TableId; -import static com.evolveum.midpoint.gui.api.util.WebComponentUtil.isAuthorized; - public abstract class AbstractRoleMemberPanel extends BasePanel { private static final long serialVersionUID = 1L; @@ -504,7 +499,12 @@ protected boolean isFocusTypeSelectorVisible() { protected void okPerformed(QName type, Collection relations, AjaxRequestTarget target) { unassignMembersPerformed(type, scope, relations, target); - + } + + @Override + protected QName getDefaultObjectType() { + return WebComponentUtil.classToQName(AbstractRoleMemberPanel.this.getPrismContext(), + AbstractRoleMemberPanel.this.getDefaultObjectType()); } }; @@ -536,6 +536,12 @@ protected void okPerformed(QName type, Collection relations, AjaxRequestT protected boolean isFocusTypeSelectorVisible() { return !QueryScope.SELECTED.equals(scope); } + + @Override + protected QName getDefaultObjectType() { + return WebComponentUtil.classToQName(AbstractRoleMemberPanel.this.getPrismContext(), + AbstractRoleMemberPanel.this.getDefaultObjectType()); + } }; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/MemberOperationsHelper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/MemberOperationsHelper.java index 203c785d8a5..d6d2b0fa54d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/MemberOperationsHelper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/MemberOperationsHelper.java @@ -74,9 +74,9 @@ public static void recomputeMembersPerformed(PageBase modelServiceLocator, Query } - public static void unassignOtherOrgMembersPerformed(PageBase pageBase, R targetObject, QueryScope scope, ObjectQuery query, Collection relations, AjaxRequestTarget target) { - unassignMembersPerformed(pageBase, targetObject, scope, query, relations, ObjectType.COMPLEX_TYPE, target); - } +// public static void unassignOtherOrgMembersPerformed(PageBase pageBase, R targetObject, QueryScope scope, ObjectQuery query, Collection relations, AjaxRequestTarget target) { +// unassignMembersPerformed(pageBase, targetObject, scope, query, relations, ObjectType.COMPLEX_TYPE, target); +// } public static void unassignMembersPerformed(PageBase pageBase, R targetObject, QueryScope scope, ObjectQuery query, Collection relations, QName type, AjaxRequestTarget target) { Task operationalTask = pageBase.createSimpleTask(getTaskName("Remove", scope)); @@ -92,22 +92,25 @@ public static void unassignMembersPerformed(PageBas PrismValue value = pageBase.getPrismContext().itemFactory().createValue(targetObject.getOid()); try { value.applyDefinition(def); - } catch (SchemaException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); + } catch (SchemaException e) { + LoggingUtils.logUnexpectedException(LOGGER, "Can not aply definition " + def, e); + operationalTask.getResult().recordFatalError("Can not aply definition " + def, e); } expression.parameter(new ActionParameterValueType().name(ROLE_PARAMETER).value( new RawType(value, DOMUtil.XSD_STRING, pageBase.getPrismContext()))); - relations.forEach(relation -> { - expression.parameter(new ActionParameterValueType().name(RELATION_PARAMETER).value(QNameUtil.qNameToUri(relation))); - }); + if(relations != null) { + relations.forEach(relation -> { + expression.parameter(new ActionParameterValueType().name(RELATION_PARAMETER).value(QNameUtil.qNameToUri(relation))); + }); + } script.setScriptingExpression(new JAXBElement(SchemaConstants.S_ACTION, ActionExpressionType.class, expression)); try { script.setQuery(pageBase.getQueryConverter().createQueryType(query)); } catch (SchemaException e) { - e.printStackTrace(); //TODO + LoggingUtils.logUnexpectedException(LOGGER, "Can not create ObjectQuery from " + query, e); + operationalTask.getResult().recordFatalError("Can not create ObjectQuery from " + query, e); } executeMemberOperation(pageBase, operationalTask, type, query, script, target); @@ -386,7 +389,6 @@ protected static void executeMemberOperation(PageBase modelServiceLocator, Task ScriptingExpressionType script, AjaxRequestTarget target) { OperationResult parentResult = operationalTask.getResult(); - try { WebComponentUtil.executeMemberOperation(operationalTask, type, memberQuery, script, parentResult, modelServiceLocator); } catch (SchemaException e) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentInfoDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentInfoDto.java index 762b9b87b8d..c5189bbf393 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentInfoDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentInfoDto.java @@ -18,6 +18,7 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.web.component.util.Selectable; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.wicket.Component; @@ -54,6 +55,7 @@ public class AssignmentInfoDto extends Selectable implements private String targetDescription; private Class targetClass; private boolean direct; // true if directly assigned; used only in some contexts + private ObjectType assignmentParent; private QName targetType; // for resource assignments private ShadowKindType kind; @@ -107,6 +109,16 @@ public void setDirect(boolean direct) { this.direct = direct; } + public void setAssignmentParent(AssignmentPath assignmentPath) { + if (assignmentPath.size() > 1 ) { + assignmentParent = assignmentPath.last().getSource(); + } + } + + public ObjectType getAssignmentParent() { + return assignmentParent; + } + public ShadowKindType getKind() { return kind; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java index 7a20c6a0892..c4044c908ba 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssignmentsInfoDialog.java @@ -33,6 +33,7 @@ import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit; import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor; import com.evolveum.midpoint.web.util.OnePageParameterEncoder; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; @@ -54,6 +55,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import org.apache.wicket.AttributeModifier; /** * Abstract superclass for dialogs that display a list of assignments. @@ -155,6 +157,10 @@ public String getObject() { createStringResource("AssignmentPreviewDialog.type.indirect").getString(); } })); + ObjectType assignmentParent = rowModel.getObject().getAssignmentParent(); + if (assignmentParent != null) { + cellItem.add(AttributeModifier.replace("title", createStringResource("AssignmentPreviewDialog.tooltip.indirect.parent").getString() + ": " + assignmentParent.getName())); + } } }); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index df0ccabb986..3c8e8568a90 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -102,13 +102,13 @@ protected void assignMembers(AjaxRequestTarget target, Li MemberOperationsHelper.assignOrgMembers(getPageBase(), getModelObject(), target, availableRelationList); } - @Override - protected void unassignMembersPerformed(QName objectType, QueryScope scope, Collection relations, AjaxRequestTarget target) { - super.unassignMembersPerformed(objectType, scope, relations, target); - if (relations != null && relations.size() > 0) { - MemberOperationsHelper.unassignOtherOrgMembersPerformed(getPageBase(), getModelObject(), scope, getActionQuery(scope, relations), relations, target); - } - } +// @Override +// protected void unassignMembersPerformed(QName objectType, QueryScope scope, Collection relations, AjaxRequestTarget target) { +// super.unassignMembersPerformed(objectType, scope, relations, target); +//// if (relations != null && relations.size() > 0) { +//// MemberOperationsHelper.unassignOtherOrgMembersPerformed(getPageBase(), getModelObject(), scope, getActionQuery(scope, relations), relations, target); +//// } +// } @Override protected List getSupportedObjectTypes(boolean includeAbstractTypes) { diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index f1d8216d3ee..ecd4fba46c4 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=View direct & indirect assignments AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect +AssignmentPreviewDialog.tooltip.indirect.parent=Parent AssignmentTablePanel.menu.assign=Assign AssignmentTablePanel.menu.assignOrg=Assign Org. AssignmentTablePanel.menu.assignOrg.noorgs=No organization structure defined. diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties index 0b97954ddab..d3631700ff8 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=Zobrazit přímá i nepřímá přiřazení AssignmentPreviewDialog.delegationPreviewLabel=Omezit výsady AssignmentPreviewDialog.type.direct=Přímé AssignmentPreviewDialog.type.indirect=Nepřímé +AssignmentPreviewDialog.tooltip.indirect.parent=Předchůdce AssignmentTablePanel.menu.assign=Přidat přiřazení AssignmentTablePanel.menu.assignOrg=Přiřadit organizaci AssignmentTablePanel.menu.assignOrg.noorgs=Organizační struktura není definovaná. diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties index d8e169b6a3b..4e670cb1e86 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties @@ -110,6 +110,7 @@ AssignmentPreviewDialog.label=View direct & indirect assignments AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect +AssignmentPreviewDialog.tooltip.indirect.parent=Parent AssignmentTablePanel.menu.assign=Assign AssignmentTablePanel.menu.assignOrg=Assign Org. AssignmentTablePanel.menu.assignOrg.noorgs=No organization structure defined. diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java index d41b8e2ff4b..d107b6b21aa 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedConstruction.java @@ -33,6 +33,8 @@ public interface EvaluatedConstruction extends DebugDumpable { String getIntent(); boolean isDirectlyAssigned(); - + + AssignmentPath getAssignmentPath(); + boolean isWeak(); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java index 39c77e6b3ba..58576703d78 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedConstructionImpl.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.model.impl.lens; +import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.model.api.context.EvaluatedConstruction; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.result.OperationResult; @@ -24,7 +25,6 @@ import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; @@ -37,13 +37,15 @@ public class EvaluatedConstructionImpl implements EvaluatedConstruction { final private ShadowKindType kind; final private String intent; final private boolean directlyAssigned; + final private AssignmentPath assignmentPath; final private boolean weak; public EvaluatedConstructionImpl(Construction construction, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException { resource = construction.getResource(task, result).asPrismObject(); kind = construction.getKind(); intent = construction.getIntent(); - directlyAssigned = construction.getAssignmentPath() == null || construction.getAssignmentPath().size() == 1; + assignmentPath = construction.getAssignmentPath(); + directlyAssigned = assignmentPath == null || assignmentPath.size() == 1; weak = construction.isWeak(); } @@ -67,6 +69,11 @@ public boolean isDirectlyAssigned() { return directlyAssigned; } + @Override + public AssignmentPath getAssignmentPath() { + return assignmentPath; + } + @Override public boolean isWeak() { return weak; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/ExpressionHelper.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/ExpressionHelper.java index 1dbc5cf5e0f..66e943220b8 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/ExpressionHelper.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/ExpressionHelper.java @@ -145,20 +145,35 @@ public T getSingleArgumentValue(List arguments, St public Collection getArgumentValues(List arguments, String parameterName, boolean required, boolean requiredNonNull, String context, PipelineData input, ExecutionContext executionContext, Class clazz, OperationResult result) throws ScriptExecutionException { List rv = new ArrayList<>(); - ActionParameterValueType paramValue = getArgument(arguments, parameterName, required, requiredNonNull, context); - if (paramValue != null) { - PipelineData paramData = evaluateParameter(paramValue, clazz, input, executionContext, result); - for (PipelineItem item : paramData.getData()) { - PrismValue prismValue = item.getValue(); - if (!(prismValue instanceof PrismPropertyValue)) { - throw new ScriptExecutionException( - "A prism property value was expected in '" + parameterName + "' parameter. Got " + prismValue - .getClass().getName() + " instead."); + for (ActionParameterValueType paramValue : arguments) { + if (parameterName.equals(paramValue.getName())) { + if (paramValue.getScriptingExpression() != null || paramValue.getValue() != null) { + if (paramValue != null) { + PipelineData paramData = evaluateParameter(paramValue, clazz, input, executionContext, result); + for (PipelineItem item : paramData.getData()) { + PrismValue prismValue = item.getValue(); + if (!(prismValue instanceof PrismPropertyValue)) { + throw new ScriptExecutionException( + "A prism property value was expected in '" + parameterName + "' parameter. Got " + prismValue + .getClass().getName() + " instead."); + } else { + rv.add(JavaTypeConverter.convert(clazz, prismValue.getRealValue())); + } + } + } } else { - rv.add(JavaTypeConverter.convert(clazz, prismValue.getRealValue())); + if (requiredNonNull) { + throw new ScriptExecutionException("Required parameter " + parameterName + " is null in invocation of \"" + context + "\""); + } else { + return rv; + } } } } - return rv; + if (required) { + throw new ScriptExecutionException("Required parameter " + parameterName + " not present in invocation of \"" + context + "\""); + } else { + return rv; + } } } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/scripting/TestScriptingBasic.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/scripting/TestScriptingBasic.java index 8fd0d778eb6..b40e5d1166c 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/scripting/TestScriptingBasic.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/scripting/TestScriptingBasic.java @@ -652,8 +652,8 @@ public void test391UnassignFromWill() throws Exception { TestUtil.assertSuccess(result); PrismObject will = getUser(USER_WILL_OID); display("will after unassign assignment", will); - MidPointAsserts.assertNotAssigned(will, "12345678-d34d-b33f-f00d-555555556666", RoleType.COMPLEX_TYPE, RelationTypes.MEMBER.getRelation()); MidPointAsserts.assertNotAssigned(will, "12345678-d34d-b33f-f00d-555555556666", RoleType.COMPLEX_TYPE, RelationTypes.MANAGER.getRelation()); + MidPointAsserts.assertNotAssigned(will, "12345678-d34d-b33f-f00d-555555556666", RoleType.COMPLEX_TYPE, RelationTypes.OWNER.getRelation()); MidPointAsserts.assertAssignedResource(will, "10000000-0000-0000-0000-000000000004"); } diff --git a/model/model-intest/src/test/resources/common/user-will.xml b/model/model-intest/src/test/resources/common/user-will.xml index 61e9b75d8d7..355d3043227 100644 --- a/model/model-intest/src/test/resources/common/user-will.xml +++ b/model/model-intest/src/test/resources/common/user-will.xml @@ -32,6 +32,9 @@ + + + diff --git a/model/model-intest/src/test/resources/scripting/unassign-from-will-2.xml b/model/model-intest/src/test/resources/scripting/unassign-from-will-2.xml index 62923c75d7f..1cfab84bf9b 100644 --- a/model/model-intest/src/test/resources/scripting/unassign-from-will-2.xml +++ b/model/model-intest/src/test/resources/scripting/unassign-from-will-2.xml @@ -34,7 +34,11 @@ relation - any + manager + + + relation + owner diff --git a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java index 636f4306100..9b00fbac5e5 100644 --- a/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java +++ b/model/notifications-api/src/main/java/com/evolveum/midpoint/notifications/api/events/BaseEvent.java @@ -32,6 +32,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.xml.namespace.QName; import java.util.Collection; @@ -175,36 +176,55 @@ public String getRequesteeOid() { return requestee.getOid(); } - public ObjectType getRequesteeObject() { - if (requestee == null) { + @Nullable + private ObjectType resolveObject(SimpleObjectRef ref) { + if (ref == null) { return null; } - return requestee.resolveObjectType(new OperationResult(BaseEvent.class + ".getRequesteeObject"), true); + return ref.resolveObjectType(new OperationResult(BaseEvent.class + ".resolveObject"), true); + } + + public ObjectType getRequesteeObject() { + return resolveObject(requestee); + } + + public ObjectType getRequesterObject() { + return resolveObject(requester); } public PolyStringType getRequesteeDisplayName() { - if (requestee == null) { - return null; - } - ObjectType requesteeObject = getRequesteeObject(); - if (requesteeObject == null) { + return getDisplayName(getRequesteeObject()); + } + + public PolyStringType getRequesterDisplayName() { + return getDisplayName(getRequesterObject()); + } + + @Nullable + private PolyStringType getDisplayName(ObjectType object) { + if (object == null) { return null; } - if (requesteeObject instanceof UserType) { - return ((UserType) requesteeObject).getFullName(); - } else if (requesteeObject instanceof AbstractRoleType) { - return ((AbstractRoleType) requesteeObject).getDisplayName(); + if (object instanceof UserType) { + return ((UserType) object).getFullName(); + } else if (object instanceof AbstractRoleType) { + return ((AbstractRoleType) object).getDisplayName(); } else { - return requesteeObject.getName(); + return object.getName(); } } + @Nullable + private PolyStringType getName(ObjectType object) { + return object != null ? object.getName() : null; + } + public PolyStringType getRequesteeName() { - if (requestee == null) { - return null; - } - ObjectType requesteeObject = getRequesteeObject(); - return requesteeObject != null ? requesteeObject.getName() : null; + return getName(getRequesteeObject()); + } + + public PolyStringType getRequesterName() { + return getName(getRequesterObject()); } public void setRequestee(SimpleObjectRef requestee) { diff --git a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/ReportCreateTaskHandler.java b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/ReportCreateTaskHandler.java index 770c48db72c..1ef83132dd9 100644 --- a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/ReportCreateTaskHandler.java +++ b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/ReportCreateTaskHandler.java @@ -73,6 +73,7 @@ import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.report.api.ReportConstants; import com.evolveum.midpoint.report.api.ReportService; +import com.evolveum.midpoint.schema.ObjectDeltaOperation; import com.evolveum.midpoint.schema.SearchResultList; import com.evolveum.midpoint.schema.constants.ExpressionConstants; import com.evolveum.midpoint.schema.result.OperationResult; @@ -522,12 +523,12 @@ private void saveReportOutputType(String filePath, ReportType reportType, Task t deltas.add(objectDelta); subResult = parentResult.createSubresult(ReportCreateTaskHandler.class.getName() + "createRepourtOutput"); - modelService.executeChanges(deltas, null, task, subResult); + Collection> executedDeltas = modelService.executeChanges(deltas, null, task, subResult); + String reportOutputOid = ObjectDeltaOperation.findAddDeltaOid(executedDeltas, reportOutputType.asPrismObject()); - String outputOid = objectDelta.getOid(); - LOGGER.debug("Created report output with OID {}", outputOid); + LOGGER.debug("Created report output with OID {}", reportOutputOid); PrismProperty outputOidProperty = prismContext.getSchemaRegistry().findPropertyDefinitionByElementName(ReportConstants.REPORT_OUTPUT_OID_PROPERTY_NAME).instantiate(); - outputOidProperty.setRealValue(outputOid); + outputOidProperty.setRealValue(reportOutputOid); task.setExtensionPropertyImmediate(outputOidProperty, subResult); subResult.computeStatus(); diff --git a/samples/resources/openstack/resource-openstack-connector.xml b/samples/resources/openstack/resource-openstack-connector.xml index 7f1942b3275..f43c689fd6c 100644 --- a/samples/resources/openstack/resource-openstack-connector.xml +++ b/samples/resources/openstack/resource-openstack-connector.xml @@ -1,403 +1,50 @@ - - openstackv38 - - 2019-01-15T00:33:06.733+01:00 - - http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user - - - 2019-01-15T00:32:49.865+01:00 - - - modify - c:ResourceType - - - com.evolveum.midpoint.model.impl.lens.ChangeExecutor.executeDelta - success - 1000000000000000151 - - openstackv38 - - success - - http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user - - - 2019-01-15T00:33:07.456+01:00 - - - modify - c:ResourceType - - - com.evolveum.midpoint.model.impl.lens.ChangeExecutor.executeDelta - success - 1000000000000000227 - - openstackv38 - - success - - http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user - - - up - - + + Openstack Keystone + + + + + + + c:connectorType + com.evolveum.polygon.connector.openstackkeystone.rest.OpenStackConnector + + + + endpoint userId - Secret + + password + projectName domainName - - - 2019-01-15T00:32:54.532+01:00 - 63a283fc71c19257-c22a5b2a4f05423d - - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - Role - - - - - - - 120 - domain_id - - - - - - - 130 - read - links - - - - - - - ConnId Name - 110 - __NAME__ - - - - - - - ConnId UID - 100 - read - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - __GROUP__ - - - - - - - 120 - description - - - - - - - 130 - domain_id - - - - - - - 140 - read - links - - - - - - - 150 - group_members - - - - - - - ConnId Name - 110 - __NAME__ - - - - - - - ConnId UID - 100 - read - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - Project - - - - - - - 120 - description - - - - - - - 130 - domain_id - - - - - - - 140 - read - links - - - - - - - ConnId Name - 110 - __NAME__ - - - - - - - 150 - create - read - parent_id - - - - - - - ConnId UID - 100 - read - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - Domain - - - - - - - 120 - description - - - - - - - ConnId Name - 110 - __NAME__ - - - - - - - ConnId UID - 100 - read - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - __ACCOUNT__ - account - true - - - - - - - 120 - description - - - - - - - 130 - domain_id - - - - - - - 140 - read - links - - - - - - - ConnId Name - 110 - __NAME__ - - - - - - - 150 - userroles - - - - - - - 160 - usergroups - - - - - - - 170 - default_project_id - - - - - - - 180 - email - - - - - - - ConnId UID - 100 - read - - - - - - - - + + + - + entitlement Group false ri:GroupObjectClass - + icfs:name $focus/name - + $focus/name - +