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 Mar 9, 2022
2 parents 63d5bbc + 7dedfb4 commit 53909f9
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,9 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource.component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.model.StringResourceModel;

import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.MainObjectListPanel;
import com.evolveum.midpoint.gui.api.component.ObjectListPanel;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
Expand Down Expand Up @@ -48,6 +36,18 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.model.StringResourceModel;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

@PanelType(name = "resourceTasks")
@PanelInstance(identifier = "resourceTasks", applicableForType = ResourceType.class, applicableForOperation = OperationTypeType.MODIFY,
display = @PanelDisplay(label = "PageResource.tab.content.tasks", icon = GuiStyleConstants.CLASS_OBJECT_TASK_ICON, order = 40))
Expand Down Expand Up @@ -102,17 +102,8 @@ protected void newObjectPerformed(AjaxRequestTarget target, AssignmentObjectRela

List<ObjectReferenceType> archetypeRef = ObjectCollectionViewUtil.getArchetypeReferencesList(collectionView);
try {
PrismContext prismContext = getPrismContext();
PrismObjectDefinition<TaskType> def = prismContext.getSchemaRegistry().findObjectDefinitionByType(TaskType.COMPLEX_TYPE);
PrismObject<TaskType> obj = def.instantiate();
TaskType newTask = obj.asObjectable();

ObjectReferenceType resourceRef = new ObjectReferenceType();
resourceRef.setOid(ResourceTasksPanel.this.getObjectWrapper().getOid());
resourceRef.setType(ResourceType.COMPLEX_TYPE);
newTask.setObjectRef(resourceRef);

prepopulateTask(newTask, collectionView, archetypeRef);
String taskNamePrefix = createTaskPrefix(collectionView);
TaskType newTask = createResourceTask(getPrismContext(), taskNamePrefix, ResourceTasksPanel.this.getObjectWrapper().getObject(), archetypeRef);

WebComponentUtil.initNewObjectWithReference(getPageBase(), newTask, archetypeRef);
} catch (SchemaException ex) {
Expand Down Expand Up @@ -196,11 +187,28 @@ public void onClick(AjaxRequestTarget target) {
add(suspend);
}

private void prepopulateTask(TaskType task, CompiledObjectCollectionView view, List<ObjectReferenceType> archetypeRefs) {
String name = createNewTaskName(getObjectWrapper(), view);
task.setName(new PolyStringType(name));
public static TaskType createResourceTask(PrismContext prismContext, String taskNamePrefix, PrismObject<ResourceType> resource,
List<ObjectReferenceType> archetypeRefs) throws SchemaException {

PrismObjectDefinition<TaskType> def = prismContext.getSchemaRegistry().findObjectDefinitionByType(TaskType.COMPLEX_TYPE);
PrismObject<TaskType> obj = def.instantiate();
TaskType newTask = obj.asObjectable();

ObjectReferenceType resourceRef = new ObjectReferenceType();
resourceRef.setOid(resource.getOid());
resourceRef.setType(ResourceType.COMPLEX_TYPE);
newTask.setObjectRef(resourceRef);

String name = createNewTaskName(taskNamePrefix, resource);
newTask.setName(new PolyStringType(name));

SchemaHandlingType schemaHandling = getObjectWrapper().getObject().asObjectable().getSchemaHandling();
prepopulateTask(newTask, resource, archetypeRefs);

return newTask;
}

private static void prepopulateTask(TaskType task, PrismObject<ResourceType> resource, List<ObjectReferenceType> archetypeRefs) {
SchemaHandlingType schemaHandling = resource.asObjectable().getSchemaHandling();
List<ResourceObjectTypeDefinitionType> objectTypes = Collections.emptyList();
if (schemaHandling != null) {
objectTypes = schemaHandling.getObjectType();
Expand Down Expand Up @@ -255,7 +263,7 @@ private void prepopulateTask(TaskType task, CompiledObjectCollectionView view, L
}
}

private WorkDefinitionsType findWork(TaskType task) {
private static WorkDefinitionsType findWork(TaskType task) {
ActivityDefinitionType activity = task.getActivity();
if (activity == null) {
activity = new ActivityDefinitionType();
Expand All @@ -269,7 +277,7 @@ private WorkDefinitionsType findWork(TaskType task) {
return work;
}

private ResourceObjectSetType updateResourceObjectsSet(ResourceObjectSetType set, ObjectReferenceType objectRef, List<ResourceObjectTypeDefinitionType> objectTypes) {
private static ResourceObjectSetType updateResourceObjectsSet(ResourceObjectSetType set, ObjectReferenceType objectRef, List<ResourceObjectTypeDefinitionType> objectTypes) {
if (set == null) {
set = new ResourceObjectSetType();
}
Expand All @@ -288,7 +296,7 @@ private ResourceObjectSetType updateResourceObjectsSet(ResourceObjectSetType set
return set;
}

private boolean hasArchetype(List<ObjectReferenceType> archetypeRefs, String oid) {
private static boolean hasArchetype(List<ObjectReferenceType> archetypeRefs, String oid) {
if (oid == null) {
return false;
}
Expand All @@ -302,17 +310,25 @@ private boolean hasArchetype(List<ObjectReferenceType> archetypeRefs, String oid
return false;
}

private String createNewTaskName(PrismObjectWrapper<ResourceType> wrapper, CompiledObjectCollectionView view) {
StringBuilder sb = new StringBuilder();
private String createTaskPrefix(CompiledObjectCollectionView view) {
DisplayType display = view.getDisplay();
if (display != null && display.getLabel() != null) {
sb.append(display.getLabel().getOrig());
return display.getLabel().getOrig();
}

return null;
}

private static String createNewTaskName(String taskNamePrefix, PrismObject<ResourceType> resource) {
StringBuilder sb = new StringBuilder();
if (StringUtils.isNotEmpty(taskNamePrefix)) {
sb.append(taskNamePrefix);
sb.append(": ");
} else {
sb.append("Task: ");
}

PolyString name = ResourceTasksPanel.this.getObjectWrapper().getObject().getName();
PolyString name = resource.getName();
if (name != null) {
sb.append(name.getOrig());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,9 @@
*/
package com.evolveum.midpoint.web.page.admin.resources;

import java.util.Objects;
import java.util.*;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.authentication.api.util.AuthUtil;
import com.evolveum.midpoint.schema.processor.ResourceObjectDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
import com.evolveum.midpoint.schema.processor.ResourceSchemaFactory;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
Expand All @@ -41,6 +35,7 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.ResourceTasksPanel;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.api.authentication.CompiledShadowCollectionView;
Expand All @@ -53,9 +48,11 @@
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.GetOperationOptionsBuilder;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.processor.ResourceAttribute;
import com.evolveum.midpoint.schema.processor.ResourceObjectDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
import com.evolveum.midpoint.schema.processor.ResourceSchemaFactory;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
Expand Down Expand Up @@ -381,7 +378,7 @@ public InlineMenuItemAction initAction() {

@Override
public void onClick(AjaxRequestTarget target) {
newTaskPerformed(archetypeOid);
newTaskPerformed(target, archetypeOid);
}
};
}
Expand All @@ -399,68 +396,27 @@ protected String getSpecialDropdownMenuClass() {

}

private void newTaskPerformed(String archetypeOid) {
TaskType taskType = new TaskType(getPageBase().getPrismContext());
private String createTaskNamePrefix(String archetypeOid) {
Task task = getPageBase().createSimpleTask("Load archetype");
PrismObject<ArchetypeType> archetype = WebModelServiceUtils.loadObject(ArchetypeType.class, archetypeOid, getPageBase(), task, task.getResult());

if (SystemObjectsType.ARCHETYPE_IMPORT_TASK.value().equals(archetypeOid)) {
createImportTask(taskType);
} else if (SystemObjectsType.ARCHETYPE_RECONCILIATION_TASK.value().equals(archetypeOid)) {
createReconciliationTask(taskType);
} else if (SystemObjectsType.ARCHETYPE_LIVE_SYNC_TASK.value().equals(archetypeOid)) {
createLiveSyncTask(taskType);
}


if (StringUtils.isNotEmpty(archetypeOid)) {
taskType.getAssignment().add(ObjectTypeUtil.createAssignmentTo(archetypeOid, ObjectTypes.ARCHETYPE, getPrismContext()));
}
taskType.setOwnerRef(ObjectTypeUtil.createObjectRef(AuthUtil.getPrincipalUser().getOid(), ObjectTypes.USER));
taskType.setObjectRef(
ObjectTypeUtil.createObjectRef(
getResourceType()));

WebComponentUtil.dispatchToObjectDetailsPage(taskType.asPrismObject(), this);
return archetype != null ? archetype.getName().getOrig() : null;
}

private ResourceType getResourceType() {
return getResourceModel().getObject().asObjectable();
}

private void createImportTask(TaskType task) {
ImportWorkDefinitionType importWorkDefinitionType = new ImportWorkDefinitionType(getPrismContext());
importWorkDefinitionType.setResourceObjects(createResourceSet());

prepareActivityDefinition(task).setImport(importWorkDefinitionType);
}

private void createReconciliationTask(TaskType task) {
ReconciliationWorkDefinitionType reconciliationWorkDefinitionType = new ReconciliationWorkDefinitionType(getPrismContext());
reconciliationWorkDefinitionType.setResourceObjects(createResourceSet());

prepareActivityDefinition(task).setReconciliation(reconciliationWorkDefinitionType);
}

private void createLiveSyncTask(TaskType task) {
LiveSyncWorkDefinitionType liveSyncWorkDefinitionType = new LiveSyncWorkDefinitionType(getPrismContext());
liveSyncWorkDefinitionType.setResourceObjects(createResourceSet());

prepareActivityDefinition(task).setLiveSynchronization(liveSyncWorkDefinitionType);
}

private WorkDefinitionsType prepareActivityDefinition(TaskType taskType) {
ActivityDefinitionType activityDefinitionType = new ActivityDefinitionType(getPrismContext());
taskType.setActivity(activityDefinitionType);
WorkDefinitionsType workDefinitionsType = new WorkDefinitionsType();
activityDefinitionType.setWork(workDefinitionsType);
return workDefinitionsType;
}
private void newTaskPerformed(AjaxRequestTarget target, String archetypeOid) {
List<ObjectReferenceType> archetypeRef = Arrays.asList(
new ObjectReferenceType()
.oid(archetypeOid)
.type(ArchetypeType.COMPLEX_TYPE));
try {
TaskType newTask = ResourceTasksPanel.createResourceTask(getPrismContext(),
createTaskNamePrefix(archetypeOid), getResourceModel().getObject(), archetypeRef);

private ResourceObjectSetType createResourceSet() {
ResourceObjectSetType resourceSet = new ResourceObjectSetType(getPrismContext());
resourceSet.setResourceRef(ObjectTypeUtil.createObjectRef(getResourceType(), getPrismContext()));
resourceSet.setIntent(getIntent());
resourceSet.setKind(getKind());
return resourceSet;
WebComponentUtil.initNewObjectWithReference(getPageBase(), newTask, archetypeRef);
} catch (SchemaException ex) {
getPageBase().getFeedbackMessages().error(ResourceContentPanel.this, ex.getUserFriendlyMessage());
target.add(getPageBase().getFeedbackPanel());
}
}

private ObjectQuery createInTaskOidQuery(List<TaskType> tasksList) {
Expand Down Expand Up @@ -538,8 +494,7 @@ private List<TaskType> getTasksForKind(List<PrismObject<TaskType>> tasks) {
tasksForKind.add(task.asObjectable());
}

}
else {
} else {
String taskIntentValue = resourceSet.getIntent();
if (StringUtils.isNotEmpty(getIntent())) {
if (getKind() == taskKindValue && getIntent().equals(taskIntentValue)) {
Expand Down Expand Up @@ -1020,7 +975,7 @@ protected void updateResourceObjectStatusPerformed(ShadowType selected, AjaxRequ
| PolicyViolationException | SecurityViolationException e) {
result.recordPartialError(
getPageBase().createStringResource(
"ResourceContentPanel.message.updateResourceObjectStatusPerformed.partialError", status, shadow)
"ResourceContentPanel.message.updateResourceObjectStatusPerformed.partialError", status, shadow)
.getString(),
e);
LOGGER.error("Could not update status (to {}) for {}, using option {}",
Expand Down

0 comments on commit 53909f9

Please sign in to comment.