Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Nov 19, 2021
2 parents 1ed522d + 4ce4362 commit 86755e7
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ public static <C extends Containerable> Search<C> createContainerSearch(Containe
availableDefs = getAvailableDefinitions(containerDef, null, true, modelServiceLocator);
}

Search search = new Search(type, availableDefs);
Search<C> search = new Search<>(type, availableDefs);

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
Expand All @@ -216,9 +216,9 @@ public static <C extends Containerable> Search<C> createContainerSearch(Containe
return search;
}

public static <T extends ObjectType> Search createSearch(Class<? extends T> type, ModelServiceLocator modelServiceLocator) {
public static <T extends ObjectType> Search<? extends T> createSearch(Class<? extends T> type, ModelServiceLocator modelServiceLocator) {
@NotNull ObjectTypes objectTypes = ObjectTypes.getObjectType(type);
return createSearch(new ContainerTypeSearchItem<T>(new SearchValue(type, "ObjectType." + objectTypes.getTypeQName().getLocalPart())), null, null,
return createSearch(new ContainerTypeSearchItem<>(new SearchValue<>(type, "ObjectType." + objectTypes.getTypeQName().getLocalPart())), null, null,
null, modelServiceLocator, null, true, true, Search.PanelType.DEFAULT);
}

Expand All @@ -234,12 +234,12 @@ public static <T extends ObjectType> Search<T> createSearch(
panelType, false);
}

private static <T extends ObjectType> Search createSearch(
private static <T extends ObjectType> Search<T> createSearch(
ContainerTypeSearchItem<T> type, String collectionViewName, List<ItemPath> fixedSearchItems, ResourceShadowDiscriminator discriminator,
ModelServiceLocator modelServiceLocator, List<ItemPath> availableItemPath, boolean useDefsFromSuperclass, boolean useObjectCollection, Search.PanelType panelType,
boolean isOidSearchEnabled) {

PrismObjectDefinition objectDef = findObjectDefinition(type.getTypeClass(), discriminator, modelServiceLocator);
PrismObjectDefinition<?> objectDef = findObjectDefinition(type.getTypeClass(), discriminator, modelServiceLocator);
List<SearchItemDefinition> availableDefs = getAvailableDefinitions(objectDef, availableItemPath, useDefsFromSuperclass, modelServiceLocator);
boolean isFullTextSearchEnabled = isFullTextSearchEnabled(modelServiceLocator, type.getTypeClass());

Expand All @@ -251,10 +251,10 @@ private static <T extends ObjectType> Search createSearch(
searchMode = searchBox.getDefaultMode();
allowedSearchModes = searchBox.getAllowedMode();
}
Search search = new Search(type, availableDefs, isFullTextSearchEnabled, searchMode, allowedSearchModes, isOidSearchEnabled);
Search<T> search = new Search<>(type, availableDefs, isFullTextSearchEnabled, searchMode, allowedSearchModes, isOidSearchEnabled);

SchemaRegistry registry = modelServiceLocator.getPrismContext().getSchemaRegistry();
PrismObjectDefinition objDef = registry.findObjectDefinitionByCompileTimeClass(type.getTypeClass());
PrismObjectDefinition<?> objDef = registry.findObjectDefinitionByCompileTimeClass(type.getTypeClass());

List<SearchItemDefinition> configuredSearchItemDefs = null;
if (useObjectCollection) {
Expand All @@ -279,9 +279,9 @@ private static <T extends ObjectType> Search createSearch(
return search;
}

public static <C extends Containerable> Search createSearchForReport(Class<C> type, List<SearchFilterParameterType> parameters, ModelServiceLocator modelServiceLocator) {
public static <C extends Containerable> Search<C> createSearchForReport(Class<C> type, List<SearchFilterParameterType> parameters, ModelServiceLocator modelServiceLocator) {
ContainerTypeSearchItem<C> typeItem = new ContainerTypeSearchItem<>(new SearchValue<>(type, ""));
Search search = new Search(typeItem, new ArrayList<>(), false, SearchBoxModeType.BASIC, Collections.singletonList(SearchBoxModeType.BASIC), false);
Search<C> search = new Search<>(typeItem, new ArrayList<>(), false, SearchBoxModeType.BASIC, Collections.singletonList(SearchBoxModeType.BASIC), false);

SchemaRegistry registry = modelServiceLocator.getPrismContext().getSchemaRegistry();
PrismContainerDefinition objDef = registry.findContainerDefinitionByCompileTimeClass(type);
Expand All @@ -303,7 +303,6 @@ public static <C extends Containerable> Search createSearchForReport(Class<C> ty
}
}
configuredSearchItemDefs.add(new SearchItemDefinition(searchItemType));
return;
});
processSearchItemDefFromCompiledView(configuredSearchItemDefs, search, objDef);
search.setCanConfigure(false);
Expand Down Expand Up @@ -356,7 +355,7 @@ public static <T extends ObjectType> PrismObjectDefinition findObjectDefinition(
}
}

public static <C extends Containerable> List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
public static List<SearchItemDefinition> getConfiguredSearchItemDefinitions(List<SearchItemDefinition> availableDefinitions,
ModelServiceLocator modelServiceLocator, QName type, String collectionViewName, Search.PanelType panelType) {
SearchBoxConfigurationType searchConfig = getSearchBoxConfiguration(modelServiceLocator, type, collectionViewName, panelType);
if (searchConfig == null) {
Expand Down Expand Up @@ -401,7 +400,7 @@ public static <C extends Containerable> List<SearchItemDefinition> getAvailableD
List<ItemPath> paths = CollectionUtils.isEmpty(availableItemPath) ? getAvailableSearchableItems(typeClass, modelServiceLocator) : availableItemPath;
if (paths != null) {
for (ItemPath path : paths) {
ItemDefinition def = objectDef.findItemDefinition(path);
ItemDefinition<?> def = objectDef.findItemDefinition(path);
if (def != null) {
SearchItemDefinition searchItemDef = new SearchItemDefinition(path, def, getAllowedValues(path));
definitions.add(searchItemDef);
Expand All @@ -423,7 +422,7 @@ private static List<DisplayableValue> getAllowedValues(ItemPath path) {
if (AuditEventRecordType.F_CHANNEL.equivalent(path)) {
List<DisplayableValue> list = new ArrayList<>();
for (GuiChannel channel : GuiChannel.values()) {
list.add(new SearchValue(channel.getUri(), channel.getLocalizationKey()));
list.add(new SearchValue<>(channel.getUri(), channel.getLocalizationKey()));
}
return list;
}
Expand All @@ -433,17 +432,17 @@ private static List<DisplayableValue> getAllowedValues(ItemPath path) {
public static List<ItemPath> getAvailableSearchableItems(Class<?> typeClass, ModelServiceLocator modelServiceLocator) {
List<ItemPath> items = SEARCHABLE_OBJECTS.get(typeClass);
if (AuditEventRecordType.class.equals(typeClass)) {
SystemConfigurationType systemConfigurationType = null;
SystemConfigurationType systemConfigurationType;
try {
systemConfigurationType = modelServiceLocator.getModelInteractionService().getSystemConfiguration(new OperationResult("load_system_config"));
systemConfigurationType = modelServiceLocator.getModelInteractionService()
.getSystemConfiguration(new OperationResult("load_system_config"));
} catch (SchemaException | ObjectNotFoundException e) {
throw new SystemException(e);
}
if (systemConfigurationType != null && systemConfigurationType.getAudit() != null
&& systemConfigurationType.getAudit().getEventRecording() != null &&
Boolean.TRUE.equals(systemConfigurationType.getAudit().getEventRecording().isRecordResourceOids())) {
ArrayList<ItemPath> auditItems = new ArrayList<>();
auditItems.addAll(items);
ArrayList<ItemPath> auditItems = new ArrayList<>(items);
auditItems.add(ItemPath.create(AuditEventRecordType.F_RESOURCE_OID));
items = auditItems;
}
Expand Down Expand Up @@ -484,15 +483,15 @@ private static SearchBoxConfigurationType getSearchBoxConfiguration(ModelService
return view.getSearchBoxConfiguration();
}
return null;
} catch (SchemaException | ObjectNotFoundException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException ex) {
} catch (SchemaException | ObjectNotFoundException | CommunicationException
| ConfigurationException | SecurityViolationException | ExpressionEvaluationException ex) {
throw new SystemException(ex);
}
}

public static <C extends Containerable> List<SearchItemDefinition> createExtensionDefinitionList(
PrismContainerDefinition<C> objectDef) {

// Map<ItemPath, ItemDefinition> map = new HashMap<>();
List<SearchItemDefinition> searchItemDefinitions = new ArrayList<>();

ItemPath extensionPath = ObjectType.F_EXTENSION;
Expand All @@ -502,7 +501,8 @@ public static <C extends Containerable> List<SearchItemDefinition> createExtensi
return searchItemDefinitions;
}

for (ItemDefinition def : (List<ItemDefinition>) ext.getDefinitions()) {
//noinspection unchecked
for (ItemDefinition<?> def : (List<ItemDefinition<?>>) ext.getDefinitions()) {
ItemPath itemPath = ItemPath.create(extensionPath, def.getItemName());

if (!isIndexed(def)) {
Expand All @@ -521,29 +521,34 @@ public static <C extends Containerable> List<SearchItemDefinition> createExtensi
&& !(def instanceof PrismReferenceDefinition)) {
continue;
}

}

return searchItemDefinitions;
}

public static <C extends Containerable> void addSearchRefDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, AreaCategoryType category, PageBase pageBase) {
public static <C extends Containerable> void addSearchRefDef(
PrismContainerDefinition<C> containerDef, ItemPath path,
List<SearchItemDefinition> defs, AreaCategoryType category, PageBase pageBase) {
PrismReferenceDefinition refDef = containerDef.findReferenceDefinition(path);
if (refDef == null) {
return;
}
if (pageBase == null) {
defs.add(new SearchItemDefinition(path, refDef, Collections.singletonList(WebComponentUtil.getDefaultRelationOrFail())));
defs.add(new SearchItemDefinition(path, refDef,
Collections.singletonList(WebComponentUtil.getDefaultRelationOrFail())));
return;
}
defs.add(new SearchItemDefinition(path, refDef, WebComponentUtil.getCategoryRelationChoices(category, pageBase)));
defs.add(new SearchItemDefinition(path, refDef,
WebComponentUtil.getCategoryRelationChoices(category, pageBase)));
}

public static <C extends Containerable> void addSearchPropertyDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs) {
public static <C extends Containerable> void addSearchPropertyDef(
PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs) {
addSearchPropertyDef(containerDef, path, defs, null);
}

public static <C extends Containerable> void addSearchPropertyDef(PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, String key) {
public static <C extends Containerable> void addSearchPropertyDef(
PrismContainerDefinition<C> containerDef, ItemPath path, List<SearchItemDefinition> defs, String key) {
PrismPropertyDefinition propDef = containerDef.findPropertyDefinition(path);
if (propDef == null) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,14 @@ void commit(OperationResult parentResult)
engine.executionHelper.closeCaseInRepository(currentCase, result);
}

engine.auditHelper.prepareProcessEndRecord(this, result);
engine.wfAuditHelper.prepareProcessEndRecord(this, result);
prepareNotification(new DelayedNotification.ProcessEnd(currentCase));
} catch (PreconditionViolationException e) {
throw new SystemException(e);
}
}

engine.auditHelper.auditPreparedRecords(this, result);
engine.wfAuditHelper.auditPreparedRecords(this, result);
engine.notificationHelper.sendPreparedNotifications(this, result);
} catch (Throwable t) {
result.recordFatalError(t);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import com.evolveum.midpoint.wf.impl.access.AuthorizationHelper;
import com.evolveum.midpoint.wf.impl.engine.actions.Action;
import com.evolveum.midpoint.wf.impl.engine.actions.ActionFactory;
import com.evolveum.midpoint.wf.impl.engine.helpers.AuditHelper;
import com.evolveum.midpoint.wf.impl.engine.helpers.WfAuditHelper;
import com.evolveum.midpoint.wf.impl.engine.helpers.NotificationHelper;
import com.evolveum.midpoint.wf.impl.engine.helpers.TriggerHelper;
import com.evolveum.midpoint.wf.impl.engine.helpers.WorkItemHelper;
Expand Down Expand Up @@ -64,7 +64,7 @@ public class WorkflowEngine implements CaseEventListener {
public RepositoryService repositoryService;
@Autowired public PrismContext prismContext;
@Autowired public SecurityEnforcer securityEnforcer;
@Autowired public AuditHelper auditHelper;
@Autowired public WfAuditHelper wfAuditHelper;
@Autowired public NotificationHelper notificationHelper;
@Autowired public StageComputeHelper stageComputeHelper;
@Autowired public PrimaryChangeProcessor primaryChangeProcessor; // todo
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public Action execute(OperationResult parentResult) {
LOGGER.debug("Case was already opened; its state is {}", currentState);
next = null;
} else {
engine.auditHelper.prepareProcessStartRecord(ctx, result);
engine.wfAuditHelper.prepareProcessStartRecord(ctx, result);
ctx.prepareNotification(new DelayedNotification.ProcessStart(currentCase));

if (!approvalCase) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
/*
* Copyright (c) 2010-2019 Evolveum and contributors
* Copyright (C) 2010-2021 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.wf.impl.engine.helpers;

import static com.evolveum.midpoint.audit.api.AuditEventStage.EXECUTION;
import static com.evolveum.midpoint.audit.api.AuditEventType.WORKFLOW_PROCESS_INSTANCE;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.audit.api.AuditEventStage;
import com.evolveum.midpoint.audit.api.AuditEventType;
import com.evolveum.midpoint.audit.api.AuditService;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.schema.GetOperationOptions;
Expand All @@ -19,9 +28,9 @@
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.schema.util.ApprovalContextUtil;
import com.evolveum.midpoint.schema.util.CaseTypeUtil;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.schema.util.ApprovalContextUtil;
import com.evolveum.midpoint.schema.util.WorkItemId;
import com.evolveum.midpoint.security.api.MidPointPrincipal;
import com.evolveum.midpoint.security.api.SecurityContextManager;
Expand All @@ -37,31 +46,20 @@
import com.evolveum.midpoint.wf.impl.util.MiscHelper;
import com.evolveum.midpoint.wf.util.ApprovalUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import static com.evolveum.midpoint.audit.api.AuditEventStage.EXECUTION;
import static com.evolveum.midpoint.audit.api.AuditEventType.WORKFLOW_PROCESS_INSTANCE;

/**
* Deals with preparation and recording of audit events.
* Deals with preparation and recording of audit events.
*/
@Component("wfAuditHelper")
public class AuditHelper {
@Component
public class WfAuditHelper {

private static final Trace LOGGER = TraceManager.getTrace(AuditHelper.class);
private static final Trace LOGGER = TraceManager.getTrace(WfAuditHelper.class);

@Autowired private AuditService auditService;
@Autowired private SecurityContextManager securityContextManager;
@Autowired private PrismContext prismContext;
@Autowired private MiscHelper miscHelper;
@Autowired private SchemaService schemaService;
@Autowired private PrimaryChangeProcessor primaryChangeProcessor; // todo
@Autowired private PrimaryChangeProcessor primaryChangeProcessor; // TODO
@Autowired private com.evolveum.midpoint.model.impl.util.AuditHelper modelAuditHelper;

@Autowired
Expand Down Expand Up @@ -89,16 +87,15 @@ public void auditPreparedRecords(EngineInvocationContext ctx, OperationResult re
}
//endregion


//region Preparation of audit events
public AuditEventRecord prepareProcessInstanceAuditRecord(CaseType aCase, AuditEventStage stage, OperationResult result) {

ApprovalContextType wfc = aCase.getApprovalContext();

AuditEventRecord record = new AuditEventRecord();
record.setEventType(WORKFLOW_PROCESS_INSTANCE);
record.setEventStage(stage);
record.setInitiator(miscHelper.getRequesterIfExists(aCase, result), prismContext); // set real principal in case of explicitly requested process termination (MID-4263)
// set real principal in case of explicitly requested process termination (MID-4263)
record.setInitiator(miscHelper.getRequesterIfExists(aCase, result), prismContext);

// TODO we could be more strict and allow non-existence of object only in case of "object add" delta. But we are not.
ObjectReferenceType objectRef = resolveIfNeeded(aCase.getObjectRef(), true, result);
Expand Down Expand Up @@ -156,6 +153,7 @@ private ObjectReferenceType resolveIfNeeded(ObjectReferenceType ref, boolean opt
}
}

@SuppressWarnings("SameParameterValue")
private List<ObjectReferenceType> resolveIfNeeded(List<ObjectReferenceType> refs, boolean optional, OperationResult result) {
return refs.stream()
.map(ref -> resolveIfNeeded(ref, optional, result))
Expand Down Expand Up @@ -239,7 +237,7 @@ public AuditEventRecord prepareWorkItemDeletedAuditRecord(CaseWorkItemType workI
record.addPropertyValue(WorkflowConstants.AUDIT_COMMENT, output.getComment());
}
} else {
message.append("(no decision)"); // TODO
message.append("(no decision)"); // TODO
}
record.setMessage(message.toString());
return record;
Expand All @@ -258,5 +256,4 @@ private void setInitiatorAndAttorneyFromPrincipal(AuditEventRecord record) {
}
}
//endregion

}

0 comments on commit 86755e7

Please sign in to comment.