Skip to content

Commit

Permalink
MID-7476: Adding new Archetypes for utility and system tasks and hack…
Browse files Browse the repository at this point in the history
… of creating their new task (without propagations tasks)
  • Loading branch information
skublik committed Jan 24, 2022
1 parent 2691ef3 commit c210cbb
Show file tree
Hide file tree
Showing 20 changed files with 1,473 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public void onClick(AjaxRequestTarget target) {
if (isCollectionViewPanelForCompiledView()) {
CompiledObjectCollectionView collectionView = getObjectCollectionView();
//HACK TODO clenup and think about generic mechanism for this
if (!isViewForObjectCollectionType(collectionView, "00000000-0000-0000-0002-000000000007", ObjectCollectionType.COMPLEX_TYPE)) {
if (isCollectionViewWithoutMorePossibleNewType(collectionView)) {
newObjectPerformed(target, null, collectionView);
return;
}
Expand Down Expand Up @@ -226,6 +226,10 @@ protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRe
return createNewObjectButton;
}

protected boolean isCollectionViewWithoutMorePossibleNewType(CompiledObjectCollectionView collectionView) {
return true;
}

protected boolean showNewObjectCreationPopup() {
return getNewObjectInfluencesList() != null && getNewObjectInfluencesList().size() > 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,29 @@
import java.util.Collection;
import java.util.stream.Collectors;

import com.evolveum.midpoint.model.common.ArchetypeManager;

import com.evolveum.midpoint.util.exception.SchemaException;

import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

@Component
public class TaskHandlerWrapperFactory extends PrismPropertyWrapperFactoryImpl<String> {

@Autowired private ArchetypeManager archetypeManager;

@Override
protected LookupTableType getPredefinedValues(PrismProperty<String> item, WrapperContext ctx) {
PrismObject<?> prismObject = getParent(ctx);
Expand All @@ -52,7 +57,12 @@ protected LookupTableType getPredefinedValues(PrismProperty<String> item, Wrappe
AssignmentType archetypeAssignment = assignmentTypes.iterator().next();
handlers = getTaskManager().getHandlerUrisForArchetype(archetypeAssignment.getTargetRef().getOid(), true);
} else {
throw new UnsupportedOperationException("More than 1 archetype, this is not supported");
try {
PrismObject<ArchetypeType> archetype = archetypeManager.determineStructuralArchetype(task.asPrismObject(), ctx.getResult());
handlers = getTaskManager().getHandlerUrisForArchetype(archetype.getOid(), true);
} catch (SchemaException e) {
throw new UnsupportedOperationException("More than 1 structural archetype, this is not supported", e);
}
}
LookupTableType lookupTableType = new LookupTableType(getPrismContext());

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

import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconCssStyle;
import com.evolveum.midpoint.model.api.AssignmentObjectRelation;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
Expand Down Expand Up @@ -160,34 +161,102 @@ private void showResult(OperationResult result) {
getPageBase().showResult(result);
}

protected void newObjectPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation, CompiledObjectCollectionView collectionView) {
if (collectionView == null) {
collectionView = getObjectCollectionView();
}
try {
List<ObjectReferenceType> referenceList = new ArrayList<>();
referenceList.addAll(getNewObjectReferencesList(collectionView, relation));
if (referenceList.get(0) != null) {
String oid = referenceList.get(0).getOid();
if (getUtilityArchetypesList().contains(oid)) {
referenceList.add(new ObjectReferenceType()
.type(ArchetypeType.COMPLEX_TYPE)
.oid(SystemObjectsType.ARCHETYPE_UTILITY_TASK.value()));
} else if (getSystemArchetypesList().contains(oid)) {
referenceList.add(new ObjectReferenceType()
.type(ArchetypeType.COMPLEX_TYPE)
.oid(SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value()));
}
}
WebComponentUtil.initNewObjectWithReference(getPageBase(),
relation != null && CollectionUtils.isNotEmpty(relation.getObjectTypes()) ?
relation.getObjectTypes().get(0) : WebComponentUtil.classToQName(getPrismContext(), getType()),
referenceList);
} catch (SchemaException ex) {
getPageBase().getFeedbackMessages().error(TaskTablePanel.this, ex.getUserFriendlyMessage());
target.add(getPageBase().getFeedbackPanel());
}
}

@Override
protected boolean isCollectionViewWithoutMorePossibleNewType(CompiledObjectCollectionView collectionView) {
if (isViewForObjectCollectionType(collectionView, "00000000-0000-0000-0002-000000000007", ObjectCollectionType.COMPLEX_TYPE)
|| isViewForObjectCollectionType(collectionView, SystemObjectsType.ARCHETYPE_UTILITY_TASK.value(), ArchetypeType.COMPLEX_TYPE)
|| isViewForObjectCollectionType(collectionView, SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value(), ArchetypeType.COMPLEX_TYPE)){
return false;
}
return true;
}

@Override
protected @NotNull List<CompiledObjectCollectionView> getNewObjectInfluencesList() {
//HACK TODO clenup and think about generic mechanism for this
CompiledObjectCollectionView objectCollectionView = getObjectCollectionView();
if (!isViewForObjectCollectionType(objectCollectionView, "00000000-0000-0000-0002-000000000007", ObjectCollectionType.COMPLEX_TYPE)) {
return super.getNewObjectInfluencesList();

if (isViewForObjectCollectionType(objectCollectionView, "00000000-0000-0000-0002-000000000007", ObjectCollectionType.COMPLEX_TYPE)){
return getNewTaskInfluencesList(getReportArchetypesList());
}

if (isViewForObjectCollectionType(objectCollectionView, SystemObjectsType.ARCHETYPE_UTILITY_TASK.value(), ArchetypeType.COMPLEX_TYPE)) {
return getNewTaskInfluencesList(getUtilityArchetypesList());
}

if (isViewForObjectCollectionType(objectCollectionView, SystemObjectsType.ARCHETYPE_SYSTEM_TASK.value(), ArchetypeType.COMPLEX_TYPE)) {
return getNewTaskInfluencesList(getSystemArchetypesList());
}
return super.getNewObjectInfluencesList();
}

private List<String> getReportArchetypesList() {
return Arrays.asList(
SystemObjectsType.ARCHETYPE_REPORT_EXPORT_CLASSIC_TASK.value(),
SystemObjectsType.ARCHETYPE_REPORT_IMPORT_CLASSIC_TASK.value(),
SystemObjectsType.ARCHETYPE_REPORT_EXPORT_DISTRIBUTED_TASK.value());
}

private List<String> getUtilityArchetypesList() {
return Arrays.asList(
SystemObjectsType.ARCHETYPE_SHADOW_INTEGRITY_CHECK_TASK.value(),
SystemObjectsType.ARCHETYPE_SHADOWS_REFRESH_TASK.value(),
SystemObjectsType.ARCHETYPE_SHADOWS_DELETE_LONG_TIME_NOT_UPDATED_TASK.value(),
SystemObjectsType.ARCHETYPE_EXECUTE_CHANGE_TASK.value(),
SystemObjectsType.ARCHETYPE_EXECUTE_DETLAS_TASK.value(),
SystemObjectsType.ARCHETYPE_REINDEX_REPOSITORY_TASK.value(),
SystemObjectsType.ARCHETYPE_OBJECT_INTEGRITY_CHECK_TASK.value(),
SystemObjectsType.ARCHETYPE_OBJECTS_DELETE_TASK.value());
}

private List<String> getSystemArchetypesList() {
return Arrays.asList(
SystemObjectsType.ARCHETYPE_VALIDITY_SCANNER_TASK.value(),
SystemObjectsType.ARCHETYPE_TRIGGER_SCANNER_TASK.value());
}

private List<CompiledObjectCollectionView> getNewTaskInfluencesList(List<String> oids) {
List<CompiledObjectCollectionView> compiledObjectCollectionViews = getPageBase().getCompiledGuiProfile().findAllApplicableArchetypeViews(TaskType.COMPLEX_TYPE, OperationTypeType.ADD);
List<CompiledObjectCollectionView> filteredObjectCollectionViews = new ArrayList<>();
for (CompiledObjectCollectionView compiledObjectCollectionView : compiledObjectCollectionViews) {
if (isViewForObjectCollectionType(compiledObjectCollectionView, SystemObjectsType.ARCHETYPE_REPORT_EXPORT_DISTRIBUTED_TASK.value(), ArchetypeType.COMPLEX_TYPE)) {
filteredObjectCollectionViews.add(compiledObjectCollectionView);
}

if (isViewForObjectCollectionType(compiledObjectCollectionView, SystemObjectsType.ARCHETYPE_REPORT_EXPORT_CLASSIC_TASK.value(), ArchetypeType.COMPLEX_TYPE)) {
filteredObjectCollectionViews.add(compiledObjectCollectionView);
}

if (isViewForObjectCollectionType(compiledObjectCollectionView, SystemObjectsType.ARCHETYPE_REPORT_IMPORT_CLASSIC_TASK.value(), ArchetypeType.COMPLEX_TYPE)) {
filteredObjectCollectionViews.add(compiledObjectCollectionView);
for (String oid :oids) {
if (isViewForObjectCollectionType(compiledObjectCollectionView, oid, ArchetypeType.COMPLEX_TYPE)) {
filteredObjectCollectionViews.add(compiledObjectCollectionView);
}
}

}
return filteredObjectCollectionViews;
}


private void synchronizeTasksPerformed(AjaxRequestTarget target) {
Task opTask = createSimpleTask(OPERATION_SYNCHRONIZE_TASKS);
OperationResult result = opTask.getResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,96 @@
</collectionRef>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>shadow-integrity-check-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000513" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>shadows-refresh-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000514" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>objects-delete-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000515" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>shadows-delete-long-time-not-updated-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000516" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>execute-change-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000517" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>execute-deltas-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000518" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>reindex-repository-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000519" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>object-integrity-check-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000522" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>validity-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000530" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>trigger-task-view</identifier>
<refreshInterval>30</refreshInterval>
<applicableForOperation>add</applicableForOperation>
<type>TaskType</type>
<collection>
<collectionRef oid="00000000-0000-0000-0000-000000000531" relation="org:default" type="c:ArchetypeType"/>
</collection>
</objectCollectionView>
<objectCollectionView>
<identifier>certification-tasks-view</identifier>
<refreshInterval>30</refreshInterval>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
-->
<archetype oid="00000000-0000-0000-0000-000000000512"
xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:rext="http://midpoint.evolveum.com/xml/ns/public/report/extension-3">
xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3">
<name>Distributed report export task</name>
<archetypePolicy>
<display>
Expand Down

0 comments on commit c210cbb

Please sign in to comment.