From 6b83be3356d17148ae4a4abaaa8169d964cb6f80 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Mon, 25 Jan 2016 12:51:00 +0100 Subject: [PATCH 1/2] Possible fixing association GUI (+test for association wrapper) --- .../prism/ContainerWrapperFactory.java | 49 ++++---- .../web/component/prism/ObjectWrapper.java | 9 -- .../web/page/admin/PageAdminFocus.java | 35 +----- ...AbstractInitializedGuiIntegrationTest.java | 3 +- .../midpoint/web/AdminGuiTestConstants.java | 9 ++ .../TestIntegrationObjectWrapperFactory.java | 113 +++++++++++++++++- .../test/resources/common/role-mapmaker.xml | 48 ++++++++ 7 files changed, 196 insertions(+), 70 deletions(-) create mode 100644 gui/admin-gui/src/test/resources/common/role-mapmaker.xml diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java index f6af4185707..5aced2f668f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapperFactory.java @@ -21,6 +21,8 @@ import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.schema.GetOperationOptions; +import com.evolveum.midpoint.schema.SelectorOptions; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ResourceTypeUtil; import com.evolveum.midpoint.util.DOMUtil; @@ -195,26 +197,31 @@ private List createProperties(ContainerWrapper cWrapper, OperationR } else if (isShadowAssociation(cWrapper)) { PrismContext prismContext = objectWrapper.getObject().getPrismContext(); Map> assocMap = new HashMap<>(); - if (objectWrapper.getAssociations() != null) { - List> associations = objectWrapper.getAssociations(); - for (PrismContainerValue cval : associations) { - ShadowAssociationType associationType = cval.asContainerable(); - QName assocName = associationType.getName(); - PrismContainer fractionalContainer = assocMap.get(assocName); - if (fractionalContainer == null) { - fractionalContainer = new PrismContainer<>(ShadowType.F_ASSOCIATION, ShadowAssociationType.class, cval.getPrismContext()); - fractionalContainer.setDefinition(cval.getParent().getDefinition()); - // HACK: set the name of the association as the element name so wrapper.getName() will return correct data. - fractionalContainer.setElementName(assocName); - assocMap.put(assocName, fractionalContainer); - } - try { - fractionalContainer.add(cval.clone()); - } catch (SchemaException e) { - // Should not happen - throw new SystemException("Unexpected error: " + e.getMessage(), e); - } - } + PrismContainer associationContainer = cWrapper.getItem(); + if (associationContainer != null && associationContainer.getValues() != null) { + // Do NOT load shadows here. This will be huge overhead if there are many associations. + // Load them on-demand (if necessary at all). + List> associations = associationContainer.getValues(); + if (associations != null) { + for (PrismContainerValue cval : associations) { + ShadowAssociationType associationType = cval.asContainerable(); + QName assocName = associationType.getName(); + PrismContainer fractionalContainer = assocMap.get(assocName); + if (fractionalContainer == null) { + fractionalContainer = new PrismContainer<>(ShadowType.F_ASSOCIATION, ShadowAssociationType.class, cval.getPrismContext()); + fractionalContainer.setDefinition(cval.getParent().getDefinition()); + // HACK: set the name of the association as the element name so wrapper.getName() will return correct data. + fractionalContainer.setElementName(assocName); + assocMap.put(assocName, fractionalContainer); + } + try { + fractionalContainer.add(cval.clone()); + } catch (SchemaException e) { + // Should not happen + throw new SystemException("Unexpected error: " + e.getMessage(), e); + } + } + } } PrismReference resourceRef = parent.findReference(ShadowType.F_RESOURCE_REF); @@ -341,7 +348,7 @@ private List createProperties(ContainerWrapper cWrapper, OperationR return properties; } - private boolean isShadowAssociation(ContainerWrapper cWrapper) { + private boolean isShadowAssociation(ContainerWrapper cWrapper) { ObjectWrapper oWrapper = cWrapper.getObject(); PrismContainer container = cWrapper.getItem(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ObjectWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ObjectWrapper.java index 99c493c5d6e..9bf9ed41f94 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ObjectWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ObjectWrapper.java @@ -77,7 +77,6 @@ public class ObjectWrapper implements Serializable, Reviva private OperationResult result; private boolean protectedAccount; - private List> associations; private Collection> parentOrgs = new ArrayList<>(); private OperationResult fetchResult; @@ -127,14 +126,6 @@ public void revive(PrismContext prismContext) throws SchemaException { } } - public List> getAssociations() { - return associations; - } - - public void setAssociations(List> associations) { - this.associations = associations; - } - public Collection> getParentOrgs() { return parentOrgs; } 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 68d6df36a2a..edc0d55d0e4 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 @@ -291,45 +291,12 @@ private

List loadProjectionWrappers(C wrapper.setSelectable(true); wrapper.setMinimalized(true); - if (ShadowType.class.equals(type)) { - - PrismContainer associationContainer = projection - .findContainer(ShadowType.F_ASSOCIATION); - if (associationContainer != null && associationContainer.getValues() != null) { - List> associations = new ArrayList<>( - associationContainer.getValues().size()); - for (PrismContainerValue associationVal : associationContainer.getValues()) { - ShadowAssociationType associationType = (ShadowAssociationType) associationVal - .asContainerable(); - ObjectReferenceType shadowRef = associationType.getShadowRef(); - // shadowRef can be null in case of "broken" - // associations we can safely eliminate fetching - // from resource, because we need only the name - if (shadowRef != null) { - PrismObject associationTargetShadow = getModelService().getObject(ShadowType.class, - shadowRef.getOid(), SelectorOptions.createCollection(GetOperationOptions.createNoFetch()), - task, subResult); - shadowRef.asReferenceValue().setObject(associationTargetShadow); - associations.add(associationVal); - } - } - wrapper.setAssociations(associations); - } - - } wrapper.initializeContainers(this); list.add(new FocusProjectionDto(wrapper, UserDtoStatus.MODIFY)); subResult.recomputeStatus(); - } catch (ObjectNotFoundException ex) { - // this is fix for MID-854, full user/accounts/assignments - // reload if accountRef reference is broken - // because consistency already fixed it. - getObjectModel().reset(); - projectionModel.reset(); - getParentOrgModel().reset(); - assignmentsModel.reset(); + } catch (Exception ex) { subResult.recordFatalError("Couldn't load account." + ex.getMessage(), ex); LoggingUtils.logException(LOGGER, "Couldn't load account", ex); diff --git a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AbstractInitializedGuiIntegrationTest.java b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AbstractInitializedGuiIntegrationTest.java index 934e82e3bda..17157a56a08 100644 --- a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AbstractInitializedGuiIntegrationTest.java +++ b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AbstractInitializedGuiIntegrationTest.java @@ -70,7 +70,8 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti dummyResourceCtl.setResource(resourceDummy); repoAddObjectFromFile(USER_JACK_FILE, UserType.class, true, initResult); - + + importObjectFromFile(ROLE_MAPMAKER_FILE); } @Test diff --git a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AdminGuiTestConstants.java b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AdminGuiTestConstants.java index 3b8c75a1ec7..6de5f79e444 100644 --- a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AdminGuiTestConstants.java +++ b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/AdminGuiTestConstants.java @@ -17,6 +17,10 @@ import java.io.File; +import javax.xml.namespace.QName; + +import com.evolveum.midpoint.schema.constants.MidPointConstants; +import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.test.util.MidPointTestConstants; /** @@ -42,10 +46,15 @@ public class AdminGuiTestConstants { public static final File RESOURCE_DUMMY_FILE = new File(COMMON_DIR, "resource-dummy.xml"); public static final String RESOURCE_DUMMY_OID = "10000000-0000-0000-0000-000000000004"; + public static final String RESOURCE_DUMMY_NAMESPACE = MidPointConstants.NS_RI; public static final File RESOURCE_DUMMY_INITIALIZED_FILE = new File(COMMON_DIR, "resource-dummy-initialized.xml"); + protected static final QName RESOURCE_DUMMY_ASSOCIATION_GROUP_QNAME = new QName(RESOURCE_DUMMY_NAMESPACE, "group"); public static final File ROLE_SUPERUSER_FILE = new File(COMMON_DIR, "role-superuser.xml"); protected static final String ROLE_SUPERUSER_OID = "00000000-0000-0000-0000-000000000004"; + + public static final File ROLE_MAPMAKER_FILE = new File(COMMON_DIR, "role-mapmaker.xml"); + public static final String ROLE_MAPMAKER_OID = "10000000-0000-0000-0000-000000001605"; public static final File SHADOW_ACCOUNT_JACK_DUMMY_FILE = new File(COMMON_DIR, "shadow-account-jack-dummy.xml"); diff --git a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java index e20af62e0bd..923d51fde88 100644 --- a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java +++ b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java @@ -19,7 +19,10 @@ import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertTrue; +import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static com.evolveum.midpoint.web.AdminGuiTestConstants.*; +import static com.evolveum.midpoint.test.IntegrationTestTools.display; import java.util.Arrays; import java.util.List; @@ -32,22 +35,37 @@ import org.testng.AssertJUnit; import org.testng.annotations.Test; +import com.evolveum.icf.dummy.resource.DummyGroup; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismContainer; +import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismProperty; +import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.constants.SchemaConstants; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.test.DummyResourceContoller; import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.web.component.prism.AssociationWrapper; import com.evolveum.midpoint.web.component.prism.ContainerStatus; import com.evolveum.midpoint.web.component.prism.ContainerWrapper; +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.ValueStatus; import com.evolveum.midpoint.web.component.prism.ValueWrapper; import com.evolveum.midpoint.web.util.ModelServiceLocator; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowAssociationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowIdentifiersType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; @@ -59,9 +77,16 @@ @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class TestIntegrationObjectWrapperFactory extends AbstractInitializedGuiIntegrationTest { + private static final String USER_WALLY_NAME = "wally"; + private static final String USER_WALLY_FULLNAME = "Wally B. Feed"; + + public static final String GROUP_DUMMY_MAPMAKERS_NAME = "mapmakers"; + private String userWallyOid; + private String accountWallyOid; + @Test - public void testCreateWrapperUser() throws Exception { - final String TEST_NAME = "testCreateWrapperUser"; + public void test100CreateWrapperUser() throws Exception { + final String TEST_NAME = "test100CreateWrapperUser"; TestUtil.displayTestTile(TEST_NAME); PrismObject user = getUser(USER_JACK_OID); @@ -93,8 +118,8 @@ public void testCreateWrapperUser() throws Exception { } @Test - public void testCreateWrapperShadow() throws Exception { - final String TEST_NAME = "testCreateWrapperShadow"; + public void test150CreateWrapperShadow() throws Exception { + final String TEST_NAME = "test150CreateWrapperShadow"; TestUtil.displayTestTile(TEST_NAME); PrismObject shadow = getShadowModel(accountJackOid); @@ -110,7 +135,7 @@ public void testCreateWrapperShadow() throws Exception { // THEN TestUtil.displayThen(TEST_NAME); - IntegrationTestTools.display("Wrapper after", objectWrapper); + display("Wrapper after", objectWrapper); WrapperTestUtil.assertWrapper(objectWrapper, "shadow display name", "shadow description", shadow, ContainerStatus.MODIFYING); assertEquals("wrong number of containers in "+objectWrapper, 9, objectWrapper.getContainers().size()); @@ -128,5 +153,83 @@ public void testCreateWrapperShadow() throws Exception { WrapperTestUtil.assertPropertyWrapper(activationContainerWrapper, ActivationType.F_LOCKOUT_STATUS, null); } + @Test + public void test220AssignRoleLandluberToWally() throws Exception { + final String TEST_NAME = "test220AssignRoleLandluberToWally"; + TestUtil.displayTestTile(this, TEST_NAME); + + Task task = taskManager.createTaskInstance(TestIntegrationObjectWrapperFactory.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + + DummyGroup mapmakers = new DummyGroup(GROUP_DUMMY_MAPMAKERS_NAME); + dummyResource.addGroup(mapmakers); + + PrismObject user = createUser(USER_WALLY_NAME, USER_WALLY_FULLNAME, true); + addObject(user); + userWallyOid = user.getOid(); + assignRole(userWallyOid, ROLE_MAPMAKER_OID, task, result); + + // preconditions + result.computeStatus(); + TestUtil.assertSuccess(result); + + PrismObject userAfter = getUser(userWallyOid); + display("User after change execution", userAfter); + accountWallyOid = getSingleLinkOid(userAfter); + + PrismObject shadow = getShadowModel(accountWallyOid); + shadow.findReference(ShadowType.F_RESOURCE_REF).getValue().setObject(resourceDummy); + display("Shadow", shadow); + + DummyGroup dummyGroup = dummyResource.getGroupByName(GROUP_DUMMY_MAPMAKERS_NAME); + assertNotNull("No group on dummy resource", dummyGroup); + display("Group", dummyGroup); + assertGroupMember(dummyGroup, USER_WALLY_NAME); + + // WHEN + TestUtil.displayWhen(TEST_NAME); + + ObjectWrapperFactory factory = new ObjectWrapperFactory(getServiceLocator()); + ObjectWrapper objectWrapper = factory.createObjectWrapper("shadow display name", "shadow description", shadow, + ContainerStatus.MODIFYING); + + // THEN + TestUtil.displayThen(TEST_NAME); + + display("Wrapper after", objectWrapper); + + WrapperTestUtil.assertWrapper(objectWrapper, "shadow display name", "shadow description", shadow, ContainerStatus.MODIFYING); + assertEquals("wrong number of containers in "+objectWrapper, 9, objectWrapper.getContainers().size()); + + ContainerWrapper attributesContainerWrapper = objectWrapper.findContainerWrapper(new ItemPath(ShadowType.F_ATTRIBUTES)); + WrapperTestUtil.assertWrapper(attributesContainerWrapper, "attributes", new ItemPath(ShadowType.F_ATTRIBUTES), shadow.findContainer(ShadowType.F_ATTRIBUTES), + true, ContainerStatus.MODIFYING); + WrapperTestUtil.assertPropertyWrapper(attributesContainerWrapper, dummyResourceCtl.getAttributeFullnameQName(), USER_WALLY_FULLNAME); + WrapperTestUtil.assertPropertyWrapper(attributesContainerWrapper, SchemaConstants.ICFS_NAME, USER_WALLY_NAME); + assertEquals("wrong number of items in "+attributesContainerWrapper, 16, attributesContainerWrapper.getItems().size()); + + ContainerWrapper activationContainerWrapper = objectWrapper.findContainerWrapper(new ItemPath(UserType.F_ACTIVATION)); + WrapperTestUtil.assertWrapper(activationContainerWrapper, "Activation", UserType.F_ACTIVATION, shadow, ContainerStatus.MODIFYING); + WrapperTestUtil.assertPropertyWrapper(activationContainerWrapper, ActivationType.F_ADMINISTRATIVE_STATUS, ActivationStatusType.ENABLED); + WrapperTestUtil.assertPropertyWrapper(activationContainerWrapper, ActivationType.F_LOCKOUT_STATUS, null); + + ContainerWrapper associationContainerWrapper = objectWrapper.findContainerWrapper(new ItemPath(ShadowType.F_ASSOCIATION)); + assertNotNull("No association container wrapper", associationContainerWrapper); + assertEquals("wrong number of items in "+associationContainerWrapper, 2, associationContainerWrapper.getItems().size()); + ItemWrapper groupAssociationWrapper = associationContainerWrapper.findPropertyWrapper(RESOURCE_DUMMY_ASSOCIATION_GROUP_QNAME); + assertNotNull("No group association property wrapper", groupAssociationWrapper); + assertTrue("Wrong type of group association property wrapper: "+groupAssociationWrapper.getClass(), groupAssociationWrapper instanceof AssociationWrapper); + List groupAssociationValues = groupAssociationWrapper.getValues(); + assertEquals("wrong number of values in "+groupAssociationWrapper, 1, groupAssociationValues.size()); + ValueWrapper groupAssociationValue = groupAssociationValues.get(0); + PrismContainerValue groupAssociationValuePVal = (PrismContainerValue) groupAssociationValue.getValue(); + display("groupAssociationValuePVal", groupAssociationValuePVal); + assertEquals("wrong number of values in "+groupAssociationValue, ValueStatus.NOT_CHANGED, groupAssociationValue.getStatus()); + assertEquals("Wrong group association name", RESOURCE_DUMMY_ASSOCIATION_GROUP_QNAME, groupAssociationValuePVal.findProperty(ShadowAssociationType.F_NAME).getRealValue()); + PrismContainer groupAssociationValueIdentifiers = groupAssociationValuePVal.findContainer(ShadowAssociationType.F_IDENTIFIERS); + PrismProperty groupAssociationUidProp = groupAssociationValueIdentifiers.findProperty(new QName(null,"uid")); + PrismAsserts.assertPropertyValue(groupAssociationUidProp, GROUP_DUMMY_MAPMAKERS_NAME); + + } } diff --git a/gui/admin-gui/src/test/resources/common/role-mapmaker.xml b/gui/admin-gui/src/test/resources/common/role-mapmaker.xml new file mode 100644 index 00000000000..ba072b4425a --- /dev/null +++ b/gui/admin-gui/src/test/resources/common/role-mapmaker.xml @@ -0,0 +1,48 @@ + + + Mapmaker + + + + account + + ri:group + + + + + + declare namespace icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3"; + attributes/icfs:name + mapmakers + + + onResourceIfNeeded + + + + + + + From daf35c9750d936309ca3646bd78cf369748c9137 Mon Sep 17 00:00:00 2001 From: Radovan Semancik Date: Mon, 25 Jan 2016 13:17:02 +0100 Subject: [PATCH 2/2] Fixing association editor fix --- .../web/component/prism/PrismValuePanel.java | 10 +++++----- ....html => AssociationValueChoicePanel.html} | 0 ....java => AssociationValueChoicePanel.java} | 20 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) rename gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/{AssociationValueChoosePanel.html => AssociationValueChoicePanel.html} (100%) rename gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/{AssociationValueChoosePanel.java => AssociationValueChoicePanel.java} (95%) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java index 9db59728a49..1b06755c35d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismValuePanel.java @@ -36,7 +36,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.model.LookupPropertyModel; -import com.evolveum.midpoint.web.page.admin.users.component.AssociationValueChoosePanel; +import com.evolveum.midpoint.web.page.admin.users.component.AssociationValueChoicePanel; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.apache.commons.lang.ClassUtils; @@ -286,7 +286,7 @@ private boolean isRemoveButtonVisible() { return false; } Component inputPanel = this.get(ID_VALUE_CONTAINER).get(ID_INPUT); - if (inputPanel instanceof ValueChoosePanel || inputPanel instanceof AssociationValueChoosePanel){ + if (inputPanel instanceof ValueChoosePanel || inputPanel instanceof AssociationValueChoicePanel){ return true; } @@ -658,7 +658,7 @@ public void checkInputValue(AutoCompleteTextField input, AjaxRequestTarget targe assocTarget.getTypeName(), assocTarget.getKind(), assocTarget.getIntent()); List values = item.getValues(); - return new AssociationValueChoosePanel(id, model, values, false, ShadowType.class, query); + return new AssociationValueChoicePanel(id, model, values, false, ShadowType.class, query); } } @@ -785,7 +785,7 @@ private void removeValue(AjaxRequestTarget target) { error("Couldn't delete already deleted item: " + wrapper.toString()); target.add(((PageBase) getPage()).getFeedbackPanel()); case NOT_CHANGED: - if (inputPanel instanceof AssociationValueChoosePanel) { + if (inputPanel instanceof AssociationValueChoicePanel) { ((PropertyWrapper)propertyWrapper).setStatus(ValueStatus.DELETED); } wrapper.setStatus(ValueStatus.DELETED); @@ -799,7 +799,7 @@ private void removeValue(AjaxRequestTarget target) { if (count == 0 && !hasEmptyPlaceholder(propertyWrapper)) { if (inputPanel instanceof ValueChoosePanel) { values.add(new ValueWrapper(propertyWrapper, new PrismReferenceValue(null), ValueStatus.ADDED)); - } else if (inputPanel instanceof AssociationValueChoosePanel) { + } else if (inputPanel instanceof AssociationValueChoicePanel) { Item item = propertyWrapper.getItem(); ItemPath path = item.getPath(); if (path != null){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoosePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoicePanel.html similarity index 100% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoosePanel.html rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoicePanel.html diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoosePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoicePanel.java similarity index 95% rename from gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoosePanel.java rename to gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoicePanel.java index d1ebfd0d342..9a3d03af195 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoosePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/AssociationValueChoicePanel.java @@ -64,9 +64,9 @@ // (for now ValueChoosePanel works only with PrismReferenceValue); //in future some super class is to be created to union the common // functionality of these 2 classes -public class AssociationValueChoosePanel extends BasePanel> { +public class AssociationValueChoicePanel extends BasePanel> { - private static final Trace LOGGER = TraceManager.getTrace(AssociationValueChoosePanel.class); + private static final Trace LOGGER = TraceManager.getTrace(AssociationValueChoicePanel.class); private static final String ID_LABEL = "label"; @@ -82,7 +82,7 @@ public class AssociationValueChoosePanel extends BasePane private IModel>> model; private ObjectQuery query = null; - public AssociationValueChoosePanel(String id, IModel>> model, List values, boolean required, Class type, + public AssociationValueChoicePanel(String id, IModel>> model, List values, boolean required, Class type, ObjectQuery query){ super(id, (IModel)new PropertyModel<>(model, "value")); this.model = model; @@ -166,8 +166,8 @@ private void initGenericDialog(final Class type, final List identifiersContainer = cval.findContainer(ShadowAssociationType.F_IDENTIFIERS); + PrismProperty identifierProp = (PrismProperty) identifiersContainer.getValue().getItems().get(0); + return identifierProp.getRealValue(); } else { return shadowRef.getObject().getName().toString(); }