Skip to content

Commit

Permalink
Move [auxiliary]ObjectClass to delineation
Browse files Browse the repository at this point in the history
For object type definitions, these properties certainly belong to the
delineation. (For refined object class definitions, the object class
name should stay as it, because it serves as the key of the definition.)

Other change:

- Renamed objectsSetDelineation to simple "delineation".
  • Loading branch information
mederly committed Jun 17, 2022
1 parent 5c3805f commit 1f3cb14
Show file tree
Hide file tree
Showing 25 changed files with 217 additions and 123 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectTypeDefinitionType;

import javax.xml.namespace.QName;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

@PanelType(name = "schemaHandlingDetails")
public class ResourceObjectTypeDetailsPanel extends MultivalueContainerDetailsPanel<ResourceObjectTypeDefinitionType> {

Expand Down Expand Up @@ -102,8 +106,9 @@ private List<String> loadDescriptionModel(ResourceObjectTypeDefinitionType resou
if (resourceObjectTypeDefinitionType.getIntent() != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.intent", resourceObjectTypeDefinitionType.getIntent()));
}
if (resourceObjectTypeDefinitionType.getObjectClass() != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.objectClass", resourceObjectTypeDefinitionType.getObjectClass().getLocalPart()));
QName objectClassName = getObjectClassName(resourceObjectTypeDefinitionType);
if (objectClassName != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.objectClass", objectClassName.getLocalPart()));
}
return description;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,12 @@
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

@PanelType(name = "schemaHandling")
@PanelInstance(identifier = "schemaHandling", applicableForType = ResourceType.class,
display = @PanelDisplay(label = "PageResource.tab.schemaHandling", icon = GuiStyleConstants.CLASS_RECONCILE_MENU_ITEM, order = 90))
Expand Down Expand Up @@ -235,8 +238,9 @@ private List<String> loadDescriptionModel(ResourceObjectTypeDefinitionType resou
if (resourceObjectTypeDefinitionType.getIntent() != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.intent", resourceObjectTypeDefinitionType.getIntent()));
}
if (resourceObjectTypeDefinitionType.getObjectClass() != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.objectClass", resourceObjectTypeDefinitionType.getObjectClass().getLocalPart()));
QName objectClassName = getObjectClassName(resourceObjectTypeDefinitionType);
if (objectClassName != null) {
description.add(getString("ResourceSchemaHandlingPanel.description.objectClass", objectClassName.getLocalPart()));
}
return description;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
import java.util.List;
import java.util.Objects;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

@PanelType(name = "resourceTasks")
@PanelInstance(identifier = "resourceTasks", applicableForType = ResourceType.class, applicableForOperation = OperationTypeType.MODIFY,
display = @PanelDisplay(label = "PageResource.tab.content.tasks", icon = GuiStyleConstants.CLASS_OBJECT_TASK_ICON, order = 40))
Expand Down Expand Up @@ -287,7 +289,7 @@ private static ResourceObjectSetType updateResourceObjectsSet(ResourceObjectSetT
ResourceObjectTypeDefinitionType def = objectTypes.get(0);
set.setKind(def.getKind());
set.setIntent(def.getIntent());
set.setObjectclass(def.getObjectClass());
set.setObjectclass(getObjectClassName(def));
}

return set;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package com.evolveum.midpoint.web.component.wizard.resource;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;
import static com.evolveum.midpoint.schema.util.ResourceTypeUtil.fillDefault;

import java.util.ArrayList;
Expand Down Expand Up @@ -273,7 +274,8 @@ private IModel<String> createObjectTypeDisplayModel(final ResourceObjectTypeDefi
sb.append(object.getDisplayName() != null ? object.getDisplayName() + " " : "");
addKindAndIntent(sb, object.getKind(), object.getIntent());
sb.append(" -> ");
sb.append(object.getObjectClass() != null ? object.getObjectClass().getLocalPart() : "");
QName objectClassName = getObjectClassName(object);
sb.append(objectClassName != null ? objectClassName.getLocalPart() : "");
}
return sb.toString();
};
Expand Down Expand Up @@ -787,10 +789,12 @@ private void credentialsEditPerformed(AjaxRequestTarget target) {

private void editAttributePerformed(AjaxRequestTarget target, final ResourceAttributeDefinitionType object) {
resetSelections(target);
if (schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto() != null && schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto().getObjectType().getObjectClass() != null) {
ResourceObjectTypeDefinitionTypeDto selectedObjectTypeDto = schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto();
QName objectClassName = selectedObjectTypeDto != null ? getObjectClassName(selectedObjectTypeDto.getObjectType()) : null;
if (selectedObjectTypeDto != null && objectClassName != null) {
schemaHandlingDtoModel.getObject().setSelectedAttribute(object);
WebMarkupContainer newContainer = new ResourceAttributeEditor(ID_THIRD_ROW_CONTAINER, new Model<>(object),
schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto().getObjectType(), resourceModel.getObject(), this, parentPage.getReadOnlyModel());
selectedObjectTypeDto.getObjectType(), resourceModel.getObject(), this, parentPage.getReadOnlyModel());
getThirdRowContainer().replaceWith(newContainer);

target.add(getThirdRowContainer(), get(ID_OBJECT_TYPE_EDITOR));
Expand All @@ -803,10 +807,12 @@ private void editAttributePerformed(AjaxRequestTarget target, final ResourceAttr

private void editAssociationPerformed(AjaxRequestTarget target, ResourceObjectAssociationType object) {
resetSelections(target);
if (schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto() != null && schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto().getObjectType().getObjectClass() != null) {
ResourceObjectTypeDefinitionTypeDto selectedObjectTypeDto = schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto();
QName objectClassName = selectedObjectTypeDto != null ? getObjectClassName(selectedObjectTypeDto.getObjectType()) : null;
if (selectedObjectTypeDto != null && objectClassName != null) {
schemaHandlingDtoModel.getObject().setSelectedAssociation(object);
WebMarkupContainer newContainer = new ResourceAssociationEditor(ID_THIRD_ROW_CONTAINER, new Model<>(object),
schemaHandlingDtoModel.getObject().getSelectedObjectTypeDto().getObjectType(), resourceModel.getObject(), this, parentPage.getReadOnlyModel());
selectedObjectTypeDto.getObjectType(), resourceModel.getObject(), this, parentPage.getReadOnlyModel());
getThirdRowContainer().replaceWith(newContainer);

target.add(getThirdRowContainer(), get(ID_OBJECT_TYPE_EDITOR), parentPage.getFeedbackPanel());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
import java.util.ArrayList;
import java.util.List;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

/**
* @author shood
* */
Expand Down Expand Up @@ -429,17 +431,15 @@ private List<QName> loadObjectReferences(boolean restrictObjectClass){
return references;
}

for(ResourceObjectClassDefinition def: schema.getObjectClassDefinitions()){
if(restrictObjectClass){
if(objectType != null && def.getTypeName().equals(objectType.getObjectClass())){

for(ResourceAttributeDefinition attributeDefinition : def.getAttributeDefinitions()) {
for (ResourceObjectClassDefinition def : schema.getObjectClassDefinitions()) {
if (restrictObjectClass) {
if (objectType != null && def.getTypeName().equals(getObjectClassName(objectType))) {
for (ResourceAttributeDefinition attributeDefinition : def.getAttributeDefinitions()) {
references.add(attributeDefinition.getItemName());
}
}
} else {

for(ResourceAttributeDefinition attributeDefinition : def.getAttributeDefinitions()) {
for (ResourceAttributeDefinition attributeDefinition : def.getAttributeDefinitions()) {
references.add(attributeDefinition.getItemName());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getAuxiliaryObjectClassNames;
import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

/**
* @author shood
*/
Expand Down Expand Up @@ -398,8 +401,8 @@ private List<ItemPathType> loadObjectReferences() {
}

for (ResourceObjectClassDefinition def : schema.getObjectClassDefinitions()) {
if (objectType.getObjectClass().equals(def.getTypeName()) ||
objectType.getAuxiliaryObjectClass().contains(def.getTypeName())) {
if (def.getTypeName().equals(getObjectClassName(objectType)) ||
getAuxiliaryObjectClassNames(objectType).contains(def.getTypeName())) {
for (ResourceAttributeDefinition<?> attributeDefinition : def.getAttributeDefinitions()) {
ItemPath itemPath = attributeDefinition.getItemName();
ItemPathType itemPathType = new ItemPathType(itemPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package com.evolveum.midpoint.web.component.wizard.resource.dto;

import com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationType;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -55,7 +56,7 @@ private void setObjectClassNameFrom(ResourceObjectTypeDefinitionTypeDto objectTy
if (objectType == null) {
objectClassName = null;
} else {
QName oc = objectType.getObjectType().getObjectClass();
QName oc = ResourceObjectTypeDefinitionTypeUtil.getObjectClassName(objectType.getObjectType());
objectClassName = oc != null ? oc.getLocalPart() : null;
}
}
Expand All @@ -74,6 +75,7 @@ public String getObjectClassName() {
public void setObjectClassName(String objectClassName) {
this.objectClassName = objectClassName;
if (selectedObjectTypeDto != null) {
// TODO move to delineation!
selectedObjectTypeDto.getObjectType().setObjectClass(findObjectClassQName(objectClassName)); // update object class in selected objectType container
}
}
Expand Down
24 changes: 13 additions & 11 deletions infra/common/src/test/resources/refinery/resource-ldap-posix.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2085,17 +2085,19 @@
<kind>entitlement</kind>
<intent>unixGroup</intent>
<displayName>UNIX Group</displayName>
<objectClass>ri:groupOfNames</objectClass>
<auxiliaryObjectClass>ri:posixGroup</auxiliaryObjectClass>
<baseContext>
<objectClass>ri:organizationalUnit</objectClass>
<filter>
<q:equal>
<q:path>attributes/dn</q:path>
<q:value>ou=unixgroups,dc=example,dc=com</q:value>
</q:equal>
</filter>
</baseContext>
<delineation>
<objectClass>ri:groupOfNames</objectClass>
<auxiliaryObjectClass>ri:posixGroup</auxiliaryObjectClass>
<baseContext>
<objectClass>ri:organizationalUnit</objectClass>
<filter>
<q:equal>
<q:path>attributes/dn</q:path>
<q:value>ou=unixgroups,dc=example,dc=com</q:value>
</q:equal>
</filter>
</baseContext>
</delineation>
<attribute>
<ref>ri:dn</ref>
<matchingRule>mr:stringIgnoreCase</matchingRule>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

package com.evolveum.midpoint.schema.processor;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.SuperReference;
import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.*;
import static com.evolveum.midpoint.util.MiscUtil.configCheck;

import java.util.*;
Expand Down Expand Up @@ -103,7 +103,7 @@ private void createEmptyObjectClassDefinitions() throws ConfigurationException {
for (ResourceObjectTypeDefinitionType definitionBean : definitionBeans) {
QName objectClassName =
MiscUtil.requireNonNull(
definitionBean.getObjectClass(),
getObjectClassName(definitionBean),
() -> new ConfigurationException(
"Object class name must not be null in " + contextDescription));

Expand Down Expand Up @@ -181,7 +181,7 @@ private ResourceObjectTypeDefinition createEmptyObjectTypeDefinition(@NotNull Re
ResourceObjectTypeDefinitionType expandedBean = expand(definitionBean);

QName objectClassName = MiscUtil.configNonNull(
expandedBean.getObjectClass(),
getObjectClassName(expandedBean),
() -> "Definition of " + identification + " does not have objectclass, in " + contextDescription);

ResourceObjectClassDefinition objectClassDefinition =
Expand Down Expand Up @@ -344,7 +344,7 @@ private class ResourceObjectDefinitionParser {
}

void resolveAuxiliaryObjectClassNames() throws SchemaException {
for (QName auxObjectClassName : definitionBean.getAuxiliaryObjectClass()) {
for (QName auxObjectClassName : getAuxiliaryObjectClassNames(definitionBean)) {
LOGGER.trace("Resolving auxiliary object class name: {} for {}", auxObjectClassName, definition);
definition.addAuxiliaryObjectClassDefinition(
MiscUtil.requireNonNull(
Expand All @@ -367,9 +367,7 @@ void parseAssociations() throws SchemaException {
* Returns object type definition matching given kind and one of the intents, specified in the association definition.
*
* (If no intents are provided, default type for given kind is returned.
* We are not very eager here - by default we mean just the flag "default for kind" being set.
* This is in contrast with e.g. {@link ResourceSchema#findObjectDefinitionForKindInternal(ShadowKindType, QName)}
* that makes crazy attempts to find a suitable definition. But here we won't go into such levels.)
* We are not very eager here - by default we mean just the flag "default for kind" being set.)
*
* The matching types must share at least the object class name. This is checked by this method.
* However, in practice they must share much more, as described in the description for
Expand Down Expand Up @@ -572,7 +570,7 @@ private ResourceObjectPattern convertToPattern(
}

private void parseDelineation() throws ConfigurationException {
ResourceObjectTypeDelineationType delineationBean = definitionBean.getObjectsSetDelineation();
ResourceObjectTypeDelineationType delineationBean = definitionBean.getDelineation();
if (delineationBean != null) {
configCheck(definitionBean.getBaseContext() == null,
"Base context cannot be set when delineation is configured. In %s", definition);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ public static ResourceObjectClassDefinitionImpl refined(
}

private static void checkDefinitionSanity(@NotNull ResourceObjectTypeDefinitionType bean) throws ConfigurationException {
QName name = bean.getObjectClass();
configCheck(bean.getObjectClass() != null,
QName name = getObjectClassName(bean);
configCheck(name != null,
"Object class name must be specified in object class refinement: %s", bean);
configCheck(bean.getKind() == null,
"Kind must not be specified for object class refinement: %s", name);
Expand All @@ -123,6 +123,16 @@ private static void checkDefinitionSanity(@NotNull ResourceObjectTypeDefinitionT
"'abstract' flag must not be specified for object class refinement: %s", name);
}

private static QName getObjectClassName(@NotNull ResourceObjectTypeDefinitionType bean) {
QName main = bean.getObjectClass();
if (main != null) {
return main;
}
// We accept the value from delineation, but ... it should not be used that way.
ResourceObjectTypeDelineationType delineation = bean.getDelineation();
return delineation != null ? delineation.getObjectClass() : null;
}

@Override
public @NotNull QName getObjectClassName() {
return objectClassName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ public QName getFocusTypeName() {

@Override
public ExpressionType getClassificationCondition() {
ResourceObjectTypeDelineationType delineation = definitionBean.getObjectsSetDelineation();
ResourceObjectTypeDelineationType delineation = definitionBean.getDelineation();
return delineation != null ? delineation.getClassificationCondition() : null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

package com.evolveum.midpoint.schema.processor;

import static com.evolveum.midpoint.schema.util.ResourceObjectTypeDefinitionTypeUtil.getObjectClassName;

import static java.util.Objects.requireNonNullElse;

import static com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType.ACCOUNT;
Expand Down Expand Up @@ -292,7 +294,7 @@ private static boolean isEnabled(CorrelationCasesDefinitionType cases) {
schema.findObjectDefinition(
Objects.requireNonNullElse(typeDefBean.getKind(), ACCOUNT),
Objects.requireNonNullElse(typeDefBean.getIntent(), SchemaConstants.INTENT_DEFAULT),
typeDefBean.getObjectClass());
getObjectClassName(typeDefBean));
if (objectDefinition instanceof ResourceObjectTypeDefinition) {
ResourceObjectTypeDefinition typeDef = (ResourceObjectTypeDefinition) objectDefinition;
return forKindAndIntent(typeDef.getKind(), typeDef.getIntent(), resource);
Expand Down

0 comments on commit 1f3cb14

Please sign in to comment.