Skip to content

Commit

Permalink
MID-3101 fix for ObjectType search.
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jun 6, 2016
1 parent b36b8d5 commit d67d95d
Showing 1 changed file with 28 additions and 16 deletions.
Expand Up @@ -28,6 +28,7 @@
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -124,22 +125,7 @@ public static <T extends ObjectType> Search createSearch(
Class<T> type, ResourceShadowDiscriminator discriminator, PrismContext ctx,
ModelInteractionService modelInteractionService, boolean useDefsFromSuperclass) {

PrismObjectDefinition objectDef;
try {
OperationResult result = new OperationResult(LOAD_OBJECT_DEFINITION);

PrismObject empty = ctx.createObject(type);

if (ShadowType.class.equals(type)) {
objectDef = modelInteractionService.getEditShadowDefinition(discriminator,
AuthorizationPhaseType.REQUEST, result);
} else {
objectDef = modelInteractionService.getEditObjectDefinition(
empty, AuthorizationPhaseType.REQUEST, result);
}
} catch (SchemaException | ConfigurationException | ObjectNotFoundException ex) {
throw new SystemException(ex);
}
PrismObjectDefinition objectDef = findObjectDefinition(type, discriminator, ctx, modelInteractionService);

Map<ItemPath, ItemDefinition> availableDefs = getAvailableDefinitions(objectDef, useDefsFromSuperclass);

Expand All @@ -157,6 +143,32 @@ public static <T extends ObjectType> Search createSearch(
return search;
}

private static <T extends ObjectType> PrismObjectDefinition findObjectDefinition(
Class<T> type, ResourceShadowDiscriminator discriminator, PrismContext ctx,
ModelInteractionService modelInteractionService) {

try {
if (Modifier.isAbstract(type.getModifiers())) {
SchemaRegistry registry = ctx.getSchemaRegistry();
return registry.findObjectDefinitionByCompileTimeClass(type);
}

OperationResult result = new OperationResult(LOAD_OBJECT_DEFINITION);

PrismObject empty = ctx.createObject(type);

if (ShadowType.class.equals(type)) {
return modelInteractionService.getEditShadowDefinition(discriminator,
AuthorizationPhaseType.REQUEST, result);
} else {
return modelInteractionService.getEditObjectDefinition(
empty, AuthorizationPhaseType.REQUEST, result);
}
} catch (SchemaException | ConfigurationException | ObjectNotFoundException ex) {
throw new SystemException(ex);
}
}

private static <T extends ObjectType> Map<ItemPath, ItemDefinition> getAvailableDefinitions(
PrismObjectDefinition<T> objectDef, boolean useDefsFromSuperclass) {
Map<ItemPath, ItemDefinition> map = new HashMap<>();
Expand Down

0 comments on commit d67d95d

Please sign in to comment.