From d84f0f02e2863a4dff4af0def0f91dc573b2afc1 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Thu, 15 Jan 2015 18:53:49 +0100 Subject: [PATCH] Fixed MID-2073 by retrieving associations in GUI with noFetch option. Fixed ClassCastException in PrismValuePanel. --- .../web/component/prism/PrismValuePanel.java | 4 +++- .../midpoint/web/page/admin/users/PageUser.java | 5 +++-- .../impl/lens/projector/ActivationProcessor.java | 15 ++++++++------- .../midpoint/provisioning/impl/ShadowCache.java | 13 ++++++++----- 4 files changed, 22 insertions(+), 15 deletions(-) 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 6a12241bd8f..9e95355dcba 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 @@ -448,7 +448,9 @@ private String createAssociationTooltipText(PrismProperty property){ for (Object realValue : attr.getRealValues()){ sb.append(getAttributeName(attr)); sb.append(":"); - sb.append(((String)realValue).replace(",", ",​").replace("@", "@​")); + if (realValue != null) { + sb.append(realValue.toString().replace(",", ",​").replace("@", "@​")); + } sb.append("
"); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java index 6b7d13f14be..177b69ea8bb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java @@ -700,9 +700,10 @@ private List loadAccountWrappers() { List associations = new ArrayList<>(associationContainer.getValues().size()); for (PrismContainerValue associationVal : associationContainer.getValues()){ ShadowAssociationType associationType = (ShadowAssociationType) associationVal.asContainerable(); - PrismObject association = getModelService().getObject(ShadowType.class, associationType.getShadowRef().getOid(), null, task, subResult); + // we can safely eliminate fetching from resource, because we need only the name + PrismObject association = getModelService().getObject(ShadowType.class, associationType.getShadowRef().getOid(), + SelectorOptions.createCollection(GetOperationOptions.createNoFetch()), task, subResult); associations.add(association.findProperty(ShadowType.F_NAME)); - } wrapper.setAssociations(associations); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java index 8e2aae76370..47b812ae5bf 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java @@ -536,15 +536,16 @@ private void evaluateActivationMapping(final LensContex LOGGER.trace("No outbound definition in '{}' definition in activation in projection {}, skipping", desc, accCtxDesc); return; } - - ObjectDelta projectionDelta = projCtx.getDelta(); - PropertyDelta shadowPropertyDelta = LensUtil.findAPrioriDelta(context, projCtx, projectionPropertyPath); + + // commented out unused code +// ObjectDelta projectionDelta = projCtx.getDelta(); +// PropertyDelta shadowPropertyDelta = LensUtil.findAPrioriDelta(context, projCtx, projectionPropertyPath); PrismObject shadowNew = projCtx.getObjectNew(); - PrismProperty shadowPropertyNew = null; - if (shadowNew != null) { - shadowPropertyNew = shadowNew.findProperty(projectionPropertyPath); - } +// PrismProperty shadowPropertyNew = null; +// if (shadowNew != null) { +// shadowPropertyNew = shadowNew.findProperty(projectionPropertyPath); +// } MappingInitializer> initializer = new MappingInitializer>() { @Override diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java index 1cc05afa62c..e17a14611e8 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java @@ -925,14 +925,17 @@ private PrismObject lookupOrCreateShadowInRepository(ConnectorInstan parentResult); if (repoShadow == null) { - LOGGER.trace( - "Shadow object (in repo) corresponding to the resource object (on the resource) was not found. The repo shadow will be created. The resource object:\n{}", - SchemaDebugUtil.prettyPrint(resourceShadow)); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace( + "Shadow object (in repo) corresponding to the resource object (on the resource) was not found. The repo shadow will be created. The resource object:\n{}", + SchemaDebugUtil.prettyPrint(resourceShadow)); + } repoShadow = createShadowInRepository(connector, resourceShadow, objectClassDef, resourceType, parentResult); } else { - LOGGER.trace("Found shadow object in the repository {}", - SchemaDebugUtil.prettyPrint(repoShadow)); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Found shadow object in the repository {}", SchemaDebugUtil.prettyPrint(repoShadow)); + } } return repoShadow;