Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Oct 17, 2022
2 parents 753e5c0 + 2655be0 commit 2c03e5a
Show file tree
Hide file tree
Showing 12 changed files with 227 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeSearchItemConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType;

import org.apache.commons.lang3.StringUtils;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -28,6 +30,9 @@ public class ObjectTypeSearchItemWrapper<C extends Containerable> extends Abstra
private boolean allowAllTypesSearch;

private List<Class<C>> supportedTypeList = new ArrayList<>();
private String name;
private String help;
private boolean visible = true;

private QName defaultObjectType;
public ObjectTypeSearchItemWrapper(ObjectTypeSearchItemConfigurationType config) {
Expand Down Expand Up @@ -88,18 +93,20 @@ public void setDefaultObjectType(QName defaultObjectType) {

@Override
public String getName() {
// if (config != null && config.getDisplay() != null && config.getDisplay().getLabel() != null){
// return WebComponentUtil.getTranslatedPolyString(config.getDisplay().getLabel());
// }
return PageBase.createStringResourceStatic("ContainerTypeSearchItem.name").getString();
return StringUtils.isNotEmpty(name) ? name : PageBase.createStringResourceStatic("ContainerTypeSearchItem.name").getString();
}

public void setName(String name) {
this.name = name;
}

@Override
public String getHelp() {
// if (config != null && config.getDisplay() != null && config.getDisplay().getHelp() != null){
// return WebComponentUtil.getTranslatedPolyString(config.getDisplay().getHelp());
// }
return "";
return StringUtils.isNotEmpty(help) ? help : "";
}

public void setHelp(String help) {
this.help = help;
}

@Override
Expand All @@ -119,7 +126,11 @@ public boolean isApplyFilter(SearchBoxModeType searchBoxMode) {

@Override
public boolean isVisible() {
return true;
return visible;
}

public void setVisible(boolean visible) {
this.visible = visible;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -630,14 +630,25 @@ private static boolean objectTypeSearchItemWrapperExists(List<AbstractSearchItem
}
public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWrapper searchConfigWrapper, SearchBoxConfigurationType config) {
if (config.getObjectTypeConfiguration() != null) {
searchConfigWrapper.getItemsList().add(new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration()));
ObjectTypeSearchItemWrapper objectTypeSearchItemWrapper = new ObjectTypeSearchItemWrapper(config.getObjectTypeConfiguration());
if (config.getObjectTypeConfiguration().getDisplay() != null) {
objectTypeSearchItemWrapper.setName(WebComponentUtil.getTranslatedPolyString(config.getObjectTypeConfiguration().getDisplay().getLabel()));
objectTypeSearchItemWrapper.setHelp(WebComponentUtil.getTranslatedPolyString(config.getObjectTypeConfiguration().getDisplay().getHelp()));
}
if (config.getObjectTypeConfiguration().getVisibility() != null) {
objectTypeSearchItemWrapper.setVisible(WebComponentUtil.getElementVisibility(config.getObjectTypeConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(objectTypeSearchItemWrapper);
}
if (config.getRelationConfiguration() != null) {
RelationSearchItemWrapper relation = new RelationSearchItemWrapper(searchConfigWrapper);
if (config.getRelationConfiguration().getDisplay() != null) {
relation.setName(WebComponentUtil.getTranslatedPolyString(config.getRelationConfiguration().getDisplay().getLabel()));
relation.setHelp(WebComponentUtil.getTranslatedPolyString(config.getRelationConfiguration().getDisplay().getHelp()));
}
if (config.getRelationConfiguration().getVisibility() != null) {
relation.setVisible(WebComponentUtil.getElementVisibility(config.getRelationConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(relation);
}

Expand All @@ -647,6 +658,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
indirect.setName(WebComponentUtil.getTranslatedPolyString(config.getIndirectConfiguration().getDisplay().getLabel()));
indirect.setHelp(WebComponentUtil.getTranslatedPolyString(config.getIndirectConfiguration().getDisplay().getHelp()));
}
if (config.getIndirectConfiguration().getVisibility() != null) {
indirect.setVisible(WebComponentUtil.getElementVisibility(config.getIndirectConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(indirect);
}

Expand All @@ -656,6 +670,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
scope.setName(WebComponentUtil.getTranslatedPolyString(config.getScopeConfiguration().getDisplay().getLabel()));
scope.setHelp(WebComponentUtil.getTranslatedPolyString(config.getScopeConfiguration().getDisplay().getHelp()));
}
if (config.getScopeConfiguration().getVisibility() != null) {
scope.setVisible(WebComponentUtil.getElementVisibility(config.getScopeConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(scope);
}
if (config.getProjectConfiguration() != null) {
Expand All @@ -664,6 +681,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
project.setName(WebComponentUtil.getTranslatedPolyString(config.getProjectConfiguration().getDisplay().getLabel()));
project.setHelp(WebComponentUtil.getTranslatedPolyString(config.getProjectConfiguration().getDisplay().getHelp()));
}
if (config.getProjectConfiguration().getVisibility() != null) {
project.setVisible(WebComponentUtil.getElementVisibility(config.getProjectConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(project);
}
if (config.getTenantConfiguration() != null) {
Expand All @@ -672,6 +692,9 @@ public static void createAbstractRoleSearchItemWrapperList(SearchConfigurationWr
tenant.setName(WebComponentUtil.getTranslatedPolyString(config.getTenantConfiguration().getDisplay().getLabel()));
tenant.setHelp(WebComponentUtil.getTranslatedPolyString(config.getTenantConfiguration().getDisplay().getHelp()));
}
if (config.getTenantConfiguration().getVisibility() != null) {
tenant.setVisible(WebComponentUtil.getElementVisibility(config.getTenantConfiguration().getVisibility()));
}
searchConfigWrapper.getItemsList().add(tenant);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,7 @@ public void removeAssignments(List<AssignmentType> assignments) {

for (ObjectReferenceType ref : requestItems.keySet()) {
List<AssignmentType> assignmentList = requestItems.get(ref);
assignmentList.remove(a);

if (CollectionUtils.isEmpty(assignmentList)) {
requestItems.remove(ref);
}
assignmentList.removeIf(item -> matchAssignments(item, a));
}
}
markConflictsDirty();
Expand Down Expand Up @@ -328,6 +324,9 @@ private Map<AssignmentType, Integer> getShoppingCartAssignmentCounts() {
for (List<AssignmentType> list : requestItems.values()) {
for (AssignmentType real : list) {
Integer count = counts.get(real);
if (count == null) {
count = 0;
}
counts.replace(real, count + 1);
}
}
Expand Down Expand Up @@ -580,6 +579,10 @@ private ObjectDelta<UserType> createUserDelta(PrismObject<UserType> user) throws
private void addAssignmentDeltas(ObjectDelta<UserType> focusDelta, List<AssignmentType> assignments,
PrismContainerDefinition<AssignmentType> def, boolean addAssignments) throws SchemaException {

if (assignments.isEmpty()) {
return;
}

PrismContext ctx = def.getPrismContext();
ContainerDelta<AssignmentType> delta = ctx.deltaFactory().container().create(ItemPath.EMPTY_PATH, def.getItemName(), def);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ public ActivationStatusType getObject() {
public void setObject(ActivationStatusType status) {
AssignmentType assignment = getModelObject().getAssignment();
ActivationType activation = assignment.getActivation();
if (activation == null) {
if (activation == null && status != null) {
activation = new ActivationType();
assignment.setActivation(activation);
}
Expand Down Expand Up @@ -290,19 +290,22 @@ protected void onError(AjaxRequestTarget target) {

@Override
protected void onSubmit(AjaxRequestTarget target) {
CustomValidity cv = customValidityModel.getObject();
XMLGregorianCalendar from = XmlTypeConverter.createXMLGregorianCalendar(cv.getFrom());
XMLGregorianCalendar to = XmlTypeConverter.createXMLGregorianCalendar(cv.getTo());

ShoppingCartItem item = getModelObject();
AssignmentType assignment = item.getAssignment();
ActivationType activation = assignment.getActivation();
if (activation == null) {
activation = new ActivationType();
assignment.setActivation(activation);
}

CustomValidity cv = customValidityModel.getObject();
XMLGregorianCalendar from = XmlTypeConverter.createXMLGregorianCalendar(cv.getFrom());
XMLGregorianCalendar to = XmlTypeConverter.createXMLGregorianCalendar(cv.getTo());
if (from != null || to != null) {
if (activation == null) {
activation = new ActivationType();
assignment.setActivation(activation);
}

activation.validFrom(from).validTo(to);
activation.validFrom(from).validTo(to);
}

savePerformed(target, ShoppingCartEditPanel.this.getModel());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
import com.google.common.base.Strings;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Valve;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.connector.Response;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.valves.ErrorReportValve;
import org.apache.catalina.webresources.ExtractingRoot;
import org.apache.coyote.ajp.AbstractAjpProtocol;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
Expand Down Expand Up @@ -111,7 +114,15 @@ public Response createResponse() {
tomcat.getService().addConnector(connector);
customizeConnector(connector);
tomcat.setConnector(connector);
tomcat.getHost().setAutoDeploy(false);
Host host = tomcat.getHost();
host.setAutoDeploy(false);
// Removing info/stack from low-level Tomcat error page: https://stackoverflow.com/a/70196883/658826
if (host instanceof StandardHost) {
ErrorReportValve errorReportValve = new ErrorReportValve();
errorReportValve.setShowReport(false);
errorReportValve.setShowServerInfo(false);
((StandardHost) host).addValve(errorReportValve);
}
Engine engine = tomcat.getEngine();
if (!Strings.isNullOrEmpty(jvmRoute)) {
engine.setJvmRoute(jvmRoute);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1231,15 +1231,23 @@ public static <T> T getExtensionItemRealValue(PrismContainerValue<?> parent, Ite
}
}

// TODO it would be better to return Set<String>
public static List<String> getOids(List<? extends Objectable> objectables) {
return objectables.stream()
.map(Objectable::getOid)
.collect(Collectors.toList());
}

// TODO it would be better to return Set<String>
public static List<String> getOidsFromPrismObjects(List<? extends PrismObject<?>> prismObjects) {
return prismObjects.stream()
.map(PrismObject::getOid)
.collect(Collectors.toList());
}

public static Set<String> getOidsFromRefs(Collection<? extends Referencable> refs) {
return refs.stream()
.map(ref -> ref.getOid())
.collect(Collectors.toSet());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import java.util.List;
import java.util.stream.Collectors;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.util.MiscUtil;

import com.evolveum.midpoint.util.exception.SchemaException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public void createOrUpdateCase(
createCase(resourceObject, resource, preFocus, now, task, result);
recordCaseCreationInShadow(resourceObject, now, result);
} else {
updateCase(aCase, preFocus, result);
updateCase(aCase, resourceObject, preFocus, result);
}
}

Expand Down Expand Up @@ -184,20 +184,24 @@ private void recordCaseCreationInShadow(ShadowType shadow, XMLGregorianCalendar
}

private void updateCase(
CaseType aCase, FocusType preFocus, OperationResult result)
CaseType aCase, @NotNull ShadowType resourceObject, FocusType preFocus, OperationResult result)
throws SchemaException {
CaseCorrelationContextType ctx = aCase.getCorrelationContext();
ObjectReferenceType preFocusRef = createObjectRefWithFullObject(preFocus);
if (ctx != null
&& java.util.Objects.equals(ctx.getPreFocusRef(), preFocusRef)) { // TODO is this comparison correct?
LOGGER.trace("No need to update the case {}", aCase);
return;
}
List<ItemDelta<?, ?>> itemDeltas = prismContext.deltaFor(CaseType.class)
.item(CaseType.F_CORRELATION_CONTEXT, CaseCorrelationContextType.F_PRE_FOCUS_REF)
.replace(preFocusRef)
.item(CaseType.F_TARGET_REF)
.replace() // The replacement of embedded object does not work right now ... so delete + add is used
.asItemDeltas();
modifyCase(aCase, itemDeltas, result);

List<ItemDelta<?, ?>> itemDeltas2 = prismContext.deltaFor(CaseType.class)
.item(CaseType.F_TARGET_REF)
.replace(createObjectRefWithFullObject(resourceObject))
.asItemDeltas();
modifyCase(aCase, itemDeltas2, result);

// TODO what about e.g. the correlation schema and other aspects?
}

private void modifyCase(CaseType aCase, List<ItemDelta<?, ?>> itemDeltas, OperationResult result) throws SchemaException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.evolveum.midpoint.provisioning.api.ProvisioningService;
import com.evolveum.midpoint.provisioning.api.Resource;
import com.evolveum.midpoint.repo.api.PreconditionViolationException;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceObjectTypeIdentification;

Expand Down Expand Up @@ -136,6 +137,10 @@ public ImportSingleAccountRequestBuilder withTypeIdentification(ResourceObjectTy
return this;
}

public ImportSingleAccountRequestBuilder withNamingAttribute(String localName) {
return withNamingAttribute(new QName(MidPointConstants.NS_RI, localName));
}

public ImportSingleAccountRequestBuilder withNamingAttribute(QName namingAttribute) {
this.namingAttribute = namingAttribute;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.evolveum.midpoint.prism.util.PrismAsserts;
import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.test.asserter.prism.PrismObjectAsserter;
import com.evolveum.midpoint.test.util.TestUtil;
import com.evolveum.midpoint.util.MiscUtil;
Expand All @@ -25,8 +26,10 @@

import org.jetbrains.annotations.NotNull;

import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;

@SuppressWarnings("UnusedReturnValue")
public class ShadowAsserter<RA> extends PrismObjectAsserter<ShadowType, RA> {
Expand Down Expand Up @@ -462,4 +465,32 @@ private Long getCorrelationEndTimestamp() {
XmlTypeConverter.toMillisNullable(correlationState.getCorrelationEndTimestamp()) :
null;
}

public ShadowAsserter<RA> assertCorrelationPerformers(String... oids) {
assertThat(getCorrelationPerformers())
.as("correlation performers OIDs")
.containsExactlyInAnyOrder(oids);
return this;
}

private Collection<String> getCorrelationPerformers() {
ShadowCorrelationStateType correlation = getObjectable().getCorrelation();
return correlation != null ?
ObjectTypeUtil.getOidsFromRefs(correlation.getPerformerRef()) :
Set.of();
}

public ShadowAsserter<RA> assertCorrelationComments(String... comments) {
assertThat(getCorrelationComments())
.as("correlation-related comments")
.containsExactlyInAnyOrder(comments);
return this;
}

private Collection<String> getCorrelationComments() {
ShadowCorrelationStateType correlation = getObjectable().getCorrelation();
return correlation != null ?
correlation.getPerformerComment() :
Set.of();
}
}

0 comments on commit 2c03e5a

Please sign in to comment.