diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProvisioningStatisticsLineDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProvisioningStatisticsLineDto.java
index a5d633f5dc2..f8306359b52 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProvisioningStatisticsLineDto.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProvisioningStatisticsLineDto.java
@@ -38,8 +38,8 @@ public class ProvisioningStatisticsLineDto {
public static final String F_RESOURCE = "resource";
public static final String F_OBJECT_CLASS = "objectClass";
- public static final String F_GET_SUCCESS = "searchSuccess";
- public static final String F_GET_FAILURE = "searchFailure";
+ public static final String F_GET_SUCCESS = "getSuccess";
+ public static final String F_GET_FAILURE = "getFailure";
public static final String F_SEARCH_SUCCESS = "searchSuccess";
public static final String F_SEARCH_FAILURE = "searchFailure";
public static final String F_CREATE_SUCCESS = "createSuccess";
@@ -54,6 +54,7 @@ public class ProvisioningStatisticsLineDto {
public static final String F_SCRIPT_FAILURE = "scriptFailure";
public static final String F_OTHER_SUCCESS = "otherSuccess";
public static final String F_OTHER_FAILURE = "otherFailure";
+ public static final String F_TOTAL_OPERATIONS_COUNT = "totalOperationsCount";
public static final String F_AVERAGE_TIME = "averageTime";
public static final String F_MIN_TIME = "minTime";
public static final String F_MAX_TIME = "maxTime";
@@ -184,10 +185,14 @@ public int getOtherFailure() {
return otherFailure;
}
- public Long getAverageTime() {
- int totalCount = getSuccess + getFailure + searchSuccess + searchFailure +
+ public int getTotalOperationsCount() {
+ return getSuccess + getFailure + searchSuccess + searchFailure +
createSuccess + createFailure + updateSuccess + updateFailure + deleteSuccess + deleteFailure +
syncSuccess + syncFailure + scriptSuccess + scriptFailure + otherSuccess + otherFailure;
+ }
+
+ public Long getAverageTime() {
+ int totalCount = getTotalOperationsCount();
if (totalCount > 0) {
return totalTime / totalCount;
} else {
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDtoModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDtoModel.java
index 060ca70289e..f83f1c2fcb5 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDtoModel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsDtoModel.java
@@ -115,14 +115,13 @@ public StatisticsDto getObjectInternal() {
}
protected StatisticsDto getStatisticsFromTask(Task task) {
- OperationalInformation operationalInformation = task.getOperationalInformation();
+ OperationalInformationType operationalInformation = task.collectOperationalInformation();
if (operationalInformation == null) {
LOGGER.warn("No operational information in task");
return null;
}
- OperationalInformationType infoType = operationalInformation.getAggregatedValue();
- infoType.setFromMemory(true);
- StatisticsDto dto = new StatisticsDto(infoType);
+ operationalInformation.setFromMemory(true);
+ StatisticsDto dto = new StatisticsDto(operationalInformation);
return dto;
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.html
index c4bb9f81d7f..03e8294c34e 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.html
@@ -40,6 +40,7 @@
|
|
|
+ |
|
|
|
@@ -64,6 +65,7 @@
|
|
|
+ |
|
|
|
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.java
index a83e137f916..38a5467af81 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.java
@@ -60,6 +60,7 @@ public class StatisticsPanel extends SimplePanel {
private static final String ID_PROVISIONING_SCRIPT_FAILURE = "Provisioning.ScriptFailure";
private static final String ID_PROVISIONING_OTHER_SUCCESS = "Provisioning.OtherSuccess";
private static final String ID_PROVISIONING_OTHER_FAILURE = "Provisioning.OtherFailure";
+ private static final String ID_PROVISIONING_TOTAL_OPERATIONS_COUNT = "Provisioning.TotalOperationsCount";
private static final String ID_PROVISIONING_AVERAGE_TIME = "Provisioning.AverageTime";
private static final String ID_PROVISIONING_MIN_TIME = "Provisioning.MinTime";
private static final String ID_PROVISIONING_MAX_TIME = "Provisioning.MaxTime";
@@ -121,6 +122,7 @@ protected void populateItem(final ListItem item)
item.add(new Label(ID_PROVISIONING_SCRIPT_FAILURE, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_SCRIPT_FAILURE)));
item.add(new Label(ID_PROVISIONING_OTHER_SUCCESS, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_OTHER_SUCCESS)));
item.add(new Label(ID_PROVISIONING_OTHER_FAILURE, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_OTHER_FAILURE)));
+ item.add(new Label(ID_PROVISIONING_TOTAL_OPERATIONS_COUNT, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_TOTAL_OPERATIONS_COUNT)));
item.add(new Label(ID_PROVISIONING_AVERAGE_TIME, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_AVERAGE_TIME)));
item.add(new Label(ID_PROVISIONING_MIN_TIME, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_MIN_TIME)));
item.add(new Label(ID_PROVISIONING_MAX_TIME, new PropertyModel(item.getModel(), ProvisioningStatisticsLineDto.F_MAX_TIME)));
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.properties b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.properties
index 46c3c97f743..47bde790536 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.properties
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/StatisticsPanel.properties
@@ -19,8 +19,8 @@ Title.MappingsStatistics=Mappings evaluation information
Title.NotificationsStatistics=Notifications information
Title.CurrentStatus=Last status message
Title.Source=Source:
-Message.SourceRepository=repository (updated on {0})
-Message.SourceMemory=task in memory (updated on {0})
+Message.SourceRepository=repository (statistics updated on {0})
+Message.SourceMemory=task in memory (fetched {0})
ProvisioningStatistics.Resource=Resource
ProvisioningStatistics.ObjectClass=Object class
@@ -40,6 +40,7 @@ ProvisioningStatistics.ScriptSuccess=Script OK
ProvisioningStatistics.ScriptFailure=Fail
ProvisioningStatistics.OtherSuccess=Script OK
ProvisioningStatistics.OtherFailure=Fail
+ProvisioningStatistics.TotalOperationsCount=All operations
ProvisioningStatistics.AverageTime=Avg time
ProvisioningStatistics.MinTime=Min
ProvisioningStatistics.MaxTime=Max
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/home/PageMyPasswordQuestions.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/home/PageMyPasswordQuestions.java
index 461831b9b0b..61321230060 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/home/PageMyPasswordQuestions.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/home/PageMyPasswordQuestions.java
@@ -1,55 +1,34 @@
package com.evolveum.midpoint.web.page.admin.home;
-import java.net.URLDecoder;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.NullArgumentException;
-import org.apache.velocity.app.event.implement.EscapeJavaScriptReference;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.form.validation.IFormValidator;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.encoding.UrlDecoder;
-import org.apache.wicket.util.string.StringValue;
-import org.aspectj.util.LangUtil.ProcessController.Thrown;
-import org.eclipse.core.internal.runtime.PrintStackUtil;
-import ch.qos.logback.classic.Logger;
-
-import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.PrismObject;
-import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.crypto.EncryptionException;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
-import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.schema.SchemaRegistry;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.RetrieveOption;
-import com.evolveum.midpoint.schema.SchemaConstantsGenerated;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
-import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
-import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
@@ -59,28 +38,16 @@
import com.evolveum.midpoint.web.component.util.ObjectWrapperUtil;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.home.component.MyPasswordQuestionsPanel;
-import com.evolveum.midpoint.web.page.admin.home.dto.MyPasswordsDto;
-import com.evolveum.midpoint.web.page.admin.home.dto.PasswordAccountDto;
import com.evolveum.midpoint.web.page.admin.home.dto.PasswordQuestionsDto;
import com.evolveum.midpoint.web.page.admin.home.dto.SecurityQuestionAnswerDTO;
-import com.evolveum.midpoint.web.page.admin.users.PageUsers;
-import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.security.SecurityUtils;
-import com.evolveum.midpoint.web.security.WebApplicationConfiguration;
-import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionAnswerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsCredentialsType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
@@ -223,7 +190,7 @@ public void initLayout(){
// SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), null,
//task, result);
- CredentialsPolicyType credPolicy=getModelInteractionService().getCredentialsPolicy(null, result);
+ CredentialsPolicyType credPolicy=getModelInteractionService().getCredentialsPolicy(null, null, result);
// PrismObject securityPolicy = getModelService().getObject(SecurityPolicyType.class,config.asObjectable().getGlobalSecurityPolicyRef().getOid(), null, task, subResult);
//Global Policy set question numbers
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskEdit.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskEdit.java
index 5cc6c443bdf..8b61a1d8571 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskEdit.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/PageTaskEdit.java
@@ -257,9 +257,6 @@ private TaskDto loadTask() {
private TaskDto prepareTaskDto(TaskType task, OperationResult result) throws SchemaException, ObjectNotFoundException {
TaskDto taskDto = new TaskDto(task, getModelService(), getTaskService(), getModelInteractionService(),
getTaskManager(), TaskDtoProviderOptions.fullOptions(), result, this);
- for (TaskType child : task.getSubtask()) {
- taskDto.addChildTaskDto(prepareTaskDto(child, result));
- }
return taskDto;
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDto.java
index cf2d69239c5..d9bfe8194f3 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDto.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDto.java
@@ -32,15 +32,23 @@ public class TaskCurrentStateDto {
private TaskDto taskDto;
private SynchronizationInformationType synchronizationInformationType;
private IterativeTaskInformationType iterativeTaskInformationType;
+ private Long currentProgress;
public TaskCurrentStateDto(TaskDto taskDto) {
this.taskDto = taskDto;
}
- public TaskCurrentStateDto(TaskDto taskDto, SynchronizationInformationType sit, IterativeTaskInformationType itit) {
+ public TaskCurrentStateDto(TaskDto taskDto, SynchronizationInformationType sit, IterativeTaskInformationType itit, Long currentProgress) {
this.taskDto = taskDto;
this.synchronizationInformationType = sit;
this.iterativeTaskInformationType = itit;
+ if (currentProgress != null) {
+ this.currentProgress = currentProgress;
+ } else {
+ if (taskDto != null) {
+ this.currentProgress = taskDto.getProgress();
+ }
+ }
}
public TaskDto getTaskDto() {
@@ -54,4 +62,8 @@ public SynchronizationInformationType getSynchronizationInformationType() {
public IterativeTaskInformationType getIterativeTaskInformationType() {
return iterativeTaskInformationType;
}
+
+ public Long getCurrentProgress() {
+ return currentProgress;
+ }
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDtoModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDtoModel.java
index 41d78c2a1e8..547228ca4c4 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDtoModel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskCurrentStateDtoModel.java
@@ -18,6 +18,8 @@
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismObject;
+import com.evolveum.midpoint.schema.GetOperationOptions;
+import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.statistics.IterativeTaskInformation;
@@ -48,6 +50,7 @@
import org.apache.wicket.model.IModel;
import java.io.IOException;
+import java.util.Collection;
/**
* @author Pavol Mederly
@@ -117,27 +120,21 @@ protected TaskCurrentStateDto getObjectInternal() {
} else {
LOGGER.info("No IterativeTaskInformationType in task extension.");
}
- return new TaskCurrentStateDto(taskModel.getObject(), infoPropertyValue, ititPropertyValue);
+ return new TaskCurrentStateDto(taskModel.getObject(), infoPropertyValue, ititPropertyValue, null);
}
- SynchronizationInformation info = task.getSynchronizationInformation();
- SynchronizationInformationType sit;
- if (info != null) {
- sit = info.getAggregatedValue();
+ SynchronizationInformationType sit = task.collectSynchronizationInformation();
+ if (sit != null) {
sit.setFromMemory(true);
} else {
- sit = null;
LOGGER.warn("No synchronization information in task");
}
- IterativeTaskInformation iter = task.getIterativeTaskInformation();
- IterativeTaskInformationType itit;
- if (iter != null) {
- itit = iter.getAggregatedValue();
+ IterativeTaskInformationType itit = task.collectIterativeTaskInformation();;
+ if (itit != null) {
itit.setFromMemory(true);
} else {
- itit = null;
LOGGER.warn("No synchronization information in task");
}
- return new TaskCurrentStateDto(taskModel.getObject(), sit, itit);
+ return new TaskCurrentStateDto(taskModel.getObject(), sit, itit, task.getProgress());
}
public void refresh(PageBase page) {
@@ -145,6 +142,7 @@ public void refresh(PageBase page) {
if (taskModel == null || taskModel.getObject() == null) {
LOGGER.warn("Null or empty taskModel");
+ return;
}
TaskManager taskManager = page.getTaskManager();
OperationResult result = new OperationResult("refresh");
@@ -153,7 +151,8 @@ public void refresh(PageBase page) {
String oid = taskModel.getObject().getOid();
try {
LOGGER.info("Refreshing task {}", taskModel.getObject());
- PrismObject task = page.getModelService().getObject(TaskType.class, oid, null, operationTask, result);
+ Collection> options = GetOperationOptions.createRetrieveAttributesOptions(TaskType.F_SUBTASK, TaskType.F_NODE_AS_OBSERVED);
+ PrismObject task = page.getModelService().getObject(TaskType.class, oid, options, operationTask, result);
TaskDto taskDto = new TaskDto(task.asObjectable(), page.getModelService(), page.getTaskService(),
page.getModelInteractionService(), taskManager, TaskDtoProviderOptions.minimalOptions(), result, page);
taskModel.setObject(taskDto);
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.html
index 2dfeda05894..e0352a26b4e 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.html
@@ -71,6 +71,9 @@
+
+
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.java
index 9725096561f..68443725ff2 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.java
@@ -22,12 +22,16 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.TablePanel;
+import com.evolveum.midpoint.web.component.data.column.EnumPropertyColumn;
+import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.progress.StatisticsDtoModel;
import com.evolveum.midpoint.web.component.progress.StatisticsPanel;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.SimplePanel;
+import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.server.PageTaskEdit;
+import com.evolveum.midpoint.web.page.admin.server.PageTasks;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskDto;
import com.evolveum.midpoint.web.page.admin.server.dto.TaskDtoExecutionStatus;
import com.evolveum.midpoint.web.util.WebMiscUtil;
@@ -35,19 +39,24 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.SynchronizationInformationType;
import org.apache.commons.lang.time.DurationFormatUtils;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.ResourceModel;
+import javax.xml.datatype.XMLGregorianCalendar;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
+import static com.evolveum.midpoint.web.page.PageTemplate.createStringResourceStatic;
+
/**
* @author mederly
*/
@@ -80,7 +89,12 @@ public class TaskStatePanel extends SimplePanel {
private static final String ID_SYNCHRONIZATION_INFORMATION_PANEL = "synchronizationInformationPanel";
private static final String ID_STATISTICS_PANEL = "statisticsPanel";
+ private static final String ID_WORKER_THREADS_TABLE = "workerThreadsTable";
+ private static final String ID_WORKER_THREADS_TABLE_LABEL = "workerThreadsTableLabel";
+
private static final String ID_OPERATION_RESULT = "operationResult";
+
+ // ugly hack - TODO replace with something serious
private static final Collection WALL_CLOCK_AVG_CATEGORIES = Arrays.asList(
TaskCategory.BULK_ACTIONS, TaskCategory.IMPORTING_ACCOUNTS, TaskCategory.RECOMPUTATION, TaskCategory.RECONCILIATION
);
@@ -97,7 +111,7 @@ protected void initLayout() {
Label updated = new Label(ID_UPDATED, new AbstractReadOnlyModel() {
@Override
public String getObject() {
- return WebMiscUtil.formatDate(new Date());
+ return formatDate(new Date());
}
});
add(updated);
@@ -136,11 +150,11 @@ public String getObject() {
return null;
}
if (TaskDtoExecutionStatus.RUNNING.equals(dto.getExecution()) || finished == null || finished < started) {
- return getString("TaskStatePanel.message.executionTime.notFinished", WebMiscUtil.formatDate(new Date(started)),
+ return getString("TaskStatePanel.message.executionTime.notFinished", formatDate(new Date(started)),
DurationFormatUtils.formatDurationHMS(System.currentTimeMillis() - started));
} else {
return getString("TaskStatePanel.message.executionTime.finished",
- WebMiscUtil.formatDate(new Date(started)), WebMiscUtil.formatDate(new Date(finished)),
+ formatDate(new Date(started)), formatDate(new Date(finished)),
DurationFormatUtils.formatDurationHMS(finished - started));
}
}
@@ -150,8 +164,13 @@ public String getObject() {
Label progress = new Label(ID_PROGRESS, new AbstractReadOnlyModel() {
@Override
public String getObject() {
- TaskDto dto = getModel().getObject().getTaskDto();
- return dto.getProgressDescription(); // TODO implement using live task + implement stalled since
+ TaskCurrentStateDto dto = getModelObject();
+ TaskDto taskDto = dto.getTaskDto();
+ if (taskDto == null) {
+ return null;
+ } else {
+ return taskDto.getProgressDescription(dto.getCurrentProgress()); // TODO implement stalled since
+ }
}
});
add(progress);
@@ -233,11 +252,17 @@ public String getObject() {
if (info.getLastSuccessEndTimestamp() == null) {
return null;
} else {
- return getString("TaskStatePanel.message.timeInfoWithDuration",
- WebMiscUtil.formatDate(info.getLastSuccessEndTimestamp()),
- DurationFormatUtils.formatDurationWords(System.currentTimeMillis() -
- XmlTypeConverter.toMillis(info.getLastSuccessEndTimestamp()), true, true),
- info.getLastSuccessDuration());
+ if (showAgo(dto)) {
+ return getString("TaskStatePanel.message.timeInfoWithDurationAndAgo",
+ formatDate(info.getLastSuccessEndTimestamp()),
+ DurationFormatUtils.formatDurationWords(System.currentTimeMillis() -
+ XmlTypeConverter.toMillis(info.getLastSuccessEndTimestamp()), true, true),
+ info.getLastSuccessDuration());
+ } else {
+ return getString("TaskStatePanel.message.timeInfoWithDuration",
+ formatDate(info.getLastSuccessEndTimestamp()),
+ info.getLastSuccessDuration());
+ }
}
}
});
@@ -321,11 +346,17 @@ public String getObject() {
if (info.getLastFailureEndTimestamp() == null) {
return null;
} else {
- return getString("TaskStatePanel.message.timeInfoWithDuration",
- WebMiscUtil.formatDate(info.getLastFailureEndTimestamp()),
- DurationFormatUtils.formatDurationWords(System.currentTimeMillis() -
- XmlTypeConverter.toMillis(info.getLastFailureEndTimestamp()), true, true),
- info.getLastFailureDuration());
+ if (showAgo(dto)) {
+ return getString("TaskStatePanel.message.timeInfoWithDurationAndAgo",
+ formatDate(info.getLastFailureEndTimestamp()),
+ DurationFormatUtils.formatDurationWords(System.currentTimeMillis() -
+ XmlTypeConverter.toMillis(info.getLastFailureEndTimestamp()), true, true),
+ info.getLastFailureDuration());
+ } else {
+ return getString("TaskStatePanel.message.timeInfoWithDuration",
+ formatDate(info.getLastFailureEndTimestamp()),
+ info.getLastFailureDuration());
+ }
}
}
});
@@ -377,8 +408,8 @@ public String getObject() {
if (info.getCurrentObjectStartTimestamp() == null) {
return null;
} else {
- return getString("TaskStatePanel.message.timeInfo",
- WebMiscUtil.formatDate(info.getCurrentObjectStartTimestamp()),
+ return getString("TaskStatePanel.message.timeInfoWithAgo",
+ formatDate(info.getCurrentObjectStartTimestamp()),
DurationFormatUtils.formatDurationWords(System.currentTimeMillis() -
XmlTypeConverter.toMillis(info.getCurrentObjectStartTimestamp()), true, true));
}
@@ -425,6 +456,13 @@ public SynchronizationInformationDto getObject() {
return new SynchronizationInformationDto(dto.getSynchronizationInformationType());
}
});
+ synchronizationInformationPanel.add(new VisibleEnableBehaviour() {
+ @Override
+ public boolean isVisible() {
+ TaskCurrentStateDto dto = getModelObject();
+ return dto != null && dto.getSynchronizationInformationType() != null;
+ }
+ });
add(synchronizationInformationPanel);
Label countersSource = new Label(ID_COUNTERS_SOURCE, new AbstractReadOnlyModel() {
@@ -434,16 +472,16 @@ public String getObject() {
if (dto == null) {
return null;
}
- SynchronizationInformationType info = dto.getSynchronizationInformationType();
+ IterativeTaskInformationType info = dto.getIterativeTaskInformationType();
if (info == null) {
return null;
}
if (Boolean.TRUE.equals(info.isFromMemory())) {
return getString("TaskStatePanel.message.countersSourceMemory",
- WebMiscUtil.formatDate(info.getTimestamp()));
+ formatDate(info.getTimestamp()));
} else {
return getString("TaskStatePanel.message.countersSourceRepository",
- WebMiscUtil.formatDate(info.getTimestamp()));
+ formatDate(info.getTimestamp()));
}
}
});
@@ -458,6 +496,39 @@ public TaskDto getObject() {
StatisticsPanel statisticsPanel = new StatisticsPanel(ID_STATISTICS_PANEL, statisticsDtoModel);
add(statisticsPanel);
+ VisibleEnableBehaviour hiddenWhenNoSubtasks = new VisibleEnableBehaviour() {
+ @Override
+ public boolean isVisible() {
+ TaskDto taskDto = getModelObject().getTaskDto();
+ return taskDto != null && !taskDto.getTransientSubtasks().isEmpty();
+ }
+ };
+
+ Label workerThreadsTableLabel = new Label(ID_WORKER_THREADS_TABLE_LABEL, new ResourceModel("TaskStatePanel.workerThreads"));
+ workerThreadsTableLabel.add(hiddenWhenNoSubtasks);
+ add(workerThreadsTableLabel);
+ List> columns = new ArrayList<>();
+ columns.add(new PropertyColumn(createStringResourceStatic(this, "TaskStatePanel.subtaskName"), WorkerThreadDto.F_NAME));
+ columns.add(new EnumPropertyColumn(createStringResourceStatic(this, "TaskStatePanel.subtaskState"), WorkerThreadDto.F_EXECUTION_STATUS));
+ columns.add(new PropertyColumn(createStringResourceStatic(this, "TaskStatePanel.subtaskObjectsProcessed"), WorkerThreadDto.F_PROGRESS));
+ ISortableDataProvider threadsProvider = new ListDataProvider<>(this,
+ new AbstractReadOnlyModel>() {
+ @Override
+ public List getObject() {
+ List rv = new ArrayList<>();
+ TaskDto taskDto = getModelObject().getTaskDto();
+ if (taskDto != null) {
+ for (TaskDto subtaskDto : taskDto.getTransientSubtasks()) {
+ rv.add(new WorkerThreadDto(subtaskDto));
+ }
+ }
+ return rv;
+ }
+ });
+ TablePanel workerThreadsTablePanel = new TablePanel<>(ID_WORKER_THREADS_TABLE, threadsProvider , columns);
+ workerThreadsTablePanel.add(hiddenWhenNoSubtasks);
+ add(workerThreadsTablePanel);
+
SortableDataProvider provider = new ListDataProvider<>(this,
new PropertyModel>(getModel(), "taskDto.opResult"));
TablePanel result = new TablePanel<>(ID_OPERATION_RESULT, provider, initResultColumns());
@@ -467,6 +538,32 @@ public TaskDto getObject() {
add(result);
}
+ private String formatDate(XMLGregorianCalendar date) {
+ return formatDate(XmlTypeConverter.toDate(date));
+ }
+
+ private String formatDate(Date date) {
+ if (date == null) {
+ return null;
+ }
+ return date.toLocaleString();
+ }
+
+ protected boolean showAgo(TaskCurrentStateDto dto) {
+ boolean showAgo = false;
+ TaskDto taskDto = dto.getTaskDto();
+ if (taskDto != null) {
+ Long started = taskDto.getLastRunStartTimestampLong();
+ Long finished = taskDto.getLastRunFinishTimestampLong();
+ if (started != null && (finished == null || finished < started)) {
+ showAgo = true; // for all running tasks
+ } else if (finished != null && (System.currentTimeMillis()-finished < 60000L)) {
+ showAgo = true; // for tasks finished just a while ago
+ }
+ }
+ return showAgo;
+ }
+
private Long getWallClockAverage(TaskCurrentStateDto dto, int objectsTotal) {
if (objectsTotal == 0) {
return null;
@@ -500,6 +597,7 @@ public void refreshModel(PageTaskEdit page) {
IModel model = getModel();
if (!(model instanceof TaskCurrentStateDtoModel)) {
LOGGER.warn("Unexpected or null model for TaskCurrentStateDto object: {}", model);
+ return;
}
((TaskCurrentStateDtoModel) model).refresh(page);
if (statisticsDtoModel != null) {
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.properties b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.properties
index 442bf1aaa37..8cf2ecdae69 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.properties
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/TaskStatePanel.properties
@@ -16,8 +16,8 @@
TaskStatePanel.updated=Updated:
TaskStatePanel.countersSource=Source:
-TaskStatePanel.message.countersSourceRepository=repository (updated on {0})
-TaskStatePanel.message.countersSourceMemory=task in memory (updated on {0})
+TaskStatePanel.message.countersSourceRepository=repository (statistics updated on {0})
+TaskStatePanel.message.countersSourceMemory=task in memory (fetched {0})
TaskStatePanel.executionStatus=Execution status
TaskStatePanel.executionTime=Execution time
@@ -32,14 +32,20 @@ TaskStatePanel.message.objectsProcessed={0}
TaskStatePanel.message.objectsProcessedTime=(average time {1} ms, total processing time {0} seconds)
TaskStatePanel.lastObjectProcessedSuccess=Last object successfully processed
TaskStatePanel.message.lastObjectProcessed={0}
-TaskStatePanel.message.timeInfoWithDuration={0} ({1} ago - in {2} ms)
-TaskStatePanel.message.timeInfo={0} ({1} ago)
+TaskStatePanel.message.timeInfoWithDurationAndAgo={0} ({1} ago - in {2} ms)
+TaskStatePanel.message.timeInfoWithDuration={0} (in {1} ms)
+TaskStatePanel.message.timeInfoWithAgo={0} ({1} ago)
TaskStatePanel.objectsProcessedFailure=Objects failed to be processed
TaskStatePanel.lastObjectProcessedFailure=Last object failed to be processed
TaskStatePanel.lastError=Last error when processing object
TaskStatePanel.currentObjectProcessed=Current object being processed
TaskStatePanel.objectsTotal=Total objects processed
+TaskStatePanel.workerThreads=Lightweight subtasks (worker threads)
+TaskStatePanel.subtaskName=Name
+TaskStatePanel.subtaskState=State
+TaskStatePanel.subtaskObjectsProcessed=Objects processed
+
TaskStatePanel.statistics=Operational statistics
TaskStatePanel.opResult=Operation result
\ No newline at end of file
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/WorkerThreadDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/WorkerThreadDto.java
new file mode 100644
index 00000000000..4e0c164bd6c
--- /dev/null
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/currentState/WorkerThreadDto.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010-2015 Evolveum
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.evolveum.midpoint.web.page.admin.server.currentState;
+
+import com.evolveum.midpoint.web.page.admin.server.dto.TaskDto;
+import com.evolveum.midpoint.web.page.admin.server.dto.TaskDtoExecutionStatus;
+
+import java.io.Serializable;
+
+/**
+ * @author Pavol Mederly
+ */
+public class WorkerThreadDto implements Serializable {
+
+ public static final String F_NAME = "name";
+ public static final String F_EXECUTION_STATUS = "executionStatus";
+ public static final String F_PROGRESS = "progress";
+
+ private final TaskDto subtaskDto;
+
+ public WorkerThreadDto(TaskDto subtaskDto) {
+ this.subtaskDto = subtaskDto;
+ }
+
+ public String getName() {
+ return subtaskDto != null ? subtaskDto.getName() : null;
+ }
+
+ public Long getProgress() {
+ return subtaskDto != null ? subtaskDto.getProgress() : null;
+ }
+
+ public TaskDtoExecutionStatus getExecutionStatus() {
+ return subtaskDto != null ? subtaskDto.getExecution() : null;
+ }
+}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDto.java
index 914f7db9240..3d8c22a6a0c 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDto.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/dto/TaskDto.java
@@ -116,7 +116,8 @@ public class TaskDto extends Selectable {
private ObjectTypes objectRefType;
private String objectRefName;
- private List subtasks = new ArrayList();
+ private List subtasks = new ArrayList<>(); // only persistent subtasks are here
+ private List transientSubtasks = new ArrayList<>(); // transient ones are here
private Long lastRunStartTimestampLong;
private Long lastRunFinishTimestampLong;
@@ -171,6 +172,11 @@ public TaskDto(TaskType taskType, ModelService modelService, TaskService taskSer
//dryRun, intent, kind, objectCLass, workerThreads
fillFromExtension(taskType);
+
+ for (TaskType child : taskType.getSubtask()) {
+ addChildTaskDto(new TaskDto(child, modelService, taskService, modelInteractionService, taskManager,
+ options, parentResult, pageBase));
+ }
}
private void fillInResourceReference(TaskType task, TaskManager manager, OperationResult result, ModelService service, PageBase pageBase){
@@ -527,17 +533,21 @@ public Long getExpectedTotal() {
}
public String getProgressDescription() {
- if (taskType.getProgress() == null && taskType.getExpectedTotal() == null) {
+ return getProgressDescription(taskType.getProgress());
+ }
+
+ public String getProgressDescription(Long currentProgress) {
+ if (currentProgress == null && taskType.getExpectedTotal() == null) {
return ""; // the task handler probably does not report progress at all
} else {
StringBuilder sb = new StringBuilder();
- if (taskType.getProgress() != null){
- sb.append(taskType.getProgress());
+ if (currentProgress != null){
+ sb.append(currentProgress);
} else {
sb.append("0");
}
if (taskType.getExpectedTotal() != null) {
- sb.append("/" + taskType.getExpectedTotal());
+ sb.append("/").append(taskType.getExpectedTotal());
}
return sb.toString();
}
@@ -689,13 +699,21 @@ public ModelOperationStatusDto getModelOperationStatus() {
}
public void addChildTaskDto(TaskDto taskDto) {
- subtasks.add(taskDto);
+ if (taskDto.getOid() != null) {
+ subtasks.add(taskDto);
+ } else {
+ transientSubtasks.add(taskDto);
+ }
}
public List getSubtasks() {
return subtasks;
}
+ public List getTransientSubtasks() {
+ return transientSubtasks;
+ }
+
public boolean isWorkflowShadowTask() {
return workflowShadowTask;
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java
index f3bd3dd1eca..f89c05ba70c 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/PageUser.java
@@ -1485,7 +1485,7 @@ private void recomputeAssignmentsPerformed(AjaxRequestTarget target){
}
// all resources
- DeltaSetTriple evaluatedConstructionsTriple = evaluatedAssignment.getEvaluatedConstructions(result);
+ DeltaSetTriple evaluatedConstructionsTriple = evaluatedAssignment.getEvaluatedConstructions(task, result);
Collection evaluatedConstructions = evaluatedConstructionsTriple.getNonNegativeValues();
for (EvaluatedConstruction construction : evaluatedConstructions) {
assignmentDtoSet.add(createAssignmentsPreviewDto(construction));
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/forgetpassword/PageSecurityQuestions.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/forgetpassword/PageSecurityQuestions.java
index e73a97570c5..91fcd46ced3 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/forgetpassword/PageSecurityQuestions.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/forgetpassword/PageSecurityQuestions.java
@@ -17,7 +17,6 @@
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
@@ -85,7 +84,6 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionAnswerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionDefinitionType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsCredentialsPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityQuestionsCredentialsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
@@ -561,13 +559,13 @@ private void resetPassword(UserType user, AjaxRequestTarget target) {
try {
// System.out.println("try");
- if (getModelInteractionService().getCredentialsPolicy(null, parentResult)
+ if (getModelInteractionService().getCredentialsPolicy(null, null, parentResult)
.getSecurityQuestions().getResetMethod().getResetType()
.equals(CredentialsResetTypeType.SECURITY_QUESTIONS)) {
// System.out.println("ifff");
getSession().setAttribute("pwdReset", newPassword);
setResponsePage(PageShowPassword.class);
- } else if (getModelInteractionService().getCredentialsPolicy(null, parentResult)
+ } else if (getModelInteractionService().getCredentialsPolicy(null, null, parentResult)
.getSecurityQuestions().getResetMethod().getResetType()
.equals(CredentialsResetTypeType.SECURITY_QUESTIONS_EMAIL)) {
// System.out.println("ifff2");
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java
index e8f9b4367fd..c6c02caff71 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/login/PageLogin.java
@@ -80,7 +80,7 @@ protected void onSubmit() {
OperationResult parentResult = new OperationResult(OPERATION_LOAD_RESET_PASSWORD_POLICY);
try {
- CredentialsPolicyType creds= getModelInteractionService().getCredentialsPolicy(null, parentResult);
+ CredentialsPolicyType creds= getModelInteractionService().getCredentialsPolicy(null, (Task) null, parentResult);
BookmarkablePageLink link = new BookmarkablePageLink("forgetpassword", PageForgetPassword.class);
boolean linkIsVisible=false;
if(creds!=null ){
diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/IterativeTaskInformation.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/IterativeTaskInformation.java
index 4c677d11803..56d27edb49e 100644
--- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/IterativeTaskInformation.java
+++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/IterativeTaskInformation.java
@@ -20,6 +20,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.IterativeTaskInformationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SynchronizationInformationType;
+import javax.xml.datatype.DatatypeConstants;
import javax.xml.namespace.QName;
import java.util.Date;
@@ -86,8 +87,8 @@ private IterativeTaskInformationType aggregate(IterativeTaskInformationType star
return delta;
}
IterativeTaskInformationType rv = new IterativeTaskInformationType();
- addTo(rv, startValue);
- addTo(rv, delta);
+ addTo(rv, startValue, true);
+ addTo(rv, delta, true);
return rv;
}
@@ -162,8 +163,11 @@ public void toJaxb(IterativeTaskInformationType rv) {
}
// sum != null, delta != null
- public static void addTo(IterativeTaskInformationType sum, IterativeTaskInformationType delta) {
- if (delta.getLastSuccessObjectName() != null) {
+ // overrideCurrent should be TRUE if the delta is chronologically later (i.e. if delta is meant as an update to sum)
+ // if it is simply an aggregation of various (parallel) sources, overrideCurrent should be FALSE
+ public static void addTo(IterativeTaskInformationType sum, IterativeTaskInformationType delta, boolean overrideCurrent) {
+ if (sum.getLastSuccessEndTimestamp() == null || (delta.getLastSuccessEndTimestamp() != null &&
+ delta.getLastSuccessEndTimestamp().compare(sum.getLastSuccessEndTimestamp()) == DatatypeConstants.GREATER)) {
sum.setLastSuccessObjectName(delta.getLastSuccessObjectName());
sum.setLastSuccessObjectDisplayName(delta.getLastSuccessObjectDisplayName());
sum.setLastSuccessObjectType(delta.getLastSuccessObjectType());
@@ -174,7 +178,8 @@ public static void addTo(IterativeTaskInformationType sum, IterativeTaskInformat
sum.setTotalSuccessDuration(sum.getTotalSuccessDuration() + delta.getTotalSuccessDuration());
sum.setTotalSuccessCount(sum.getTotalSuccessCount() + delta.getTotalSuccessCount());
- if (delta.getLastFailureObjectName() != null) {
+ if (sum.getLastFailureEndTimestamp() == null || (delta.getLastFailureEndTimestamp() != null &&
+ delta.getLastFailureEndTimestamp().compare(sum.getLastFailureEndTimestamp()) == DatatypeConstants.GREATER)) {
sum.setLastFailureObjectName(delta.getLastFailureObjectName());
sum.setLastFailureObjectDisplayName(delta.getLastFailureObjectDisplayName());
sum.setLastFailureObjectType(delta.getLastFailureObjectType());
@@ -186,10 +191,13 @@ public static void addTo(IterativeTaskInformationType sum, IterativeTaskInformat
sum.setTotalFailureDuration(sum.getTotalFailureDuration() + delta.getTotalFailureDuration());
sum.setTotalFailureCount(sum.getTotalFailureCount() + delta.getTotalFailureCount());
- sum.setCurrentObjectName(delta.getCurrentObjectName());
- sum.setCurrentObjectDisplayName(delta.getCurrentObjectDisplayName());
- sum.setCurrentObjectType(delta.getCurrentObjectType());
- sum.setCurrentObjectOid(delta.getCurrentObjectOid());
- sum.setCurrentObjectStartTimestamp(delta.getCurrentObjectStartTimestamp());
+ if (overrideCurrent || sum.getCurrentObjectStartTimestamp() == null || (delta.getCurrentObjectStartTimestamp() != null &&
+ delta.getCurrentObjectStartTimestamp().compare(sum.getCurrentObjectStartTimestamp()) == DatatypeConstants.GREATER)) {
+ sum.setCurrentObjectName(delta.getCurrentObjectName());
+ sum.setCurrentObjectDisplayName(delta.getCurrentObjectDisplayName());
+ sum.setCurrentObjectType(delta.getCurrentObjectType());
+ sum.setCurrentObjectOid(delta.getCurrentObjectOid());
+ sum.setCurrentObjectStartTimestamp(delta.getCurrentObjectStartTimestamp());
+ }
}
}
diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/OperationalInformation.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/OperationalInformation.java
index 107a5197ea4..5a627942ce0 100644
--- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/OperationalInformation.java
+++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/OperationalInformation.java
@@ -27,6 +27,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ProvisioningStatisticsType;
import org.apache.commons.lang.StringUtils;
+import javax.xml.datatype.DatatypeConstants;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Date;
@@ -278,17 +279,19 @@ private OperationalInformationType aggregate(OperationalInformationType startVal
return rv;
}
- private void addTo(OperationalInformationType rv, OperationalInformationType delta) {
+ public static void addTo(OperationalInformationType rv, OperationalInformationType delta) {
addProvisioningTo(rv, delta.getProvisioningStatistics());
addMappingsTo(rv, delta.getMappingsStatistics());
addNotificationsTo(rv, delta.getNotificationsStatistics());
if (delta.getLastMessageTimestamp() != null) {
- rv.setLastMessageTimestamp(delta.getLastMessageTimestamp());
- rv.setLastMessage(delta.getLastMessage());
+ if (rv.getLastMessageTimestamp() == null || rv.getLastMessageTimestamp().compare(delta.getLastMessageTimestamp()) == DatatypeConstants.LESSER) {
+ rv.setLastMessageTimestamp(delta.getLastMessageTimestamp());
+ rv.setLastMessage(delta.getLastMessage());
+ }
}
}
- private void addNotificationsTo(OperationalInformationType rv, NotificationsStatisticsType delta) {
+ private static void addNotificationsTo(OperationalInformationType rv, NotificationsStatisticsType delta) {
if (delta == null) {
return;
}
@@ -330,7 +333,7 @@ private static NotificationsStatisticsEntryType findNotificationsEntryType(List<
}
- private void addMappingsTo(OperationalInformationType rv, MappingsStatisticsType delta) {
+ private static void addMappingsTo(OperationalInformationType rv, MappingsStatisticsType delta) {
if (delta == null) {
return;
}
@@ -369,7 +372,7 @@ private static MappingsStatisticsEntryType findMappingsEntryType(List String getDisplayName(PrismObject object) {
+ if (object == null) {
+ return null;
+ }
+ O objectable = object.asObjectable();
+ if (objectable instanceof UserType) {
+ return "User " + ((UserType) objectable).getFullName() + " (" + object.getName() + ")";
+ } else if (objectable instanceof RoleType) {
+ return "Role " + ((RoleType) objectable).getDisplayName() + " (" + object.getName() + ")";
+ } else if (objectable instanceof OrgType) {
+ return "Org " + ((OrgType) objectable).getDisplayName() + " (" + object.getName() + ")";
+ } else if (objectable instanceof ShadowType) {
+ return "Shadow " + getDisplayName((ShadowType) objectable);
+ } else {
+ return objectable.getClass().getSimpleName() + " " + objectable.getName();
+ }
+ }
+}
diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/SynchronizationInformation.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/SynchronizationInformation.java
index 90faf1f042a..7973b247d80 100644
--- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/SynchronizationInformation.java
+++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/statistics/SynchronizationInformation.java
@@ -75,7 +75,7 @@ private SynchronizationInformationType aggregate(SynchronizationInformationType
return rv;
}
- private static void addTo(SynchronizationInformationType sum, SynchronizationInformationType delta) {
+ public static void addTo(SynchronizationInformationType sum, SynchronizationInformationType delta) {
sum.setCountProtected(sum.getCountProtected() + delta.getCountProtected());
sum.setCountNoSynchronizationPolicy(sum.getCountNoSynchronizationPolicy() + delta.getCountNoSynchronizationPolicy());
sum.setCountSynchronizationDisabled(sum.getCountSynchronizationDisabled() + delta.getCountSynchronizationDisabled());
diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ObjectResolver.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ObjectResolver.java
index 82980d305ad..b6f94dbe18f 100644
--- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ObjectResolver.java
+++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ObjectResolver.java
@@ -50,6 +50,7 @@ public interface ObjectResolver {
*
* @param ref object reference to resolve
* @param contextDescription short description of the context of resolution, e.g. "executing expression FOO". Used in error messages.
+ * @param task
* @return resolved object
* @throws ObjectNotFoundException
* requested object does not exist
@@ -57,12 +58,14 @@ public interface ObjectResolver {
* error dealing with storage schema
* @throws IllegalArgumentException
* wrong OID format, etc.
+ *
+ * TODO resolve module dependencies to allow task to be of type Task
*/
- T resolve(ObjectReferenceType ref, Class expectedType, Collection> options,
- String contextDescription, OperationResult result)
+ T resolve(ObjectReferenceType ref, Class expectedType, Collection> options,
+ String contextDescription, Object task, OperationResult result)
throws ObjectNotFoundException, SchemaException;
- void searchIterative(Class type, ObjectQuery query, Collection> options, ResultHandler handler, OperationResult parentResult)
+ void searchIterative(Class type, ObjectQuery query, Collection> options, ResultHandler handler, Object task, OperationResult parentResult)
throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException;
}
diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ResourceTypeUtil.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ResourceTypeUtil.java
index e10c6201e45..ec41ad8a8c0 100644
--- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ResourceTypeUtil.java
+++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ResourceTypeUtil.java
@@ -15,7 +15,6 @@
*/
package com.evolveum.midpoint.schema.util;
-import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
@@ -91,7 +90,7 @@ public static ConnectorType getConnectorType(ResourceType resource, ObjectResolv
return resource.getConnector();
} else if (resource.getConnectorRef() != null) {
return resolver.resolve(resource.getConnectorRef(), ConnectorType.class,
- null, "resolving connector in " + resource, parentResult);
+ null, "resolving connector in " + resource, null, parentResult); // TODO task
} else {
return null;
}
diff --git a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/DirectoryFileObjectResolver.java b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/DirectoryFileObjectResolver.java
index 1c2ad2286de..e4bc001f820 100644
--- a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/DirectoryFileObjectResolver.java
+++ b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/DirectoryFileObjectResolver.java
@@ -16,15 +16,9 @@
package com.evolveum.midpoint.test.util;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-
-import org.opends.server.types.ObjectClass;
-
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.schema.GetOperationOptions;
@@ -32,7 +26,6 @@
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
-import com.evolveum.midpoint.util.JAXBUtil;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
@@ -57,8 +50,8 @@ public DirectoryFileObjectResolver(File directory) {
@Override
public T resolve(ObjectReferenceType ref, Class expectedType,
- Collection> options, String contextDescription,
- OperationResult result) throws ObjectNotFoundException, SchemaException {
+ Collection> options, String contextDescription,
+ Object task, OperationResult result) throws ObjectNotFoundException, SchemaException {
File file = new File( directory, oidToFilename(ref.getOid()));
if (file.exists()) {
try {
@@ -77,8 +70,8 @@ private String oidToFilename(String oid) {
@Override
public void searchIterative(Class type, ObjectQuery query,
- Collection> options, ResultHandler handler,
- OperationResult parentResult) throws SchemaException, ObjectNotFoundException,
+ Collection> options, ResultHandler handler,
+ Object task, OperationResult parentResult) throws SchemaException, ObjectNotFoundException,
CommunicationException, ConfigurationException, SecurityViolationException {
throw new UnsupportedOperationException();
}
diff --git a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertExpressionHelper.java b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertExpressionHelper.java
index 65554deaee0..8f89fb9fb8b 100644
--- a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertExpressionHelper.java
+++ b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertExpressionHelper.java
@@ -29,7 +29,6 @@
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
-import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
@@ -43,7 +42,6 @@
import javax.xml.namespace.QName;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
/**
@@ -80,7 +78,7 @@ private List evaluateExpression(Class resultClass, ExpressionType expr
QName resultName = new QName(SchemaConstants.NS_C, "result");
PrismPropertyDefinition resultDef = new PrismPropertyDefinition(resultName, xsdType, prismContext);
- Expression,PrismPropertyDefinition> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, result);
+ Expression,PrismPropertyDefinition> expression = expressionFactory.makeExpression(expressionType, resultDef, shortDesc, task, result);
ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, expressionVariables, shortDesc, task, result);
ModelExpressionThreadLocalHolder.pushCurrentResult(result);
ModelExpressionThreadLocalHolder.pushCurrentTask(task);
diff --git a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertReviewersHelper.java b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertReviewersHelper.java
index d3b80660e5b..ce14b84ed45 100644
--- a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertReviewersHelper.java
+++ b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertReviewersHelper.java
@@ -171,7 +171,7 @@ protected List getTargetObjectOwners(AccessCertificationCas
if (_case.getTargetRef() == null) {
return null;
}
- ObjectType target = objectResolver.resolve(_case.getTargetRef(), ObjectType.class, null, "resolving cert case target", result);
+ ObjectType target = objectResolver.resolve(_case.getTargetRef(), ObjectType.class, null, "resolving cert case target", task, result);
if (target instanceof AbstractRoleType) {
ObjectReferenceType ownerRef = ((AbstractRoleType) target).getOwnerRef();
if (ownerRef != null) {
@@ -190,7 +190,7 @@ protected List getObjectOwners(AccessCertificationCaseType
if (_case.getObjectRef() == null) {
return null;
}
- ObjectType object = objectResolver.resolve(_case.getObjectRef(), ObjectType.class, null, "resolving cert case object", result);
+ ObjectType object = objectResolver.resolve(_case.getObjectRef(), ObjectType.class, null, "resolving cert case object", task, result);
if (object instanceof AbstractRoleType) {
ObjectReferenceType ownerRef = ((AbstractRoleType) object).getOwnerRef();
if (ownerRef != null) {
@@ -207,7 +207,7 @@ private Collection getTargetObjectApprovers(AccessCertifica
if (_case.getTargetRef() == null) {
return null;
}
- ObjectType target = objectResolver.resolve(_case.getTargetRef(), ObjectType.class, null, "resolving cert case target", result);
+ ObjectType target = objectResolver.resolve(_case.getTargetRef(), ObjectType.class, null, "resolving cert case target", task, result);
if (target instanceof AbstractRoleType) {
return ((AbstractRoleType) target).getApproverRef();
} else if (target instanceof ResourceType) {
@@ -221,7 +221,7 @@ private Collection getObjectApprovers(AccessCertificationCa
if (_case.getObjectRef() == null) {
return null;
}
- ObjectType object = objectResolver.resolve(_case.getObjectRef(), ObjectType.class, null, "resolving cert case object", result);
+ ObjectType object = objectResolver.resolve(_case.getObjectRef(), ObjectType.class, null, "resolving cert case object", task, result);
if (object instanceof AbstractRoleType) {
return ((AbstractRoleType) object).getApproverRef();
} else {
diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java
index 7206ad1ce07..77e1c5f96a6 100644
--- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java
+++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelInteractionService.java
@@ -136,10 +136,10 @@ ModelContext previewChanges(
* security questions, etc).
*
* @param user user for who the policy should apply
- * @param parentResult
- * @return applicable credentials policy or null
+ * @param task
+ *@param parentResult @return applicable credentials policy or null
* @throws ObjectNotFoundException No system configuration or other major system inconsistency
* @throws SchemaException Wrong schema or content of security policy
*/
- CredentialsPolicyType getCredentialsPolicy(PrismObject user, OperationResult parentResult) throws ObjectNotFoundException, SchemaException;
+ CredentialsPolicyType getCredentialsPolicy(PrismObject user, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException;
}
diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java
index ebbb730ec62..943e7d8d070 100644
--- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java
+++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java
@@ -6,6 +6,7 @@
import com.evolveum.midpoint.prism.delta.DeltaSetTriple;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.Authorization;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
@@ -20,7 +21,7 @@ public interface EvaluatedAssignment extends DebugDumpable
DeltaSetTriple extends EvaluatedAbstractRole> getRoles();
- DeltaSetTriple getEvaluatedConstructions(OperationResult result) throws SchemaException, ObjectNotFoundException;
+ DeltaSetTriple getEvaluatedConstructions(Task task, OperationResult result) throws SchemaException, ObjectNotFoundException;
PrismObject> getTarget();
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/Expression.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/Expression.java
index b2efbb8369f..27da3ad283f 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/Expression.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/Expression.java
@@ -17,32 +17,24 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
-import com.evolveum.midpoint.util.QNameUtil;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import org.apache.commons.lang.Validate;
import org.w3c.dom.Element;
-import com.evolveum.midpoint.model.common.expression.script.ScriptExpression;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
-import com.evolveum.midpoint.prism.parser.XPathHolder;
import com.evolveum.midpoint.prism.path.ItemPath;
-import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
-import com.evolveum.midpoint.util.DebugUtil;
-import com.evolveum.midpoint.util.JAXBUtil;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
@@ -79,10 +71,10 @@ public Expression(ExpressionType expressionType, D outputDefinition, ObjectResol
this.prismContext = prismContext;
}
- public void parse(ExpressionFactory factory, String contextDescription, OperationResult result)
+ public void parse(ExpressionFactory factory, String contextDescription, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
if (expressionType == null) {
- evaluators.add(createDefaultEvaluator(factory, contextDescription, result));
+ evaluators.add(createDefaultEvaluator(factory, contextDescription, task, result));
return;
}
if (expressionType.getExpressionEvaluator() == null /* && expressionType.getSequence() == null */) {
@@ -90,16 +82,16 @@ public void parse(ExpressionFactory factory, String contextDescription, Operatio
}
if (expressionType.getExpressionEvaluator() != null) {
ExpressionEvaluator evaluator = createEvaluator(expressionType.getExpressionEvaluator(), factory,
- contextDescription, result);
+ contextDescription, task, result);
evaluators.add(evaluator);
}
if (evaluators.isEmpty()) {
- evaluators.add(createDefaultEvaluator(factory, contextDescription, result));
+ evaluators.add(createDefaultEvaluator(factory, contextDescription, task, result));
}
}
private ExpressionEvaluator createEvaluator(Collection> evaluatorElements, ExpressionFactory factory,
- String contextDescription, OperationResult result)
+ String contextDescription, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
if (evaluatorElements.isEmpty()) {
throw new SchemaException("Empty evaluator list in "+contextDescription);
@@ -109,16 +101,16 @@ private ExpressionEvaluator createEvaluator(Collection> eval
if (evaluatorFactory == null) {
throw new SchemaException("Unknown expression evaluator element "+fistEvaluatorElement.getName()+" in "+contextDescription);
}
- return evaluatorFactory.createEvaluator(evaluatorElements, outputDefinition, contextDescription, result);
+ return evaluatorFactory.createEvaluator(evaluatorElements, outputDefinition, contextDescription, task, result);
}
- private ExpressionEvaluator createDefaultEvaluator(ExpressionFactory factory, String contextDescription,
- OperationResult result) throws SchemaException, ObjectNotFoundException {
+ private ExpressionEvaluator createDefaultEvaluator(ExpressionFactory factory, String contextDescription,
+ Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
ExpressionEvaluatorFactory evaluatorFactory = factory.getDefaultEvaluatorFactory();
if (evaluatorFactory == null) {
throw new SystemException("Internal error: No default expression evaluator factory");
}
- return evaluatorFactory.createEvaluator(null, outputDefinition, contextDescription, result);
+ return evaluatorFactory.createEvaluator(null, outputDefinition, contextDescription, task, result);
}
public PrismValueDeltaSetTriple evaluate(ExpressionEvaluationContext context) throws SchemaException,
@@ -129,7 +121,7 @@ public PrismValueDeltaSetTriple evaluate(ExpressionEvaluationContext context)
try {
processedVariables = processInnerVariables(context.getVariables(), context.getContextDescription(),
- context.getResult());
+ context.getTask(), context.getResult());
ExpressionEvaluationContext processedParameters = context.shallowClone();
processedParameters.setVariables(processedVariables);
@@ -219,7 +211,7 @@ private void appendTraceFooter(StringBuilder sb) {
}
private ExpressionVariables processInnerVariables(ExpressionVariables variables, String contextDescription,
- OperationResult result) throws SchemaException, ObjectNotFoundException {
+ Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
if (expressionType == null || expressionType.getVariable() == null || expressionType.getVariable().isEmpty()) {
// shortcut
return variables;
@@ -236,7 +228,7 @@ private ExpressionVariables processInnerVariables(ExpressionVariables variables,
if (variableDefType.getObjectRef() != null) {
ObjectReferenceType ref = variableDefType.getObjectRef();
ref.setType(prismContext.getSchemaRegistry().qualifyTypeName(ref.getType()));
- ObjectType varObject = objectResolver.resolve(ref, ObjectType.class, null, "variable "+varName+" in "+contextDescription, result);
+ ObjectType varObject = objectResolver.resolve(ref, ObjectType.class, null, "variable "+varName+" in "+contextDescription, task, result);
newVariables.addVariableDefinition(varName, varObject);
} else if (variableDefType.getValue() != null) {
// Only string is supported now
@@ -252,7 +244,7 @@ private ExpressionVariables processInnerVariables(ExpressionVariables variables,
}
} else if (variableDefType.getPath() != null) {
ItemPath itemPath = variableDefType.getPath().getItemPath();
- Object resolvedValue = ExpressionUtil.resolvePath(itemPath, variables, null, objectResolver, contextDescription, result);
+ Object resolvedValue = ExpressionUtil.resolvePath(itemPath, variables, null, objectResolver, contextDescription, task, result);
newVariables.addVariableDefinition(varName, resolvedValue);
} else {
throw new SchemaException("No value for variable "+varName+" in "+contextDescription);
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionEvaluatorFactory.java
index 51856298fcd..d6a7e4aebe0 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionEvaluatorFactory.java
@@ -24,6 +24,7 @@
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.schema.result.OperationResult;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
@@ -36,8 +37,8 @@ public interface ExpressionEvaluatorFactory {
QName getElementName();
- ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result)
+ ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException;
}
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionFactory.java
index 9847877f825..a21add9ab34 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionFactory.java
@@ -26,6 +26,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
@@ -58,23 +59,23 @@ public void setEvaluatorFactories(Collection evaluat
}
}
- public Expression makeExpression(ExpressionType expressionType,
- D outputDefinition, String shortDesc, OperationResult result)
+ public Expression makeExpression(ExpressionType expressionType,
+ D outputDefinition, String shortDesc, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
ExpressionIdentifier eid = new ExpressionIdentifier(expressionType, outputDefinition);
Expression expression = (Expression) cache.get(eid);
if (expression == null) {
- expression = createExpression(expressionType, outputDefinition, shortDesc, result);
+ expression = createExpression(expressionType, outputDefinition, shortDesc, task, result);
cache.put(eid, expression);
}
return expression;
}
- private Expression createExpression(ExpressionType expressionType,
- D outputDefinition, String shortDesc, OperationResult result)
+ private Expression createExpression(ExpressionType expressionType,
+ D outputDefinition, String shortDesc, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
Expression expression = new Expression(expressionType, outputDefinition, objectResolver, prismContext);
- expression.parse(this, shortDesc, result);
+ expression.parse(this, shortDesc, task, result);
return expression;
}
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionUtil.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionUtil.java
index 26f30ee860c..41093798987 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionUtil.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/ExpressionUtil.java
@@ -21,7 +21,6 @@
import java.util.Map;
import java.util.Map.Entry;
-import javax.xml.bind.JAXBException;
import javax.xml.namespace.QName;
import com.evolveum.midpoint.prism.query.ExpressionWrapper;
@@ -31,19 +30,13 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
-import org.springframework.expression.ExpressionException;
-import org.w3c.dom.Element;
-
-import com.evolveum.midpoint.model.api.expr.MidpointFunctions;
import com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctions;
import com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctionsXPath;
import com.evolveum.midpoint.model.common.expression.functions.FunctionLibrary;
import com.evolveum.midpoint.model.common.expression.functions.LogExpressionFunctions;
-import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.Objectable;
-import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
@@ -53,7 +46,6 @@
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.PrismValue;
-import com.evolveum.midpoint.prism.Recomputable;
import com.evolveum.midpoint.prism.Structured;
import com.evolveum.midpoint.prism.Visitable;
import com.evolveum.midpoint.prism.Visitor;
@@ -65,15 +57,12 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathSegment;
import com.evolveum.midpoint.prism.path.NameItemPathSegment;
-import com.evolveum.midpoint.prism.polystring.PolyString;
-import com.evolveum.midpoint.prism.query.EqualFilter;
import com.evolveum.midpoint.prism.query.InOidFilter;
import com.evolveum.midpoint.prism.query.LogicalFilter;
import com.evolveum.midpoint.prism.query.NoneFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.PropertyValueFilter;
-import com.evolveum.midpoint.prism.query.RefFilter;
import com.evolveum.midpoint.prism.query.ValueFilter;
import com.evolveum.midpoint.prism.util.JavaTypeConverter;
import com.evolveum.midpoint.prism.util.PrismUtil;
@@ -96,8 +85,6 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
/**
* @author semancik
@@ -193,8 +180,8 @@ public static O convertValue(Class finalExpectedJavaType, I inputVal,
return convertedVal;
}
- public static Object resolvePath(ItemPath path, ExpressionVariables variables, Object defaultContext,
- ObjectResolver objectResolver, String shortDesc, OperationResult result) throws SchemaException, ObjectNotFoundException {
+ public static Object resolvePath(ItemPath path, ExpressionVariables variables, Object defaultContext,
+ ObjectResolver objectResolver, String shortDesc, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
Object root = defaultContext;
ItemPath relativePath = path;
@@ -218,7 +205,7 @@ public static Object resolvePath(ItemPath path, ExpressionVariables variables, O
}
if (root instanceof ObjectReferenceType) {
- root = resolveReference((ObjectReferenceType)root, objectResolver, varDesc, shortDesc, result);
+ root = resolveReference((ObjectReferenceType)root, objectResolver, varDesc, shortDesc, task, result);
}
if (root instanceof Objectable) {
@@ -241,14 +228,14 @@ public static Object resolvePath(ItemPath path, ExpressionVariables variables, O
}
}
- private static PrismObject> resolveReference(ObjectReferenceType ref, ObjectResolver objectResolver, String varDesc, String contextDescription,
- OperationResult result) throws SchemaException, ObjectNotFoundException {
+ private static PrismObject> resolveReference(ObjectReferenceType ref, ObjectResolver objectResolver, String varDesc, String contextDescription,
+ Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
if (ref.getOid() == null) {
throw new SchemaException("Null OID in reference in variable "+varDesc+" in "+contextDescription);
} else {
try {
- ObjectType objectType = objectResolver.resolve(ref, ObjectType.class, null, contextDescription, result);
+ ObjectType objectType = objectResolver.resolve(ref, ObjectType.class, null, contextDescription, task, result);
if (objectType == null) {
throw new IllegalArgumentException("Resolve returned null for "+ref+" in "+contextDescription);
}
@@ -531,7 +518,7 @@ public static V evaluateExpressi
String shortDesc, Task task, OperationResult parentResult) throws SchemaException, ExpressionEvaluationException, ObjectNotFoundException {
Expression expression = expressionFactory.makeExpression(expressionType,
- outputDefinition, shortDesc, parentResult);
+ outputDefinition, shortDesc, task, parentResult);
ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, variables, shortDesc, task, parentResult);
PrismValueDeltaSetTriple outputTriple = expression.evaluate(params);
@@ -561,7 +548,7 @@ private static Collection evaluateStringExpression(ExpressionVariables v
DOMUtil.XSD_STRING, prismContext);
outputDefinition.setMaxOccurs(-1);
Expression,PrismPropertyDefinition> expression = expressionFactory.makeExpression(expressionType,
- outputDefinition, shortDesc, parentResult);
+ outputDefinition, shortDesc, task, parentResult);
ExpressionEvaluationContext params = new ExpressionEvaluationContext(null, variables, shortDesc, task, parentResult);
PrismValueDeltaSetTriple> outputTriple = expression.evaluate(params);
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AbstractSearchExpressionEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AbstractSearchExpressionEvaluator.java
index 7cc1c02a232..d88f698c7ee 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AbstractSearchExpressionEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AbstractSearchExpressionEvaluator.java
@@ -24,11 +24,8 @@
import com.evolveum.midpoint.model.common.expression.evaluator.caching.AbstractSearchExpressionEvaluatorCache;
import com.evolveum.midpoint.prism.util.CloneUtil;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
-import com.evolveum.midpoint.util.Holder;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectSearchStrategyType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import org.apache.commons.lang.BooleanUtils;
@@ -175,7 +172,7 @@ protected List transformSingleValue(ExpressionVariables variables, PlusMinusZ
LOGGER.trace("Query after extension: {}", query.debugDump());
}
- resultValues = executeSearchUsingCache(targetTypeClass, targetTypeQName, query, params, contextDescription, params.getResult());
+ resultValues = executeSearchUsingCache(targetTypeClass, targetTypeQName, query, params, contextDescription, task, params.getResult());
}
if (resultValues.isEmpty() && getExpressionEvaluatorType().isCreateOnDemand() == Boolean.TRUE &&
@@ -202,14 +199,14 @@ protected AbstractSearchExpressionEvaluatorCache getCache() {
return null;
}
- private List executeSearchUsingCache(Class targetTypeClass,
- final QName targetTypeQName, ObjectQuery query, final ExpressionEvaluationContext params, String contextDescription, OperationResult result) throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
+ private List executeSearchUsingCache(Class targetTypeClass, final QName targetTypeQName, ObjectQuery query,
+ final ExpressionEvaluationContext params, String contextDescription, Task task, OperationResult result) throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
ObjectSearchStrategyType searchStrategy = getSearchStrategy();
AbstractSearchExpressionEvaluatorCache cache = getCache();
if (cache == null) {
- return executeSearch(null, targetTypeClass, targetTypeQName, query, searchStrategy, params, contextDescription, result);
+ return executeSearch(null, targetTypeClass, targetTypeQName, query, searchStrategy, params, contextDescription, task, result);
}
List list = cache.getQueryResult(targetTypeClass, query, searchStrategy, params, prismContext);
@@ -219,7 +216,7 @@ private List executeSearchUsingCache(Class targetTy
}
LOGGER.trace("Cache: MISS {} ({})", query, targetTypeClass.getSimpleName());
List rawResult = new ArrayList<>();
- list = executeSearch(rawResult, targetTypeClass, targetTypeQName, query, searchStrategy, params, contextDescription, result);
+ list = executeSearch(rawResult, targetTypeClass, targetTypeQName, query, searchStrategy, params, contextDescription, task, result);
if (list != null && !list.isEmpty()) {
// we don't want to cache negative results (e.g. if used with focal objects it might mean that they would be attempted to create multiple times)
cache.putQueryResult(targetTypeClass, query, searchStrategy, params, list, rawResult, prismContext);
@@ -242,7 +239,7 @@ private List executeSearch(List rawResult
Class targetTypeClass, final QName targetTypeQName, ObjectQuery query,
ObjectSearchStrategyType searchStrategy,
ExpressionEvaluationContext params, String contextDescription,
- OperationResult result)
+ Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
@@ -256,18 +253,18 @@ private List executeSearch(List rawResult
switch (searchStrategy) {
case IN_REPOSITORY:
- return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, false, false, params, contextDescription, result);
+ return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, false, false, params, contextDescription, task, result);
case ON_RESOURCE:
- return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, true, true, params, contextDescription, result);
+ return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, true, true, params, contextDescription, task, result);
case ON_RESOURCE_IF_NEEDED:
- List inRepo = executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, false, false, params, contextDescription, result);
+ List inRepo = executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, false, false, params, contextDescription, task, result);
if (!inRepo.isEmpty()) {
return inRepo;
}
if (rawResult != null) {
rawResult.clear();
}
- return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, true, false, params, contextDescription, result);
+ return executeSearchAttempt(rawResult, targetTypeClass, targetTypeQName, query, true, false, params, contextDescription, task, result);
default:
throw new IllegalArgumentException("Unknown search strategy: " + searchStrategy);
}
@@ -277,7 +274,7 @@ private List executeSearchAttempt(final List targetTypeClass, final QName targetTypeQName,
ObjectQuery query, boolean searchOnResource, boolean tryAlsoRepository,
final ExpressionEvaluationContext params, String contextDescription,
- OperationResult result)
+ Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
final List list = new ArrayList();
@@ -302,7 +299,7 @@ public boolean handle(PrismObject object, OperationResult parentResult) {
};
try {
- objectResolver.searchIterative(targetTypeClass, query, options, handler, result);
+ objectResolver.searchIterative(targetTypeClass, query, options, handler, task, result);
} catch (SchemaException e) {
throw new SchemaException(e.getMessage()+" in "+contextDescription, e);
} catch (CommunicationException | ConfigurationException
@@ -310,7 +307,7 @@ public boolean handle(PrismObject object, OperationResult parentResult) {
if (searchOnResource && tryAlsoRepository) {
options = SelectorOptions.createCollection(GetOperationOptions.createNoFetch());
try {
- objectResolver.searchIterative(targetTypeClass, query, options, handler, result);
+ objectResolver.searchIterative(targetTypeClass, query, options, handler, task, result);
} catch (SchemaException e1) {
throw new SchemaException(e1.getMessage()+" in "+contextDescription, e1);
} catch (CommunicationException | ConfigurationException
@@ -409,7 +406,7 @@ private
String expressionDesc = "expression in assignment expression in "+contextDescription;
ExpressionFactory expressionFactory = params.getExpressionFactory();
Expression expression = expressionFactory.makeExpression(expressionType, propOutputDefinition,
- expressionDesc, result);
+ expressionDesc, task, result);
ExpressionEvaluationContext expressionParams = new ExpressionEvaluationContext(null, variables,
expressionDesc, task, result);
expressionParams.setExpressionFactory(expressionFactory);
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AsIsExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AsIsExpressionEvaluatorFactory.java
index 2f8edf6cec6..0fea932daa1 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AsIsExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AsIsExpressionEvaluatorFactory.java
@@ -26,6 +26,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.schema.result.OperationResult;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AsIsExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
@@ -58,8 +59,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement)
*/
@Override
- public AsIsExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ public AsIsExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for asIs expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssignmentTargetSearchExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssignmentTargetSearchExpressionEvaluatorFactory.java
index e617267a242..37e8ed33ebb 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssignmentTargetSearchExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssignmentTargetSearchExpressionEvaluatorFactory.java
@@ -23,7 +23,6 @@
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluatorFactory;
-import com.evolveum.midpoint.model.common.expression.ExpressionFactory;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
@@ -32,6 +31,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
@@ -72,8 +72,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for assignmentTargetSearch expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluator.java
index f4343c84f6a..c331e945db1 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluator.java
@@ -16,66 +16,35 @@
package com.evolveum.midpoint.model.common.expression.evaluator;
import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.w3c.dom.Element;
-
-import com.evolveum.midpoint.common.policy.ValuePolicyGenerator;
import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluationContext;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
-import com.evolveum.midpoint.model.common.expression.Source;
-import com.evolveum.midpoint.model.common.expression.StringPolicyResolver;
-import com.evolveum.midpoint.prism.Item;
-import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismObject;
-import com.evolveum.midpoint.prism.PrismProperty;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
-import com.evolveum.midpoint.prism.PrismReferenceValue;
-import com.evolveum.midpoint.prism.PrismValue;
-import com.evolveum.midpoint.prism.PrismPropertyValue;
-import com.evolveum.midpoint.prism.crypto.EncryptionException;
-import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
import com.evolveum.midpoint.prism.delta.ItemDelta;
-import com.evolveum.midpoint.prism.path.ItemPath;
-import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
-import com.evolveum.midpoint.prism.xml.XsdTypeMapper;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
-import com.evolveum.midpoint.schema.constants.SchemaConstants;
-import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
import com.evolveum.midpoint.schema.util.ShadowUtil;
-import com.evolveum.midpoint.util.DOMUtil;
-import com.evolveum.midpoint.util.RandomString;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
-import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.GenerateExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowAssociationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowDiscriminatorExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowDiscriminatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.StringPolicyType;
/**
* @author Radovan Semancik
@@ -141,7 +110,7 @@ public PrismValueDeltaSetTriple> eval
for (ObjectReferenceType linkRef: thisRole.getLinkRef()) {
ShadowType shadowType;
try {
- shadowType = objectResolver.resolve(linkRef, ShadowType.class, options, desc, params.getResult());
+ shadowType = objectResolver.resolve(linkRef, ShadowType.class, options, desc, params.getTask(), params.getResult());
} catch (ObjectNotFoundException e) {
// Linked shadow not found. This may happen e.g. if the account is deleted and model haven't got
// the chance to react yet. Just ignore such shadow.
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluatorFactory.java
index 8452e5de1d4..338dfb08093 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationFromLinkExpressionEvaluatorFactory.java
@@ -30,9 +30,9 @@
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchObjectExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowAssociationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowDiscriminatorExpressionEvaluatorType;
import org.apache.commons.lang.Validate;
@@ -68,8 +68,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for associationFromLink expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationTargetSearchExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationTargetSearchExpressionEvaluatorFactory.java
index 3353c337697..79743229bd0 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationTargetSearchExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/AssociationTargetSearchExpressionEvaluatorFactory.java
@@ -31,6 +31,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchObjectExpressionEvaluatorType;
@@ -71,8 +72,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for associationTargetSearch expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/GenerateExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/GenerateExpressionEvaluatorFactory.java
index 8038100ce49..864bb77426e 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/GenerateExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/GenerateExpressionEvaluatorFactory.java
@@ -16,33 +16,23 @@
package com.evolveum.midpoint.model.common.expression.evaluator;
import java.util.Collection;
-import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
-import org.apache.commons.lang.StringUtils;
+import com.evolveum.midpoint.task.api.Task;
import org.apache.commons.lang.Validate;
-import org.w3c.dom.Element;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluatorFactory;
-import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.crypto.Protector;
-import com.evolveum.midpoint.prism.delta.ItemDelta;
-import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
-import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
-import com.evolveum.midpoint.util.DOMUtil;
-import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.AsIsExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.GenerateExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.StringPolicyType;
@@ -74,8 +64,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement, com.evolveum.midpoint.prism.PrismContext)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result)
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result)
throws SchemaException, ObjectNotFoundException {
Validate.notNull(outputDefinition, "output definition must be specified for 'generate' expression evaluator");
@@ -98,7 +88,7 @@ public ExpressionEvaluator
StringPolicyType elementStringPolicy = null;
if (generateEvaluatorType.getValuePolicyRef() != null) {
ValuePolicyType valuePolicyType = objectResolver.resolve(generateEvaluatorType.getValuePolicyRef(), ValuePolicyType.class,
- null, "resolving value policy reference in "+contextDescription, result);
+ null, "resolving value policy reference in "+contextDescription, task, result);
elementStringPolicy = valuePolicyType.getStringPolicy();
}
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/LiteralExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/LiteralExpressionEvaluatorFactory.java
index 22b58edfc4b..cdf2d69b4e6 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/LiteralExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/LiteralExpressionEvaluatorFactory.java
@@ -15,16 +15,13 @@
*/
package com.evolveum.midpoint.model.common.expression.evaluator;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
-import org.apache.commons.lang.StringUtils;
+import com.evolveum.midpoint.task.api.Task;
import org.apache.commons.lang.Validate;
-import org.w3c.dom.Element;
import com.evolveum.midpoint.common.StaticExpressionUtil;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
@@ -32,15 +29,10 @@
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
-import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
-import com.evolveum.midpoint.util.DOMUtil;
-import com.evolveum.midpoint.util.JAXBUtil;
-import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
@@ -66,8 +58,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement, com.evolveum.midpoint.prism.PrismContext)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements, D outputDefinition,
- String contextDescription, OperationResult result) throws SchemaException {
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements, D outputDefinition,
+ String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for literal expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/PathExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/PathExpressionEvaluatorFactory.java
index 1ee70bcdfd6..09400686917 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/PathExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/PathExpressionEvaluatorFactory.java
@@ -20,8 +20,8 @@
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
+import com.evolveum.midpoint.task.api.Task;
import org.apache.commons.lang.Validate;
-import org.w3c.dom.Element;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluatorFactory;
@@ -29,9 +29,6 @@
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.crypto.Protector;
-import com.evolveum.midpoint.prism.delta.ItemDelta;
-import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
-import com.evolveum.midpoint.prism.parser.XPathHolder;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
@@ -67,7 +64,7 @@ public QName getElementName() {
*/
@Override
public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for path expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/ReferenceSearchExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/ReferenceSearchExpressionEvaluatorFactory.java
index 0b1839730d7..cffcfe51d61 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/ReferenceSearchExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/evaluator/ReferenceSearchExpressionEvaluatorFactory.java
@@ -23,9 +23,7 @@
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluator;
import com.evolveum.midpoint.model.common.expression.ExpressionEvaluatorFactory;
-import com.evolveum.midpoint.model.common.expression.ExpressionFactory;
import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.PrismValue;
@@ -33,8 +31,8 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchObjectRefExpressionEvaluatorType;
@@ -73,8 +71,8 @@ public QName getElementName() {
* @see com.evolveum.midpoint.common.expression.ExpressionEvaluatorFactory#createEvaluator(javax.xml.bind.JAXBElement)
*/
@Override
- public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
Validate.notNull(outputDefinition, "output definition must be specified for referenceSearch expression evaluator");
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptEvaluator.java
index 1fd81ec8045..3f876871616 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptEvaluator.java
@@ -24,6 +24,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
@@ -43,9 +44,9 @@
*/
public interface ScriptEvaluator {
- public List evaluate(ScriptExpressionEvaluatorType expressionType, ExpressionVariables variables,
- ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType, ObjectResolver objectResolver,
- Collection functions, String contextDescription, OperationResult result)
+ public List evaluate(ScriptExpressionEvaluatorType expressionType, ExpressionVariables variables,
+ ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType, ObjectResolver objectResolver,
+ Collection functions, String contextDescription, Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, ExpressionSyntaxException;
/**
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpression.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpression.java
index f7e76e374b7..f88c8c980de 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpression.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpression.java
@@ -30,6 +30,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.SchemaDebugUtil;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.DebugUtil;
@@ -97,8 +98,8 @@ public void setFunctions(Collection functions) {
this.functions = functions;
}
- public List evaluate(ExpressionVariables variables, ScriptExpressionReturnTypeType suggestedReturnType,
- boolean useNew, String contextDescription, OperationResult result)
+ public List evaluate(ExpressionVariables variables, ScriptExpressionReturnTypeType suggestedReturnType,
+ boolean useNew, String contextDescription, Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
ScriptExpressionEvaluationContext context = new ScriptExpressionEvaluationContext(variables, contextDescription, result, this);
@@ -107,7 +108,7 @@ public List evaluate(ExpressionVariables variables, Sc
try {
context.setupThreadLocal();
- List expressionResult = evaluator.evaluate(scriptType, variables, outputDefinition, suggestedReturnType, objectResolver, functions, contextDescription, result);
+ List expressionResult = evaluator.evaluate(scriptType, variables, outputDefinition, suggestedReturnType, objectResolver, functions, contextDescription, task, result);
traceExpressionSuccess(variables, contextDescription, expressionResult);
return expressionResult;
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluator.java
index 1076b3e3581..216bf7dddf0 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluator.java
@@ -57,7 +57,7 @@ protected List transformSingleValue(ExpressionVariables variables, PlusMinusZ
if (returnType == null && isRelative()) {
returnType = ScriptExpressionReturnTypeType.SCALAR;
}
- return (List) scriptExpression.evaluate(variables, returnType, useNew, contextDescription, result);
+ return (List) scriptExpression.evaluate(variables, returnType, useNew, contextDescription, task, result);
}
/* (non-Javadoc)
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluatorFactory.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluatorFactory.java
index bf1df2ec547..c1f8533fb79 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluatorFactory.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/ScriptExpressionEvaluatorFactory.java
@@ -26,6 +26,7 @@
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.SecurityEnforcer;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ScriptExpressionEvaluatorType;
@@ -54,7 +55,7 @@ public QName getElementName() {
*/
@Override
public ExpressionEvaluator createEvaluator(Collection> evaluatorElements,
- D outputDefinition, String contextDescription, OperationResult result) throws SchemaException {
+ D outputDefinition, String contextDescription, Task task, OperationResult result) throws SchemaException {
if (evaluatorElements.size() > 1) {
throw new SchemaException("More than one evaluator specified in "+contextDescription);
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/jsr223/Jsr223ScriptEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/jsr223/Jsr223ScriptEvaluator.java
index 62373edc68b..69595ce1219 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/jsr223/Jsr223ScriptEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/jsr223/Jsr223ScriptEvaluator.java
@@ -17,11 +17,9 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.script.Bindings;
@@ -32,18 +30,14 @@
import javax.script.ScriptException;
import javax.xml.namespace.QName;
-import org.w3c.dom.Element;
-
import com.evolveum.midpoint.common.monitor.InternalMonitor;
import com.evolveum.midpoint.model.common.expression.ExpressionSyntaxException;
import com.evolveum.midpoint.model.common.expression.ExpressionUtil;
import com.evolveum.midpoint.model.common.expression.ExpressionVariables;
-import com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctions;
import com.evolveum.midpoint.model.common.expression.functions.FunctionLibrary;
import com.evolveum.midpoint.model.common.expression.script.ScriptEvaluator;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.ItemDefinition;
-import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismContext;
@@ -52,25 +46,22 @@
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
-import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.crypto.Protector;
import com.evolveum.midpoint.prism.polystring.PolyString;
-import com.evolveum.midpoint.prism.util.JavaTypeConverter;
import com.evolveum.midpoint.prism.xml.XsdTypeMapper;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
-import com.evolveum.midpoint.util.exception.TunnelException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ScriptExpressionEvaluatorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ScriptExpressionReturnTypeType;
-import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
/**
* Expression evaluator that is using javax.script (JSR-223) engine.
@@ -101,12 +92,12 @@ public Jsr223ScriptEvaluator(String engineName, PrismContext prismContext, Prote
@Override
public List evaluate(ScriptExpressionEvaluatorType expressionType,
- ExpressionVariables variables, ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType,
- ObjectResolver objectResolver, Collection functions,
- String contextDescription, OperationResult result) throws ExpressionEvaluationException,
+ ExpressionVariables variables, ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType,
+ ObjectResolver objectResolver, Collection functions,
+ String contextDescription, Task task, OperationResult result) throws ExpressionEvaluationException,
ObjectNotFoundException, ExpressionSyntaxException {
- Bindings bindings = convertToBindings(variables, objectResolver, functions, contextDescription, result);
+ Bindings bindings = convertToBindings(variables, objectResolver, functions, contextDescription, task, result);
String codeString = expressionType.getCode();
if (codeString == null) {
@@ -205,7 +196,7 @@ public Object evaluateReportScript(String codeString, ExpressionVariables va
String contextDescription, OperationResult result) throws ExpressionEvaluationException,
ObjectNotFoundException, ExpressionSyntaxException {
- Bindings bindings = convertToBindings(variables, objectResolver, functions, contextDescription, result);
+ Bindings bindings = convertToBindings(variables, objectResolver, functions, contextDescription, (Task) null, result);
// String codeString = code;
if (codeString == null) {
@@ -269,9 +260,9 @@ private boolean isEmpty(T val) {
return false;
}
- private Bindings convertToBindings(ExpressionVariables variables, ObjectResolver objectResolver,
- Collection functions,
- String contextDescription, OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
+ private Bindings convertToBindings(ExpressionVariables variables, ObjectResolver objectResolver,
+ Collection functions,
+ String contextDescription, Task task, OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
Bindings bindings = scriptEngine.createBindings();
// Functions
if (functions != null) {
@@ -287,7 +278,7 @@ private Bindings convertToBindings(ExpressionVariables variables, ObjectResolver
continue;
}
String variableName = variableEntry.getKey().getLocalPart();
- Object variableValue = convertVariableValue(variableEntry.getValue(), variableName, objectResolver, contextDescription, result);
+ Object variableValue = convertVariableValue(variableEntry.getValue(), variableName, objectResolver, contextDescription, task, result);
bindings.put(variableName, variableValue);
}
}
@@ -295,10 +286,10 @@ private Bindings convertToBindings(ExpressionVariables variables, ObjectResolver
}
private Object convertVariableValue(Object originalValue, String variableName, ObjectResolver objectResolver,
- String contextDescription, OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
+ String contextDescription, Task task, OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
if (originalValue instanceof ObjectReferenceType) {
originalValue = resolveReference((ObjectReferenceType)originalValue, objectResolver, variableName,
- contextDescription, result);
+ contextDescription, task, result);
}
if (originalValue instanceof PrismObject>) {
return ((PrismObject>)originalValue).asObjectable();
@@ -325,14 +316,14 @@ private Object convertVariableValue(Object originalValue, String variableName, O
return originalValue;
}
- private Object resolveReference(ObjectReferenceType ref, ObjectResolver objectResolver, String name, String contextDescription,
- OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
+ private Object resolveReference(ObjectReferenceType ref, ObjectResolver objectResolver, String name, String contextDescription,
+ Task task, OperationResult result) throws ExpressionSyntaxException, ObjectNotFoundException {
if (ref.getOid() == null) {
throw new ExpressionSyntaxException("Null OID in reference in variable "+name+" in "+contextDescription);
} else {
try {
- return objectResolver.resolve(ref, ObjectType.class, null, contextDescription, result);
+ return objectResolver.resolve(ref, ObjectType.class, null, contextDescription, task, result);
} catch (ObjectNotFoundException e) {
throw new ObjectNotFoundException("Object not found during variable "+name+" resolution in "+contextDescription+": "+e.getMessage(),e, ref.getOid());
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/LazyXPathVariableResolver.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/LazyXPathVariableResolver.java
index 166e96a55df..1376d22e79d 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/LazyXPathVariableResolver.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/LazyXPathVariableResolver.java
@@ -109,7 +109,7 @@ public Object resolveVariable(QName name) {
type = ref.getType();
try {
- variableValue = objectResolver.resolve(ref, ObjectType.class, null, contextDescription, result);
+ variableValue = objectResolver.resolve(ref, ObjectType.class, null, contextDescription, null, result); // TODO task
} catch (ObjectNotFoundException e) {
ObjectNotFoundException newEx = new ObjectNotFoundException("Object not found during variable "+name+" resolution in "+contextDescription+": "+e.getMessage(),e, ref.getOid());
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/XPathScriptEvaluator.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/XPathScriptEvaluator.java
index 8386348de1b..5f9d4aa85f5 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/XPathScriptEvaluator.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/expression/script/xpath/XPathScriptEvaluator.java
@@ -17,7 +17,6 @@
import com.evolveum.midpoint.model.common.expression.ExpressionSyntaxException;
import com.evolveum.midpoint.model.common.expression.ExpressionVariables;
-import com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctions;
import com.evolveum.midpoint.model.common.expression.functions.FunctionLibrary;
import com.evolveum.midpoint.model.common.expression.script.ScriptEvaluator;
import com.evolveum.midpoint.prism.ItemDefinition;
@@ -32,6 +31,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ExceptionUtil;
import com.evolveum.midpoint.schema.util.ObjectResolver;
+import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
@@ -43,7 +43,6 @@
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
import org.w3c.dom.Element;
-import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.namespace.QName;
@@ -52,7 +51,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
/**
* @author Radovan Semancik
@@ -71,9 +69,9 @@ public XPathScriptEvaluator(PrismContext prismContext) {
@Override
public List evaluate(ScriptExpressionEvaluatorType expressionType,
- ExpressionVariables variables, ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType,
- ObjectResolver objectResolver, Collection functions,
- String contextDescription, OperationResult result) throws ExpressionEvaluationException,
+ ExpressionVariables variables, ItemDefinition outputDefinition, ScriptExpressionReturnTypeType suggestedReturnType,
+ ObjectResolver objectResolver, Collection functions,
+ String contextDescription, Task task, OperationResult result) throws ExpressionEvaluationException,
ObjectNotFoundException, ExpressionSyntaxException {
String codeString = expressionType.getCode();
diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/Mapping.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/Mapping.java
index 5319f506d87..5772f6dddf8 100644
--- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/Mapping.java
+++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/Mapping.java
@@ -17,14 +17,10 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
@@ -49,9 +45,6 @@
import com.evolveum.midpoint.model.common.expression.ObjectDeltaObject;
import com.evolveum.midpoint.model.common.expression.Source;
import com.evolveum.midpoint.model.common.expression.StringPolicyResolver;
-import com.evolveum.midpoint.model.common.expression.evaluator.LiteralExpressionEvaluatorFactory;
-import com.evolveum.midpoint.model.common.expression.script.ScriptExpression;
-import com.evolveum.midpoint.model.common.expression.script.ScriptExpressionFactory;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
@@ -66,11 +59,8 @@
import com.evolveum.midpoint.prism.Visitor;
import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
import com.evolveum.midpoint.prism.delta.ItemDelta;
-import com.evolveum.midpoint.prism.parser.XPathHolder;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.NameItemPathSegment;
-import com.evolveum.midpoint.prism.xml.XmlTypeConverter;
-import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.SchemaDebugUtil;
@@ -84,7 +74,6 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionReturnMultiplicityType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionVariableDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingSourceDeclarationType;
@@ -94,7 +83,6 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
-import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ValueFilterType;
/**
@@ -487,7 +475,7 @@ public void evaluate(Task task, OperationResult parentResult) throws ExpressionE
traceEvaluationStart();
try {
- evaluateTimeConstraintValid(result);
+ evaluateTimeConstraintValid(task, result);
if (!timeConstraintValid) {
outputTriple = null;
@@ -496,7 +484,7 @@ public void evaluate(Task task, OperationResult parentResult) throws ExpressionE
return;
}
- parseSources(result);
+ parseSources(task, result);
parseTarget();
if (outputPath != null && outputDefinition == null) {
@@ -669,14 +657,14 @@ private boolean computeConditionResult(Collection> b
return ExpressionUtil.computeConditionResult(booleanPropertyValues);
}
- public Boolean evaluateTimeConstraintValid(OperationResult result) throws SchemaException, ObjectNotFoundException {
+ public Boolean evaluateTimeConstraintValid(Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
if (timeConstraintValid == null) {
- parseTimeConstraints(result);
+ parseTimeConstraints(task, result);
}
return timeConstraintValid;
}
- private void parseTimeConstraints(OperationResult result) throws SchemaException, ObjectNotFoundException {
+ private void parseTimeConstraints(Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
MappingTimeDeclarationType timeFromType = mappingType.getTimeFrom();
MappingTimeDeclarationType timeToType = mappingType.getTimeTo();
if (timeFromType == null && timeToType == null) {
@@ -684,7 +672,7 @@ private void parseTimeConstraints(OperationResult result) throws SchemaException
return;
}
- XMLGregorianCalendar timeFrom = parseTime(timeFromType, result);
+ XMLGregorianCalendar timeFrom = parseTime(timeFromType, task, result);
if (timeFrom == null && timeFromType != null) {
// Time is specified but there is no value for it.
// This means that event that should start validity haven't happened yet
@@ -692,7 +680,7 @@ private void parseTimeConstraints(OperationResult result) throws SchemaException
timeConstraintValid = false;
return;
}
- XMLGregorianCalendar timeTo = parseTime(timeToType, result);
+ XMLGregorianCalendar timeTo = parseTime(timeToType, task, result);
if (timeFrom != null && timeFrom.compare(now) == DatatypeConstants.GREATER) {
// before timeFrom
@@ -731,7 +719,7 @@ private void parseTimeConstraints(OperationResult result) throws SchemaException
}
- private XMLGregorianCalendar parseTime(MappingTimeDeclarationType timeType, OperationResult result) throws SchemaException, ObjectNotFoundException {
+ private XMLGregorianCalendar parseTime(MappingTimeDeclarationType timeType, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
if (timeType == null) {
return null;
}
@@ -744,7 +732,7 @@ private XMLGregorianCalendar parseTime(MappingTimeDeclarationType timeType, Oper
time = (XMLGregorianCalendar) defaultReferenceTime.clone();
}
} else {
- time = parseTimeSource(referenceTimeType, result);
+ time = parseTimeSource(referenceTimeType, task, result);
if (time == null) {
// Reference time is specified but the value is not present.
return null;
@@ -758,7 +746,7 @@ private XMLGregorianCalendar parseTime(MappingTimeDeclarationType timeType, Oper
return time;
}
- private XMLGregorianCalendar parseTimeSource(MappingSourceDeclarationType sourceType, OperationResult result) throws SchemaException, ObjectNotFoundException {
+ private XMLGregorianCalendar parseTimeSource(MappingSourceDeclarationType sourceType, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException {
ItemPathType itemPathType = sourceType.getPath();
if (itemPathType == null) {
throw new SchemaException("No path in source definition in "+getMappingContextDescription());
@@ -768,7 +756,7 @@ private XMLGregorianCalendar parseTimeSource(MappingSourceDeclarationType source
throw new SchemaException("Empty source path in "+getMappingContextDescription());
}
- Object sourceObject = ExpressionUtil.resolvePath(path, variables, sourceContext, objectResolver, "reference time definition in "+getMappingContextDescription(), result);
+ Object sourceObject = ExpressionUtil.resolvePath(path, variables, sourceContext, objectResolver, "reference time definition in "+getMappingContextDescription(), task, result);
if (sourceObject == null) {
return null;
}
@@ -786,7 +774,7 @@ private XMLGregorianCalendar parseTimeSource(MappingSourceDeclarationType source
return timeProperty.getRealValue();
}
- private Collection