From e6f9b98c82fcfffa213ffba388add474deb12c2f Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Tue, 25 Oct 2016 11:13:07 +0200 Subject: [PATCH] Continuing cleanup. --- ...ositeRefinedObjectClassDefinitionImpl.java | 28 ++++---- .../LayerRefinedObjectClassDefinition.java | 4 ++ ...LayerRefinedObjectClassDefinitionImpl.java | 71 +++++++++---------- .../ObjectClassComplexTypeDefinitionImpl.java | 12 +++- .../midpoint/schema/TestDeltaConverter.java | 2 +- .../schema/processor/SchemaProcessorTest.java | 13 ++-- .../schema/processor/TestResourceSchema.java | 9 +-- .../impl/lens/LensProjectionContext.java | 2 +- .../projector/ConsolidationProcessor.java | 8 +-- .../ucf/impl/ConnectorInstanceIcfImpl.java | 5 +- 10 files changed, 82 insertions(+), 72 deletions(-) diff --git a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/CompositeRefinedObjectClassDefinitionImpl.java b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/CompositeRefinedObjectClassDefinitionImpl.java index 1df65f31de1..ce3679f153b 100644 --- a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/CompositeRefinedObjectClassDefinitionImpl.java +++ b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/CompositeRefinedObjectClassDefinitionImpl.java @@ -33,10 +33,7 @@ import org.jetbrains.annotations.NotNull; import javax.xml.namespace.QName; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -136,18 +133,18 @@ public Integer getDisplayOrder() { } @Override - public RefinedAttributeDefinition getDescriptionAttribute() { + public RefinedAttributeDefinition getDescriptionAttribute() { return structuralObjectClassDefinition.getDescriptionAttribute(); } @Override - public String getHelp() { - return structuralObjectClassDefinition.getHelp(); + public RefinedAttributeDefinition getNamingAttribute() { + return structuralObjectClassDefinition.getNamingAttribute(); } @Override - public RefinedAttributeDefinition getNamingAttribute() { - return structuralObjectClassDefinition.getNamingAttribute(); + public String getHelp() { + return structuralObjectClassDefinition.getHelp(); } @NotNull @@ -192,7 +189,7 @@ public boolean isRuntimeSchema() { } @Override - public RefinedAttributeDefinition getDisplayNameAttribute() { + public RefinedAttributeDefinition getDisplayNameAttribute() { return structuralObjectClassDefinition.getDisplayNameAttribute(); } @@ -463,12 +460,19 @@ public RefinedAssociationDefinition findEntitlementAssociationDefinition(QName n @Override public Collection getNamesOfAssociationsWithOutboundExpressions() { - throw new UnsupportedOperationException("TODO implement if needed"); + return getAssociationDefinitions().stream() + .filter(assocDef -> assocDef.getOutboundMappingType() != null) + .map(a -> a.getName()) + .collect(Collectors.toCollection(HashSet::new)); } @Override public boolean hasAuxiliaryObjectClass(QName expectedObjectClassName) { - throw new UnsupportedOperationException("TODO implement if needed"); + if (structuralObjectClassDefinition.hasAuxiliaryObjectClass(expectedObjectClassName)) { + return true; + } + return auxiliaryObjectClassDefinitions.stream().anyMatch( + def -> QNameUtil.match(expectedObjectClassName, def.getTypeName())); } @Override diff --git a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinition.java b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinition.java index 376e1999794..a59d12dd4ec 100644 --- a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinition.java +++ b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinition.java @@ -33,6 +33,10 @@ public interface LayerRefinedObjectClassDefinition extends RefinedObjectClassDef LayerType getLayer(); + @NotNull + @Override + Collection> getAttributeDefinitions(); + @NotNull @Override LayerRefinedObjectClassDefinition clone(); diff --git a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinitionImpl.java b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinitionImpl.java index 0b71ba79451..7e8c971a45b 100644 --- a/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinitionImpl.java +++ b/infra/common/src/main/java/com/evolveum/midpoint/common/refinery/LayerRefinedObjectClassDefinitionImpl.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.xml.namespace.QName; @@ -58,19 +59,17 @@ private LayerRefinedObjectClassDefinitionImpl(RefinedObjectClassDefinition refin this.layer = layer; } - static LayerRefinedObjectClassDefinition wrap(RefinedObjectClassDefinition rAccountDef, LayerType layer) { - if (rAccountDef == null) { + static LayerRefinedObjectClassDefinition wrap(RefinedObjectClassDefinition rOCD, LayerType layer) { + if (rOCD == null) { return null; } - return new LayerRefinedObjectClassDefinitionImpl(rAccountDef, layer); + return new LayerRefinedObjectClassDefinitionImpl(rOCD, layer); } - static List wrapCollection(Collection rAccountDefs, LayerType layer) { - List outs = new ArrayList(rAccountDefs.size()); - for (RefinedObjectClassDefinition rAccountDef: rAccountDefs) { - outs.add(wrap(rAccountDef, layer)); - } - return outs; + static List wrapCollection(Collection rOCDs, LayerType layer) { + return(rOCDs.stream() + .map(rAccountDef -> wrap(rAccountDef, layer)) + .collect(Collectors.toCollection(() -> new ArrayList<>(rOCDs.size())))); } @Override @@ -94,7 +93,7 @@ public boolean isEmphasized() { } @Override - public LayerRefinedAttributeDefinition getDescriptionAttribute() { + public LayerRefinedAttributeDefinition getDescriptionAttribute() { // TODO optimize return substituteLayerRefinedAttributeDefinition(refinedObjectClassDefinition.getDescriptionAttribute()); } @@ -105,21 +104,18 @@ public List getIgnoredNamespaces() { return refinedObjectClassDefinition.getIgnoredNamespaces(); } - private LayerRefinedAttributeDefinition substituteLayerRefinedAttributeDefinition(ResourceAttributeDefinition attributeDef) { - LayerRefinedAttributeDefinition rAttrDef = findAttributeDefinition(attributeDef.getName()); - return rAttrDef; + private LayerRefinedAttributeDefinition substituteLayerRefinedAttributeDefinition(ResourceAttributeDefinition attributeDef) { + return findAttributeDefinition(attributeDef.getName()); } private Collection> substituteLayerRefinedAttributeDefinitionCollection(Collection> attributes) { - Collection> retval = new ArrayList<>(); - for (RefinedAttributeDefinition rad : attributes) { - retval.add(substituteLayerRefinedAttributeDefinition(rad)); - } - return retval; + return attributes.stream() + .map(this::substituteLayerRefinedAttributeDefinition) + .collect(Collectors.toList()); } @Override - public LayerRefinedAttributeDefinition getNamingAttribute() { + public LayerRefinedAttributeDefinition getNamingAttribute() { return substituteLayerRefinedAttributeDefinition(refinedObjectClassDefinition.getNamingAttribute()); } @@ -128,12 +124,6 @@ public String getNativeObjectClass() { return refinedObjectClassDefinition.getNativeObjectClass(); } - @Override - public ID findNamedItemDefinition(@NotNull QName firstName, @NotNull ItemPath rest, - @NotNull Class clazz) { - return refinedObjectClassDefinition.findNamedItemDefinition(firstName, rest, clazz); - } - @Override public boolean isAuxiliary() { return refinedObjectClassDefinition.isAuxiliary(); @@ -144,12 +134,20 @@ public Integer getDisplayOrder() { return refinedObjectClassDefinition.getDisplayOrder(); } + // TODO - doesn't return layered definition (should it?) @Override public ID findItemDefinition(@NotNull ItemPath path, @NotNull Class clazz) { return refinedObjectClassDefinition.findItemDefinition(path, clazz); } + // TODO - doesn't return layered definition (should it?) + @Override + public ID findNamedItemDefinition(@NotNull QName firstName, @NotNull ItemPath rest, + @NotNull Class clazz) { + return refinedObjectClassDefinition.findNamedItemDefinition(firstName, rest, clazz); + } + @Override public boolean isDefaultInAKind() { return refinedObjectClassDefinition.isDefaultInAKind(); @@ -176,7 +174,7 @@ public LayerRefinedObjectClassDefinition forLayer(LayerType layerType) { } @Override - public LayerRefinedAttributeDefinition getDisplayNameAttribute() { + public LayerRefinedAttributeDefinition getDisplayNameAttribute() { return substituteLayerRefinedAttributeDefinition(refinedObjectClassDefinition.getDisplayNameAttribute()); } @@ -227,19 +225,18 @@ public ResourceAttributeContainer instantiate(QName name) { return refinedObjectClassDefinition.instantiate(name); } - @Override - public PrismPropertyDefinition findPropertyDefinition(@NotNull QName name) { - LayerRefinedAttributeDefinition def = findAttributeDefinition(name); - if (def != null) { - return def; - } else { - // actually, can there be properties other than attributes? [mederly] - return LayerRefinedAttributeDefinitionImpl.wrap((RefinedAttributeDefinition) refinedObjectClassDefinition.findPropertyDefinition(name), layer); - } - } +// @Override +// public PrismPropertyDefinition findPropertyDefinition(@NotNull QName name) { +// LayerRefinedAttributeDefinition def = findAttributeDefinition(name); +// if (def != null) { +// return def; +// } else { +// return LayerRefinedAttributeDefinitionImpl.wrap((RefinedAttributeDefinition) refinedObjectClassDefinition.findPropertyDefinition(name), layer); +// } +// } @Override - public LayerRefinedAttributeDefinition findAttributeDefinition(@NotNull QName elementQName) { + public LayerRefinedAttributeDefinition findAttributeDefinition(@NotNull QName elementQName) { for (LayerRefinedAttributeDefinition definition : getAttributeDefinitions()) { if (QNameUtil.match(definition.getName(), elementQName)) { return definition; diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/processor/ObjectClassComplexTypeDefinitionImpl.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/processor/ObjectClassComplexTypeDefinitionImpl.java index 3d8a45fdf83..06db07fde66 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/processor/ObjectClassComplexTypeDefinitionImpl.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/processor/ObjectClassComplexTypeDefinitionImpl.java @@ -74,13 +74,21 @@ public void add(ItemDefinition definition) { public Collection> getPrimaryIdentifiers() { return identifiers; } - + + public void addPrimaryIdentifier(ResourceAttributeDefinition identifier) { + identifiers.add(identifier); + } + @NotNull @Override public Collection> getSecondaryIdentifiers() { return secondaryIdentifiers; } - + + public void addSecondaryIdentifier(ResourceAttributeDefinition identifier) { + secondaryIdentifiers.add(identifier); + } + @Override public ResourceAttributeDefinition getDescriptionAttribute() { return descriptionAttribute; diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java index f8c9b263825..092781da045 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/TestDeltaConverter.java @@ -73,7 +73,7 @@ public class TestDeltaConverter extends AbstractSchemaTest { private static final ItemPath CREDENTIALS_PASSWORD_VALUE_PATH = new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE); - @Test(enabled = false) + @Test(enabled = false) // https://jira.evolveum.com/browse/MID-3487 public void testRefWithObject() throws SchemaException, IOException, JAXBException { System.out.println("===[ testRefWithObject ]===="); diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/SchemaProcessorTest.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/SchemaProcessorTest.java index e16b14b0fe2..0d32b6e25aa 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/SchemaProcessorTest.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/SchemaProcessorTest.java @@ -174,14 +174,15 @@ public void testRoundTripResource() throws SchemaException { containerDefinition.setNativeObjectClass("ACCOUNT"); // ... in it ordinary attribute - an identifier ResourceAttributeDefinitionImpl xloginDef = containerDefinition.createAttributeDefinition("login", DOMUtil.XSD_STRING); - ((Collection)containerDefinition.getPrimaryIdentifiers()).add(xloginDef); + containerDefinition.addPrimaryIdentifier(xloginDef); xloginDef.setNativeAttributeName("LOGIN"); containerDefinition.setDisplayNameAttribute(xloginDef.getName()); // ... and local property with a type from another schema ResourceAttributeDefinitionImpl xpasswdDef = containerDefinition.createAttributeDefinition("password", ProtectedStringType.COMPLEX_TYPE); xpasswdDef.setNativeAttributeName("PASSWORD"); // ... property reference - containerDefinition.createAttributeDefinition(SchemaConstants.C_CREDENTIALS, SchemaConstants.C_CREDENTIALS_TYPE); + // TODO this is not a ResourceAttributeDefinition, it cannot be placed here! + //containerDefinition.createAttributeDefinition(SchemaConstants.C_CREDENTIALS, SchemaConstants.C_CREDENTIALS_TYPE); // ... ignored attribute ResourceAttributeDefinitionImpl xSepDef = containerDefinition.createAttributeDefinition("sep", DOMUtil.XSD_STRING); xSepDef.setIgnored(true); @@ -225,10 +226,10 @@ public void testRoundTripResource() throws SchemaException { assertEquals(ProtectedStringType.COMPLEX_TYPE, passwdDef.getTypeName()); assertFalse(passwdDef.isIgnored()); - PrismContainerDefinition credDef = newObjectClassDef.findContainerDefinition(new QName(SchemaConstants.NS_C,"credentials")); - assertEquals(new QName(SchemaConstants.NS_C,"credentials"), credDef.getName()); - assertEquals(new QName(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); - assertFalse(credDef.isIgnored()); +// PrismContainerDefinition credDef = newObjectClassDef.findContainerDefinition(new QName(SchemaConstants.NS_C,"credentials")); +// assertEquals(new QName(SchemaConstants.NS_C,"credentials"), credDef.getName()); +// assertEquals(new QName(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); +// assertFalse(credDef.isIgnored()); PrismPropertyDefinition sepDef = newObjectClassDef.findPropertyDefinition(new QName(SCHEMA_NS,"sep")); assertEquals(new QName(SCHEMA_NS,"sep"), sepDef.getName()); diff --git a/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/TestResourceSchema.java b/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/TestResourceSchema.java index e9547312924..3d4e6a46497 100644 --- a/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/TestResourceSchema.java +++ b/infra/schema/src/test/java/com/evolveum/midpoint/schema/processor/TestResourceSchema.java @@ -248,9 +248,9 @@ private void assertResourceSchema(ResourceSchema unSchema) { assertEquals(new QName(SCHEMA_NAMESPACE,"password"), passwdDef.getName()); assertEquals(ProtectedStringType.COMPLEX_TYPE, passwdDef.getTypeName()); - PrismContainerDefinition credDef = objectClassDef.findContainerDefinition(new QName(SchemaConstants.NS_C,"credentials")); - assertEquals(new QName(SchemaConstants.NS_C,"credentials"), credDef.getName()); - assertEquals(new QName(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); +// PrismContainerDefinition credDef = objectClassDef.findContainerDefinition(new QName(SchemaConstants.NS_C,"credentials")); +// assertEquals(new QName(SchemaConstants.NS_C,"credentials"), credDef.getName()); +// assertEquals(new QName(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); } @Test @@ -349,7 +349,8 @@ private ResourceSchema createResourceSchema() { ResourceAttributeDefinitionImpl xpasswdDef = containerDefinition.createAttributeDefinition("password", ProtectedStringType.COMPLEX_TYPE); xpasswdDef.setNativeAttributeName("PASSWORD"); // ... property reference - containerDefinition.createAttributeDefinition(SchemaConstants.C_CREDENTIALS, SchemaConstants.C_CREDENTIALS_TYPE); + // TODO this should not go here, as it is not a ResourceAttributeDefinition + //containerDefinition.createAttributeDefinition(SchemaConstants.C_CREDENTIALS, SchemaConstants.C_CREDENTIALS_TYPE); return schema; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensProjectionContext.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensProjectionContext.java index b73a64c0304..24f9d76ec77 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensProjectionContext.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensProjectionContext.java @@ -614,7 +614,7 @@ public CompositeRefinedObjectClassDefinition getCompositeObjectClassDefinition() if (compositeObjectClassDefinition == null) { RefinedObjectClassDefinition structuralObjectClassDefinition = getStructuralObjectClassDefinition(); if (structuralObjectClassDefinition != null) { - compositeObjectClassDefinition = new CompositeRefinedObjectClassDefinition( + compositeObjectClassDefinition = new CompositeRefinedObjectClassDefinitionImpl( structuralObjectClassDefinition, getAuxiliaryObjectClassDefinitions()); } } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java index 715755306ff..7828e061e26 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java @@ -16,11 +16,7 @@ package com.evolveum.midpoint.model.impl.lens.projector; -import com.evolveum.midpoint.common.refinery.CompositeRefinedObjectClassDefinition; -import com.evolveum.midpoint.common.refinery.RefinedAssociationDefinition; -import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; -import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; -import com.evolveum.midpoint.common.refinery.RefinedAttributeDefinition; +import com.evolveum.midpoint.common.refinery.*; import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.mapping.Mapping; @@ -323,7 +319,7 @@ public boolean isSourceless() { throw new IllegalStateException("Structural object class definition for " + discr + " not found in the context, but it should be there"); } - RefinedObjectClassDefinition rOcDef = new CompositeRefinedObjectClassDefinition( + RefinedObjectClassDefinition rOcDef = new CompositeRefinedObjectClassDefinitionImpl( structuralObjectClassDefinition, auxOcDefs); if (LOGGER.isTraceEnabled()) { diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java index 1f4f3e4c23e..0aea7023051 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java @@ -908,12 +908,11 @@ private void parseResourceSchema(org.identityconnectors.framework.common.objects if (!hasUidDefinition) { ((ObjectClassComplexTypeDefinitionImpl) ocDef).add(uidDefinition); } - ((Collection)ocDef.getPrimaryIdentifiers()).add(uidDefinition); + ((ObjectClassComplexTypeDefinitionImpl)ocDef).addPrimaryIdentifier(uidDefinition); if (uidDefinition != nameDefinition) { - ((Collection)ocDef.getSecondaryIdentifiers()).add(nameDefinition); + ((ObjectClassComplexTypeDefinitionImpl)ocDef).addSecondaryIdentifier(nameDefinition); } - // Add schema annotations ((ObjectClassComplexTypeDefinitionImpl) ocDef).setNativeObjectClass(objectClassInfo.getType()); ((ObjectClassComplexTypeDefinitionImpl) ocDef).setDisplayNameAttribute(nameDefinition.getName());