Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
Kateryna Honchar committed Jul 14, 2022
2 parents 34a7952 + e9b8aa1 commit f9b2f97
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@

import static com.evolveum.midpoint.schema.util.ShadowUtil.resolveDefault;

import java.util.stream.Collectors;

/**
* A merger specific to resource definitions: creates inheritance relations between the same definitions
* (matched by kind and intent).
Expand Down Expand Up @@ -68,7 +70,7 @@ private ResourceObjectTypeDefinitionType find(
PrismContainer<ResourceObjectTypeDefinitionType> container, ShadowKindType kind, String intent) {
var matching = container.getRealValues().stream()
.filter(def -> matchesKindIntent(def, kind, intent))
.toList();
.collect(Collectors.toList());
return MiscUtil.extractSingleton(matching,
() -> new IllegalStateException("Multiple matching definitions for " + kind + "/" + intent + ": " + matching));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,25 @@
import javax.xml.datatype.Duration;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.model.impl.sync.tasks.ProcessingScope;
import com.evolveum.midpoint.repo.common.activity.run.SearchBasedActivityRun;

import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.api.ModelPublicConstants;
import com.evolveum.midpoint.model.impl.sync.tasks.ProcessingScope;
import com.evolveum.midpoint.model.impl.tasks.simple.SimpleActivityHandler;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.provisioning.api.ResourceObjectShadowChangeDescription;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunException;
import com.evolveum.midpoint.repo.common.activity.definition.AbstractWorkDefinition;
import com.evolveum.midpoint.repo.common.activity.definition.ResourceObjectSetSpecificationProvider;
import com.evolveum.midpoint.repo.common.activity.definition.WorkDefinitionFactory.WorkDefinitionSupplier;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.repo.common.activity.run.ActivityReportingCharacteristics;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunException;
import com.evolveum.midpoint.repo.common.activity.run.ActivityRunInstantiationContext;
import com.evolveum.midpoint.repo.common.activity.run.SearchBasedActivityRun;
import com.evolveum.midpoint.repo.common.activity.run.processing.ItemProcessingRequest;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
Expand All @@ -58,9 +57,9 @@
@Component
public class ShadowCleanupActivityHandler
extends SimpleActivityHandler<
ShadowType,
ShadowCleanupActivityHandler.MyWorkDefinition,
ShadowCleanupActivityHandler> {
ShadowType,
ShadowCleanupActivityHandler.MyWorkDefinition,
ShadowCleanupActivityHandler> {

private static final String LEGACY_HANDLER_URI = ModelPublicConstants.DELETE_NOT_UPDATE_SHADOW_TASK_HANDLER_URI;

Expand Down Expand Up @@ -189,7 +188,8 @@ public static class MyWorkDefinition extends AbstractWorkDefinition implements R
@NotNull private final Duration interval;

MyWorkDefinition(WorkDefinitionSource source) {
if (source instanceof LegacyWorkDefinitionSource legacy) {
if (source instanceof LegacyWorkDefinitionSource) {
LegacyWorkDefinitionSource legacy = (LegacyWorkDefinitionSource) source;
shadows = ResourceObjectSetUtil.fromLegacySource(legacy);
interval = legacy.getExtensionItemRealValue(
SchemaConstants.LEGACY_NOT_UPDATED_DURATION_PROPERTY_NAME, Duration.class);
Expand Down Expand Up @@ -218,8 +218,8 @@ public ResourceObjectSetType getResourceObjectSetSpecification() {

@Override
protected void debugDumpContent(StringBuilder sb, int indent) {
DebugUtil.debugDumpWithLabelLn(sb, "shadows", shadows, indent+1);
DebugUtil.debugDumpWithLabelLn(sb, "interval", String.valueOf(interval), indent+1);
DebugUtil.debugDumpWithLabelLn(sb, "shadows", shadows, indent + 1);
DebugUtil.debugDumpWithLabelLn(sb, "interval", String.valueOf(interval), indent + 1);
}
}
}
3 changes: 2 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,8 @@
<!-- Build system options -->
<!-- Encoding for both sources and resources -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.source.version>17</project.source.version>
<!-- JDK level also affects midPoint Studio, which depends on JDK used by minimum supported IDEA version. -->
<project.source.version>11</project.source.version>
<project.build.locale>en_US</project.build.locale>
<ansi.color>true</ansi.color>
<verbose.jaxb2>false</verbose.jaxb2>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1135,7 +1135,8 @@ public void expandConfigurationObject(
.build();
try {
ObjectType objectBean = configurationObject.asObjectable();
if (objectBean instanceof ResourceType resource) {
if (objectBean instanceof ResourceType) {
ResourceType resource = (ResourceType) objectBean;
LOGGER.trace("Starting expanding {}", configurationObject);
resourceManager.expandResource(resource, result);
LOGGER.trace("Finished expanding {}", configurationObject);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ public void test200ObjectTypesRaw() throws CommonException {
and("account has a single (merged) definition");
List<ResourceObjectTypeDefinitionType> accountDefs = typeDefBeans.stream()
.filter(def -> def.getKind() == ShadowKindType.ACCOUNT)
.toList();
.collect(Collectors.toList());
assertThat(accountDefs).as("account definitions").hasSize(1);

and("origins in account definition are OK");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ private static TypedValue<?> convertItemToRealValues(TypedValue<?> typedValue, P
if (value instanceof PrismObject<?>) {
typedValue.setValue(((PrismObject<?>) value).asObjectable());
return typedValue;
} else if (value instanceof PrismProperty<?> prop) {
} else if (value instanceof PrismProperty<?>) {
PrismProperty<?> prop = (PrismProperty<?>) value;
PrismPropertyDefinition<?> def = prop.getDefinition();
if (def != null) {
if (def.isSingleValue()) {
Expand All @@ -264,7 +265,8 @@ private static TypedValue<?> convertItemToRealValues(TypedValue<?> typedValue, P
prop.getElementName(), PrimitiveType.STRING.getQname());
return new TypedValue<>(prop.getRealValues(), fakeDef);
}
} else if (value instanceof PrismReference ref) {
} else if (value instanceof PrismReference) {
PrismReference ref = (PrismReference) value;
PrismReferenceDefinition def = ref.getDefinition();
if (def != null) {
if (def.isSingleValue()) {
Expand All @@ -276,7 +278,8 @@ private static TypedValue<?> convertItemToRealValues(TypedValue<?> typedValue, P
PrismReferenceDefinition fakeDef = prismContext.definitionFactory().createReferenceDefinition(ref.getElementName(), ObjectType.COMPLEX_TYPE);
return new TypedValue<>(ref.getRealValues(), fakeDef);
}
} else if (value instanceof PrismContainer<?> container) {
} else if (value instanceof PrismContainer<?>) {
PrismContainer<?> container = (PrismContainer<?>) value;
PrismContainerDefinition<?> def = container.getDefinition();
Class<?> containerCompileTimeClass = container.getCompileTimeClass();
if (containerCompileTimeClass == null) {
Expand Down Expand Up @@ -327,7 +330,8 @@ private static TypedValue<?> convertPrismValueToRealValue(TypedValue<?> typedVal
}

private static Object convertPrismValueToRealValue(Object value) {
if (value instanceof PrismContainerValue<?> cval) {
if (value instanceof PrismContainerValue<?>) {
PrismContainerValue<?> cval = (PrismContainerValue<?>) value;
Class<?> containerCompileTimeClass = cval.getCompileTimeClass();
if (containerCompileTimeClass == null) {
// Dynamic schema. We do not have anything to convert to. Leave it as PrismContainerValue
Expand Down Expand Up @@ -545,7 +549,8 @@ public static boolean hasExpressions(@Nullable ObjectFilter filter) {
}
Holder<Boolean> result = new Holder<>(false);
filter.accept(f -> {
if (f instanceof ValueFilter<?, ?> vf) {
if (f instanceof ValueFilter<?, ?>) {
ValueFilter<?, ?> vf = (ValueFilter<?, ?>) f;
if (vf.getExpression() != null) {
result.setValue(true);
}
Expand Down Expand Up @@ -637,7 +642,8 @@ private static ObjectFilter evaluateFilterExpressionsInternal(ObjectFilter filte
}
return evaluatedFilter;

} else if (filter instanceof ValueFilter valueFilter) {
} else if (filter instanceof ValueFilter) {
ValueFilter<?, ?> valueFilter = (ValueFilter<?, ?>) filter;
if (valueFilter.getValues() != null && !valueFilter.getValues().isEmpty()) {
// We have value. Nothing to evaluate.
return valueFilter.clone();
Expand Down Expand Up @@ -718,12 +724,14 @@ private static ObjectFilter evaluateFilterExpressionsInternal(ObjectFilter filte
expressionProfile, expressionFactory, prismContext, shortDesc, task, result);
evaluatedFilter.setFilter(evaluatedSubFilter);
return evaluatedFilter;
} else if (filter instanceof ReferencedByFilter orig) {
} else if (filter instanceof ReferencedByFilter) {
ReferencedByFilter orig = (ReferencedByFilter) filter;
var subfilter = evaluateFilterExpressionsInternal(orig.getFilter(), variables,
expressionProfile, expressionFactory, prismContext, shortDesc, task, result);
return ReferencedByFilterImpl.create(orig.getType().getTypeName(),
orig.getPath(), subfilter, orig.getRelation());
} else if (filter instanceof OwnedByFilter orig) {
} else if (filter instanceof OwnedByFilter) {
OwnedByFilter orig = (OwnedByFilter) filter;
var subfilter = evaluateFilterExpressionsInternal(orig.getFilter(), variables,
expressionProfile, expressionFactory, prismContext, shortDesc, task, result);
return OwnedByFilterImpl.create(orig.getType(), orig.getPath(), subfilter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2698,6 +2698,8 @@ public void test982SearchRoleReferencedByUserAssignmentWithComplexFilter() throw
@Test
public void test982SearchRoleReferencedByUserAssignmentWithComplexFilterNoMatch() throws SchemaException {
searchObjectTest("referenced by an assignment of the user specified by complex filter (no match)", RoleType.class,
// f -> f.referencedBy(AssignmentType.class, AssignmentType.F_TARGET_REF)
// .ownedBy(UserType.class, F_ASSIGNMENT)
f -> f.referencedBy(UserType.class,
ItemPath.create(UserType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF))
.block()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,10 @@ public void test001QueryNameNorm() throws Exception {
.item(F_NAME).eqPoly("asdf", "asdf").matchingNorm().build();

String real = getInterpretedQuery(session, UserType.class, query);
assertThat(real).isEqualToIgnoringWhitespace("""
select
_u.oid, _u.fullObject
from
RUser _u
where
_u.nameCopy.norm = :norm""");
assertThat(real).isEqualToIgnoringWhitespace("select"
+ " _u.oid, _u.fullObject"
+ " from RUser _u"
+ " where _u.nameCopy.norm = :norm");
} finally {
close(session);
}
Expand All @@ -168,13 +165,10 @@ public void test002QueryNameOrig() throws Exception {
.item(F_NAME).eqPoly("asdf", "asdf").matchingOrig().build();

String real = getInterpretedQuery(session, UserType.class, query);
assertThat(real).isEqualToIgnoringWhitespace("""
select
_u.oid, _u.fullObject
from
RUser _u
where
_u.nameCopy.orig = :orig""");
assertThat(real).isEqualToIgnoringWhitespace("select"
+ " _u.oid, _u.fullObject"
+ " from RUser _u"
+ " where _u.nameCopy.orig = :orig");
} finally {
close(session);
}
Expand Down Expand Up @@ -769,7 +763,7 @@ public void test049QueryExistsAssignmentAll() throws Exception {
.asc(F_NAME)
.build();

query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext));
query.setFilter(ObjectQueryUtil.simplify(query.getFilter()));

String real = getInterpretedQuery(session, UserType.class, query);
// this doesn't work as expected ... maybe inner join would be better! Until implemented, we should throw UOO
Expand Down Expand Up @@ -1601,31 +1595,31 @@ public void test106InOidTest() throws Exception {
public void test108InOidEmptyTest() {
ObjectQuery query = prismContext.queryFor(ObjectType.class)
.id(new String[0]).build();
query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext));
query.setFilter(ObjectQueryUtil.simplify(query.getFilter()));
assertTrue("Wrongly reduced InOid filter: " + query.getFilter(), query.getFilter() instanceof NoneFilter);
}

@Test
public void test110OwnerInOidEmptyTest() {
ObjectQuery query = prismContext.queryFor(ObjectType.class)
.ownerId(new String[0]).build();
query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext));
query.setFilter(ObjectQueryUtil.simplify(query.getFilter()));
assertTrue("Wrongly reduced InOid filter: " + query.getFilter(), query.getFilter() instanceof NoneFilter);
}

@Test
public void test112LongInOidEmptyTest() {
ObjectQuery query = prismContext.queryFor(ObjectType.class)
.id(new long[0]).build();
query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext));
query.setFilter(ObjectQueryUtil.simplify(query.getFilter()));
assertTrue("Wrongly reduced InOid filter: " + query.getFilter(), query.getFilter() instanceof NoneFilter);
}

@Test
public void test114LongOwnerInOidEmptyTest() {
ObjectQuery query = prismContext.queryFor(ObjectType.class)
.ownerId(new long[0]).build();
query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext));
query.setFilter(ObjectQueryUtil.simplify(query.getFilter()));
assertTrue("Wrongly reduced InOid filter: " + query.getFilter(), query.getFilter() instanceof NoneFilter);
}

Expand Down Expand Up @@ -4437,7 +4431,7 @@ public void test625CampaignEndTimestamp() throws Exception {
.and().not().id(new String[0])
.maxSize(10)
.build();
query.setFilter(ObjectQueryUtil.simplify(query.getFilter(), prismContext)); // necessary to remove "not oid()" clause
query.setFilter(ObjectQueryUtil.simplify(query.getFilter())); // necessary to remove "not oid()" clause
String real = getInterpretedQuery(session, AccessCertificationCampaignType.class, query);

assertThat(real).isEqualToIgnoringWhitespace("select\n"
Expand Down

0 comments on commit f9b2f97

Please sign in to comment.