diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BaseSortableDataProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BaseSortableDataProvider.java
index d52cafa22b9..32603b06bf7 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BaseSortableDataProvider.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BaseSortableDataProvider.java
@@ -16,6 +16,7 @@
package com.evolveum.midpoint.web.component.data;
+import com.evolveum.midpoint.audit.api.AuditService;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.ModelInteractionService;
@@ -116,6 +117,11 @@ protected WorkflowService getWorkflowService() {
return application.getWorkflowService();
}
+ protected AuditService getAuditService() {
+ MidPointApplication application = (MidPointApplication) MidPointApplication.get();
+ return application.getAuditService();
+ }
+
protected WorkflowManager getWorkflowManager() {
MidPointApplication application = (MidPointApplication) MidPointApplication.get();
return application.getWorkflowManager();
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html
index 5a70fbc3209..70b9a823910 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.html
@@ -20,11 +20,21 @@
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java
index 57e18c51b23..9b41ed418da 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/PageAuditLogViewer.java
@@ -1,195 +1,152 @@
package com.evolveum.midpoint.web.page.admin.reports;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+
import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.gui.api.page.PageBase;
+import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
-import com.evolveum.midpoint.util.MiscUtil;
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.data.BoxedTablePanel;
import com.evolveum.midpoint.web.component.input.DatePanel;
-import com.evolveum.midpoint.web.component.util.ListDataProvider;
+import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
+import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.configuration.PageAdminConfiguration;
+import com.evolveum.midpoint.web.page.admin.reports.dto.AuditEventRecordProvider;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.IModel;
-
-import javax.xml.datatype.XMLGregorianCalendar;
-import java.sql.Timestamp;
-import java.util.*;
/**
* Created by honchar.
*/
@PageDescriptor(url = "/admin/auditLogViewer", action = {
- @AuthorizationAction(actionUri = PageAdminReports.AUTH_REPORTS_ALL,
- label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL,
- description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION),
- @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_AUDIT_LOG_VIEWER_URL,
- label = "PageAuditLogViewer.auth.auditLogViewer.label",
- description = "PageAuditLogViewer.auth.auditLogViewer.description")})
+ @AuthorizationAction(actionUri = PageAdminReports.AUTH_REPORTS_ALL,
+ label = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_LABEL,
+ description = PageAdminConfiguration.AUTH_CONFIGURATION_ALL_DESCRIPTION),
+ @AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_AUDIT_LOG_VIEWER_URL,
+ label = "PageAuditLogViewer.auth.auditLogViewer.label",
+ description = "PageAuditLogViewer.auth.auditLogViewer.description")})
public class PageAuditLogViewer extends PageBase{
- private List auditEventRecordList;
-
- Map params = new HashMap<>();
-
- private static final String ID_PARAMETERS_PANEL = "parametersPanel";
- private static final String ID_TABLE = "table";
- private static final String ID_FROM = "fromField";
- private static final String ID_MAIN_FORM = "mainForm";
-
- private static final String AUDIT_RECORDS_QUERY = "from RAuditEventRecord as aer where 1=1 and ";
- private static final String AUDIT_RECORDS_QUERY_COUNT = "select count(*) from RAuditEventRecord as aer where 1=1 and ";
-
- public PageAuditLogViewer(){
- initLayout();
- }
- private void initLayout(){
- Form mainForm = new Form(ID_MAIN_FORM);
- add(mainForm);
-
- initParametersPanel(mainForm);
- initTable(mainForm);
- }
-
- private void initParametersPanel(Form mainForm){
- WebMarkupContainer parametersPanel = new WebMarkupContainer(ID_PARAMETERS_PANEL);
- parametersPanel.setOutputMarkupId(true);
- mainForm.add(parametersPanel);
-
-
- final DatePanel from = new DatePanel(ID_FROM,
- new IModel() {
- @Override
- public XMLGregorianCalendar getObject() {
- return null;
- }
-
- @Override
- public void setObject(XMLGregorianCalendar date) {
-
- }
-
- @Override
- public void detach() {
-
- }
- });
- from.setOutputMarkupId(true);
- parametersPanel.add(from);
- }
-
- private void initTable(Form mainForm){
- IModel> model = new IModel>() {
- @Override
- public List getObject() {
- return getAuditEventRecordList();
- }
-
- @Override
- public void setObject(List auditEventRecord) {
-
- }
-
- @Override
- public void detach() {
-
- }
- };
- ListDataProvider provider = new ListDataProvider(PageAuditLogViewer.this, model);
- BoxedTablePanel table = new BoxedTablePanel(ID_TABLE, provider,
- initColumns(),
- UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER,
- (int) getItemsPerPage(UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER)) {
-
- };
- table.setShowPaging(true);
- table.setOutputMarkupId(true);
- mainForm.add(table);
- }
-
- private List getAuditEventRecordList(){
- String parameterQuery = generateFullQuery(AUDIT_RECORDS_QUERY);
- List auditRecords = getAuditService().listRecords(parameterQuery + " order by aer.timestamp asc", params);
- if (auditRecords == null){
- auditRecords = new ArrayList<>();
- }
- List auditRecordList = new ArrayList<>();
- for (AuditEventRecord record : auditRecords){
- AuditEventRecordType newRecord = getAuditEventRecordType(record);
- auditRecordList.add(newRecord);
- }
-// parameterQuery = generateFullQuery(AUDIT_RECORDS_QUERY_COUNT);
-// long count = getAuditService().countObjects(parameterQuery, params);
-// if (count != 0){
-//
-// }
- return auditRecordList;
- }
-
- private List, String>> initColumns() {
- List, String>> columns = new ArrayList<>();
-
- IColumn column;
- column = new PropertyColumn(
- createStringResource("PageAuditLogViewer.column.time"), "timestamp");
- columns.add(column);
-
- //TODO add columns
-
- return columns;
- }
-
- private AuditEventRecordType getAuditEventRecordType(AuditEventRecord record){
- AuditEventRecordType newRecord = new AuditEventRecordType();
- newRecord.setTimestamp(MiscUtil.asXMLGregorianCalendar(new Date(record.getTimestamp())));
- //TODO fill in others fields
- return newRecord;
- }
-
- private String generateFullQuery(String query){
- if (params.get("from") != null) {
- query += "(aer.timestamp >= :from) and ";
- } else {
- params.remove("from");
- }
- if (params.get("to") != null) {
- query += "(aer.timestamp <= :to) and ";
- } else {
- params.remove("to");
- }
- if (params.get("eventType") != null) {
- query += "(aer.eventType = :eventType) and ";
- } else {
- params.remove("eventType");
- }
- if (params.get("eventStage") != null) {
- query += "(aer.eventStage = :eventStage) and ";
- } else {
- params.remove("eventStage");
- }
- if (params.get("outcome") != null) {
- query += "(aer.outcome = :outcome) and ";
- } else {
- params.remove("outcome");
- }
- if (params.get("initiatorName") != null) {
- query += "(aer.initiatorName = :initiatorName) and ";
- } else {
- params.remove("initiatorName");
- }
- if (params.get("targetName") != null) {
- query += "(aer.targetName = :targetName) and ";
- } else {
- params.remove("targetName");
- }
-
- query = query.substring(0, query.length()-5); // remove trailing and
-return query;
- }
+
+ private List auditEventRecordList;
+
+ Map params = new HashMap<>();
+
+ private static final String ID_PARAMETERS_PANEL = "parametersPanel";
+ private static final String ID_TABLE = "table";
+ private static final String ID_FROM = "fromField";
+ private static final String ID_TO = "toField";
+ private static final String ID_INITIATOR = "initiatorField";
+ private static final String ID_CHANNEL = "channelField";
+ private static final String ID_PROPERTY = "propertyField";
+ private static final String ID_MAIN_FORM = "mainForm";
+ private static final String ID_SEARCH_BUTTON = "searchButton";
+
+ private IModel fromModel;
+ private IModel toModel;
+ private IModel initiatorModel;
+ private IModel channelModel;
+ private IModel channelListModel;
+ private IModel propertyModel;
+
+ public PageAuditLogViewer(){
+ fromModel = new Model();
+ toModel = new Model();
+ initiatorModel = new Model();
+ channelModel = new Model();
+ channelListModel = new ListModel(new WebComponentUtil().getChannelList());
+ propertyModel = new Model();
+ initLayout();
+ }
+
+ private void initLayout(){
+ Form mainForm = new Form(ID_MAIN_FORM);
+ mainForm.setOutputMarkupId(true);
+ add(mainForm);
+
+ initParametersPanel(mainForm);
+ initTable(mainForm);
+ }
+
+ private void initParametersPanel(Form mainForm){
+ WebMarkupContainer parametersPanel = new WebMarkupContainer(ID_PARAMETERS_PANEL);
+ parametersPanel.setOutputMarkupId(true);
+ mainForm.add(parametersPanel);
+
+ final DatePanel from = new DatePanel(ID_FROM, fromModel);
+ from.setOutputMarkupId(true);
+ parametersPanel.add(from);
+
+ final DatePanel to = new DatePanel(ID_TO, toModel);
+ to.setOutputMarkupId(true);
+ parametersPanel.add(to);
+
+ final TextPanel initiator = new TextPanel(ID_INITIATOR, initiatorModel);
+ initiator.setOutputMarkupId(true);
+ parametersPanel.add(initiator);
+
+ final DropDownChoicePanel channel = new DropDownChoicePanel(ID_CHANNEL, channelModel, channelListModel);
+ channel.setOutputMarkupId(true);
+ parametersPanel.add(channel);
+
+ final TextPanel property = new TextPanel(ID_PROPERTY, propertyModel);
+ property.setOutputMarkupId(true);
+ parametersPanel.add(property);
+
+ AjaxButton ajaxButton = new AjaxButton(ID_SEARCH_BUTTON, createStringResource("BasicSearchPanel.search")) {
+ @Override
+ public void onClick(AjaxRequestTarget arg0) {
+ Form mainForm = (Form)get(ID_MAIN_FORM);
+ initTable(mainForm);
+ arg0.add(mainForm);
+ // TODO Auto-generated method stub
+ }
+ };
+ ajaxButton.setOutputMarkupId(true);
+ parametersPanel.add(ajaxButton);
+ }
+
+ private void initTable(Form mainForm){
+ AuditEventRecordProvider provider = new AuditEventRecordProvider(PageAuditLogViewer.this);
+ BoxedTablePanel table = new BoxedTablePanel(ID_TABLE, provider,
+ initColumns(),
+ UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER,
+ (int) getItemsPerPage(UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER));
+ table.setShowPaging(true);
+ table.setOutputMarkupId(true);
+ mainForm.add(table);
+ }
+
+ private List, String>> initColumns() {
+ List, String>> columns = new ArrayList<>();
+ IColumn timeColumn = new PropertyColumn(createStringResource("PageAuditLogViewer.column.time"), "timestamp");
+ columns.add(timeColumn);
+ IColumn initiatorColumn = new PropertyColumn(createStringResource("PageAuditLogViewer.column.initiatorRef"), "initiatorRef");
+ columns.add(initiatorColumn);
+ IColumn taskIdentifierColumn = new PropertyColumn(createStringResource("PageAuditLogViewer.column.taskIdentifier"), "taskIdentifier");
+ columns.add(taskIdentifierColumn);
+ IColumn channelColumn = new PropertyColumn(createStringResource("PageAuditLogViewer.column.channel"), "channel");
+ columns.add(channelColumn);
+ IColumn deltaColumn = new PropertyColumn(createStringResource("PageAuditLogViewer.column.delta"), "delta");
+ columns.add(deltaColumn);
+ return columns;
+ }
+
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java
new file mode 100644
index 00000000000..a398100b94a
--- /dev/null
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/dto/AuditEventRecordProvider.java
@@ -0,0 +1,159 @@
+package com.evolveum.midpoint.web.page.admin.reports.dto;
+
+import com.evolveum.midpoint.audit.api.AuditEventRecord;
+import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
+import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
+import org.apache.wicket.Component;
+import org.apache.wicket.model.IModel;
+
+import java.util.*;
+
+/**
+ * Created by honchar.
+ */
+public class AuditEventRecordProvider extends BaseSortableDataProvider {
+ private IModel> model;
+
+ private String auditEventQuery;
+ private Map parameters = new HashMap<>();
+
+ private static final String AUDIT_RECORDS_QUERY_CORE = "from RAuditEventRecord as aer where 1=1 and ";
+ private static final String AUDIT_RECORDS_QUERY_COUNT = "select count(*) ";
+ private static final String AUDIT_RECORDS_ORDER_BY = " order by aer.timestamp asc";
+ private static final String SET_FIRST_RESULT_PARAMETER = "setFirstResult";
+ private static final String SET_MAX_RESULTS_PARAMETER = "setMaxResults";
+
+ public AuditEventRecordProvider(Component component){
+ this(component, AUDIT_RECORDS_QUERY_CORE, new HashMap());
+ }
+
+ public AuditEventRecordProvider(Component component, String auditEventQuery, Map parameters ){
+ super(component);
+ this.auditEventQuery = auditEventQuery;
+ this.parameters = parameters;
+
+ initModel();
+ }
+
+
+ private void initModel(){
+ model = new IModel>() {
+ @Override
+ public List getObject() {
+ return listRecords(auditEventQuery, true);
+ }
+
+ @Override
+ public void setObject(List auditEventRecordTypes) {
+
+ }
+
+ @Override
+ public void detach() {
+
+ }
+ };
+ }
+
+ @Override
+ public Iterator internalIterator(long first, long count) {
+ Map queryParameters = getParameters();
+ if (queryParameters.containsKey(SET_FIRST_RESULT_PARAMETER)){
+ queryParameters.remove(SET_FIRST_RESULT_PARAMETER);
+ }
+ queryParameters.put(SET_FIRST_RESULT_PARAMETER, ((Long) first).intValue());
+ if (queryParameters.containsKey(SET_MAX_RESULTS_PARAMETER)){
+ queryParameters.remove(SET_MAX_RESULTS_PARAMETER);
+ }
+ queryParameters.put(SET_MAX_RESULTS_PARAMETER, ((Long) count).intValue());
+
+ List recordsList = listRecords(auditEventQuery, true);
+ return recordsList.iterator();
+ }
+
+
+ @Override
+ protected int internalSize(){
+ Map queryParameters = getParameters();
+ String query = generateFullQuery(AUDIT_RECORDS_QUERY_COUNT + auditEventQuery, false);
+ long count = getAuditService().countObjects(query, queryParameters);
+
+ return ((Long)count).intValue();
+ }
+
+ private List listRecords(String query, boolean orderBy){
+ Map queryParameters = getParameters();
+ String parameterQuery = generateFullQuery(query, orderBy);
+ List auditRecords = getAuditService().listRecords(parameterQuery, queryParameters);
+ if (auditRecords == null){
+ auditRecords = new ArrayList<>();
+ }
+ List auditRecordList = new ArrayList<>();
+ for (AuditEventRecord record : auditRecords){
+ auditRecordList.add(record.createAuditEventRecordType());
+ }
+
+ return auditRecordList;
+ }
+
+ public String getAuditEventQuery() {
+ return auditEventQuery;
+ }
+
+ public void setAuditEventQuery(String auditEventQuery) {
+ this.auditEventQuery = auditEventQuery;
+ }
+
+ private String generateFullQuery(String query, boolean orderBy){
+ Map queryParameters = getParameters();
+ if (queryParameters.get("from") != null) {
+ query += "(aer.timestamp >= :from) and ";
+ } else {
+ queryParameters.remove("from");
+ }
+ if (queryParameters.get("to") != null) {
+ query += "(aer.timestamp <= :to) and ";
+ } else {
+ queryParameters.remove("to");
+ }
+ if (queryParameters.get("eventType") != null) {
+ query += "(aer.eventType = :eventType) and ";
+ } else {
+ queryParameters.remove("eventType");
+ }
+ if (queryParameters.get("eventStage") != null) {
+ query += "(aer.eventStage = :eventStage) and ";
+ } else {
+ queryParameters.remove("eventStage");
+ }
+ if (queryParameters.get("outcome") != null) {
+ query += "(aer.outcome = :outcome) and ";
+ } else {
+ queryParameters.remove("outcome");
+ }
+ if (queryParameters.get("initiatorName") != null) {
+ query += "(aer.initiatorName = :initiatorName) and ";
+ } else {
+ queryParameters.remove("initiatorName");
+ }
+ if (queryParameters.get("targetName") != null) {
+ query += "(aer.targetName = :targetName) and ";
+ } else {
+ queryParameters.remove("targetName");
+ }
+
+ query = query.substring(0, query.length()-5); // remove trailing and
+ if (orderBy){
+ query += AUDIT_RECORDS_ORDER_BY;
+ }
+ return query;
+ }
+
+ public Map getParameters() {
+ return parameters;
+ }
+
+ public void setParameters(Map parameters) {
+ this.parameters = parameters;
+ }
+}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java
index 968737ea039..6f0ee8b37be 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java
@@ -33,6 +33,7 @@
import java.util.Properties;
import java.util.Set;
+import com.evolveum.midpoint.audit.api.AuditService;
import com.evolveum.midpoint.model.common.expression.ExpressionFactory;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.repo.api.RepositoryService;
@@ -190,6 +191,8 @@ public class MidPointApplication extends AuthenticatedWebApplication {
transient ExpressionFactory expressionFactory;
@Autowired
transient TaskManager taskManager;
+ @Autowired
+ transient AuditService auditService;
@Autowired
transient private RepositoryService repositoryService; // temporary
@Autowired
@@ -322,6 +325,10 @@ public TaskManager getTaskManager() {
return taskManager;
}
+ public AuditService getAuditService() {
+ return auditService;
+ }
+
public RepositoryService getRepositoryService() {
return repositoryService;
}
diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties
index 59288846f1b..51ebcb9edab 100644
--- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties
+++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties
@@ -3340,4 +3340,12 @@ PageAuditLogViewer.title=Audit Log Viewer
PageAuditLogViewer.menuName=Audit Log Viewer
PageAuditLogViewer.timeLabel=Time
PageAuditLogViewer.fromLabel=from
+PageAuditLogViewer.toLabel=to
+PageAuditLogViewer.initiatorLabel=initiator
+PageAuditLogViewer.channelLabel=channel
+PageAuditLogViewer.propertyLabel=property
PageAuditLogViewer.column.time=Time
+PageAuditLogViewer.column.initiatorRef=Initiator
+PageAuditLogViewer.column.taskIdentifier=Task Identifier
+PageAuditLogViewer.column.channel=Channel
+PageAuditLogViewer.column.delta=Delta
\ No newline at end of file
diff --git a/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java b/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java
index df61fee7842..5f36812d9f5 100644
--- a/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java
+++ b/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java
@@ -71,6 +71,7 @@
import org.identityconnectors.framework.spi.operations.TestOp;
import org.identityconnectors.framework.spi.operations.UpdateAttributeValuesOp;
+import com.evolveum.icf.dummy.resource.ConflictException;
import com.evolveum.icf.dummy.resource.DummyAccount;
import com.evolveum.icf.dummy.resource.DummyAttributeDefinition;
import com.evolveum.icf.dummy.resource.DummyDelta;
@@ -268,6 +269,8 @@ public Uid create(final ObjectClass objectClass, final Set createAttr
throw new ConnectorIOException(e.getMessage(), e);
} catch (SchemaViolationException e) {
throw new InvalidAttributeValueException(e);
+ } catch (ConflictException e) {
+ throw new AlreadyExistsException(e);
}
String id;
@@ -505,6 +508,9 @@ public Uid update(ObjectClass objectClass, Uid uid, Set replaceAttrib
} catch (SchemaViolationException e) {
log.info("update::exception "+e);
throw new InvalidAttributeValueException(e.getMessage(), e);
+ } catch (ConflictException e) {
+ log.info("update::exception "+e);
+ throw new AlreadyExistsException(e);
}
log.info("update::end");
@@ -698,6 +704,9 @@ public Uid addAttributeValues(ObjectClass objectClass, Uid uid, Set v
} catch (SchemaViolationException e) {
log.info("addAttributeValues::exception "+e);
throw new InvalidAttributeValueException(e.getMessage(), e);
+ } catch (ConflictException e) {
+ log.info("addAttributeValues::exception "+e);
+ throw new AlreadyExistsException(e);
}
return uid;
@@ -874,6 +883,9 @@ public Uid removeAttributeValues(ObjectClass objectClass, Uid uid, Set createAttributes) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ private DummyAccount convertToAccount(Set createAttributes) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
log.ok("Create attributes: {0}", createAttributes);
String userName = Utils.getMandatoryStringAttribute(createAttributes, Name.NAME);
if (configuration.getUpCaseName()) {
@@ -1725,7 +1751,7 @@ private DummyAccount convertToAccount(Set createAttributes) throws Co
return newAccount;
}
- private DummyGroup convertToGroup(Set createAttributes) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ private DummyGroup convertToGroup(Set createAttributes) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
String icfName = Utils.getMandatoryStringAttribute(createAttributes,Name.NAME);
if (configuration.getUpCaseName()) {
icfName = StringUtils.upperCase(icfName);
@@ -1774,7 +1800,7 @@ private DummyGroup convertToGroup(Set createAttributes) throws Connec
return newGroup;
}
- private DummyPrivilege convertToPriv(Set createAttributes) throws ConnectException, FileNotFoundException {
+ private DummyPrivilege convertToPriv(Set createAttributes) throws ConnectException, FileNotFoundException, ConflictException {
String icfName = Utils.getMandatoryStringAttribute(createAttributes,Name.NAME);
if (configuration.getUpCaseName()) {
icfName = StringUtils.upperCase(icfName);
@@ -1807,7 +1833,7 @@ private DummyPrivilege convertToPriv(Set createAttributes) throws Con
return newPriv;
}
- private DummyOrg convertToOrg(Set createAttributes) throws ConnectException, FileNotFoundException {
+ private DummyOrg convertToOrg(Set createAttributes) throws ConnectException, FileNotFoundException, ConflictException {
String icfName = Utils.getMandatoryStringAttribute(createAttributes,Name.NAME);
if (configuration.getUpCaseName()) {
icfName = StringUtils.upperCase(icfName);
@@ -1879,7 +1905,7 @@ private Date getDate(Attribute attr) {
}
- private void changePassword(final DummyAccount account, Attribute attr) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ private void changePassword(final DummyAccount account, Attribute attr) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
final String[] passwdArray = { null };
if (attr.getValue() != null && !attr.getValue().isEmpty()) {
Object passwdObject = attr.getValue().get(0);
diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/BreakMode.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/BreakMode.java
index 057596b9b8d..22c45cd5fcd 100644
--- a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/BreakMode.java
+++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/BreakMode.java
@@ -25,6 +25,7 @@ public enum BreakMode {
NETWORK,
IO,
SCHEMA,
+ CONFLICT, // results in AlreadyExists exceptions
GENERIC,
UNSUPPORTED,
RUNTIME;
diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/ConflictException.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/ConflictException.java
new file mode 100644
index 00000000000..617b93588ab
--- /dev/null
+++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/ConflictException.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2016 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.icf.dummy.resource;
+
+/**
+ * @author semancik
+ *
+ */
+public class ConflictException extends Exception {
+
+ public ConflictException() {
+ super();
+ }
+
+ public ConflictException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ConflictException(String message) {
+ super(message);
+ }
+
+ public ConflictException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyAccount.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyAccount.java
index af9c7b191b5..3b6262b86f9 100644
--- a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyAccount.java
+++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyAccount.java
@@ -55,7 +55,7 @@ public String getPassword() {
return password;
}
- public void setPassword(String password) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void setPassword(String password) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
checkModifyBreak();
this.password = password;
}
@@ -64,13 +64,13 @@ public Boolean isLockout() {
return lockout;
}
- public void setLockout(boolean lockout) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void setLockout(boolean lockout) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
checkModifyBreak();
this.lockout = lockout;
}
@Override
- protected DummyObjectClass getObjectClass() throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyObjectClass getObjectClass() throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
return resource.getAccountObjectClass();
}
diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyGroup.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyGroup.java
index 708f9c94cb5..e3445bf5542 100644
--- a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyGroup.java
+++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyGroup.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2013 Evolveum
+ * Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -48,7 +48,7 @@ public Collection getMembers() {
return getAttributeValues(ATTR_MEMBERS_NAME, String.class);
}
- public void addMember(String newMember) throws SchemaViolationException, ConnectException, FileNotFoundException {
+ public void addMember(String newMember) throws SchemaViolationException, ConnectException, FileNotFoundException, ConflictException {
addAttributeValue(ATTR_MEMBERS_NAME, newMember);
}
@@ -60,7 +60,7 @@ public boolean containsMember(String member) {
return members.contains(member); // TODO ok? what about case ignoring scenarios?
}
- public void removeMember(String newMember) throws SchemaViolationException, ConnectException, FileNotFoundException {
+ public void removeMember(String newMember) throws SchemaViolationException, ConnectException, FileNotFoundException, ConflictException {
removeAttributeValue(ATTR_MEMBERS_NAME, newMember);
}
diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java
index d29a58f21af..9364fca652b 100644
--- a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java
+++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2014 Evolveum
+ * Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -88,7 +88,7 @@ public Boolean isEnabled() {
return enabled;
}
- public void setEnabled(Boolean enabled) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void setEnabled(Boolean enabled) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
checkModifyBreak();
this.enabled = enabled;
}
@@ -97,7 +97,7 @@ public Date getValidFrom() {
return validFrom;
}
- public void setValidFrom(Date validFrom) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void setValidFrom(Date validFrom) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
checkModifyBreak();
this.validFrom = validFrom;
}
@@ -106,7 +106,7 @@ public Date getValidTo() {
return validTo;
}
- public void setValidTo(Date validTo) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void setValidTo(Date validTo) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
checkModifyBreak();
this.validTo = validTo;
}
@@ -143,13 +143,13 @@ public String getAttributeValue(String attrName) {
return getAttributeValue(attrName,String.class);
}
- public void replaceAttributeValue(String name, Object value) throws SchemaViolationException, ConnectException, FileNotFoundException, SchemaViolationException {
+ public void replaceAttributeValue(String name, Object value) throws SchemaViolationException, ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
Collection
+
+ [ri:location]
+ Location
+
+ strong
+
+
+
[ri:ship]
Ship
diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java
index 4aa3b43fa53..d25e03cbcaf 100644
--- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java
+++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java
@@ -15,6 +15,7 @@
*/
package com.evolveum.midpoint.model.test;
+import com.evolveum.icf.dummy.resource.ConflictException;
import com.evolveum.icf.dummy.resource.DummyAccount;
import com.evolveum.icf.dummy.resource.DummyGroup;
import com.evolveum.icf.dummy.resource.DummyResource;
@@ -2561,7 +2562,7 @@ protected void checkDummyTransportMessagesAtLeast(String name, int expectedCount
assertTrue("Number of messages recorded in dummy transport '" + name + "' (" + messages.size() + ") is not at least " + expectedCount, messages.size() >= expectedCount);
}
- protected DummyAccount getDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException {
+ protected DummyAccount getDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException, ConflictException {
DummyResource dummyResource = DummyResource.getInstance(dummyInstanceName);
try {
return dummyResource.getAccountByUsername(username);
@@ -2572,7 +2573,7 @@ protected DummyAccount getDummyAccount(String dummyInstanceName, String username
}
}
- protected DummyAccount getDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException {
+ protected DummyAccount getDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException, ConflictException {
DummyResource dummyResource = DummyResource.getInstance(dummyInstanceName);
try {
return dummyResource.getAccountById(id);
@@ -2583,11 +2584,11 @@ protected DummyAccount getDummyAccountById(String dummyInstanceName, String id)
}
}
- protected void assertDefaultDummyAccount(String username, String fullname, boolean active) throws SchemaViolationException {
+ protected void assertDefaultDummyAccount(String username, String fullname, boolean active) throws SchemaViolationException, ConflictException {
assertDummyAccount(null, username, fullname, active);
}
- protected DummyAccount assertDummyAccount(String dummyInstanceName, String username, String fullname, Boolean active) throws SchemaViolationException {
+ protected DummyAccount assertDummyAccount(String dummyInstanceName, String username, String fullname, Boolean active) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy("+dummyInstanceName+") account for username "+username, account);
assertEquals("Wrong fullname for dummy("+dummyInstanceName+") account "+username, fullname, account.getAttributeValue("fullname"));
@@ -2595,41 +2596,41 @@ protected DummyAccount assertDummyAccount(String dummyInstanceName, String usern
return account;
}
- protected void assertDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException {
+ protected void assertDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy(" + dummyInstanceName + ") account for username " + username, account);
}
- protected void assertDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException {
+ protected void assertDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccountById(dummyInstanceName, id);
assertNotNull("No dummy("+dummyInstanceName+") account for id "+id, account);
}
- protected void assertNoDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException {
+ protected void assertNoDummyAccountById(String dummyInstanceName, String id) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccountById(dummyInstanceName, id);
assertNull("Dummy(" + dummyInstanceName + ") account for id " + id + " exists while not expecting it", account);
}
- protected void assertDummyAccountActivation(String dummyInstanceName, String username, Boolean active) throws SchemaViolationException {
+ protected void assertDummyAccountActivation(String dummyInstanceName, String username, Boolean active) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy("+dummyInstanceName+") account for username "+username, account);
assertEquals("Wrong activation for dummy(" + dummyInstanceName + ") account " + username, active, account.isEnabled());
}
- protected void assertNoDummyAccount(String username) throws SchemaViolationException {
+ protected void assertNoDummyAccount(String username) throws SchemaViolationException, ConflictException {
assertNoDummyAccount(null, username);
}
- protected void assertNoDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException {
+ protected void assertNoDummyAccount(String dummyInstanceName, String username) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNull("Dummy account for username " + username + " exists while not expecting it (" + dummyInstanceName + ")", account);
}
- protected void assertDefaultDummyAccountAttribute(String username, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException {
+ protected void assertDefaultDummyAccountAttribute(String username, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException, ConflictException {
assertDummyAccountAttribute(null, username, attributeName, expectedAttributeValues);
}
- protected void assertDummyAccountAttribute(String dummyInstanceName, String username, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException {
+ protected void assertDummyAccountAttribute(String dummyInstanceName, String username, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy account for username "+username, account);
Set values = account.getAttributeValues(attributeName, Object.class);
@@ -2648,7 +2649,7 @@ protected void assertDummyAccountAttribute(String dummyInstanceName, String user
}
}
- protected void assertNoDummyAccountAttribute(String dummyInstanceName, String username, String attributeName) throws SchemaViolationException {
+ protected void assertNoDummyAccountAttribute(String dummyInstanceName, String username, String attributeName) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy account for username "+username, account);
Set values = account.getAttributeValues(attributeName, Object.class);
@@ -2659,7 +2660,7 @@ protected void assertNoDummyAccountAttribute(String dummyInstanceName, String us
". Values found: " + values);
}
- protected void assertDummyAccountAttributeGenerated(String dummyInstanceName, String username) throws SchemaViolationException {
+ protected void assertDummyAccountAttributeGenerated(String dummyInstanceName, String username) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy account for username "+username, account);
Integer generated = account.getAttributeValue(DummyAccount.ATTR_INTERNAL_ID, Integer.class);
@@ -2668,7 +2669,7 @@ protected void assertDummyAccountAttributeGenerated(String dummyInstanceName, St
}
}
- protected DummyGroup getDummyGroup(String dummyInstanceName, String name) throws SchemaViolationException {
+ protected DummyGroup getDummyGroup(String dummyInstanceName, String name) throws SchemaViolationException, ConflictException {
DummyResource dummyResource = DummyResource.getInstance(dummyInstanceName);
try {
return dummyResource.getGroupByName(name);
@@ -2679,15 +2680,15 @@ protected DummyGroup getDummyGroup(String dummyInstanceName, String name) throws
}
}
- protected void assertDummyGroup(String username, String description) throws SchemaViolationException {
+ protected void assertDummyGroup(String username, String description) throws SchemaViolationException, ConflictException {
assertDummyGroup(null, username, description, null);
}
- protected void assertDummyGroup(String username, String description, Boolean active) throws SchemaViolationException {
+ protected void assertDummyGroup(String username, String description, Boolean active) throws SchemaViolationException, ConflictException {
assertDummyGroup(null, username, description, active);
}
- protected void assertDummyGroup(String dummyInstanceName, String groupname, String description, Boolean active) throws SchemaViolationException {
+ protected void assertDummyGroup(String dummyInstanceName, String groupname, String description, Boolean active) throws SchemaViolationException, ConflictException {
DummyGroup group = getDummyGroup(dummyInstanceName, groupname);
assertNotNull("No dummy("+dummyInstanceName+") group for name "+groupname, group);
assertEquals("Wrong fullname for dummy(" + dummyInstanceName + ") group " + groupname, description,
@@ -2697,16 +2698,16 @@ protected void assertDummyGroup(String dummyInstanceName, String groupname, Stri
}
}
- protected void assertNoDummyGroup(String groupname) throws SchemaViolationException {
+ protected void assertNoDummyGroup(String groupname) throws SchemaViolationException, ConflictException {
assertNoDummyGroup(null, groupname);
}
- protected void assertNoDummyGroup(String dummyInstanceName, String groupname) throws SchemaViolationException {
+ protected void assertNoDummyGroup(String dummyInstanceName, String groupname) throws SchemaViolationException, ConflictException {
DummyGroup group = getDummyGroup(dummyInstanceName, groupname);
assertNull("Dummy group '" + groupname + "' exists while not expecting it (" + dummyInstanceName + ")", group);
}
- protected void assertDummyGroupAttribute(String dummyInstanceName, String groupname, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException {
+ protected void assertDummyGroupAttribute(String dummyInstanceName, String groupname, String attributeName, Object... expectedAttributeValues) throws SchemaViolationException, ConflictException {
DummyGroup group = getDummyGroup(dummyInstanceName, groupname);
assertNotNull("No dummy group for groupname "+groupname, group);
Set values = group.getAttributeValues(attributeName, Object.class);
@@ -2723,27 +2724,27 @@ protected void assertDummyGroupAttribute(String dummyInstanceName, String groupn
}
}
- protected void assertDummyGroupMember(String dummyInstanceName, String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected void assertDummyGroupMember(String dummyInstanceName, String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
DummyResource dummyResource = DummyResource.getInstance(dummyInstanceName);
DummyGroup group = dummyResource.getGroupByName(dummyGroupName);
IntegrationTestTools.assertGroupMember(group, accountId);
}
- protected void assertDefaultDummyGroupMember(String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected void assertDefaultDummyGroupMember(String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
assertDummyGroupMember(null, dummyGroupName, accountId);
}
- protected void assertNoDummyGroupMember(String dummyInstanceName, String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected void assertNoDummyGroupMember(String dummyInstanceName, String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
DummyResource dummyResource = DummyResource.getInstance(dummyInstanceName);
DummyGroup group = dummyResource.getGroupByName(dummyGroupName);
IntegrationTestTools.assertNoGroupMember(group, accountId);
}
- protected void assertNoDefaultDummyGroupMember(String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected void assertNoDefaultDummyGroupMember(String dummyGroupName, String accountId) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
assertNoDummyGroupMember(null, dummyGroupName, accountId);
}
- protected void assertDummyAccountNoAttribute(String dummyInstanceName, String username, String attributeName) throws SchemaViolationException {
+ protected void assertDummyAccountNoAttribute(String dummyInstanceName, String username, String attributeName) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(dummyInstanceName, username);
assertNotNull("No dummy account for username "+username, account);
Set values = account.getAttributeValues(attributeName, Object.class);
@@ -3287,7 +3288,7 @@ protected void assertPasswordMetadata(PrismObject user, boolean create
}
}
- protected void assertDummyPassword(String instance, String userId, String expectedClearPassword) throws SchemaViolationException {
+ protected void assertDummyPassword(String instance, String userId, String expectedClearPassword) throws SchemaViolationException, ConflictException {
DummyAccount account = getDummyAccount(instance, userId);
assertNotNull("No dummy account "+userId, account);
assertEquals("Wrong password in dummy '"+instance+"' account "+userId, expectedClearPassword, account.getPassword());
diff --git a/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningOperationOptions.java b/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningOperationOptions.java
index a1a723f7cb7..23222a9beeb 100644
--- a/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningOperationOptions.java
+++ b/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningOperationOptions.java
@@ -19,25 +19,23 @@
import java.io.Serializable;
public class ProvisioningOperationOptions implements Serializable {
-
private static final long serialVersionUID = -6960273605308871338L;
/**
* Avoid any smart processing of the data except for schema application. Do not synchronize the data, do not apply
* any expressions, etc.
*/
- Boolean raw;
+ private Boolean raw;
- Boolean completePostponed;
+ private Boolean completePostponed;
- Boolean force;
+ private Boolean force;
- Boolean postpone;
+ private Boolean postpone;
- // TODO: align with GetOperationOptions, the option there is doNotDiscovery
- Boolean doDiscovery;
+ private Boolean doNotDiscovery;
- Boolean overwrite;
+ private Boolean overwrite;
public Boolean getCompletePostponed() {
return completePostponed;
@@ -112,27 +110,27 @@ public static ProvisioningOperationOptions createPostpone(boolean postpone) {
return opts;
}
- public Boolean getDoDiscovery() {
- return doDiscovery;
+ public Boolean getDoNotDiscovery() {
+ return doNotDiscovery;
}
- public void setDoDiscovery(Boolean doDiscovery) {
- this.doDiscovery = doDiscovery;
+ public void setDoNotDiscovery(Boolean doDiscovery) {
+ this.doNotDiscovery = doDiscovery;
}
- public static boolean isDoDiscovery(ProvisioningOperationOptions options){
+ public static boolean isDoNotDiscovery(ProvisioningOperationOptions options){
if (options == null) {
return false;
}
- if (options.doDiscovery == null) {
+ if (options.doNotDiscovery == null) {
return false;
}
- return options.doDiscovery;
+ return options.doNotDiscovery;
}
- public static ProvisioningOperationOptions createDoDiscovery(boolean doDiscovery) {
+ public static ProvisioningOperationOptions createDoNotDiscovery(boolean doDiscovery) {
ProvisioningOperationOptions opts = new ProvisioningOperationOptions();
- opts.setDoDiscovery(doDiscovery);
+ opts.setDoNotDiscovery(doDiscovery);
return opts;
}
@@ -185,5 +183,32 @@ public static ProvisioningOperationOptions createRaw() {
return opts;
}
-
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder("ProvisioningOperationOptions(");
+ appendFlag(sb, "raw", raw);
+ appendFlag(sb, "completePostponed", completePostponed);
+ appendFlag(sb, "force", force);
+ appendFlag(sb, "postpone", postpone);
+ appendFlag(sb, "doNotDiscovery", doNotDiscovery);
+ appendFlag(sb, "overwrite", overwrite);
+ if (sb.charAt(sb.length() - 1) == ',') {
+ sb.deleteCharAt(sb.length() - 1);
+ }
+ sb.append(")");
+ return sb.toString();
+ }
+
+ private void appendFlag(StringBuilder sb, String name, Boolean val) {
+ if (val == null) {
+ return;
+ } else if (val) {
+ sb.append(name);
+ sb.append(",");
+ } else {
+ sb.append(name);
+ sb.append("=false,");
+ }
+ }
+
}
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/api/ErrorHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/api/ErrorHandler.java
index e4fccdd8947..8b7dc1049d7 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/api/ErrorHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/api/ErrorHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010-2013 Evolveum
+ * Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -71,19 +71,9 @@ protected boolean isPostpone(ResourceType resource){
return resource.getConsistency().isPostpone();
}
- protected boolean isDoDiscovery(ResourceType resource){
- if (resource.getConsistency() == null){
- return true;
- }
-
- if (resource.getConsistency().isDiscovery() == null){
- return true;
- }
-
- return resource.getConsistency().isDiscovery();
- }
-
- public abstract T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate, Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException, ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException;
+ public abstract T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate, Task task, OperationResult parentResult)
+ throws SchemaException, GenericFrameworkException, CommunicationException, ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException;
protected Collection createAttemptModification(T shadow,
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/CommunicationExceptionHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/CommunicationExceptionHandler.java
index b660bf49a32..1aacb7762b7 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/CommunicationExceptionHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/CommunicationExceptionHandler.java
@@ -87,10 +87,20 @@ public void setCacheRepositoryService(RepositoryService repositoryService) {
}
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException {
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof CommunicationException) {
+ throw (CommunicationException)ex;
+ } else {
+ throw new CommunicationException(ex.getMessage(), ex);
+ }
+ }
+
Validate.notNull(shadow, "Shadow must not be null.");
OperationResult operationResult = parentResult.createSubresult("com.evolveum.midpoint.provisioning.consistency.impl.CommunicationExceptionHandler.handleError." + op.name());
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ConfigurationExceptionHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ConfigurationExceptionHandler.java
index 41b87901466..cef29545fae 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ConfigurationExceptionHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ConfigurationExceptionHandler.java
@@ -54,10 +54,20 @@ public class ConfigurationExceptionHandler extends ErrorHandler {
private RepositoryService cacheRepositoryService;
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException {
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof ConfigurationException) {
+ throw (ConfigurationException)ex;
+ } else {
+ throw new ConfigurationException(ex.getMessage(), ex);
+ }
+ }
+
ObjectDelta delta = null;
switch (op) {
case ADD:
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/GenericErrorHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/GenericErrorHandler.java
index 4af7194d0c9..54c4aeaa962 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/GenericErrorHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/GenericErrorHandler.java
@@ -74,10 +74,20 @@ public class GenericErrorHandler extends ErrorHandler{
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof GenericFrameworkException) {
+ throw (GenericFrameworkException)ex;
+ } else {
+ throw new GenericFrameworkException(ex.getMessage(), ex);
+ }
+ }
+
// OperationResult result = OperationResult.createOperationResult(shadow.getResult());
String operation = (shadow.getFailedOperationType() == null ? "null" : shadow.getFailedOperationType().name());
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java
index 5784d4f7cfb..2443cfe079d 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectAlreadyExistHandler.java
@@ -63,12 +63,18 @@ public class ObjectAlreadyExistHandler extends ErrorHandler {
private static final Trace LOGGER = TraceManager.getTrace(ObjectAlreadyExistHandler.class);
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
- if (!isDoDiscovery(shadow.getResource())){
- throw new ObjectAlreadyExistsException();
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof ObjectAlreadyExistsException) {
+ throw (ObjectAlreadyExistsException)ex;
+ } else {
+ throw new ObjectAlreadyExistsException(ex.getMessage(), ex);
+ }
}
LOGGER.trace("Start to hanlde ObjectAlreadyExitsException.");
@@ -113,7 +119,7 @@ public T handleError(T shadow, FailedOperation op, Except
}
if (compensate){
- throw new ObjectAlreadyExistsException(ex.getMessage(), ex);
+ throw new ObjectAlreadyExistsException(ex.getMessage(), ex);
}
return shadow;
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectNotFoundHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectNotFoundHandler.java
index 563fb1fb48a..eccd0cc93df 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectNotFoundHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/ObjectNotFoundHandler.java
@@ -95,12 +95,18 @@ public void setCacheRepositoryService(RepositoryService repositoryService) {
}
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
- if (!isDoDiscovery(shadow.getResource())){
- throw new ObjectNotFoundException(ex.getMessage(), ex);
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof ObjectNotFoundException) {
+ throw (ObjectNotFoundException)ex;
+ } else {
+ throw new ObjectNotFoundException(ex.getMessage(), ex);
+ }
}
OperationResult result = parentResult
@@ -182,7 +188,7 @@ public T handleError(T shadow, FailedOperation op, Except
try {
ProvisioningOperationOptions options = new ProvisioningOperationOptions();
options.setCompletePostponed(false);
- options.setDoDiscovery(false);
+ options.setDoNotDiscovery(true);
provisioningService.modifyObject(ShadowType.class, oid, modifications, null, options, task,
result);
parentResult.recordHandledError(
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SchemaExceptionHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SchemaExceptionHandler.java
index e030b22e7a7..484b7ba39a3 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SchemaExceptionHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SchemaExceptionHandler.java
@@ -51,10 +51,20 @@ public class SchemaExceptionHandler extends ErrorHandler{
private RepositoryService cacheRepositoryService;
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof SchemaException) {
+ throw (SchemaException)ex;
+ } else {
+ throw new SchemaException(ex.getMessage(), ex);
+ }
+ }
+
ObjectDelta delta = null;
switch (op) {
case ADD:
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SecurityViolationHandler.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SecurityViolationHandler.java
index 238bfaec5c8..fa8b8c924aa 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SecurityViolationHandler.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/consistency/impl/SecurityViolationHandler.java
@@ -51,10 +51,20 @@ public class SecurityViolationHandler extends ErrorHandler{
private RepositoryService cacheRepositoryService;
@Override
- public T handleError(T shadow, FailedOperation op, Exception ex, boolean compensate,
+ public T handleError(T shadow, FailedOperation op, Exception ex,
+ boolean doDiscovery, boolean compensate,
Task task, OperationResult parentResult) throws SchemaException, GenericFrameworkException, CommunicationException,
ObjectNotFoundException, ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
+ if (!doDiscovery) {
+ parentResult.recordFatalError(ex);
+ if (ex instanceof SecurityViolationException) {
+ throw (SecurityViolationException)ex;
+ } else {
+ throw new SecurityViolationException(ex.getMessage(), ex);
+ }
+ }
+
ObjectDelta delta = null;
switch(op){
case ADD :
diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java
index a24967700d4..a2f28a4be40 100644
--- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java
+++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java
@@ -319,7 +319,7 @@ public PrismObject getShadow(String oid, PrismObject rep
try {
resourceShadow = handleError(ctx, ex, repositoryShadow, FailedOperation.GET, null,
- isCompensate(rootOptions), parentResult);
+ isDoDiscovery(resource, rootOptions), isCompensate(rootOptions), parentResult);
if (parentResult.getStatus() == OperationResultStatus.FATAL_ERROR) {
// We are going to return an object. Therefore this cannot
// be fatal error, as at least some information
@@ -348,9 +348,36 @@ public PrismObject getShadow(String oid, PrismObject rep
}
private boolean isCompensate(GetOperationOptions rootOptions) {
- return GetOperationOptions.isDoNotDiscovery(rootOptions) ? false : true;
+ return !GetOperationOptions.isDoNotDiscovery(rootOptions);
}
+ private boolean isCompensate(ProvisioningOperationOptions options) {
+ return ProvisioningOperationOptions.isCompletePostponed(options);
+ }
+
+ private boolean isDoDiscovery(ResourceType resource, GetOperationOptions rootOptions) {
+ return !GetOperationOptions.isDoNotDiscovery(rootOptions) && isDoDiscovery(resource);
+ }
+
+ private boolean isDoDiscovery(ResourceType resource, ProvisioningOperationOptions options) {
+ return !ProvisioningOperationOptions.isDoNotDiscovery(options) && isDoDiscovery(resource);
+ }
+
+ private boolean isDoDiscovery (ResourceType resource) {
+ if (resource == null) {
+ return true;
+ }
+ if (resource.getConsistency() == null) {
+ return true;
+ }
+
+ if (resource.getConsistency().isDiscovery() == null) {
+ return true;
+ }
+
+ return resource.getConsistency().isDiscovery();
+ }
+
public abstract String afterAddOnResource(ProvisioningContext ctx, PrismObject shadow,
OperationResult parentResult) throws SchemaException, ObjectAlreadyExistsException,
ObjectNotFoundException, ConfigurationException, CommunicationException;
@@ -372,7 +399,8 @@ public String addShadow(PrismObject shadow, OperationProvisioningScr
try {
ctx.assertDefinition();
} catch (SchemaException e) {
- handleError(ctx, e, shadow, FailedOperation.ADD, null, true, parentResult);
+ handleError(ctx, e, shadow, FailedOperation.ADD, null,
+ isDoDiscovery(resource, options), true, parentResult);
return null;
}
@@ -385,7 +413,8 @@ public String addShadow(PrismObject shadow, OperationProvisioningScr
SchemaException e = new SchemaException(
"Attempt to add shadow without any attributes: " + shadow);
parentResult.recordFatalError(e);
- handleError(ctx, e, shadow, FailedOperation.ADD, null, true, parentResult);
+ handleError(ctx, e, shadow, FailedOperation.ADD, null,
+ isDoDiscovery(resource, options), true, parentResult);
return null;
}
@@ -399,7 +428,7 @@ public String addShadow(PrismObject shadow, OperationProvisioningScr
} catch (Exception ex) {
shadow = handleError(ctx, ex, shadow, FailedOperation.ADD, null,
- ProvisioningOperationOptions.isCompletePostponed(options), parentResult);
+ isDoDiscovery(resource, options), isCompensate(options), parentResult);
return shadow.getOid();
}
@@ -491,7 +520,7 @@ public String modifyShadow(PrismObject repoShadow, String oid,
new Object[] { ex.getClass(), ex.getMessage(), ex });
try {
repoShadow = handleError(ctx, ex, repoShadow, FailedOperation.MODIFY, modifications,
- ProvisioningOperationOptions.isCompletePostponed(options), parentResult);
+ isDoDiscovery(ctx.getResource(), options), isCompensate(options), parentResult);
parentResult.computeStatus();
} catch (ObjectAlreadyExistsException e) {
parentResult.recordFatalError(
@@ -558,7 +587,7 @@ public void deleteShadow(PrismObject shadow, ProvisioningOperationOp
} catch (Exception ex) {
try {
handleError(ctx, ex, shadow, FailedOperation.DELETE, null,
- ProvisioningOperationOptions.isCompletePostponed(options), parentResult);
+ isDoDiscovery(ctx.getResource(), options), isCompensate(options), parentResult);
} catch (ObjectAlreadyExistsException e) {
e.printStackTrace();
}
@@ -702,12 +731,12 @@ protected ResourceType getResource(ResourceShadowDiscriminator coords, Operation
@SuppressWarnings("rawtypes")
protected PrismObject handleError(ProvisioningContext ctx, Exception ex,
PrismObject shadow, FailedOperation op, Collection extends ItemDelta> modifications,
- boolean compensate, OperationResult parentResult) throws SchemaException,
+ boolean doDiscovery, boolean compensate, OperationResult parentResult) throws SchemaException,
GenericFrameworkException, CommunicationException, ObjectNotFoundException,
ObjectAlreadyExistsException, ConfigurationException, SecurityViolationException {
// do not set result in the shadow in case of get operation, it will
- // resilted to misleading information
+ // resulted to misleading information
// by get operation we do not modify the result in the shadow, so only
// fetch result in this case needs to be set
if (FailedOperation.GET != op) {
@@ -722,12 +751,13 @@ protected PrismObject handleError(ProvisioningContext ctx, Exception
throw new SystemException(ex.getMessage(), ex);
}
- LOGGER.debug("Handling provisioning exception {}:{}",
+ LOGGER.debug("Handling provisioning exception {}: {}",
new Object[] { ex.getClass(), ex.getMessage() });
- LOGGER.trace("Handling provisioning exception {}:{}",
- new Object[] { ex.getClass(), ex.getMessage(), ex });
+ LOGGER.trace("Handling provisioning exception {}: {}\ndoDiscovery={}, compensate={}",
+ new Object[] { ex.getClass(), ex.getMessage(),
+ doDiscovery, compensate, ex });
- return handler.handleError(shadow.asObjectable(), op, ex, compensate, ctx.getTask(), parentResult)
+ return handler.handleError(shadow.asObjectable(), op, ex, doDiscovery, compensate, ctx.getTask(), parentResult)
.asPrismObject();
}
diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java
index 02d1549c830..5dba0d948af 100644
--- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java
+++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/AbstractDummyTest.java
@@ -37,6 +37,7 @@
import org.testng.AssertJUnit;
import org.w3c.dom.Element;
+import com.evolveum.icf.dummy.resource.ConflictException;
import com.evolveum.icf.dummy.resource.DummyAccount;
import com.evolveum.icf.dummy.resource.DummyAttributeDefinition;
import com.evolveum.icf.dummy.resource.DummyGroup;
@@ -324,7 +325,7 @@ protected void assertSchemaSanity(ResourceSchema resourceSchema, ResourceType re
dummyResourceCtl.assertDummyResourceSchemaSanityExtended(resourceSchema, resourceType);
}
- protected DummyAccount getDummyAccount(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyAccount getDummyAccount(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getAccountByUsername(icfName);
@@ -333,7 +334,7 @@ protected DummyAccount getDummyAccount(String icfName, String icfUid) throws Con
}
}
- protected DummyAccount getDummyAccountAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyAccount getDummyAccountAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getAccountByUsername(icfName);
@@ -345,7 +346,7 @@ protected DummyAccount getDummyAccountAssert(String icfName, String icfUid) thro
}
}
- protected DummyGroup getDummyGroup(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyGroup getDummyGroup(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getGroupByName(icfName);
@@ -354,7 +355,7 @@ protected DummyGroup getDummyGroup(String icfName, String icfUid) throws Connect
}
}
- protected DummyGroup getDummyGroupAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyGroup getDummyGroupAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getGroupByName(icfName);
@@ -366,7 +367,7 @@ protected DummyGroup getDummyGroupAssert(String icfName, String icfUid) throws C
}
}
- protected DummyPrivilege getDummyPrivilege(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyPrivilege getDummyPrivilege(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getPrivilegeByName(icfName);
@@ -375,7 +376,7 @@ protected DummyPrivilege getDummyPrivilege(String icfName, String icfUid) throws
}
}
- protected DummyPrivilege getDummyPrivilegeAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected DummyPrivilege getDummyPrivilegeAssert(String icfName, String icfUid) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
// if (isNameUnique()) {
if (isIcfNameUidSame()) {
return dummyResource.getPrivilegeByName(icfName);
@@ -387,7 +388,7 @@ protected DummyPrivilege getDummyPrivilegeAssert(String icfName, String icfUid)
}
}
- protected void assertDummyAccountAttributeValues(String accountName, String accountUid, String attributeName, T... expectedValues) throws ConnectException, FileNotFoundException, SchemaViolationException {
+ protected void assertDummyAccountAttributeValues(String accountName, String accountUid, String attributeName, T... expectedValues) throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
DummyAccount dummyAccount = getDummyAccountAssert(accountName, accountUid);
assertNotNull("No account '"+accountName+"'", dummyAccount);
assertDummyAttributeValues(dummyAccount, attributeName, expectedValues);
diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummyUuidNonUniqueName.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummyUuidNonUniqueName.java
index 60ce88fae8d..ff8b937d1c1 100644
--- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummyUuidNonUniqueName.java
+++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummyUuidNonUniqueName.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015 Evolveum
+ * Copyright (c) 2013-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@
import org.springframework.test.context.ContextConfiguration;
import org.testng.annotations.Test;
+import com.evolveum.icf.dummy.resource.ConflictException;
import com.evolveum.icf.dummy.resource.DummyAccount;
import com.evolveum.icf.dummy.resource.SchemaViolationException;
import com.evolveum.midpoint.prism.PrismObject;
@@ -123,7 +124,7 @@ public void test600AddAccountAlreadyExist() throws Exception {
// DO nothing. This test is meaningless in non-unique environment
}
- private String addFettucini(final String TEST_NAME, File file, String oid, String expectedFullName) throws SchemaException, ObjectAlreadyExistsException, CommunicationException, ObjectNotFoundException, ConfigurationException, SecurityViolationException, IOException, SchemaViolationException {
+ private String addFettucini(final String TEST_NAME, File file, String oid, String expectedFullName) throws SchemaException, ObjectAlreadyExistsException, CommunicationException, ObjectNotFoundException, ConfigurationException, SecurityViolationException, IOException, SchemaViolationException, ConflictException {
// GIVEN
Task task = taskManager.createTaskInstance(TestDummy.class.getName()
+ "." + TEST_NAME);
diff --git a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyResourceContoller.java b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyResourceContoller.java
index e90c559d526..5305b7964fa 100644
--- a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyResourceContoller.java
+++ b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/DummyResourceContoller.java
@@ -30,6 +30,7 @@
import org.apache.commons.lang.StringUtils;
+import com.evolveum.icf.dummy.resource.ConflictException;
import com.evolveum.icf.dummy.resource.DummyAccount;
import com.evolveum.icf.dummy.resource.DummyAttributeDefinition;
import com.evolveum.icf.dummy.resource.DummyGroup;
@@ -147,7 +148,7 @@ public void populateWithDefaultSchema() {
/**
* Extend schema in piratey fashion. Arr! This is used in many tests. Lots of attributes, various combination of types, etc.
*/
- public void extendSchemaPirate() throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void extendSchemaPirate() throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
populateWithDefaultSchema();
DummyObjectClass accountObjectClass = dummyResource.getAccountObjectClass();
addAttrDef(accountObjectClass, DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME, String.class, false, true);
@@ -174,9 +175,9 @@ public void extendSchemaPirate() throws ConnectException, FileNotFoundException,
}
/**
- * Extend dummy schema to look like AD
+ * Extend dummy schema to look like AD
*/
- public void extendSchemaAd() throws ConnectException, FileNotFoundException, SchemaViolationException {
+ public void extendSchemaAd() throws ConnectException, FileNotFoundException, SchemaViolationException, ConflictException {
DummyObjectClass accountObjectClass = dummyResource.getAccountObjectClass();
addAttrDef(accountObjectClass, DUMMY_ACCOUNT_ATTRIBUTE_AD_GIVEN_NAME_NAME, String.class, false, false);
addAttrDef(accountObjectClass, DUMMY_ACCOUNT_ATTRIBUTE_AD_SN_NAME, String.class, false, false);
@@ -357,13 +358,13 @@ public void assertRefinedSchemaSanity(RefinedResourceSchema refinedSchema) {
}
- public DummyOrg addOrgTop() throws ConnectException, FileNotFoundException, ObjectAlreadyExistsException, SchemaViolationException {
+ public DummyOrg addOrgTop() throws ConnectException, FileNotFoundException, ObjectAlreadyExistsException, SchemaViolationException, ConflictException {
DummyOrg org = new DummyOrg(ORG_TOP_NAME);
dummyResource.addOrg(org);
return org;
}
- public DummyAccount addAccount(String userId, String fullName) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException {
+ public DummyAccount addAccount(String userId, String fullName) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException, ConflictException {
DummyAccount account = new DummyAccount(userId);
account.setEnabled(true);
account.addAttributeValues(DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME, fullName);
@@ -371,7 +372,7 @@ public DummyAccount addAccount(String userId, String fullName) throws ObjectAlre
return account;
}
- public void addAccount(String userId, String fullName, String location) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException {
+ public void addAccount(String userId, String fullName, String location) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException, ConflictException {
assertExtendedSchema();
DummyAccount account = new DummyAccount(userId);
account.setEnabled(true);
@@ -380,7 +381,7 @@ public void addAccount(String userId, String fullName, String location) throws O
dummyResource.addAccount(account);
}
- public void addGroup(String name) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException {
+ public void addGroup(String name) throws ObjectAlreadyExistsException, SchemaViolationException, ConnectException, FileNotFoundException, ConflictException {
assertExtendedSchema();
DummyGroup group = new DummyGroup(name);
group.setEnabled(true);
diff --git a/testing/consistency-mechanism/src/test/java/com/evolveum/midpoint/testing/consistency/ConsistencyTest.java b/testing/consistency-mechanism/src/test/java/com/evolveum/midpoint/testing/consistency/ConsistencyTest.java
index b86cb6a5229..7f16ff4261b 100644
--- a/testing/consistency-mechanism/src/test/java/com/evolveum/midpoint/testing/consistency/ConsistencyTest.java
+++ b/testing/consistency-mechanism/src/test/java/com/evolveum/midpoint/testing/consistency/ConsistencyTest.java
@@ -1562,7 +1562,9 @@ public void test280ModifyObjectCommunicationProblemWeakMapping() throws Exceptio
requestToExecuteChanges(REQUEST_USER_MODIFY_WEAK_MAPPING_COMMUNICATION_PROBLEM, USER_JOHN_WEAK_OID, UserType.class, task, null, parentResult);
- checkNormalizedShadowBasic(accountOid, "john", true, SelectorOptions.createCollection(GetOperationOptions.createDoNotDiscovery()), task, parentResult);
+ // TODO: [RS] not 100% sure about this. But if you do not expect an error you should not set doNotDiscovery. Server is still not running.
+ checkNormalizedShadowBasic(accountOid, "john", true, null, task, parentResult);
+// checkNormalizedShadowBasic(accountOid, "john", true, SelectorOptions.createCollection(GetOperationOptions.createDoNotDiscovery()), task, parentResult);
}