Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature/merge
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Apr 12, 2024
2 parents 2dec859 + fbd66d1 commit 5248fa9
Show file tree
Hide file tree
Showing 16 changed files with 414 additions and 186 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.studio.util.MidPointUtils;
import com.evolveum.midpoint.studio.util.StudioLocalization;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
Expand Down Expand Up @@ -31,6 +32,11 @@ public void removeSelectionListener(SelectionListener<ObjectTypes> listener) {
selectionListeners.remove(listener);
}

@Override
public @NotNull ActionUpdateThread getActionUpdateThread() {
return ActionUpdateThread.EDT;
}

@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.evolveum.midpoint.studio.action.browse;

import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
Expand Down Expand Up @@ -72,6 +73,11 @@ protected DefaultActionGroup createPopupActionGroup(JComponent button) {
return group;
}

@Override
public @NotNull ActionUpdateThread getActionUpdateThread() {
return ActionUpdateThread.EDT;
}

private static class TypeAction extends AnAction implements DumbAware {

private Type type;
Expand All @@ -94,5 +100,10 @@ public void actionPerformed(@NotNull AnActionEvent e) {
combo.setSelected(type);
combo.update(e);
}

@Override
public @NotNull ActionUpdateThread getActionUpdateThread() {
return ActionUpdateThread.EDT;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ private String cleanupObject(MidPointObject object) {
processor.setHandler(handler);

for (PrismObject<? extends ObjectType> obj : clonedObjects) {
CleanupResult result = processor.process(obj, Source.of(object.getFile(), object.getContent()));
CleanupResult result = processor.process(obj);

updateMissingReferencesSummary(object, result.getMessages());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private void uploadContent(ProgressIndicator indicator, String content) {
int success = 0;
for (MidPointObject object : objects) {
try {
OperationResult result = UploadExecuteTask.uploadExecute(client, object);
OperationResult result = UploadTaskMixin.uploadExecute(client, object);
boolean problem = result != null && !result.isSuccess();

if (problem) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,10 @@
package com.evolveum.midpoint.studio.action.task;

import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.studio.action.transfer.ProcessObjectResult;
import com.evolveum.midpoint.studio.client.AuthenticationException;
import com.evolveum.midpoint.studio.client.MidPointObject;
import com.evolveum.midpoint.studio.impl.*;
import com.evolveum.midpoint.studio.impl.configuration.MidPointService;
import com.evolveum.midpoint.studio.impl.configuration.MidPointConfiguration;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ExecuteScriptResponseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType;
import com.evolveum.midpoint.studio.impl.Environment;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.vcsUtil.VcsUtil;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* Created by Viliam Repan (lazyman).
Expand All @@ -43,56 +28,8 @@ protected UploadExecuteTask(AnActionEvent event, Environment environment, String

@Override
public ProcessObjectResult processObject(MidPointObject obj) throws Exception {
OperationResult result = uploadExecute(client, obj);
OperationResult result = UploadTaskMixin.uploadExecute(client, obj);

return validateOperationResult("upload", result, obj.getName());
}

public static OperationResult uploadExecute(MidPointClient client, MidPointObject obj)
throws AuthenticationException, IOException, SchemaException {

OperationResult result = null;
if (obj.isExecutable()) {
ExecuteScriptResponseType response = client.execute(obj.getContent());

if (response != null) {
OperationResultType res = response.getResult();
result = OperationResult.createOperationResult(res);
}
} else {
File file = obj.getFile();
VirtualFile vFile = file != null ? VcsUtil.getVirtualFile(file) : null;

MidPointConfiguration settings = MidPointService.get(client.getProject()).getSettings();
UploadResponse response;
if (obj.getOid() != null && settings.isUpdateOnUpload()) {
try {
response = client.modify(obj, buildUploadOptions(obj), true, vFile);
} catch (ObjectNotFoundException ex) {
response = client.uploadRaw(obj, buildUploadOptions(obj), true, vFile);
}
} else {
response = client.uploadRaw(obj, buildUploadOptions(obj), true, vFile);
}
result = response.getResult();

if (obj.getOid() == null && response.getOid() != null) {
obj.setOid(response.getOid());
}
}

return result;
}

public static List<String> buildUploadOptions(MidPointObject object) {
List<String> options = new ArrayList<>();
options.add("isImport");

ObjectTypes type = object.getType();
if (type != ObjectTypes.TASK && type != ObjectTypes.SYSTEM_CONFIGURATION) {
options.add("raw");
}

return options;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.evolveum.midpoint.studio.action.task;

import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.studio.action.transfer.ProcessObjectResult;
import com.evolveum.midpoint.studio.client.MidPointObject;
import com.evolveum.midpoint.studio.impl.Environment;
import com.intellij.openapi.actionSystem.AnActionEvent;

import java.util.ArrayList;
import java.util.List;

public class UploadFullProcessingTask extends ClientBackgroundableTask<TaskState> {

public static String TITLE = "Upload (Full Processing)";

public static final String NOTIFICATION_KEY = TITLE;

private static final String OPERATION_UPLOAD = "upload";
private static final String OPERATION_RECOMPUTE = "recompute";
private static final String OPERATION_TEST_CONNECTION = "test connection";

public UploadFullProcessingTask(AnActionEvent event, Environment environment) {
this(event, environment, TITLE, NOTIFICATION_KEY);
}

protected UploadFullProcessingTask(
AnActionEvent event, Environment environment, String title, String notificationKey) {

super(event.getProject(), title, notificationKey);

setEvent(event);
setEnvironment(environment);
}

@Override
protected ProcessObjectResult processObject(MidPointObject object) throws Exception {
OperationResult result = UploadTaskMixin.uploadExecute(client, object, buildUploadOptions(object));

ProcessObjectResult por = validateOperationResult(OPERATION_UPLOAD, result, object.getName());

if (object.isExecutable()) {
return por;
}

OperationResult uploadResult = por.result();

if (uploadResult != null && !uploadResult.isSuccess()) {
printProblem("Skipping processing for " + object.getName() + ", there was a problem with upload");

return por;
}

OperationResult recomputeResult = UploadTaskMixin.recompute(client, object);
if (recomputeResult != null) {
validateOperationResult(OPERATION_RECOMPUTE, recomputeResult, object.getName());
}

OperationResult testConnectionResult = UploadTaskMixin.testResourceConnection(client, object);

return validateOperationResult(OPERATION_TEST_CONNECTION, testConnectionResult, object.getName());
}

public static List<String> buildUploadOptions(MidPointObject object) {
List<String> options = new ArrayList<>();
options.add("isImport");

ObjectTypes type = object.getType();
if (type != ObjectTypes.TASK && type != ObjectTypes.SYSTEM_CONFIGURATION) {
options.add("raw");
}

return options;
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,9 @@
package com.evolveum.midpoint.studio.action.task;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.studio.action.transfer.ProcessObjectResult;
import com.evolveum.midpoint.studio.client.MidPointObject;
import com.evolveum.midpoint.studio.impl.Environment;
import com.evolveum.midpoint.studio.util.MidPointUtils;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ExecuteScriptResponseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType;
import com.evolveum.midpoint.xml.ns._public.model.scripting_3.ActionExpressionType;
import com.evolveum.midpoint.xml.ns._public.model.scripting_3.ExpressionPipelineType;
import com.evolveum.midpoint.xml.ns._public.model.scripting_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.model.scripting_3.SearchExpressionType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import com.intellij.openapi.actionSystem.AnActionEvent;

/**
Expand All @@ -36,10 +23,6 @@ public UploadRecomputeTask(AnActionEvent event, Environment environment) {
public ProcessObjectResult processObject(MidPointObject obj) throws Exception {
ProcessObjectResult por = super.processObject(obj);

if (obj.isExecutable()) {
return por;
}

OperationResult uploadResult = por.result();

if (uploadResult != null && !uploadResult.isSuccess()) {
Expand All @@ -48,41 +31,11 @@ public ProcessObjectResult processObject(MidPointObject obj) throws Exception {
return por;
}

if (obj.getType() == null || !AssignmentHolderType.class.isAssignableFrom(obj.getType().getClassDefinition())) {
OperationResult recomputeResult = UploadTaskMixin.recompute(client, obj);
if (recomputeResult == null) {
return por;
}

String requestString = buildExecuteScriptRequestBody(obj);

ExecuteScriptResponseType response = client.execute(requestString);
OperationResultType res = response.getResult();
OperationResult executionResult = OperationResult.createOperationResult(res);

return validateOperationResult("recompute", executionResult, obj.getName());
}

private String buildExecuteScriptRequestBody(MidPointObject obj) throws SchemaException {
PrismContext ctx = client.getPrismContext();

ObjectFactory of = new ObjectFactory();

ExpressionPipelineType pipeline = new ExpressionPipelineType();
pipeline.setList(null);
SearchExpressionType search = new SearchExpressionType();
pipeline.getScriptingExpression().add(of.createSearch(search));

ObjectFilter filter = ctx.queryFor(obj.getType().getClassDefinition())
.id(obj.getOid())
.buildFilter();
SearchFilterType searchFilter = ctx.getQueryConverter().createSearchFilterType(filter);

search.setType(obj.getType().getTypeQName());
search.setSearchFilter(searchFilter);

ActionExpressionType action = new ActionExpressionType();
pipeline.getScriptingExpression().add(of.createAction(action));
action.setType("recompute");

return client.serialize(of.createPipeline(pipeline));
return validateOperationResult("recompute", recomputeResult, obj.getName());
}
}

0 comments on commit 5248fa9

Please sign in to comment.