diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java index 0a7dbb31e27..b4c9cd65751 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebModelServiceUtils.java @@ -32,7 +32,6 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; @@ -53,6 +52,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java index 5dd757dcd52..1e6faffb192 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentCatalogPanel.java @@ -37,6 +37,7 @@ import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.orgs.OrgTreePanel; +import com.evolveum.midpoint.web.page.admin.users.dto.TreeStateSet; import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus; import com.evolveum.midpoint.web.page.self.PageAssignmentsList; import com.evolveum.midpoint.web.page.self.dto.AssignmentViewType; @@ -58,6 +59,7 @@ import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Created by honchar. @@ -85,7 +87,6 @@ public class AssignmentCatalogPanel extends BasePane private PageBase pageBase; private IModel selectedTreeItemOidModel; private String rootOid; - private String selectedOid; private IModel searchModel; private IModel viewModel; private ObjectDataProvider provider; @@ -100,7 +101,7 @@ public AssignmentCatalogPanel(String id, String rootOid, PageBase pageBase) { this.pageBase = pageBase; this.rootOid = rootOid; AssignmentViewType.saveViewTypeToSession(pageBase, AssignmentViewType.ROLE_CATALOG_VIEW); - selectedOid = rootOid; +// pageBase.getSessionStorage().getRoleCatalog().setSelectedOid(rootOid); initLayout(); } @@ -202,6 +203,40 @@ protected List createTreeChildrenMenu() { return new ArrayList<>(); } + @Override + public Set> getExpandedItems(){ + return pageBase.getSessionStorage().getRoleCatalog().getExpandedItems(); + } + + @Override + public void setExpandedItems(TreeStateSet items){ + pageBase.getSessionStorage().getRoleCatalog().setExpandedItems(items); + } + + @Override + public SelectableBean getCollapsedItem(){ + return pageBase.getSessionStorage().getRoleCatalog().getCollapsedItem(); + } + + @Override + public void setCollapsedItem(SelectableBean item){ + pageBase.getSessionStorage().getRoleCatalog().setCollapsedItem(item); + } + + @Override + public void setSelectedItem(SelectableBean item){ + pageBase.getSessionStorage().getRoleCatalog().setSelectedItem(item); + } + + @Override + public SelectableBean getSelectedItem(){ + return pageBase.getSessionStorage().getRoleCatalog().getSelectedItem(); + } + + @Override + public int getSelectedTabId(){ + return pageBase.getSessionStorage().getRoleCatalog().getSelectedTabId(); + } }; treePanel.setOutputMarkupId(true); treePanelContainer.add(new AttributeAppender("class", "col-md-3")); @@ -241,12 +276,13 @@ private void initModels(){ selectedTreeItemOidModel = new IModel() { @Override public String getObject() { - return StringUtils.isEmpty(selectedOid) ? rootOid : selectedOid; + return StringUtils.isEmpty(pageBase.getSessionStorage().getRoleCatalog().getSelectedOid()) ? + rootOid : pageBase.getSessionStorage().getRoleCatalog().getSelectedOid(); } @Override public void setObject(String s) { - selectedOid = s; + pageBase.getSessionStorage().getRoleCatalog().setSelectedOid(s); } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/SearchFilterPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/SearchFilterPanel.java index 4ee67bf54e2..4cded498510 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/SearchFilterPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/input/SearchFilterPanel.java @@ -28,6 +28,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.AceEditor; +import com.evolveum.midpoint.web.util.ExpressionUtil; import com.evolveum.midpoint.web.util.InfoTooltipBehavior; import com.evolveum.midpoint.web.util.WebXmlUtil; import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType; @@ -110,13 +111,13 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { add(clauseTooltip); } - private void updateClausePerformed(AjaxRequestTarget target){ + private void updateClausePerformed(AjaxRequestTarget target) { try { updateFilterClause(getPageBase().getPrismContext()); success(getString("SearchFilterPanel.message.expressionSuccess")); - } catch (Exception e){ + } catch (Exception e) { LoggingUtils.logUnexpectedException(LOGGER, "Could not create MapXNode from provided XML filterClause.", e); - error(getString("SearchFilterPanel.message.cantSerialize")); + error(getString("SearchFilterPanel.message.cantSerialize", e.getMessage())); } // performFilterClauseHook(target); @@ -127,7 +128,7 @@ private void updateFilterClause(PrismContext context) throws SchemaException { final String clauseString = clauseStringModel.getObject(); if (StringUtils.isNotEmpty(clauseString)) { LOGGER.trace("Filter Clause to serialize: {}", clauseString); - RootXNode filterClauseNode = (RootXNode) context.parserFor(clauseString).xml().parseToXNode(); + RootXNode filterClauseNode = ExpressionUtil.parseSearchFilter(clauseString, context); getModelObject().setFilterClauseXNode(filterClauseNode); } else { if (getModelObject() != null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/ObjectHistoryTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/ObjectHistoryTabPanel.java index 36a388d00a5..f536ee405b4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/ObjectHistoryTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/ObjectHistoryTabPanel.java @@ -38,6 +38,7 @@ import com.evolveum.midpoint.web.page.admin.users.PageUser; import com.evolveum.midpoint.web.page.admin.users.PageUserHistory; import com.evolveum.midpoint.web.page.admin.users.PageXmlDataReview; +import com.evolveum.midpoint.web.session.AuditLogStorage; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventStageType; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -62,6 +63,7 @@ public class ObjectHistoryTabPanel extends AbstractObjectTa public ObjectHistoryTabPanel(String id, Form mainForm, LoadableModel> focusWrapperModel, PageAdminObjectDetails parentPage) { super(id, mainForm, focusWrapperModel, parentPage); + parentPage.getSessionStorage().setUserHistoryAuditLog(new AuditLogStorage()); initLayout(focusWrapperModel, parentPage); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java index 377f70a80e2..af2ff46fc88 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java @@ -27,6 +27,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.properties b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.properties index 8ebb47678c0..40f8b7fb0da 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.properties +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.properties @@ -14,7 +14,6 @@ # limitations under the License. # -pageAdminFocus.basic=Basic pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. pageAdminFocus.message.illegalAccountState=Illegal assignment state '{0}'. diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyPanel.java index 9e8c908a8f5..f323853e5e0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyPanel.java @@ -241,6 +241,11 @@ public String getObject() { protected void onSubmit(AjaxRequestTarget target, Form form) { cancelPerformed(target); } + + @Override + protected void onError(AjaxRequestTarget target, Form form) { + cancelPerformed(target); + } }; form.add(cancel); @@ -254,7 +259,6 @@ protected void onSubmit(AjaxRequestTarget target, Form form) { @Override protected void onError(AjaxRequestTarget target, Form form) { - System.out.println("asdf"); target.add(form); } }; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingDto.java index 7017aba80d6..6d6eeb0a5a1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ProfilingDto.java @@ -65,6 +65,7 @@ private void init(ProfilingConfigurationType profilingConfiguration, if (profilingConfiguration != null) { + profilingEnabled = checkXsdBooleanValue(profilingConfiguration.isEnabled()); requestFilter = checkXsdBooleanValue(profilingConfiguration.isRequestFilter()); performanceStatistics = checkXsdBooleanValue(profilingConfiguration.isPerformanceStatistics()); subsystemModel = checkXsdBooleanValue(profilingConfiguration.isModel()); @@ -122,7 +123,8 @@ public ProfilingConfigurationType getNewObject() { ProfilingConfigurationType config = new ProfilingConfigurationType(); - if (isPerformanceStatistics() || isRequestFilter() || isSubsystemModel() || isSubsystemRepository() + if (isProfilingEnabled() || isPerformanceStatistics() || isRequestFilter() + || isSubsystemModel() || isSubsystemRepository() || isSubsystemProvisioning() || isSubsystemSynchronizationService() || isSubsystemUcf() || isSubsystemTaskManager() || isSubsystemWorkflow()) config.setEnabled(true); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java index af517d890de..fc741212709 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/orgs/OrgTreePanel.java @@ -61,6 +61,8 @@ public class OrgTreePanel extends AbstractTreeTablePanel { private boolean selectable; private String treeTitleKey = ""; + SessionStorage storage; + public OrgTreePanel(String id, IModel rootOid, boolean selectable) { this(id, rootOid, selectable, ""); @@ -69,26 +71,28 @@ public OrgTreePanel(String id, IModel rootOid, boolean selectable) { public OrgTreePanel(String id, IModel rootOid, boolean selectable, String treeTitleKey) { super(id, rootOid); - this.treeTitleKey = treeTitleKey; + MidPointAuthWebSession session = OrgTreePanel.this.getSession(); + storage = session.getSessionStorage(); + + this.treeTitleKey = treeTitleKey; this.selectable = selectable; selected = new LoadableModel>() { @Override protected SelectableBean load() { TabbedPanel currentTabbedPanel = null; - MidPointAuthWebSession session = OrgTreePanel.this.getSession(); - SessionStorage storage = session.getSessionStorage(); if (getTree().findParent(PageOrgTree.class) != null) { currentTabbedPanel = getTree().findParent(PageOrgTree.class).getTabPanel().getTabbedPanel(); if (currentTabbedPanel != null) { int tabId = currentTabbedPanel.getSelectedTab(); - if (storage.getUsers().getSelectedTabId() != -1 - && tabId != storage.getUsers().getSelectedTabId()) { - storage.getUsers().setSelectedItem(null); + int storedTabId = OrgTreePanel.this.getSelectedTabId(); + if (storedTabId != -1 + && tabId != storedTabId) { + OrgTreePanel.this.setSelectedItem(null); } } } - if (storage.getUsers().getSelectedItem() != null) { - return storage.getUsers().getSelectedItem(); + if (OrgTreePanel.this.getSelectedItem() != null) { + return OrgTreePanel.this.getSelectedItem(); } else { return getRootFromProvider(); } @@ -160,7 +164,20 @@ public void renderHead(IHeaderResponse response) { add(treeContainer); TableTree, String> tree = new TableTree, String>( - ID_TREE, columns, provider, Integer.MAX_VALUE, new TreeStateModel(this, provider)) { + ID_TREE, columns, provider, Integer.MAX_VALUE, new TreeStateModel(this, provider){ + @Override + public Set> getExpandedItems(){ + return OrgTreePanel.this.getExpandedItems(); + } + @Override + public SelectableBean getCollapsedItem(){ + return OrgTreePanel.this.getCollapsedItem(); + } + @Override + public void setCollapsedItem(SelectableBean item){ + OrgTreePanel.this.setCollapsedItem(null); + } + }) { @Override protected Component newContentComponent(String id, IModel> model) { @@ -170,9 +187,7 @@ protected Component newContentComponent(String id, IModel collapsedItem) { super.collapse(collapsedItem); MidPointAuthWebSession session = OrgTreePanel.this.getSession(); SessionStorage storage = session.getSessionStorage(); - Set> items = storage.getUsers().getExpandedItems(); + Set> items = OrgTreePanel.this.getExpandedItems(); if (items != null && items.contains(collapsedItem)) { items.remove(collapsedItem); } - storage.getUsers().setExpandedItems((TreeStateSet) items); - storage.getUsers().setCollapsedItem(collapsedItem); + OrgTreePanel.this.setExpandedItems((TreeStateSet) items); + OrgTreePanel.this.setCollapsedItem(collapsedItem); } @Override @@ -216,10 +231,7 @@ protected void onModelChanged() { super.onModelChanged(); Set> items = getModelObject(); - - MidPointAuthWebSession session = OrgTreePanel.this.getSession(); - SessionStorage storage = session.getSessionStorage(); - storage.getUsers().setExpandedItems((TreeStateSet>) items); + OrgTreePanel.this.setExpandedItems((TreeStateSet>) items); } }; tree.setItemReuseStrategy(new ReuseIfModelsEqualStrategy()); @@ -242,16 +254,14 @@ private static class TreeStateModel extends AbstractReadOnlyModel> getObject() { - MidPointAuthWebSession session = panel.getSession(); - SessionStorage storage = session.getSessionStorage(); - Set> dtos = storage.getUsers().getExpandedItems(); - SelectableBean collapsedItem = storage.getUsers().getCollapsedItem(); + Set> dtos = TreeStateModel.this.getExpandedItems(); + SelectableBean collapsedItem = TreeStateModel.this.getCollapsedItem(); Iterator> iterator = provider.getRoots(); if (collapsedItem != null) { if (set.contains(collapsedItem)) { set.remove(collapsedItem); - storage.getUsers().setCollapsedItem(null); + TreeStateModel.this.setCollapsedItem(null); } } if (dtos != null && (dtos instanceof TreeStateSet)) { @@ -278,6 +288,24 @@ public void expandAll() { public void collapseAll() { set.collapseAll(); } + + public Set> getExpandedItems(){ + MidPointAuthWebSession session = panel.getSession(); + SessionStorage storage = session.getSessionStorage(); + return storage.getUsers().getExpandedItems(); + } + + public SelectableBean getCollapsedItem(){ + MidPointAuthWebSession session = panel.getSession(); + SessionStorage storage = session.getSessionStorage(); + return storage.getUsers().getCollapsedItem(); + } + + public void setCollapsedItem(SelectableBean item){ + MidPointAuthWebSession session = panel.getSession(); + SessionStorage storage = session.getSessionStorage(); + storage.getUsers().setCollapsedItem(item); + } } private List createTreeMenuInternal() { @@ -337,5 +365,31 @@ private void expandAllPerformed(AjaxRequestTarget target) { target.add(tree); } + public Set> getExpandedItems(){ + return storage.getUsers().getExpandedItems(); + } + + public void setExpandedItems(TreeStateSet items){ + storage.getUsers().setExpandedItems(items); + } + public SelectableBean getCollapsedItem(){ + return storage.getUsers().getCollapsedItem(); + } + + public void setCollapsedItem(SelectableBean item){ + storage.getUsers().setCollapsedItem(item); + } + + public void setSelectedItem(SelectableBean item){ + storage.getUsers().setSelectedItem(item); + } + + public SelectableBean getSelectedItem(){ + return storage.getUsers().getSelectedItem(); + } + + public int getSelectedTabId(){ + return storage.getUsers().getSelectedTabId(); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java index dae29f11f50..7fdec4f4b7d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java @@ -27,6 +27,8 @@ import com.evolveum.midpoint.web.page.admin.reports.PageAuditLogDetails; import com.evolveum.midpoint.web.page.admin.reports.dto.AuditEventRecordProvider; import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; +import com.evolveum.midpoint.web.page.admin.users.PageUser; +import com.evolveum.midpoint.web.session.AuditLogStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.web.util.DateValidator; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; @@ -38,6 +40,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; +import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; @@ -103,6 +106,7 @@ public class AuditLogViewerPanel extends BasePanel{ private AuditSearchDto searchDto; private PageBase pageBase; private Map visibilityMap; + private AuditLogStorage auditLogStorage; public AuditLogViewerPanel(String id, PageBase pageBase){ this(id, pageBase, null); @@ -122,14 +126,20 @@ public AuditLogViewerPanel(String id, PageBase pageBase, AuditSearchDto searchDt } private void initAuditSearchModel(){ + if (pageBase instanceof PageUser){ + auditLogStorage = pageBase.getSessionStorage().getUserHistoryAuditLog(); + } else { + auditLogStorage = pageBase.getSessionStorage().getAuditLog(); + } if (searchDto == null){ - searchDto = new AuditSearchDto(); + searchDto = auditLogStorage.getSearchDto(); } auditSearchDto = new Model(searchDto); } private void initLayout() { + Form mainForm = new Form(ID_MAIN_FORM); mainForm.setOutputMarkupId(true); add(mainForm); @@ -175,7 +185,7 @@ private void initParametersPanel(Form mainForm) { to.setOutputMarkupId(true); parametersPanel.add(to); - + PropertyModel changedItemModel = new PropertyModel(auditSearchDto, AuditSearchDto.F_CHANGED_ITEM); @@ -357,6 +367,8 @@ public boolean isVisible(){ @Override protected void onSubmit(AjaxRequestTarget target, Form form) { + auditLogStorage.setSearchDto(searchDto); + auditLogStorage.setPageNumber(0); Form mainForm = (Form) getParent().getParent(); addOrReplaceTable(mainForm); getFeedbackPanel().getFeedbackMessages().clear(); @@ -409,11 +421,20 @@ public Map getParameters() { parameters.put("outcome", search.getOutcome()); return parameters; } + + @Override + protected void saveCurrentPage(long from, long count) { + if (count != 0) { + auditLogStorage.setPageNumber(from / count); + } + } + }; BoxedTablePanel table = new BoxedTablePanel(ID_TABLE, provider, initColumns(), UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER, (int) pageBase.getItemsPerPage(UserProfileStorage.TableId.PAGE_AUDIT_LOG_VIEWER)); table.setShowPaging(true); + table.setCurrentPage(auditLogStorage.getPageNumber()); table.setOutputMarkupId(true); mainForm.addOrReplace(table); } 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 index f64abed64ed..2777d5a7adc 100644 --- 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 @@ -71,6 +71,7 @@ public void setObject(List object) { @Override public Iterator internalIterator(long first, long count) { + saveCurrentPage(first, count); List recordsList = listRecords(auditEventQuery, true, first, count); return recordsList.iterator(); } @@ -222,4 +223,8 @@ public Map getParameters() { public void setParameters(Map parameters) { this.parameters = parameters; } + + protected void saveCurrentPage(long from, long count){ + + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResource.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResource.java index ee5f408db78..1e9e50ea795 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResource.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/PageResource.java @@ -21,7 +21,6 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.util.ResourceUtils; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.GetOperationOptions; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java index a0b68f1abbf..dfb1d421082 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java @@ -55,7 +55,6 @@ import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.PrismProperty; @@ -83,6 +82,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index 3b8b3f533e1..3f2f49c2aa0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -46,7 +46,6 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.delta.ObjectDelta; @@ -72,6 +71,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java index 5a761555508..c25c8aeb457 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/TreeTablePanel.java @@ -20,7 +20,6 @@ import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; 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 69ece34d18c..77cf39fb4da 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 @@ -46,7 +46,6 @@ import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.crypto.EncryptionException; @@ -67,6 +66,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/AuditLogStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/AuditLogStorage.java index fe8e6497d7d..aca07a04991 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/AuditLogStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/AuditLogStorage.java @@ -20,6 +20,7 @@ import com.evolveum.midpoint.prism.query.ObjectPaging; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.web.component.search.Search; +import com.evolveum.midpoint.web.page.admin.reports.dto.AuditSearchDto; import com.evolveum.midpoint.web.page.admin.users.PageUser; import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType; @@ -28,6 +29,8 @@ */ public class AuditLogStorage implements PageStorage { private AuditEventRecordType auditRecord; + private AuditSearchDto searchDto; + private long pageNumber = 0; public AuditLogStorage() { } @@ -36,17 +39,36 @@ public Search getSearch() { return null; } - public void setSearch(Search roleCatalog) { + public void setSearch(Search search) { } + public AuditSearchDto getSearchDto() { + if (searchDto == null){ + searchDto = new AuditSearchDto(); + } + return searchDto; + } + + public void setSearchDto(AuditSearchDto searchDto) { + this.searchDto = searchDto; + } + + public long getPageNumber() { + return pageNumber; + } + + public void setPageNumber(long pageNumber) { + this.pageNumber = pageNumber; + } + @Override public ObjectPaging getPaging() { return null; } @Override - public void setPaging(ObjectPaging roleCatalogPaging) { + public void setPaging(ObjectPaging auditLogPaging) { } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java index a8e568d7429..4a901a872f9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/RoleCatalogStorage.java @@ -41,6 +41,7 @@ public class RoleCatalogStorage implements PageStorage{ */ private SelectableBean selectedItem; //selected tree item on the Org. structure page + private String selectedOid; private TreeStateSet> expandedItems; //expanded tree items on the Org. structure page private int selectedTabId = 0; //selected tab id on the Org. structure page private SelectableBean collapsedItem = null; //collapsed tree item @@ -133,4 +134,12 @@ public AssignmentViewType getViewType() { public void setViewType(AssignmentViewType viewType) { this.viewType = viewType; } + + public String getSelectedOid() { + return selectedOid; + } + + public void setSelectedOid(String selectedOid) { + this.selectedOid = selectedOid; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java index 3908b6f0442..12bee2e7560 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/session/SessionStorage.java @@ -46,6 +46,7 @@ public class SessionStorage implements Serializable, DebugDumpable { public static final String KEY_ROLE_MEMBERS = "roleMembers"; public static final String KEY_ROLE_CATALOG = "roleCatalog"; public static final String KEY_AUDIT_LOG = "auditLog"; + public static final String KEY_USER_HISTORY_AUDIT_LOG = "userHistoryAuditLog"; public static final String KEY_RESOURCE_ACCOUNT_CONTENT = "resourceAccountContent"; public static final String KEY_RESOURCE_ENTITLEMENT_CONTENT = "resourceEntitlementContent"; public static final String KEY_RESOURCE_GENERIC_CONTENT = "resourceGenericContent"; @@ -113,6 +114,20 @@ public AuditLogStorage getAuditLog() { return (AuditLogStorage)pageStorageMap.get(KEY_AUDIT_LOG); } + public AuditLogStorage getUserHistoryAuditLog() { + if (pageStorageMap.get(KEY_USER_HISTORY_AUDIT_LOG) == null) { + pageStorageMap.put(KEY_USER_HISTORY_AUDIT_LOG, new AuditLogStorage()); + } + return (AuditLogStorage)pageStorageMap.get(KEY_USER_HISTORY_AUDIT_LOG); + } + + public void setUserHistoryAuditLog(AuditLogStorage storage) { + if (pageStorageMap.containsKey(KEY_USER_HISTORY_AUDIT_LOG)) { + pageStorageMap.remove(KEY_USER_HISTORY_AUDIT_LOG); + } + pageStorageMap.put(KEY_USER_HISTORY_AUDIT_LOG, storage); + } + public ServicesStorage getServices() { if (pageStorageMap.get(KEY_SERVICES) == null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/ExpressionUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/ExpressionUtil.java index 40c074ae6e8..d01ed6e6f79 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/ExpressionUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/ExpressionUtil.java @@ -17,7 +17,9 @@ package com.evolveum.midpoint.web.util; import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.xnode.MapXNode; import com.evolveum.midpoint.prism.xnode.RootXNode; +import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.LoggingUtils; import com.evolveum.midpoint.util.logging.Trace; @@ -242,11 +244,27 @@ public static boolean isEmpty(ExpressionType expression) { public static void parseExpressionEvaluators(String xml, ExpressionType expressionObject, PrismContext context) throws SchemaException { expressionObject.getExpressionEvaluator().clear(); - if (xml != null && StringUtils.isNotBlank(xml)) { - xml = WebXmlUtil.wrapInElement("expression", xml); + if (StringUtils.isNotBlank(xml)) { + xml = WebXmlUtil.wrapInElement("expression", xml, true); LOGGER.info("Expression to serialize: {}", xml); JAXBElement newElement = context.parserFor(xml).xml().parseRealValueToJaxbElement(); expressionObject.getExpressionEvaluator().addAll(((ExpressionType) (newElement.getValue())).getExpressionEvaluator()); } } + + // TODO move somewhere else? generalize a bit? + public static RootXNode parseSearchFilter(String data, PrismContext context) throws SchemaException { + String xml = WebXmlUtil.wrapInElement("root", data, false); + RootXNode rootXNode = context.parserFor(xml).xml().parseToXNode(); + if (rootXNode.getSubnode() instanceof MapXNode) { + MapXNode mapXNode = (MapXNode) rootXNode.getSubnode(); + if (mapXNode.size() != 1) { + throw new SchemaException("Content cannot be parsed as a search filter: " + mapXNode.debugDump()); + } + return mapXNode.getEntryAsRoot(mapXNode.keySet().iterator().next()); + } else { + throw new SchemaException("Content cannot be parsed as a search filter: " + DebugUtil.debugDump(rootXNode.getSubnode())); + } + } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/WebXmlUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/WebXmlUtil.java index 5e3f9cc560f..31875af6a19 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/WebXmlUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/util/WebXmlUtil.java @@ -83,11 +83,13 @@ public static String stripNamespaceDeclarations(String xml) { } // body is not blank - public static String wrapInElement(String name, String body) { + public static String wrapInElement(String name, String body, boolean alsoDefaultNamespace) { StringBuilder sb = new StringBuilder(); sb.append("<").append(name); for (String declaration : declarations) { - sb.append("\n ").append(declaration); + if (alsoDefaultNamespace || !declaration.startsWith("xmlns=")) { + sb.append("\n ").append(declaration); + } } sb.append(">\n"); sb.append(body); diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 19fba34bed0..bd3a19821cd 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -195,6 +195,7 @@ Channel.liveSync=Live Synchronization Channel.null=Choose One channel.nullValid=Choose One Channel.reconciliation=Reconciliation +Channel.recompute=Recompute Channel.user=User Channel.webService=Web Service CheckTableHeader.label.error=Error @@ -1058,6 +1059,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -2581,8 +2583,8 @@ SchemaStep.xml=XML SearchFilterPanel.button.update=Update clause SearchFilterPanel.label.description=Description SearchFilterPanel.label.filterClause=Filter clause -SearchFilterPanel.message.cantSerialize=Could not create MaxXNode from provided XML filterClause. Please enter correct expression. Reason\: {0} -SearchFilterPanel.message.expressionSuccess=Filter clause has been update successfully. +SearchFilterPanel.message.cantSerialize=Could not parse filter clause. Please enter correct expression. Reason\: {0} +SearchFilterPanel.message.expressionSuccess=Filter clause has been updated successfully. searchForm.filetype.null=File type searchForm.reportType.null=Report type searchForm.searchTextPlaceholder=Text diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_ar.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_ar.properties index 1adf7c72c6f..92bdfc08fba 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_ar.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_ar.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties index db72d73206c..e9fcaed14b1 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_cs.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Název AssignmentPreviewDialog.column.orgRef=Organizace AssignmentPreviewDialog.column.tenant=Partaj AssignmentPreviewDialog.label=Zobrazit přímá i nepřímá přiřazení +AssignmentPreviewDialog.delegationPreviewLabel=Omezit výsady AssignmentPreviewDialog.type.direct=Přímé AssignmentPreviewDialog.type.indirect=Nepřímé AssignmentTablePanel.menu.assign=Přidat přiřazení @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Nepovolený stav přiřazen AssignmentTablePanel.message.noAssignmentSelected=Není vybrané přiřazení. AssignmentTablePanel.message.noDelegationsSelected=Nebyla vybrána žádná delegace. AssignmentTablePanel.modal.message.delete=Opravdu chcete smazat těchto {0} přiřazení? +AssignmentTablePanel.modal.message.deleteDelegation=Opravdu chcete smazat {0} delegací? +AssignmentTablePanel.modal.message.noDelegationWarning=Uživatel nemá žádné delegovatelné položky AssignmentTablePanel.modal.title.confirmDeletion=Potvrdit smazání AssignmentTablePanel.modal.title.selectAssignment=Vybrat objekty associationAttribute.nullValid=Vyberte jeden @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Upravit organizaci '{0}' PageAdminObjectDetails.title.newOrgType=Vytvořit novou organizaci PageAdminObjectDetails.noChangesSave=Nebyly provedeny žádné změny, které by měly být uloženy. PageAdminObjectDetails.noChangesPreview=Nebyly provedeny žádné změny, které by mohly být zobrazeny v náhledu. +pageAdminFocus.basic=Základní pageAdminFocus.message.cantEditFocus=Nastala neznámá chyba, Nepodařilo se upravit vzorový objekt. pageAdminFocus.message.cantNewFocus=Nastala neznámá chyba, Nepodařilo se vytvořit objekt vzorový objekt. pageAdminFocus.message.illegalAccountState=Nelegální stav stínového účtu '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Použit schvalovatele objektu StageDefinitionPanel.reviewerUseObjectManager = Ověřitelé podle manažera objektu, ke kterému se přiřazuje StageDefinitionPanel.reviewerUseObjectManagerOrgType = Druh organizační vazby použitý pro určení manažera (volitelné) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Povolit manažerům schvalovat svá vlastní přiřazení +StageDefinitionPanel.reviewerUseObjectManagerBox = Použít manažera objektu StageDefinitionPanel.defaultReviewerRef = Výchozí ověřitel StageDefinitionPanel.additionalReviewerRef = Další ověřitelé StageDefinitionPanel.outcomeStrategy = Strategie agregace rozhodnutí v případě více ověřitelů diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties index b0ae19a8c32..94bfdd1dfea 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_de.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Besitzer AssignmentPreviewDialog.label=Zeige direkte und indirekte Zuweisungen +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direkt AssignmentPreviewDialog.type.indirect=Indirekt AssignmentTablePanel.menu.assign=Zuweisen des Ressourcen-Accounts @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegaler Aufgabenstatus '{0 AssignmentTablePanel.message.noAssignmentSelected=Keine Aufgabe ausgewählt. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Wollen Sie wirklich die Zuweisung(en) {0} löschen? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Löschung bestätigen AssignmentTablePanel.modal.title.selectAssignment=Objekt(e) auswählen associationAttribute.nullValid=Auswählen @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Organisation '{0}' bearbeiten PageAdminObjectDetails.title.newOrgType=Neue Organisationseinheit anlegen PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Objektüberprüfer nutzen StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties index 5050eb34162..78d1a7d87b3 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties index bd1cccbb040..8d2f4eb907c 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_es.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Nombre AssignmentPreviewDialog.column.orgRef=Org. AssignmentPreviewDialog.column.tenant=Ocupante AssignmentPreviewDialog.label=Ver asignaciones directas e indirectas +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Directo AssignmentPreviewDialog.type.indirect=Indirecto AssignmentTablePanel.menu.assign=Asignar Recursos de la Cuenta @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Estado de asignación ilegal AssignmentTablePanel.message.noAssignmentSelected=No hay asignación seleccionada. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=¿Realmente quiere eliminar {0} asignación(es)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirmar eliminación AssignmentTablePanel.modal.title.selectAssignment=Seleccionar objecto(s) associationAttribute.nullValid=Elija uno @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_es_AR.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_es_AR.properties index 66770ff7ed0..503b8a29d4d 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_es_AR.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_es_AR.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties index 6be81f3fd65..83f366255b9 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_et.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Nimi AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Rentnik AssignmentPreviewDialog.label=Vaata otseseid ja kaudseid omistusi +AssignmentPreviewDialog.delegationPreviewLabel=Piiritle õigused AssignmentPreviewDialog.type.direct=Otsene AssignmentPreviewDialog.type.indirect=Kaudne AssignmentTablePanel.menu.assign=Omista @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Lubamatu omistuse olek '{0}' AssignmentTablePanel.message.noAssignmentSelected=Omistust pole valitud. AssignmentTablePanel.message.noDelegationsSelected=Delegeerimist pole valitud. AssignmentTablePanel.modal.message.delete=Kas soovid kindlasti kustutada {0} omistust? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Kustutuse kinnitamine AssignmentTablePanel.modal.title.selectAssignment=Vali objekt(id) associationAttribute.nullValid=Vali üks @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Redigeeri organisatsiooni '{0}' PageAdminObjectDetails.title.newOrgType=Loo uus organisatsioon PageAdminObjectDetails.noChangesSave=Salvestuseks ei leidunud muudatusi. PageAdminObjectDetails.noChangesPreview=Eelvaatamiseks puuduvad muudatused. +pageAdminFocus.basic=Põhiteave pageAdminFocus.message.cantEditFocus=Ilmnes tundmatu tõrge. Ei õnnestu redigeerida fookusobjekti. pageAdminFocus.message.cantNewFocus=Ilmnes tundmatu tõrge. Ei saa luua uut fookusobjekti. pageAdminFocus.message.illegalAccountState=Lubamatu varju olek '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Kasuta objekti kinnitajat StageDefinitionPanel.reviewerUseObjectManager = Läbivaatajad tuginedes objektile millele omistatakse juhile StageDefinitionPanel.reviewerUseObjectManagerOrgType = Organisatsiooni tüübi seos, mida kasutatakse juhi kindlakstegemiseks (valikuline) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Luba juhtidel kinnitada nende endi omistusi +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Vaikimisi läbivaataja StageDefinitionPanel.additionalReviewerRef = Täiendav läbivaataja StageDefinitionPanel.outcomeStrategy = Otsuse kokkuvõtmise strateegia juhul kui on rohkem kui üks läbivaataja diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_hi.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_hi.properties index 66770ff7ed0..503b8a29d4d 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_hi.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_hi.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties index 64467e7b948..703968884a1 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_hu.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Név AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Közvetlen AssignmentPreviewDialog.type.indirect=Közvetett AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Törlés megerősítése AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties index 66770ff7ed0..503b8a29d4d 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pl.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties index 66770ff7ed0..95ff2b6473e 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_pt_BR.properties @@ -14,50 +14,50 @@ # AbstractRoleType.delegable=Delegable AbstractRoleType.requestable=Requestable -ACAttributePanel.button.showExprEditor=Show expression -ACAttributePanel.hasOutbound=Has outbound mapping -ACAttributePanel.required=Required -addCapabilityDialog.button.Add=Add -addCapabilityDialog.button.cancel=Cancel -addCapabilityDialog.column.name=Name -addCapabilityDialog.title=Choose capabilities to add -admStatusFetchStrategy.nullValid=Choose One -AEPlevel.FULL=Full -AEPlevel.LEGALIZE=Relative -AEPlevel.MARK=Mark -AEPlevel.NONE=None -AEPlevel.POSITIVE=Positive -AssignableOrgSelectionPanel.button.assignRoot=Assign Root -assignablePopupContent.button.assign=Assign -assignablePopupContent.button.add=Add -assignablePopupContent.description=Description +ACAttributePanel.button.showExprEditor=Mostrar expressão +ACAttributePanel.hasOutbound=Possui mapeamento de saída +ACAttributePanel.required=Requerido +addCapabilityDialog.button.Add=Incluir +addCapabilityDialog.button.cancel=Cancelar +addCapabilityDialog.column.name=Nome +addCapabilityDialog.title=Escolher capacidades a incluir +admStatusFetchStrategy.nullValid=Escolher um +AEPlevel.FULL=Completo +AEPlevel.LEGALIZE=Relativo +AEPlevel.MARK=Marcar +AEPlevel.NONE=Nenhum +AEPlevel.POSITIVE=Positivo +AssignableOrgSelectionPanel.button.assignRoot=Atribuir raiz +assignablePopupContent.button.assign=Atribuir +assignablePopupContent.button.add=Incluir +assignablePopupContent.description=Descrição assignablePopupContent.displayName=Display name -assignablePopupContent.message.errorLoadingRoleTypes=Could not load available role types for search purposes. -assignablePopupContent.message.noOrgStructureDefined=No org. structure defined. -assignablePopupContent.name=Name -assignablePopupContent.role.type=Role type -AssignmentEditorPanel.attributes=Attributes -AssignmentEditorPanel.browser.title=Browser -AssignmentEditorPanel.description=Description -AssignmentEditorPanel.enabledFrom={0}, from {1,date,medium} -AssignmentEditorPanel.enabledFromTo={0}, from {1,date,medium} to {2,date,medium} -AssignmentEditorPanel.enabledTo={0}, to {1,date,medium} +assignablePopupContent.message.errorLoadingRoleTypes=Não foi possível carregar os tipos de perfil para esses propóstitos. +assignablePopupContent.message.noOrgStructureDefined=Nenhuma estrutura organizacional definida. +assignablePopupContent.name=Nome +assignablePopupContent.role.type=Tipo de perfil +AssignmentEditorPanel.attributes=Atributos +AssignmentEditorPanel.browser.title=Navegador +AssignmentEditorPanel.description=Descrição +AssignmentEditorPanel.enabledFrom={0}, de {1,data,médio} +AssignmentEditorPanel.enabledFromTo={0}, from {1,data,médio} to {2,data,médio} +AssignmentEditorPanel.enabledTo={0}, to {1,data,médio} AssignmentEditorPanel.focusType=Focus type -AssignmentEditorPanel.hideEmpty=Hide empty +AssignmentEditorPanel.hideEmpty=Esconda os vazios AssignmentEditorPanel.loadError=Error loading object -AssignmentEditorPanel.manager=Manager -AssignmentEditorPanel.member=Member -AssignmentEditorPanel.name.focus=(focus mapping) -AssignmentEditorPanel.name.noTarget=(no target) -AssignmentEditorPanel.orgRef=Organization Unit/Project -AssignmentEditorPanel.relation.notSpecified="Not specified" -AssignmentEditorPanel.relation=Relation -AssignmentEditorPanel.resource=Resource -AssignmentEditorPanel.showEmpty=Show empty -AssignmentEditorPanel.showMore=Show more -AssignmentEditorPanel.targetError=Assignment target was not found. Either target oid is malformed or target object does not exist. -AssignmentEditorPanel.target=Target -AssignmentEditorPanel.tenantRef=Tenant +AssignmentEditorPanel.manager=Gerente +AssignmentEditorPanel.member=Membro +AssignmentEditorPanel.name.focus=(mapeamento de foco) +AssignmentEditorPanel.name.noTarget=(nenhum alvo) +AssignmentEditorPanel.orgRef=Unidade/Projeto de Organização +AssignmentEditorPanel.relation.notSpecified="Não especificado" +AssignmentEditorPanel.relation=Relação +AssignmentEditorPanel.resource=Recurso +AssignmentEditorPanel.showEmpty=Mostrar vazios +AssignmentEditorPanel.showMore=Mostrar mais +AssignmentEditorPanel.targetError=Alvo da atribuição não encontrado. Ou o oid do alvo está mal formado ou o objeto alvo não existe. +AssignmentEditorPanel.target=Alvo +AssignmentEditorPanel.tenantRef=Inquilino AssignmentEditorPanel.undefined=Undefined AssignmentEditorPanel.metadataBlock=Metadata MetadataPanel.requestTimestamp=Request timestamp @@ -79,66 +79,69 @@ DelegationEditorPanel.to=To DelegationEditorPanel.meLabel=Me DelegationEditorPanel.limitPrivilegesButton=Limit privileges DelegationEditorPanel.privileges=Privileges -AssignmentPreviewDialog.button.cancel=Cancel -AssignmentPreviewDialog.column.description=Description -AssignmentPreviewDialog.column.intent=Intent -AssignmentPreviewDialog.column.kind=Kind -AssignmentPreviewDialog.column.name=Name +AssignmentPreviewDialog.button.cancel=Cancelar +AssignmentPreviewDialog.column.description=Descrição +AssignmentPreviewDialog.column.intent=Intento +AssignmentPreviewDialog.column.kind=Tipo +AssignmentPreviewDialog.column.name=Nome AssignmentPreviewDialog.column.orgRef=Org -AssignmentPreviewDialog.column.tenant=Tenant -AssignmentPreviewDialog.label=View direct & indirect assignments -AssignmentPreviewDialog.type.direct=Direct -AssignmentPreviewDialog.type.indirect=Indirect -AssignmentTablePanel.menu.assign=Assign -AssignmentTablePanel.menu.assignOrg=Assign Org. +AssignmentPreviewDialog.column.tenant=Inquilino +AssignmentPreviewDialog.label=Ver atribuições diretas e indiretas +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges +AssignmentPreviewDialog.type.direct=Direta +AssignmentPreviewDialog.type.indirect=Indireta +AssignmentTablePanel.menu.assign=Atribuir +AssignmentTablePanel.menu.assignOrg=Atribuir Org. AssignmentTablePanel.menu.assignOrg.noorgs=No organization structure defined. -AssignmentTablePanel.menu.assignRole=Assign Role +AssignmentTablePanel.menu.assignRole=Atribuir perfil AssignmentTablePanel.menu.addDelegation=Add delegation AssignmentTablePanel.menu.deleteDelegation=Delete delegation -AssignmentTablePanel.menu.unassign=Unassign -AssignmentTablePanel.menu.showAllAssignments=Show all assignments -AssignmentTablePanel.message.couldntAssignObject=Couldn't assign object '{0}', reason\: {1}. -AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0}'. -AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. +AssignmentTablePanel.menu.unassign=Cancelar atribuição +AssignmentTablePanel.menu.showAllAssignments=Mostrar todas atribuições +AssignmentTablePanel.message.couldntAssignObject=Não pode atribuir objeto '{0}', motivo\: {1}. +AssignmentTablePanel.message.illegalAssignmentState=Estado ilegal da atribuição '{0}'. +AssignmentTablePanel.message.noAssignmentSelected=Nenhuma atribuição selecionada. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. -AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? -AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion -AssignmentTablePanel.modal.title.selectAssignment=Select object(s) -associationAttribute.nullValid=Choose One -AsyncDashboardPanel.loading=Loading data -AuditPopulPanel.exportType.label=Export File Type -AuditPopupPanel.auditEventType=Event Type -AuditPopupPanel.dateFrom=From -AuditPopupPanel.dateTo=To -AuditPopupPanel.title=Audit Report Basic Configuration -BasicSearchPanel.clear=Clear search -BasicSearchPanel.search=Search -BasicSearchPanel.textPlaceholder=Search -capabilityActivationPanel.label=Activation configuration -capabilityActivationPanel.label.attributeName=Attribute name -capabilityActivationPanel.label.disableList=Disable list -capabilityActivationPanel.label.enabledDisabled=Enabled/disabled -capabilityActivationPanel.label.enabled=Enabled -capabilityActivationPanel.label.enableList=Enable list +AssignmentTablePanel.modal.message.delete=Deseja realmente deletar [0} atribuições? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item +AssignmentTablePanel.modal.title.confirmDeletion=Confirmar deleção +AssignmentTablePanel.modal.title.selectAssignment=Selecionar objeto(s) +associationAttribute.nullValid=Escolher um +AsyncDashboardPanel.loading=Carregando dados +AuditPopulPanel.exportType.label=Tipo de arquivo para exportação +AuditPopupPanel.auditEventType=Tipo de evento +AuditPopupPanel.dateFrom=De +AuditPopupPanel.dateTo=Para +AuditPopupPanel.title=Configuração básica para relatório de auditagem +BasicSearchPanel.clear=Limpar pesquisa +BasicSearchPanel.search=Pesquisar +BasicSearchPanel.textPlaceholder=Pesquisar +capabilityActivationPanel.label=Configuração de ativação +capabilityActivationPanel.label.attributeName=Nome de atributo +capabilityActivationPanel.label.disableList=Desabilitar lista +capabilityActivationPanel.label.enabledDisabled=Habilitado/Desabilitado +capabilityActivationPanel.label.enabled=Habilitado +capabilityActivationPanel.label.enableList=Habilitar lista capabilityActivationPanel.label.normalList=Normal list capabilityActivationPanel.label.lockedList=Locked list -capabilityActivationPanel.label.ignoreAttribute=Ignore attribute -capabilityActivationPanel.label.returnedByDefault=Returned by default -capabilityActivationPanel.label.status.message=The same as enabled/disabled +capabilityActivationPanel.label.ignoreAttribute=Ignorar atributo +capabilityActivationPanel.label.returnedByDefault=Retornado por default +capabilityActivationPanel.label.status.message=O mesmo que habilitado/desabilitado capabilityActivationPanel.label.status=Status capabilityActivationPanel.label.lockout=Lockout -capabilityActivationPanel.label.validFrom=Valid from -capabilityActivationPanel.label.validTo=Valid to -capabilityActivationPanel.list.placeholder=Insert value -capabilityCredentialsPanel.label=Credentials Configuration -capabilityCredentialsPanel.label.enabled=Enabled -capabilityCredentialsPanel.label.password=Password -capabilityCredentialsPanel.label.returned=Returned by default -capabilityListRepeater.label.text.placeholder=Language URL -capabilityScriptPanel.label.enabled=Enabled +capabilityActivationPanel.label.validFrom=Válido de +capabilityActivationPanel.label.validTo=Válido até +capabilityActivationPanel.list.placeholder=Inserir valor +capabilityCredentialsPanel.label=Configuração de credenciais +capabilityCredentialsPanel.label.enabled=Habilitado +capabilityCredentialsPanel.label.password=Senha +capabilityCredentialsPanel.label.returned=Retornado por default +capabilityListRepeater.label.text.placeholder=URL da língua +capabilityScriptPanel.label.enabled=Habilitado capabilityScriptPanel.label.onConnector=On connector -capabilityScriptPanel.label.onResource=On resource -capabilityScriptPanel.label=Script Configuration +capabilityScriptPanel.label.onResource=No recurso +capabilityScriptPanel.label=Configuração de script CapabilityStep.capabilities=Capabilities CapabilityStep.addCapabilities=Add capabilities CapabilityStep.disabled=(disabled) @@ -170,105 +173,105 @@ CapabilityStep.credentials.tooltip.enabled=True if this capability is active. Fa CapabilityStep.credentials.tooltip.passEnabled=True if the resource supports password credentials. CapabilityStep.credentials.tooltip.passReturned=True if the password is returned by default. False if it needs to be explicitly requested. CapabilityStep.message.cantLoadCaps=Couldn't load capabilities -CapabilityStep.native=Native +CapabilityStep.native=Nativo CapabilityStep.script.tooltip.enabled=True if this capability is active. False if it is disabled. Disabled capability acts in the same way as if it was not there. Capabilities can be disabled e.g. to work around connector bugs, to make resource read-only, etc. CapabilityStep.script.tooltip.onConnector=Capability to execute scripts "on connector". This means that the scripts will be executed on the machine where the connector is installed. This is usually system node or a connector server. CapabilityStep.script.tooltip.onResource=Capability to execute scripts "on resource". This means that the scripts will be executed on the machine where the connector connects. This is usually the server that hosts the resource (AD server, remote Unix machine, database server, etc.) -CapabilityStep.title=Capabilities -capabilityValuePanel.label.capability.create=Create capability -capabilityValuePanel.label.capability.delete=Delete capability -capabilityValuePanel.label.capability.liveSync=Live synchronization capability -capabilityValuePanel.label.capability.read=Read capability -capabilityValuePanel.label.capability.testConnection=Test connection capability -capabilityValuePanel.label.capability.update=Update capability -capabilityValuePanel.label.enabled=Enabled +CapabilityStep.title=Capacidades +capabilityValuePanel.label.capability.create=Criar capacidade +capabilityValuePanel.label.capability.delete=Deletar capacidade +capabilityValuePanel.label.capability.liveSync=Capacidade de sincronização ao vivo +capabilityValuePanel.label.capability.read=Ler capacidade +capabilityValuePanel.label.capability.testConnection=Testar capacidade de conexão +capabilityValuePanel.label.capability.update=Alterar capacidade +capabilityValuePanel.label.enabled=Habilitado capabilityValuePanel.label.capability.addRemoveAttributeValues=Add/remove values capability capabilityValuePanel.label.capability.auxiliaryObjectClasses=Auxiliary object classes capability -CertDefinitionPage.message.cantSaveEmpty=Can't save empty XML -CertDefinitionPage.message.cantSaveEmptyName=Can't save definition with empty name -Channel.discovery=Discovery -Channel.import=Import -Channel.liveSync=Live Synchronization -Channel.null=Choose One -channel.nullValid=Choose One -Channel.reconciliation=Reconciliation -Channel.user=User +CertDefinitionPage.message.cantSaveEmpty=Não pode salvar XML vazio +CertDefinitionPage.message.cantSaveEmptyName=Não pode salvar definição com nome vazio +Channel.discovery=Descoberta +Channel.import=Importar +Channel.liveSync=Sincronização ao vivo +Channel.null=Escolher um +channel.nullValid=Escolher um +Channel.reconciliation=Reconciliação +Channel.user=Usuário Channel.webService=Web Service -CheckTableHeader.label.error=Error -CheckTableHeader.protected=Protected -CheckTableHeader.showMore=Show more -CheckTableHeader.triggerPlanned=Trigger planned on {0}. -CheckTableHeader.triggerUnknownTime=Trigger without time planned. -chooseTypeDialog.button.cancel=Cancel -chooseTypeDialog.column.name=Name +CheckTableHeader.label.error=Erro +CheckTableHeader.protected=Protegido +CheckTableHeader.showMore=Mostrar mais +CheckTableHeader.triggerPlanned=Gatilho planejado para {0}. +CheckTableHeader.triggerUnknownTime=Gatilho sem data planejado. +chooseTypeDialog.button.cancel=Cancelar +chooseTypeDialog.column.name=Nome chooseTypeDialog.message.queryError=Error occurred during translation search query to filter. -chooseTypeDialog.title=Choose Object -chooseTypePanel.ObjectNameValue.badOid=(tenant not found) -chooseTypePanel.ObjectNameValue.null=None -com.evolveum.midpoint.notifications.api.transports.MailTransport.send=Send mail (Notifications) -com.evolveum.midpoint.notifications.api.transports.SimpleSmsTransport.send=Send SMS (Notifications) -ConditionalSearchFilterEditor.condition.label=Condition +chooseTypeDialog.title=Escolher objeto +chooseTypePanel.ObjectNameValue.badOid=(inquilino não encontrado) +chooseTypePanel.ObjectNameValue.null=Nenhum +com.evolveum.midpoint.notifications.api.transports.MailTransport.send=Enviar e-mail (Notificações) +com.evolveum.midpoint.notifications.api.transports.SimpleSmsTransport.send=Enviar SMS (Notificações) +ConditionalSearchFilterEditor.condition.label=Condição ConditionalSearchFilterEditor.condition.description.label=Condition description ConditionalSearchFilterEditor.condition.update.label=Update condition -ConditionalSearchFilterEditor.condition.type.label=Condition type -ConditionalSearchFilterEditor.description=Description -ConditionalSearchFilterEditor.label=Edit synchronization correlation -configurationProperties=Configuration -ConfigurationStep.button.testConnection=Save and test connection -ConfigurationStep.title=Configuration -confirmationDialog.no=No -confirmationDialog.yes=Yes +ConditionalSearchFilterEditor.condition.type.label=Tipo de condição +ConditionalSearchFilterEditor.description=Descrição +ConditionalSearchFilterEditor.label=Editar correlação de sincronização +configurationProperties=Configuração +ConfigurationStep.button.testConnection=Salvar e testar conexão +ConfigurationStep.title=Configuração +confirmationDialog.no=Não +confirmationDialog.yes=Sim connectorPoolConfiguration=Connector pool -ContainerValuePanel.label.attribute=Attribute -ContainerValuePanel.label.value=Value(s) -contentPanel.accounts=Content -contentPanel.entitlements=Entitlements -CountToolbar.label={0,number,integer} to {1,number,integer} of {2,number,integer} -CountToolbar.noFound=No matching result found. -DateValidator.message.fromAfterTo=Valid from date must be before valid to date. -DebugButtonPanel.button.delete=Delete -DebugButtonPanel.button.export=Export -DecisionsPanel.comment=Comment -DecisionsPanel.result=Outcome -DecisionsPanel.user=User -DecisionsPanel.when=When -DefinitionScopeObjectType.FocusType=Users, roles, orgs and services -DefinitionScopeObjectType.AbstractRoleType=Roles, orgs and services -DefinitionScopeObjectType.RoleType=Roles -DefinitionScopeObjectType.UserType=Users +ContainerValuePanel.label.attribute=Atributo +ContainerValuePanel.label.value=Valor(es) +contentPanel.accounts=Conteúdo +contentPanel.entitlements=Permissões +CountToolbar.label={0,número,inteiro} to {1,númeo,inteiro} of {2,número,inteiro} +CountToolbar.noFound=Nenhum resultado apropriado encontrado. +DateValidator.message.fromAfterTo='Data de' deve preceder 'data até'. +DebugButtonPanel.button.delete=Deletar +DebugButtonPanel.button.export=Exportar +DecisionsPanel.comment=Comentar +DecisionsPanel.result=Resultado +DecisionsPanel.user=Usuário +DecisionsPanel.when=Quando +DefinitionScopeObjectType.FocusType=Usuários, perfis, orgs e serviços +DefinitionScopeObjectType.AbstractRoleType=Perfis, orgs e serviços +DefinitionScopeObjectType.RoleType=Perfis +DefinitionScopeObjectType.UserType=Usuários DefinitionScopeObjectType.OrgType=Orgs DefinitionScopeObjectType.ServiceType=Services deleteAllDialog.label.accountShadowsDelete=Account shadows to delete\: {0} deleteAllDialog.label.nonAccountShadowsDelete=Non-Account shadows to delete\: {0} -deleteAllDialog.label.org=Org. Units -deleteAllDialog.label.orgUnitsDelete=Org. units to delete\: {0} +deleteAllDialog.label.org=Unidade Org. +deleteAllDialog.label.orgUnitsDelete=Unidades org. para deletar\: {0} deleteAllDialog.label.shadow.account=Account shadows deleteAllDialog.label.shadow.nonAccount=Non-Account shadows deleteAllDialog.label.shadow.org=Org. unit shadows deleteAllDialog.label.shadow.role=Role shadows -deleteAllDialog.label.totalToDelete=Total objects to delete\: {0} -deleteAllDialog.label.usersDelete=Users to delete\: {0} (User 'Administrator' will not be deleted) -deleteAllDialog.label.users=Users -deleteAllDialog.message.choose=Choose object types to delete\: -deleteAllDialog.no=No -deleteAllDialog.yes=Yes -DeltaPanel.label.changeType=Change type\: -DeltaPanel.label.modifications=Modifications\: -DeltaPanel.label.objectToAdd=Object to add\: -DeltaPanel.label.oid=object with oid\: -direction.nullvalid=Choose One -DoubleButtonPanel.button.default=Execute +deleteAllDialog.label.totalToDelete=Total de objetos para deletar\: {0} +deleteAllDialog.label.usersDelete=Usuários para deletar\: {0} (Usuário 'Administrator' não será deletado) +deleteAllDialog.label.users=Usuários +deleteAllDialog.message.choose=Escolher tipos de objeto para deletar\: +deleteAllDialog.no=Não +deleteAllDialog.yes=Sim +DeltaPanel.label.changeType=Alterar tipo\: +DeltaPanel.label.modifications=Modificações\: +DeltaPanel.label.objectToAdd=Objetos a adicionar\: +DeltaPanel.label.oid=Objetos com oid\: +direction.nullvalid=Escolher Um +DoubleButtonPanel.button.default=Executar DoubleButtonPanel.download=Download -DropDownChoicePanel.empty=Choose one -DropDownChoicePanel.notDefined=Undefined -EmptyProcessDetailsPanel.message=Process details are not available. -ExecuteChangeOptionsPanel.label.executeAfterAllApprovals=Execute after all approvals -ExecuteChangeOptionsPanel.label.force=Force -ExecuteChangeOptionsPanel.label.keepDisplayingResults=Keep displaying results -ExecuteChangeOptionsPanel.label.reconcileAffected=Reconcile affected objects -ExecuteChangeOptionsPanel.label.reconcile=Reconcile -ExecuteChangeOptionsPanel.options=Options -existenceFetchStrategy.nullValid=Choose One +DropDownChoicePanel.empty=Escolher um +DropDownChoicePanel.notDefined=Indefinido +EmptyProcessDetailsPanel.message=Detalhes do processo não disponíveis. +ExecuteChangeOptionsPanel.label.executeAfterAllApprovals=Executar após todas aprovações +ExecuteChangeOptionsPanel.label.force=Forçar +ExecuteChangeOptionsPanel.label.keepDisplayingResults=Continuar mostrando resultados +ExecuteChangeOptionsPanel.label.reconcileAffected=Reconciliar objetos afetados +ExecuteChangeOptionsPanel.label.reconcile=Reconciliar +ExecuteChangeOptionsPanel.options=Opções +existenceFetchStrategy.nullValid=Escolher Um ExportType.CSV=CSV ExportType.DOCX=DOCX ExportType.HTML=HTML @@ -283,141 +286,141 @@ ExportType.XLS=XLS ExportType.XLSX=XLSX ExportType.XML_EMBED=XML_EMBED ExportType.XML=XML -ExpressionEditorPanel.button.expressionSave=Update Expression -ExpressionEditorPanel.label.expression=Expression -ExpressionEditorPanel.label.language=Language -ExpressionEditorPanel.label.type=Expression Type +ExpressionEditorPanel.button.expressionSave=Atualizar Expressão +ExpressionEditorPanel.label.expression=Expressão +ExpressionEditorPanel.label.language=Linguagem +ExpressionEditorPanel.label.type=Tipo de Expressão ExpressionEditorPanel.label.description=Description -ExpressionEditorPanel.label.valuePolicyRef=Policy Ref. +ExpressionEditorPanel.label.valuePolicyRef=Ref. Política ExpressionEditorPanel.message.cantSerialize=Could not create JAXBElement from provided XML expression. Please enter correct expression. Reason\: {0} ExpressionEditorPanel.message.expressionSuccess=Expression has been update successfully. -ExpressionEvaluatorType.AS_IS=As is -ExpressionEvaluatorType.GENERATE=Generate +ExpressionEvaluatorType.AS_IS=Como é +ExpressionEvaluatorType.GENERATE=Gerar ExpressionEvaluatorType.LITERAL=Literal -ExpressionEvaluatorType.null=Choose one -ExpressionEvaluatorType.PATH=Path +ExpressionEvaluatorType.null=Escolher um +ExpressionEvaluatorType.PATH=Caminho ExpressionEvaluatorType.SCRIPT=Script ExpressionReturnMultiplicityType.MULTI=Multi -ExpressionReturnMultiplicityType.SINGLE=Single -ExpressionVariableEditor.button.cancel=Cancel -ExpressionVariableEditor.button.save=Save +ExpressionReturnMultiplicityType.SINGLE=Único +ExpressionVariableEditor.button.cancel=Cancelar +ExpressionVariableEditor.button.save=Salvar ExpressionVariableEditor.button.apply=Apply -ExpressionVariableEditor.label.description=Description -ExpressionVariableEditor.label=Edit expression variable -ExpressionVariableEditor.label.name=Name -ExpressionVariableEditor.label.objectRef=Object reference -ExpressionVariableEditor.label.path=Path -ExpressionVariableEditor.label.value=Value -FeedbackAlertMessage.error=Error -FeedbackAlertMessage.info=Information -FeedbackAlertMessage.success=Success -FeedbackAlertMessage.warn=Warning -feedbackMessagePanel.cause=Cause\: -feedbackMessagePanel.collapseAll=Collapse all -feedbackMessagePanel.context=Context\: -feedbackMessagePanel.count=Count\: -feedbackMessagePanel.expandAll=Expand all -feedbackMessagePanel.export=Export to XML -feedbackMessagePanel.hideStack=[ HIDE ERROR STACK ] -feedbackMessagePanel.message.debug=Debug -feedbackMessagePanel.message.error=Error -feedbackMessagePanel.message.expectedError=Expected error -feedbackMessagePanel.message.fatalError=Fatal error -feedbackMessagePanel.message.info=Information -feedbackMessagePanel.message.inProgress=In progress -feedbackMessagePanel.message.notApplicable=Not applicable -feedbackMessagePanel.message.partialError=Partial error -feedbackMessagePanel.message.success=Success -feedbackMessagePanel.message.undefined=Undefined -feedbackMessagePanel.message.unknown=Unknown -feedbackMessagePanel.message.warn=Warning +ExpressionVariableEditor.label.description=Descrição +ExpressionVariableEditor.label=Editar variável de expressão +ExpressionVariableEditor.label.name=Nome +ExpressionVariableEditor.label.objectRef=Referência de objeto +ExpressionVariableEditor.label.path=Caminho +ExpressionVariableEditor.label.value=Valor +FeedbackAlertMessage.error=Erro +FeedbackAlertMessage.info=Informação +FeedbackAlertMessage.success=Sucesso +FeedbackAlertMessage.warn=Aviso +feedbackMessagePanel.cause=Causa\: +feedbackMessagePanel.collapseAll=Contrair tudo +feedbackMessagePanel.context=Contexto\: +feedbackMessagePanel.count=Contagem\: +feedbackMessagePanel.expandAll=Expandir tudo +feedbackMessagePanel.export=Exportar para XML +feedbackMessagePanel.hideStack=[ ESCONDER PILHA DE ERROS ] +feedbackMessagePanel.message.debug=Debugar +feedbackMessagePanel.message.error=Erro +feedbackMessagePanel.message.expectedError=Erro esperado +feedbackMessagePanel.message.fatalError=Erro fatal +feedbackMessagePanel.message.info=Informação +feedbackMessagePanel.message.inProgress=Aguarde +feedbackMessagePanel.message.notApplicable=Não aplicável +feedbackMessagePanel.message.partialError=Erro parcial +feedbackMessagePanel.message.success=Sucesso +feedbackMessagePanel.message.undefined=Indefinido +feedbackMessagePanel.message.unknown=Desconhecido +feedbackMessagePanel.message.warn=Aviso feedbackMessagePanel.param=Param\: -feedbackMessagePanel.showStack=[ SHOW ERROR STACK ] -feedbackMessagePanel.times=times -feedtempMessagePanelbackMessagePanel.message.info=Information -fetchStrategy.nullValid=Choose One -filter.duplicate=Filter with name '{0}' is already defined -filter.emptyFilter=Filter must not be empty -H3Header.label.error=Error -H3Header.showMore=Show more -HandlerUriActions.ACTION_ADD_FOCUS=Add focus -HandlerUriActions.ACTION_ADD_USER=Add user (deprecated) -HandlerUriActions.ACTION_DELETE_ACCOUNT=Delete account (deprecated) -HandlerUriActions.ACTION_DELETE_FOCUS=Delete focus -HandlerUriActions.ACTION_DELETE_SHADOW=Delete shadow -HandlerUriActions.ACTION_DELETE_USER=Delete user (deprecated) -HandlerUriActions.ACTION_DISABLE_ACCOUNT=Disable account (deprecated) -HandlerUriActions.ACTION_DISABLE_USER=Disable user (deprecated) -HandlerUriActions.ACTION_INACTIVATE_FOCUS=Inactivate focus -HandlerUriActions.ACTION_INACTIVATE_SHADOW=Inactivate shadow -HandlerUriActions.ACTION_LINK_ACCOUNT=Link account (deprecated) -HandlerUriActions.ACTION_LINK=Link -HandlerUriActions.ACTION_MODIFY_USER=Modify user (deprecated) -HandlerUriActions.ACTION_SYNCHRONIZE=Synchronize (deprecated) -HandlerUriActions.ACTION_UNLINK_ACCOUNT=Unlink account (deprecated) -HandlerUriActions.ACTION_UNLINK=Unlink +feedbackMessagePanel.showStack=[ MOSTRAR PILHA DE ERROS ] +feedbackMessagePanel.times=vezes +feedtempMessagePanelbackMessagePanel.message.info=informação +fetchStrategy.nullValid=Escolher Um +filter.duplicate=Filtro com nome '{0}' já foi definido +filter.emptyFilter=Filtro não pode ser vazio +H3Header.label.error=Erro +H3Header.showMore=Mostrar mais +HandlerUriActions.ACTION_ADD_FOCUS=Incluir foco +HandlerUriActions.ACTION_ADD_USER=Incluir usuário (desuso) +HandlerUriActions.ACTION_DELETE_ACCOUNT=Deletar conta (desuso) +HandlerUriActions.ACTION_DELETE_FOCUS=Deletar foco +HandlerUriActions.ACTION_DELETE_SHADOW=Deletar sombra +HandlerUriActions.ACTION_DELETE_USER=Deletar usuário (desuso) +HandlerUriActions.ACTION_DISABLE_ACCOUNT=Desabilitar conta (desuso) +HandlerUriActions.ACTION_DISABLE_USER=Desabilitar usuário (desudo) +HandlerUriActions.ACTION_INACTIVATE_FOCUS=Foco inativo +HandlerUriActions.ACTION_INACTIVATE_SHADOW=Sombra inativa +HandlerUriActions.ACTION_LINK_ACCOUNT=Vincular conta (desuso) +HandlerUriActions.ACTION_LINK=Vincular +HandlerUriActions.ACTION_MODIFY_USER=Modificar usuário (desuso) +HandlerUriActions.ACTION_SYNCHRONIZE=Sincronizar (desuso) +HandlerUriActions.ACTION_UNLINK_ACCOUNT=Desvincular conta (desuso) +HandlerUriActions.ACTION_UNLINK=Desvincular HoursValidator.range=Field '${label}' have to be between ${minimum} and ${maximum}. ImportOptionsPanel.errorCount=Error count -importOptionsPanel.fetchResourceSchema=Fetch resource schema -importOptionsPanel.keepOid=Keep OID -ImportOptionsPanel.options=Options -importOptionsPanel.overwriteExistingObject=Overwrite existing object -importOptionsPanel.protectedByEncryption=Protected by encryption -importOptionsPanel.referentialIntegrity=Referential integrity -importOptionsPanel.stopAfter=Stop after errors exceed -importOptionsPanel.summarizeErrors=Summarize errors -importOptionsPanel.summarizeSuccesses=Summarize successes -importOptionsPanel.validateDynamicSchema=Validate dynamic schema -importOptionsPanel.validateStaticSchema=Validate static schema -ItemApprovalPanel.approvalSchema=Approval schema -ItemApprovalPanel.currentWorkItems=Current work items -ItemApprovalPanel.decisionsDoneWhenFinishedIs_false=Decisions done so far -ItemApprovalPanel.decisionsDoneWhenFinishedIs_true=Decisions done -ItemApprovalPanel.itemThatWasApproved=Item that was considered (and was APPROVED) -ItemApprovalPanel.itemThatWasCompleted=Item that was completed -ItemApprovalPanel.itemThatWasRejected=Item that was considered (and was REJECTED) -ItemApprovalPanel.itemToBeApproved=Item to be approved -JasperReportConfigurationPanel.addField=Add field -JasperReportConfigurationPanel.addParameter=Add parameter -JasperReportConfigurationPanel.deleteField=Delete field -JasperReportConfigurationPanel.deleteParameter=Delete parameter -JasperReportConfigurationPanel.fieldClass=Field class -JasperReportConfigurationPanel.fieldName=Field name +importOptionsPanel.fetchResourceSchema=Buscar esquema do recurso +importOptionsPanel.keepOid=Manter OID +ImportOptionsPanel.options=Opções +importOptionsPanel.overwriteExistingObject=Sobrepor objetos existentes +importOptionsPanel.protectedByEncryption=Protegido por encriptação +importOptionsPanel.referentialIntegrity=Integridade referencial +importOptionsPanel.stopAfter=Parar após erros exceder +importOptionsPanel.summarizeErrors=Sumarizar erros +importOptionsPanel.summarizeSuccesses=Sumarizar sucessos +importOptionsPanel.validateDynamicSchema=Validar esquema dinâmico +importOptionsPanel.validateStaticSchema=Validar esquema estático +ItemApprovalPanel.approvalSchema=Aprovar esquema +ItemApprovalPanel.currentWorkItems=Itens de trabalho correntes +ItemApprovalPanel.decisionsDoneWhenFinishedIs_false=Decisões tomadas até agora +ItemApprovalPanel.decisionsDoneWhenFinishedIs_true=Decisões tomadas +ItemApprovalPanel.itemThatWasApproved=Item que foi considerado (e APROVADO) +ItemApprovalPanel.itemThatWasCompleted=Item que foi completado +ItemApprovalPanel.itemThatWasRejected=Item que foi considerado (e REJEITADO) +ItemApprovalPanel.itemToBeApproved=Item a ser aprovado +JasperReportConfigurationPanel.addField=Adicionar campo +JasperReportConfigurationPanel.addParameter=Adicionar parâmetro +JasperReportConfigurationPanel.deleteField=Deletar campo +JasperReportConfigurationPanel.deleteParameter=Deletar parâmetro +JasperReportConfigurationPanel.fieldClass=Classe do campo +JasperReportConfigurationPanel.fieldName=Nome do campo JasperReportConfigurationPanel.forPrompting=For prompting -JasperReportConfigurationPanel.parameterClass=Parameter class -JasperReportConfigurationPanel.parameterName=Parameter name -JasperReportConfigurationPanel.parameterProperty=Property\: {0} -JasperReportConfigurationPanel.reportFields=Report fields -JasperReportConfigurationPanel.reportParameters=Report parameters -JasperReportConfigurationPanel.reportQuery=Report query -JasperReportConfigurationPanel.errormsg=Empty values not allowed -kind.nullValid=Choose One +JasperReportConfigurationPanel.parameterClass=Classe do parâmetro +JasperReportConfigurationPanel.parameterName=Nome do parâmetro +JasperReportConfigurationPanel.parameterProperty=Propriedade\: {0} +JasperReportConfigurationPanel.reportFields=Campos do relatório +JasperReportConfigurationPanel.reportParameters=Parâmetros do relatório +JasperReportConfigurationPanel.reportQuery=Consulta do relatório +JasperReportConfigurationPanel.errormsg=Valores vazios não permitidos +kind.nullValid=Escolha Um Language.GROOVY=Groovy (default) Language.JAVASCRIPT=Javascript Language.XPATH=XPath LimitationsEditorDialog.allow=Allow LimitationsEditorDialog.button.add=Add Limitation Object -LimitationsEditorDialog.button.cancel=Cancel -LimitationsEditorDialog.button.save=Save +LimitationsEditorDialog.button.cancel=Cancelar +LimitationsEditorDialog.button.save=Salvar LimitationsEditorDialog.button.apply=Apply -LimitationsEditorDialog.deny=Deny -LimitationsEditorDialog.inherit=Inherit -LimitationsEditorDialog.label.add=Add -LimitationsEditorDialog.label.close=Close -LimitationsEditorDialog.label=Edit Resource Limitations -LimitationsEditorDialog.label.ignore=Ignore -LimitationsEditorDialog.label.layers=Layers -LimitationsEditorDialog.label.maxOccurs=Max. occurs -LimitationsEditorDialog.label.minOccurs=Min. occurs -LimitationsEditorDialog.label.model=Model -LimitationsEditorDialog.label.modify=Modify -LimitationsEditorDialog.label.other=Other -LimitationsEditorDialog.label.presentation=Presentation -LimitationsEditorDialog.label.propertyAccess=Property access -LimitationsEditorDialog.label.read=Read -LimitationsEditorDialog.label.schema=Schema -logger.duplicate=Logger with name '{0}' is already defined -logger.emptyLogger=Logger must not be empty +LimitationsEditorDialog.deny=Negar +LimitationsEditorDialog.inherit=Herdar +LimitationsEditorDialog.label.add=Incluir +LimitationsEditorDialog.label.close=Fechar +LimitationsEditorDialog.label=Editar limitações do recurso +LimitationsEditorDialog.label.ignore=Ignorar +LimitationsEditorDialog.label.layers=Camadas +LimitationsEditorDialog.label.maxOccurs=Máx. ocorrs +LimitationsEditorDialog.label.minOccurs=Min. ocorrs +LimitationsEditorDialog.label.model=Modelar +LimitationsEditorDialog.label.modify=Modificar +LimitationsEditorDialog.label.other=Outro +LimitationsEditorDialog.label.presentation=Apresentação +LimitationsEditorDialog.label.propertyAccess=Acesso à propriedade +LimitationsEditorDialog.label.read=Ler +LimitationsEditorDialog.label.schema=Esquema +logger.duplicate=Logger com nome '{0}' já foi definido +logger.emptyLogger=Logger não pode ser vazio LoggingConfigPanel.appender=Appender LoggingConfigPanel.appenders=Appenders LoggingConfigPanel.appenders.appending=Appending @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties index d25b813c3fb..ad7ac39a0c3 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_ru.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Name AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=View direct & indirect assignments +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Direct AssignmentPreviewDialog.type.indirect=Indirect AssignmentTablePanel.menu.assign=Assign @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0 AssignmentTablePanel.message.noAssignmentSelected=No assignment selected. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion AssignmentTablePanel.modal.title.selectAssignment=Select object(s) associationAttribute.nullValid=Choose One @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties index c4f8d5db3b3..de1edf822b4 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_sk.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=Meno AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=Tenant AssignmentPreviewDialog.label=Zobraziť priame & nepriame priradenia +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Priamy AssignmentPreviewDialog.type.indirect=Nepriamy AssignmentTablePanel.menu.assign=Priradiť účet @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Neplatný stav priradenia '{ AssignmentTablePanel.message.noAssignmentSelected=Priradené nebolo vybrané. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete=Naozaj chcete zmazať {0} priradenie(í)? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Potvrďte zmazanie AssignmentTablePanel.modal.title.selectAssignment=Vyberte objekt(y) associationAttribute.nullValid=Vyberte jednu @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization PageAdminObjectDetails.noChangesSave=There were no changes to be saved. PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Neplatný stav tieňa '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Use object approver StageDefinitionPanel.reviewerUseObjectManager = Reviewers based on the manager of object being assigned to StageDefinitionPanel.reviewerUseObjectManagerOrgType = Type of organization relation used to determine the manager (optional) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Allow managers to approve their own assignments +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Default reviewer reference StageDefinitionPanel.additionalReviewerRef = Additional reviewer reference StageDefinitionPanel.outcomeStrategy = Decision aggregation strategy in case of more than one reviewer diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties index b77a8e3fad1..0f49622866d 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_tr.properties @@ -87,6 +87,7 @@ AssignmentPreviewDialog.column.name=İsim AssignmentPreviewDialog.column.orgRef=Org AssignmentPreviewDialog.column.tenant=En üst AssignmentPreviewDialog.label=Doğrudan ve dolaylı atamaları görüntüle +AssignmentPreviewDialog.delegationPreviewLabel=Limit privileges AssignmentPreviewDialog.type.direct=Doğrudan AssignmentPreviewDialog.type.indirect=Dolaylı AssignmentTablePanel.menu.assign=Kaynak hesabı ata @@ -102,6 +103,8 @@ AssignmentTablePanel.message.illegalAssignmentState='{0}' geçersiz atama durumu AssignmentTablePanel.message.noAssignmentSelected=Hiç bir atama seçilmedi. AssignmentTablePanel.message.noDelegationsSelected=No delegation selected. AssignmentTablePanel.modal.message.delete={0} atama(ları) gerçekten kaldırmak istyor musunuz? +AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)? +AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item AssignmentTablePanel.modal.title.confirmDeletion=Silmeyi onayla AssignmentTablePanel.modal.title.selectAssignment=Nesne(leri) seç associationAttribute.nullValid=Birini Seçiniz @@ -1055,6 +1058,7 @@ PageAdminObjectDetails.title.editOrgType='{0}' organizasyonunu düzenle PageAdminObjectDetails.title.newOrgType=Yeni organizasyon oluştur PageAdminObjectDetails.noChangesSave=Kaydedilecek bir değişiklik oluşmadı. PageAdminObjectDetails.noChangesPreview=Önizleme yapılabilecek değişklik yok +pageAdminFocus.basic=Basic pageAdminFocus.message.cantEditFocus=Yeni odak nesnesi bilinmeyen bir hatadan dolayı düzenlenemedi.. pageAdminFocus.message.cantNewFocus=Yeni odak nesnesi bilinmeyen bir hatadan dolayı oluşturulamadı. pageAdminFocus.message.illegalAccountState=Geçersiz gölge durumu '{0}'. @@ -1359,6 +1363,7 @@ StageDefinitionPanel.reviewerUseObjectApprover = Nesne onaylayıcısını kullan StageDefinitionPanel.reviewerUseObjectManager = Atama yapılan nesnenin yöneticisine dayalı gözden geçiriciler StageDefinitionPanel.reviewerUseObjectManagerOrgType = Yöneticiyi belirlemek için kullanılan organizasyon tipi ilişkisi (isteğe bağlı) StageDefinitionPanel.reviewerUseObjectManagerAllowSelf = Yöneticilerin kendi atamalarını onaylamasına izin ver +StageDefinitionPanel.reviewerUseObjectManagerBox = Use object manager StageDefinitionPanel.defaultReviewerRef = Varsayılan gözden geçirici referansı StageDefinitionPanel.additionalReviewerRef = Ek gözden geçirici referansı StageDefinitionPanel.outcomeStrategy = Bİrden fazla gözden geçirici olduğunda karar bütünleştirme stratejisi diff --git a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java index b8aa0afeb6c..f55824923dc 100644 --- a/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java +++ b/gui/admin-gui/src/test/java/com/evolveum/midpoint/web/TestIntegrationObjectWrapperFactory.java @@ -40,7 +40,6 @@ import org.testng.annotations.Test; import com.evolveum.icf.dummy.resource.DummyGroup; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismContainer; @@ -60,6 +59,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.web.component.prism.AssociationWrapper; diff --git a/infra/common/src/main/java/com/evolveum/midpoint/common/validator/Validator.java b/infra/common/src/main/java/com/evolveum/midpoint/common/validator/Validator.java index ccf32f61fef..6b17d054880 100644 --- a/infra/common/src/main/java/com/evolveum/midpoint/common/validator/Validator.java +++ b/infra/common/src/main/java/com/evolveum/midpoint/common/validator/Validator.java @@ -32,6 +32,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.validation.Schema; +import com.evolveum.midpoint.util.QNameUtil; import org.apache.commons.lang.StringUtils; import org.codehaus.staxmate.dom.DOMConverter; import org.w3c.dom.Document; @@ -170,7 +171,7 @@ public void validate(InputStream inputStream, OperationResult validatorResult, int eventType = stream.nextTag(); if (eventType == XMLStreamConstants.START_ELEMENT) { - if (!stream.getName().equals(SchemaConstants.C_OBJECTS)) { + if (!QNameUtil.match(stream.getName(), SchemaConstants.C_OBJECTS)) { // This has to be an import file with a single objects. Try // to process it. OperationResult objectResult = validatorResult.createSubresult(objectResultOperationName); diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java index 974554a4478..8781dd6a069 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/Item.java @@ -796,35 +796,29 @@ public boolean equalsRealValue(Object obj) { } private boolean equalsRealValues(List thisValue, List otherValues) { - Comparator comparator = new Comparator() { - @Override - public int compare(Object o1, Object o2) { - if (o1 instanceof PrismValue && o2 instanceof PrismValue) { - PrismValue v1 = (PrismValue)o1; - PrismValue v2 = (PrismValue)o2; - return v1.equalsRealValue(v2) ? 0 : 1; - } else { - return -1; - } - } - }; - return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, comparator); + return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, + (o1, o2) -> { + if (o1 instanceof PrismValue && o2 instanceof PrismValue) { + PrismValue v1 = (PrismValue)o1; + PrismValue v2 = (PrismValue)o2; + return v1.equalsRealValue(v2); + } else { + return false; + } + }); } private boolean match(List thisValue, List otherValues) { - Comparator comparator = new Comparator() { - @Override - public int compare(Object o1, Object o2) { - if (o1 instanceof PrismValue && o2 instanceof PrismValue) { - PrismValue v1 = (PrismValue)o1; - PrismValue v2 = (PrismValue)o2; - return v1.match(v2) ? 0 : 1; - } else { - return -1; - } - } - }; - return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, comparator); + return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, + (o1, o2) -> { + if (o1 instanceof PrismValue && o2 instanceof PrismValue) { + PrismValue v1 = (PrismValue)o1; + PrismValue v2 = (PrismValue)o2; + return v1.match(v2); + } else { + return false; + } + }); } @Override diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismProperty.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismProperty.java index ba36fc75e2c..01d62b5a983 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismProperty.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismProperty.java @@ -463,20 +463,15 @@ protected ItemDelta fixupDelta(ItemDelta delta, Item otherItem, } public static boolean compareCollectionRealValues(Collection col1, Collection col2) { - return MiscUtil.unorderedCollectionEquals(col1, col2, new Comparator() { - @Override - public int compare(PrismProperty p1, PrismProperty p2) { - if (!p1.getElementName().equals(p2.getElementName())) { - return 1; - } - Collection p1RealVals = p1.getRealValues(); - Collection p2RealVals = p2.getRealValues(); - if (MiscUtil.unorderedCollectionEquals(p1RealVals, p2RealVals)) { - return 0; - } - return 1; - } - }); + return MiscUtil.unorderedCollectionEquals(col1, col2, + (p1, p2) -> { + if (!p1.getElementName().equals(p2.getElementName())) { + return false; + } + Collection p1RealVals = p1.getRealValues(); + Collection p2RealVals = p2.getRealValues(); + return MiscUtil.unorderedCollectionEquals(p1RealVals, p2RealVals); + }); } @Override diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismValue.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismValue.java index f3797f7156d..4062e9b07f6 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismValue.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/PrismValue.java @@ -246,16 +246,7 @@ public static boolean containsRealValue(Collection col } public static boolean equalsRealValues(Collection collection1, Collection collection2) { - Comparator comparator = new Comparator() { - @Override - public int compare(V v1, V v2) { - if (v1.equalsRealValue(v2)) { - return 0; - }; - return 1; - } - }; - return MiscUtil.unorderedCollectionEquals(collection1, collection2, comparator); + return MiscUtil.unorderedCollectionEquals(collection1, collection2, (v1, v2) -> v1.equalsRealValue(v2)); } public static boolean containsAll(Collection thisSet, Collection otherSet, boolean ignoreMetadata, boolean isLiteral) { diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ItemDelta.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ItemDelta.java index 93ee6045b66..9525c7ec7a4 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ItemDelta.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ItemDelta.java @@ -926,7 +926,7 @@ public boolean isRedundant(PrismObject object, Comparator< return !hasAnyValue(valuesToAdd); } else { if (valuesToReplace != null) { - return MiscUtil.unorderedCollectionEquals(valuesToReplace, currentItem.getValues(), comparator); + return MiscUtil.unorderedCollectionCompare(valuesToReplace, currentItem.getValues(), comparator); } ItemDelta narrowed = narrow(object, comparator); boolean narrowedNotEmpty = narrowed.hasAnyValue(narrowed.valuesToAdd) || narrowed.hasAnyValue(narrowed.valuesToDelete); @@ -1601,19 +1601,16 @@ public boolean equals(Object obj) { } private boolean equivalentSetRealValue(Collection thisValue, Collection otherValues) { - Comparator comparator = new Comparator() { - @Override - public int compare(Object o1, Object o2) { - if (o1 instanceof PrismValue && o2 instanceof PrismValue) { - PrismValue v1 = (PrismValue)o1; - PrismValue v2 = (PrismValue)o2; - return v1.equalsRealValue(v2) ? 0 : 1; - } else { - return -1; - } - } - }; - return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, comparator); + return MiscUtil.unorderedCollectionEquals(thisValue, otherValues, + (o1,o2) -> { + if (o1 instanceof PrismValue && o2 instanceof PrismValue) { + PrismValue v1 = (PrismValue)o1; + PrismValue v2 = (PrismValue)o2; + return v1.equalsRealValue(v2); + } else { + return false; + } + }); } @Override diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ObjectDelta.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ObjectDelta.java index 0d5ba79fafd..e4be1732491 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ObjectDelta.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/delta/ObjectDelta.java @@ -1430,8 +1430,8 @@ public boolean equivalent(ObjectDelta other) { return false; } else if (!objectToAdd.equivalent(other.objectToAdd)) return false; - if (!MiscUtil.unorderedCollectionEquals(this.modifications, other.modifications, (o1, o2) -> - ((ItemDelta) o1).equivalent((ItemDelta) o2) ? 0 : 1)) { + if (!MiscUtil.unorderedCollectionEquals(this.modifications, other.modifications, + (o1, o2) -> o1.equivalent((ItemDelta)o2))) { return false; } return Objects.equals(objectTypeClass, other.objectTypeClass) diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java index a9f6218c46d..b0147c92a15 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 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. @@ -102,6 +102,12 @@ public static void assertPropertyValue(PrismContainer container, QName pr assertSame("Wrong parent for value of container "+container, container, containerValue.getParent()); assertPropertyValue(containerValue, propQName, realPropValues); } + + public static void assertPropertyValueMatch(PrismContainer container, QName propQName, MatchingRule matchingRule, T... realPropValues) throws SchemaException { + PrismContainerValue containerValue = container.getValue(); + assertSame("Wrong parent for value of container "+container, container, containerValue.getParent()); + assertPropertyValueMatch(containerValue, propQName, matchingRule, realPropValues); + } public static void assertPropertyValue(PrismContainerValue containerValue, QName propQName, T... realPropValues) { PrismProperty property = containerValue.findProperty(propQName); @@ -110,6 +116,13 @@ public static void assertPropertyValue(PrismContainerValue containerValue assertPropertyValueDesc(property, containerValue.getParent().toString(), realPropValues); } + public static void assertPropertyValueMatch(PrismContainerValue containerValue, QName propQName, MatchingRule matchingRule, T... realPropValues) throws SchemaException { + PrismProperty property = containerValue.findProperty(propQName); + assertNotNull("Property " + propQName + " not found in " + containerValue.getParent(), property); + assertSame("Wrong parent for property " + property, containerValue, property.getParent()); + assertPropertyValueDesc(property, matchingRule, containerValue.getParent().toString(), realPropValues); + } + public static void assertPropertyValue(PrismContainer container, ItemPath propPath, T... realPropValues) { PrismContainerValue containerValue = container.getValue(); assertSame("Wrong parent for value of container "+container, container, containerValue.getParent()); @@ -125,13 +138,22 @@ public static void assertPropertyValue(PrismContainerValue containerValue public static void assertPropertyValue(PrismProperty property, T... expectedPropValues) { assertPropertyValueDesc(property, null, expectedPropValues); } - + public static void assertPropertyValueDesc(PrismProperty property, String contextDescrition, T... expectedPropValues) { + try { + assertPropertyValueDesc(property, null, contextDescrition, expectedPropValues); + } catch (SchemaException e) { + // null matching rule, cannot happen + throw new RuntimeException(e.getMessage(), e); + } + } + + public static void assertPropertyValueDesc(PrismProperty property, MatchingRule matchingRule, String contextDescrition, T... expectedPropValues) throws SchemaException { Collection> pvals = property.getValues(); QName propQName = property.getElementName(); assert pvals != null && !pvals.isEmpty() : "Empty property "+propQName; assertSet("property "+propQName + (contextDescrition == null ? "" : " in " + contextDescrition), - "value", pvals, expectedPropValues); + "value", matchingRule, pvals, expectedPropValues); } public static void assertPropertyValues(String message, Collection expected, Collection> results) { @@ -519,16 +541,7 @@ public static void assertContainerAdd(ObjectDelta o private static void assertEquivalentContainerValues(String message, Collection> haveValues, PrismContainerValue[] expectedCVals) { List> expectedValues = Arrays.asList(expectedCVals); - Comparator> comparator = new Comparator>() { - @Override - public int compare(PrismContainerValue a, PrismContainerValue b) { - if (a.equivalent(b)) { - return 0; - } - return 1; - } - }; - assert MiscUtil.unorderedCollectionEquals(haveValues, expectedValues, comparator) : message; + assert MiscUtil.unorderedCollectionEquals(haveValues, expectedValues, (a,b) -> a.equivalent(b)) : message; } public static void assertOrigin(ObjectDelta objectDelta, final OriginType... expectedOriginTypes) { @@ -820,20 +833,33 @@ public static void assertEquivalent(String message, Prism assert false: message + ": " + suffix; } + private static void assertSet(String inMessage, String setName, MatchingRule matchingRule, Collection> actualPValues, T[] expectedValues) throws SchemaException { + assertValues(setName + " set in " + inMessage, matchingRule, actualPValues, expectedValues); + } + private static void assertSet(String inMessage, String setName, Collection> actualPValues, T[] expectedValues) { assertValues(setName + " set in " + inMessage, actualPValues, expectedValues); } public static void assertValues(String message, Collection> actualPValues, T... expectedValues) { + try { + assertValues(message, null, actualPValues, expectedValues); + } catch (SchemaException e) { + // null matching rule, cannot happen + throw new RuntimeException(e.getMessage(), e); + } + } + + public static void assertValues(String message, MatchingRule matchingRule, Collection> actualPValues, T... expectedValues) throws SchemaException { assertNotNull("Null set in " + message, actualPValues); if (expectedValues.length != actualPValues.size()) { fail("Wrong number of values in " + message+ "; expected "+expectedValues.length+" (real values) " +PrettyPrinter.prettyPrint(expectedValues)+"; has "+actualPValues.size()+" (pvalues) "+actualPValues); } - for (PrismPropertyValue actualPValue: actualPValues) { + for (PrismPropertyValue actualPValue: actualPValues) { boolean found = false; for (T value: expectedValues) { - if (value.equals(actualPValue.getValue())) { + if (PrismUtil.equals(value, actualPValue.getValue(), matchingRule)) { found = true; } } @@ -1099,7 +1125,7 @@ public int compare(PolyStringType o1, PolyStringType o2) { return s1.compareTo(s2); } }; - assert MiscUtil.unorderedCollectionEquals(actualCollection, expectedCollection, comparator) : message + ": expected "+expectedCollection+ + assert MiscUtil.unorderedCollectionCompare(actualCollection, expectedCollection, comparator) : message + ": expected "+expectedCollection+ "; was "+actualCollection; } diff --git a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismUtil.java b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismUtil.java index 6f751ccb70d..a0223e425a4 100644 --- a/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismUtil.java +++ b/infra/prism/src/main/java/com/evolveum/midpoint/prism/util/PrismUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 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. @@ -19,6 +19,7 @@ import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.lex.dom.DomLexicalProcessor; import com.evolveum.midpoint.prism.marshaller.PrismUnmarshaller; +import com.evolveum.midpoint.prism.match.MatchingRule; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer; import com.evolveum.midpoint.prism.xml.XsdTypeMapper; @@ -190,4 +191,18 @@ public static void setDeltaOldValue(PrismObject oldObj } } + public static boolean equals(T a, T b, MatchingRule matchingRule) throws SchemaException { + if (a == null && b == null) { + return true; + } + if (a == null || b == null) { + return false; + } + if (matchingRule == null) { + return a.equals(b); + } else { + return matchingRule.match(a, b); + } + } + } diff --git a/infra/prism/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java b/infra/prism/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java index 349bec0f039..5621b2f3309 100644 --- a/infra/prism/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java +++ b/infra/prism/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.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. @@ -425,7 +425,7 @@ public static void assertUserJackContent(PrismObject user, boolean exp } - private static void assertUserJackExtension(PrismObject user) { + private static void assertUserJackExtension(PrismObject user) throws SchemaException { PrismContainer extension = user.getExtension(); assertContainerDefinition(extension, "extension", DOMUtil.XSD_ANY, 0, 1); @@ -463,7 +463,7 @@ private static void assertUserJackExtension(PrismObject user) { } - public static void assertPropertyValue(PrismContainer container, String propName, Object propValue) { + public static void assertPropertyValue(PrismContainer container, String propName, Object propValue) throws SchemaException { QName propQName = new QName(NS_FOO, propName); PrismAsserts.assertPropertyValue(container, propQName, propValue); } diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/SchemaConstants.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/SchemaConstants.java index aac7690ef08..53997cc0f3e 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/SchemaConstants.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/SchemaConstants.java @@ -53,7 +53,9 @@ public abstract class SchemaConstants { public static final String NS_ORG = "http://midpoint.evolveum.com/xml/ns/public/common/org-3"; public static final String PREFIX_NS_ORG = "org"; public static final String NS_QUERY = QueryConvertor.NS_QUERY; + public static final String NS_QUERY_PREFIX = "q"; public static final String NS_TYPES = PrismConstants.NS_TYPES; + public static final String NS_TYPES_PREFIX = "t"; public static final String NS_API_TYPES = "http://midpoint.evolveum.com/xml/ns/public/common/api-types-3"; public static final String NS_MIDPOINT_PUBLIC_PREFIX = "http://midpoint.evolveum.com/xml/ns/public/"; public static final String NS_C = "http://midpoint.evolveum.com/xml/ns/public/common/common-3"; @@ -335,6 +337,7 @@ public abstract class SchemaConstants { // These are used in script expressions, they should remain here public static final String NS_ICF_SCHEMA = "http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3"; + public static final String NS_ICF_SCHEMA_PREFIX = "icfs"; public static final QName ICFS_NAME = new QName(NS_ICF_SCHEMA, "name"); public static final QName ICFS_UID = new QName(NS_ICF_SCHEMA, "uid"); diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ExceptionUtil.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ExceptionUtil.java index b915156c645..ec2ba412922 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ExceptionUtil.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/ExceptionUtil.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. @@ -15,7 +15,14 @@ */ package com.evolveum.midpoint.schema.util; +import com.evolveum.midpoint.util.exception.CommunicationException; +import com.evolveum.midpoint.util.exception.ConfigurationException; +import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.TunnelException; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ErrorSelectorType; /** * @author Radovan Semancik @@ -43,4 +50,26 @@ public static String lookForMessage(Throwable e) { return null; } + public static boolean isSelected(ErrorSelectorType selector, Throwable exception) { + if (selector == null) { + return false; + } + if (exception instanceof CommunicationException) { + return selector.isNetwork() == Boolean.TRUE; + } + if (exception instanceof SecurityViolationException) { + return selector.isSecurity() == Boolean.TRUE; + } + if (exception instanceof PolicyViolationException) { + return selector.isPolicy() == Boolean.TRUE; + } + if (exception instanceof SchemaException) { + return selector.isSchema() == Boolean.TRUE; + } + if (exception instanceof ConfigurationException || exception instanceof ExpressionEvaluationException) { + return selector.isConfiguration() == Boolean.TRUE; + } + return selector.isGeneric() == Boolean.TRUE; + } + } diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd index 318deb754f5..92de17d5bbc 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd @@ -4171,11 +4171,99 @@ - + + + + Specifies a method that midPoint will use to evaluate criticality of errors: which errors are + considered to be critical (stops the operation) and which error are non-critical (operation continues). + By default network errors are not considered critical, other errors are critical. + + EXPERIMENTAL: use with care. + + Use of this option may be DANGEROUS. Especially when used to set generic errors as non-critical. + Generic errors means that midPoint has absolutely no idea what is going on. Otherwise the + error would be classified to a more specific category. Continuing an operation where midPoint + has no idea what is going on may have severe consequences. The results are unpredicatble. + If you use this setting then you are on your own. Hic sunt liones. + + + true + + + + + + + Selects error categories, e.g. for the purpose of criticality definition, selection + which error types to handle, etc. + + EXPERIMENTAL: use with care + + + + true + + + + + + + Selects network errors (connection refused, timeouts, unreachable network, connection resets, ...) + + + + + + + Selects security issues (failed authentication, permission denied, ...) + + + + + + + Selects policy violations. The operation failed because it violates + defined policies (e.g. exlusion policies), it fails data consistency checks, + etc. + + + + + + + Selects schema and data format errors. These are errors that data + not complete, they contain unexpected elements, they do not match + pre-defined schema, etc. + + + + + + + Selects configuration errors. These are caused by misconfiguration of + midPoint, some of its components, the connector or the resource. This also + includes run-time errors that are likely caused by the configuration, such + as generic errors in the expressions. + + + + + + + Selects generic, system and other non-specific issues. These errors + do not have any substantial definition about their cause. The error + may mean anything. + + + + + + + diff --git a/infra/util/src/main/java/com/evolveum/midpoint/util/HeteroComparator.java b/infra/util/src/main/java/com/evolveum/midpoint/util/HeteroComparator.java new file mode 100644 index 00000000000..28d271c9e58 --- /dev/null +++ b/infra/util/src/main/java/com/evolveum/midpoint/util/HeteroComparator.java @@ -0,0 +1,26 @@ +/** + * 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.midpoint.util; + +/** + * @author semancik + * + */ +public interface HeteroComparator { + + boolean isEquivalent(A a, B b); + +} diff --git a/infra/util/src/main/java/com/evolveum/midpoint/util/MiscUtil.java b/infra/util/src/main/java/com/evolveum/midpoint/util/MiscUtil.java index a1376416932..e6fceb2c88c 100644 --- a/infra/util/src/main/java/com/evolveum/midpoint/util/MiscUtil.java +++ b/infra/util/src/main/java/com/evolveum/midpoint/util/MiscUtil.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Consumer; import java.util.Scanner; import java.util.Set; @@ -98,21 +99,22 @@ public static boolean listEquals(List a, List b) { } public static boolean unorderedCollectionEquals(Collection a, Collection b) { - Comparator comparator = new Comparator() { - @Override - public int compare(Object o1, Object o2) { - return o1.equals(o2) ? 0 : 1; - } - }; - return unorderedCollectionEquals(a, b, comparator); + return unorderedCollectionEquals(a, b, (xa, xb) -> xa.equals(xb)); } /** * Only zero vs non-zero value of comparator is important. */ - public static boolean unorderedCollectionEquals(Collection a, Collection b, Comparator comparator) { + public static boolean unorderedCollectionCompare(Collection a, Collection b, final Comparator comparator) { + return unorderedCollectionEquals(a, b, (xa, xb) -> comparator.compare(xa, xb) == 0); + } + + /** + * Only zero vs non-zero value of comparator is important. + */ + public static boolean unorderedCollectionEquals(Collection a, Collection b, HeteroComparator comparator) { if (a == null && b == null) { - return true; + return true; } if (a == null || b == null) { return false; @@ -120,14 +122,14 @@ public static boolean unorderedCollectionEquals(Collection a, Collection b, Comp if (a.size() != b.size()) { return false; } - Collection outstanding = new ArrayList(b.size()); + Collection outstanding = new ArrayList<>(b.size()); outstanding.addAll(b); - for (Object ao: a) { + for (A ao: a) { boolean found = false; - Iterator iterator = outstanding.iterator(); + Iterator iterator = outstanding.iterator(); while(iterator.hasNext()) { - Object oo = iterator.next(); - if (comparator.compare(ao, oo) == 0) { + B oo = iterator.next(); + if (comparator.isEquivalent(ao, oo)) { iterator.remove(); found = true; } diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/PolicyViolationException.java b/infra/util/src/main/java/com/evolveum/midpoint/util/exception/PolicyViolationException.java similarity index 88% rename from model/model-api/src/main/java/com/evolveum/midpoint/model/api/PolicyViolationException.java rename to infra/util/src/main/java/com/evolveum/midpoint/util/exception/PolicyViolationException.java index 4b5442e95e8..20f223477eb 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/PolicyViolationException.java +++ b/infra/util/src/main/java/com/evolveum/midpoint/util/exception/PolicyViolationException.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. @@ -13,15 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.evolveum.midpoint.model.api; - -import com.evolveum.midpoint.util.exception.CommonException; +package com.evolveum.midpoint.util.exception; /** * @author semancik * */ public class PolicyViolationException extends CommonException { + private static final long serialVersionUID = 1L; public PolicyViolationException() { } diff --git a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertUpdateHelper.java b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertUpdateHelper.java index a4dd157ba63..e9b8887efa7 100644 --- a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertUpdateHelper.java +++ b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/AccCertUpdateHelper.java @@ -19,7 +19,6 @@ import com.evolveum.midpoint.certification.impl.handlers.CertificationHandler; import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ContainerDelta; @@ -45,6 +44,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/CertificationHandler.java b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/CertificationHandler.java index 522f3994d31..05cc89c88b9 100644 --- a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/CertificationHandler.java +++ b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/CertificationHandler.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.certification.impl.handlers; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; @@ -25,6 +24,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType; diff --git a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/DirectAssignmentCertificationHandler.java b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/DirectAssignmentCertificationHandler.java index 860abad3e40..7c224958f19 100644 --- a/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/DirectAssignmentCertificationHandler.java +++ b/model/certification-impl/src/main/java/com/evolveum/midpoint/certification/impl/handlers/DirectAssignmentCertificationHandler.java @@ -17,7 +17,6 @@ package com.evolveum.midpoint.certification.impl.handlers; import com.evolveum.midpoint.certification.api.AccessCertificationApiConstants; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.common.expression.ExpressionVariables; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; @@ -34,6 +33,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/AccessCertificationService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/AccessCertificationService.java index 987db9e03d0..58d8a09b6cd 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/AccessCertificationService.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/AccessCertificationService.java @@ -26,6 +26,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java index 025f51f8493..25f8da0b785 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/ModelService.java @@ -44,6 +44,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; 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 ee20c11bad8..bcb923de714 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 @@ -19,7 +19,6 @@ import javax.xml.namespace.QName; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.DeltaSetTriple; import com.evolveum.midpoint.schema.result.OperationResult; @@ -27,6 +26,7 @@ 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.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java index 77d1e8b8656..a1563e628c8 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/expr/MidpointFunctions.java @@ -17,7 +17,6 @@ package com.evolveum.midpoint.model.api.expr; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.crypto.EncryptionException; @@ -34,6 +33,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/hooks/ChangeHook.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/hooks/ChangeHook.java index 6fb685c717a..354804513d9 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/hooks/ChangeHook.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/hooks/ChangeHook.java @@ -15,10 +15,10 @@ */ package com.evolveum.midpoint.model.api.hooks; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; import org.jetbrains.annotations.NotNull; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/DeputyUtils.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/DeputyUtils.java index 164e572eb1b..3761e060590 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/DeputyUtils.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/DeputyUtils.java @@ -37,9 +37,19 @@ */ public class DeputyUtils { + // This is not the right place for this. But let's leave it here for now. + // See MID-3581 public static boolean isDelegationRelation(QName relation) { return QNameUtil.match(relation, SchemaConstants.ORG_DEPUTY); } + + // This is not the right place for this. But let's leave it here for now. + // See MID-3581 + public static boolean isMembershipRelation(QName relation) { + return relation == null || + QNameUtil.match(relation, SchemaConstants.ORG_MANAGER) || + QNameUtil.match(relation, SchemaConstants.ORG_META); + } @NotNull public static Collection getDelegatorReferences(@NotNull UserType user) { diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/ResourceUtils.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/ResourceUtils.java index 21141b36434..bb3fb55ab21 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/ResourceUtils.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/util/ResourceUtils.java @@ -17,7 +17,6 @@ package com.evolveum.midpoint.model.api.util; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.path.ItemPath; 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 a69569d5ed6..95d63b0475b 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 @@ -31,7 +31,6 @@ import org.apache.commons.lang.BooleanUtils; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.common.expression.Expression; import com.evolveum.midpoint.model.common.expression.ExpressionEvaluationContext; import com.evolveum.midpoint.model.common.expression.ExpressionFactory; @@ -64,6 +63,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelCrudService.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelCrudService.java index c64928fb516..2dc49852ecd 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelCrudService.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelCrudService.java @@ -33,7 +33,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.controller.ModelUtils; import com.evolveum.midpoint.model.impl.util.Utils; import com.evolveum.midpoint.prism.PrismContext; @@ -61,6 +60,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java index 885cbde5d14..86b80c98173 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelInteractionServiceImpl.java @@ -73,6 +73,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java index eede8c3d4ba..63c78c6abd7 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ObjectMerger.java @@ -25,7 +25,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.util.MergeDeltas; import com.evolveum.midpoint.model.common.SystemObjectCache; import com.evolveum.midpoint.model.common.expression.Expression; @@ -64,6 +63,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java index 27cd8ff8c3f..11d279daa11 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/expr/MidpointFunctionsImpl.java @@ -56,6 +56,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; @@ -70,7 +71,6 @@ import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluationContext; import com.evolveum.midpoint.model.impl.ModelObjectResolver; import com.evolveum.midpoint.model.impl.lens.LensContext; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/hooks/PolicyRuleEnforcerHook.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/hooks/PolicyRuleEnforcerHook.java index 9e6664fb3c6..249708d2a14 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/hooks/PolicyRuleEnforcerHook.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/hooks/PolicyRuleEnforcerHook.java @@ -22,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRuleTrigger; @@ -36,6 +35,7 @@ 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.exception.PolicyViolationException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.EnforcementPolicyActionType; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/importer/ObjectImporter.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/importer/ObjectImporter.java index 2417cd30a75..49eb6793904 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/importer/ObjectImporter.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/importer/ObjectImporter.java @@ -22,7 +22,6 @@ import com.evolveum.midpoint.common.validator.Validator; import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.migrator.Migrator; import com.evolveum.midpoint.model.impl.util.Utils; import com.evolveum.midpoint.prism.*; @@ -52,6 +51,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentEvaluator.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentEvaluator.java index 6a0d55bbfda..30b28fe82a6 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentEvaluator.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentEvaluator.java @@ -22,7 +22,6 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.common.ActivationComputer; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.AssignmentPath; import com.evolveum.midpoint.model.api.context.AssignmentPathSegment; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; @@ -58,6 +57,7 @@ import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -599,7 +599,7 @@ private void evaluateAssignmentTarget(EvaluatedAssignmentImpl assignment, Ass } else { throw new SchemaException("Unknown assignment target type " + targetType + " in " + sourceDescription); } - + if (!LensUtil.isValid(targetType, now, activationComputer)) { LOGGER.trace("Skipping evaluation of " + targetType + " because it is not valid"); return; @@ -658,6 +658,11 @@ private void evaluateAssignmentTarget(EvaluatedAssignmentImpl assignment, Ass } } + if (!DeputyUtils.isMembershipRelation(relation) && !DeputyUtils.isDelegationRelation(relation)) { + LOGGER.trace("Cutting evaluation of " + targetType + " because it is neigther memberhip nor delegation relation ({})", relation); + return; + } + EvaluationOrder evaluationOrder = assignmentPath.getEvaluationOrder(); ObjectType orderOneObject; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/Clockwork.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/Clockwork.java index a8c40d55e8a..155b3c743ca 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/Clockwork.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/Clockwork.java @@ -22,7 +22,6 @@ import com.evolveum.midpoint.common.Clock; import com.evolveum.midpoint.model.api.ModelAuthorizationAction; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.ModelState; import com.evolveum.midpoint.model.api.hooks.ChangeHook; @@ -87,6 +86,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentImpl.java index 8803e9e5644..24cb76e5be7 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentImpl.java @@ -20,7 +20,6 @@ import javax.xml.namespace.QName; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedConstruction; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; @@ -43,6 +42,7 @@ import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java index c28d5d8b6b2..99e8c09aa87 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensElementContext.java @@ -26,6 +26,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import com.evolveum.prism.xml.ns._public.types_3.ChangeTypeType; import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType; @@ -34,7 +35,6 @@ import org.apache.commons.lang.Validate; import com.evolveum.midpoint.common.crypto.CryptoUtil; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRuleTrigger; import com.evolveum.midpoint.model.api.context.ModelElementContext; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java index 8103f0d16ad..1b24f55f027 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java @@ -50,7 +50,6 @@ import com.evolveum.midpoint.common.ActivationComputer; import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.common.mapping.Mapping; import com.evolveum.midpoint.model.common.mapping.MappingFactory; import com.evolveum.midpoint.model.common.mapping.PrismValueDeltaSetTripleProducer; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java index 7d4836d7e44..33d875c3d31 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ActivationProcessor.java @@ -15,7 +15,6 @@ */ package com.evolveum.midpoint.model.impl.lens.projector; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.expression.ExpressionUtil; import com.evolveum.midpoint.model.common.expression.ItemDeltaItem; @@ -40,6 +39,7 @@ 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.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentProcessor.java index d76a26a4712..d1d1b5c7be2 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentProcessor.java @@ -32,7 +32,6 @@ import com.evolveum.midpoint.common.ActivationComputer; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRuleTrigger; @@ -96,6 +95,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; @@ -1764,7 +1764,7 @@ private void setReferences(LensFocusContext focusConte Comparator comparator = (a, b) -> 2*a.getOid().compareTo(b.getOid()) + (Objects.equals(a.getRelation(), b.getRelation()) ? 0 : 1); - if (MiscUtil.unorderedCollectionEquals(targetState, existingState.getValues(), comparator)) { + if (MiscUtil.unorderedCollectionCompare(targetState, existingState.getValues(), comparator)) { return; } } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java index 7828e061e26..febe2e4fbde 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ConsolidationProcessor.java @@ -17,7 +17,6 @@ package com.evolveum.midpoint.model.impl.lens.projector; import com.evolveum.midpoint.common.refinery.*; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.mapping.Mapping; import com.evolveum.midpoint.model.common.mapping.PrismValueDeltaSetTripleProducer; @@ -52,6 +51,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java index 173635b726e..f00616fa462 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java @@ -32,7 +32,6 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.SystemObjectCache; import com.evolveum.midpoint.model.impl.controller.ModelUtils; @@ -69,6 +68,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/CredentialsProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/CredentialsProcessor.java index cb8289dc5ab..d4b99d10a01 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/CredentialsProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/CredentialsProcessor.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.model.impl.lens.projector; import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.expression.ItemDeltaItem; import com.evolveum.midpoint.model.common.expression.Source; @@ -40,6 +39,7 @@ 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.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/DependencyProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/DependencyProcessor.java index e290f8a87d3..3359d99a589 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/DependencyProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/DependencyProcessor.java @@ -23,7 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensObjectDeltaOperation; @@ -34,6 +33,7 @@ import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ResourceTypeUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java index b64359a3a6c..d1425a2bbef 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java @@ -30,7 +30,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.common.ActivationComputer; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRule; import com.evolveum.midpoint.model.api.context.EvaluatedPolicyRuleTrigger; import com.evolveum.midpoint.model.common.expression.ExpressionFactory; @@ -68,6 +67,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ObjectTemplateProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ObjectTemplateProcessor.java index 0554ff97e13..da475cbaa93 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ObjectTemplateProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ObjectTemplateProcessor.java @@ -37,7 +37,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.common.ActivationComputer; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.common.expression.ExpressionFactory; import com.evolveum.midpoint.model.common.expression.ObjectDeltaObject; import com.evolveum.midpoint.model.common.mapping.Mapping; @@ -69,6 +68,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/PasswordPolicyProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/PasswordPolicyProcessor.java index 1c6e79b206e..3b598a66532 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/PasswordPolicyProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/PasswordPolicyProcessor.java @@ -25,7 +25,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.common.policy.PasswordPolicyUtils; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.ModelObjectResolver; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensFocusContext; @@ -48,6 +47,7 @@ import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ProjectionValuesProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ProjectionValuesProcessor.java index 075b5a561af..4404a0655a7 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ProjectionValuesProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ProjectionValuesProcessor.java @@ -27,7 +27,6 @@ import com.evolveum.midpoint.common.refinery.RefinedAttributeDefinition; import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.common.expression.ExpressionFactory; import com.evolveum.midpoint.model.common.expression.ExpressionVariables; @@ -62,6 +61,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/Projector.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/Projector.java index 3c03664360a..e0d000d8bf4 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/Projector.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/Projector.java @@ -29,7 +29,6 @@ import org.springframework.stereotype.Component; import com.evolveum.midpoint.common.Clock; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensProjectionContext; @@ -37,17 +36,22 @@ import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.result.OperationResultStatus; +import com.evolveum.midpoint.schema.util.ExceptionUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ErrorSelectorType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; /** * Projector recomputes the context. It takes the context with a few basic data as input. It uses all the policies @@ -67,6 +71,8 @@ @Component public class Projector { + private static final String OPERATION_PROJECT_PROJECTION = Projector.class.getName() + ".projectProjection"; + @Autowired private ContextLoader contextLoader; @@ -235,56 +241,8 @@ private void projectInternal(LensContext context, Stri LOGGER.trace("Continuing wave {}, maxWaves={}", context.getProjectionWave(), maxWaves); for (LensProjectionContext projectionContext: context.getProjectionContexts()) { - - context.checkAbortRequested(); - - if (projectionContext.getSynchronizationPolicyDecision() == SynchronizationPolicyDecision.BROKEN || - projectionContext.getSynchronizationPolicyDecision() == SynchronizationPolicyDecision.IGNORE) { - continue; - } - String projectionDesc = getProjectionDesc(projectionContext); - - if (projectionContext.getWave() != context.getProjectionWave()) { - // Let's skip accounts that do not belong into this wave. - continue; - } - - LOGGER.trace("WAVE {} PROJECTION {}", context.getProjectionWave(), projectionDesc); - - // Some projections may not be loaded at this point, e.g. high-order dependency projections - contextLoader.makeSureProjectionIsLoaded(context, projectionContext, task, result); - - if (consistencyChecks) context.checkConsistence(); - - if (!dependencyProcessor.checkDependencies(context, projectionContext, result)) { - continue; - } - - // TODO: decide if we need to continue - - // This is a "composite" processor. it contains several more processor invocations inside - projectionValuesProcessor.process(context, projectionContext, activityDescription, task, result); - - if (consistencyChecks) context.checkConsistence(); - - projectionContext.recompute(); - //SynchronizerUtil.traceContext("values", context, false); - if (consistencyChecks) context.checkConsistence(); - - credentialsProcessor.processProjectionCredentials(context, projectionContext, now, task, result); - - //SynchronizerUtil.traceContext("credentials", context, false); - if (consistencyChecks) context.checkConsistence(); - - projectionContext.recompute(); - LensUtil.traceContext(LOGGER, activityDescription, "projection values and credentials of "+projectionDesc, false, context, true); - if (consistencyChecks) context.checkConsistence(); - - reconciliationProcessor.processReconciliation(context, projectionContext, task, result); - projectionContext.recompute(); - LensUtil.traceContext(LOGGER, activityDescription, "projection reconciliation of "+projectionDesc, false, context, false); - if (consistencyChecks) context.checkConsistence(); - + + projectProjection(context, projectionContext, now, activityDescription, task, result); } @@ -323,6 +281,100 @@ private void projectInternal(LensContext context, Stri context.reportProgress(new ProgressInformation(PROJECTOR, result)); } + } + + private void projectProjection(LensContext context, LensProjectionContext projectionContext, + XMLGregorianCalendar now, String activityDescription, Task task, OperationResult parentResult) throws ObjectNotFoundException, CommunicationException, SchemaException, ConfigurationException, SecurityViolationException, PolicyViolationException, ExpressionEvaluationException, ObjectAlreadyExistsException { + + if (projectionContext.getWave() != context.getProjectionWave()) { + // Let's skip accounts that do not belong into this wave. + return; + } + + OperationResult result = parentResult.createMinorSubresult(OPERATION_PROJECT_PROJECTION); + + try { + + context.checkAbortRequested(); + + if (projectionContext.getSynchronizationPolicyDecision() == SynchronizationPolicyDecision.BROKEN || + projectionContext.getSynchronizationPolicyDecision() == SynchronizationPolicyDecision.IGNORE) { + result.recordStatus(OperationResultStatus.NOT_APPLICABLE, "Skipping projection because it is "+projectionContext.getSynchronizationPolicyDecision()); + return; + } + String projectionDesc = getProjectionDesc(projectionContext); + + LOGGER.trace("WAVE {} PROJECTION {}", context.getProjectionWave(), projectionDesc); + + // Some projections may not be loaded at this point, e.g. high-order dependency projections + contextLoader.makeSureProjectionIsLoaded(context, projectionContext, task, result); + + if (consistencyChecks) context.checkConsistence(); + + if (!dependencyProcessor.checkDependencies(context, projectionContext, result)) { + result.recordStatus(OperationResultStatus.NOT_APPLICABLE, "Skipping projection because it has unsatisfied dependencies"); + return; + } + + // TODO: decide if we need to continue + + // This is a "composite" processor. it contains several more processor invocations inside + projectionValuesProcessor.process(context, projectionContext, activityDescription, task, result); + + if (consistencyChecks) context.checkConsistence(); + + projectionContext.recompute(); + //SynchronizerUtil.traceContext("values", context, false); + if (consistencyChecks) context.checkConsistence(); + + credentialsProcessor.processProjectionCredentials(context, projectionContext, now, task, result); + + //SynchronizerUtil.traceContext("credentials", context, false); + if (consistencyChecks) context.checkConsistence(); + + projectionContext.recompute(); + LensUtil.traceContext(LOGGER, activityDescription, "projection values and credentials of "+projectionDesc, false, context, true); + if (consistencyChecks) context.checkConsistence(); + + reconciliationProcessor.processReconciliation(context, projectionContext, task, result); + projectionContext.recompute(); + LensUtil.traceContext(LOGGER, activityDescription, "projection reconciliation of "+projectionDesc, false, context, false); + if (consistencyChecks) context.checkConsistence(); + + result.recordSuccess(); + + } catch (ObjectNotFoundException | CommunicationException | SchemaException | ConfigurationException | SecurityViolationException + | PolicyViolationException | ExpressionEvaluationException | ObjectAlreadyExistsException | RuntimeException | Error e) { + + result.recordFatalError(e); + + ResourceType resourceType = projectionContext.getResource(); + if (resourceType == null) { + throw e; + } else { + ErrorSelectorType errorSelector = null; + if (resourceType.getConsistency() != null) { + errorSelector = resourceType.getConsistency().getConnectorErrorCriticality(); + } + if (errorSelector == null) { + if (e instanceof CommunicationException) { + // Just continue evaluation. The error is recorded in the result. + // The consistency mechanism has (most likely) already done the best. + // We cannot do any better. + } else { + throw e; + } + } else { + if (ExceptionUtil.isSelected(errorSelector, e)) { + throw e; + } else { + // Just continue evaluation. The error is recorded in the result. + } + } + } + } + + } private String getProjectionDesc(LensProjectionContext projectionContext) { @@ -361,7 +413,35 @@ private void recordFatalError(Exception e, XMLGregorianCalendar projectoStartTim } private void computeResultStatus(XMLGregorianCalendar projectoStartTimestampCal, OperationResult result) { - result.computeStatus(); + boolean hasProjectionErrror = false; + OperationResultStatus finalStatus = OperationResultStatus.SUCCESS; + String message = null; + for (OperationResult subresult: result.getSubresults()) { + if (subresult.isNotApplicable() || subresult.isSuccess()) { + continue; + } + if (subresult.isHandledError()) { + if (finalStatus == OperationResultStatus.SUCCESS) { + finalStatus = OperationResultStatus.HANDLED_ERROR; + } + continue; + } + if (subresult.isError()) { + message = subresult.getMessage(); + if (OPERATION_PROJECT_PROJECTION.equals(subresult.getOperation())) { + hasProjectionErrror = true; + } else { + if (finalStatus != OperationResultStatus.FATAL_ERROR) { + finalStatus = subresult.getStatus(); + } + } + } + } + if (finalStatus != OperationResultStatus.FATAL_ERROR && hasProjectionErrror) { + finalStatus = OperationResultStatus.PARTIAL_ERROR; + } + result.setStatus(finalStatus); + result.setMessage(message); result.cleanupResult(); if (LOGGER.isDebugEnabled()) { long projectoStartTimestamp = XmlTypeConverter.toMillis(projectoStartTimestampCal); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java index df9e4558f7d..64194a0547a 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java @@ -31,6 +31,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileServiceImpl.java index 7a72649ad3d..494b5d436c7 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/security/UserProfileServiceImpl.java @@ -18,7 +18,6 @@ import com.evolveum.midpoint.common.ActivationComputer; import com.evolveum.midpoint.common.Clock; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.common.SystemObjectCache; import com.evolveum.midpoint.model.common.expression.ItemDeltaItem; @@ -51,6 +50,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SystemException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java index 620de1ef4e5..322798476cf 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ExecuteChangesTaskHandler.java @@ -11,7 +11,6 @@ import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.ModelConstants; import com.evolveum.midpoint.model.impl.util.AbstractSearchIterativeResultHandler; import com.evolveum.midpoint.model.impl.util.AbstractSearchIterativeTaskHandler; @@ -34,6 +33,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/FocusValidityScannerTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/FocusValidityScannerTaskHandler.java index 4db09de20b6..6610d249996 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/FocusValidityScannerTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/FocusValidityScannerTaskHandler.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.model.impl.sync; import com.evolveum.midpoint.model.api.ModelPublicConstants; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.lens.Clockwork; import com.evolveum.midpoint.model.impl.lens.ContextFactory; import com.evolveum.midpoint.model.impl.lens.LensContext; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/RecomputeTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/RecomputeTaskHandler.java index 96b81da6943..dda171d442e 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/RecomputeTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/RecomputeTaskHandler.java @@ -25,7 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.ModelConstants; import com.evolveum.midpoint.model.impl.lens.Clockwork; import com.evolveum.midpoint.model.impl.lens.ContextFactory; @@ -47,6 +46,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ReconciliationTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ReconciliationTaskHandler.java index 975a40920e3..fd206c63131 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ReconciliationTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/ReconciliationTaskHandler.java @@ -225,7 +225,7 @@ public TaskRunResult runInternal(Task coordinatorTask) { try { if (!scanForUnfinishedOperations(coordinatorTask, resourceOid, reconResult, opResult)) { - processInterruption(runResult, resource, coordinatorTask, opResult); + processInterruption(runResult, resource, coordinatorTask, opResult); // appends also "last N failures" (TODO refactor) return runResult; } } catch (ObjectNotFoundException ex) { @@ -235,7 +235,7 @@ public TaskRunResult runInternal(Task coordinatorTask) { processErrorPartial(runResult, "Object already exist", ex, TaskRunResultStatus.PERMANENT_ERROR, resource, coordinatorTask, opResult); } catch (CommunicationException ex) { // Error, but not critical. Just try later. - processErrorFinal(runResult, "Communication error", ex, TaskRunResultStatus.TEMPORARY_ERROR, resource, coordinatorTask, opResult); + processErrorFinal(runResult, "Communication error", ex, TaskRunResultStatus.TEMPORARY_ERROR, resource, coordinatorTask, opResult); // appends also "last N failures" (TODO refactor) return runResult; } catch (SchemaException ex) { // Not sure about this. But most likely it is a misconfigured resource or connector @@ -407,6 +407,7 @@ private void processInterruption(TaskRunResult runResult, PrismObject sb.append(f).append("\n")); result.createSubresult(operationNamePrefix + ".errors") diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/RecomputeTriggerHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/RecomputeTriggerHandler.java index cfa8156ef01..d65817b453b 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/RecomputeTriggerHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/RecomputeTriggerHandler.java @@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.ModelConstants; import com.evolveum.midpoint.model.impl.lens.Clockwork; import com.evolveum.midpoint.model.impl.lens.ContextFactory; @@ -35,6 +34,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/TriggerScannerTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/TriggerScannerTaskHandler.java index 02ecf04496f..9982a25a004 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/TriggerScannerTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/trigger/TriggerScannerTaskHandler.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.model.impl.trigger; import com.evolveum.midpoint.model.api.ModelPublicConstants; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.util.AbstractScannerResultHandler; import com.evolveum.midpoint.model.impl.util.AbstractScannerTaskHandler; import com.evolveum.midpoint.prism.*; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/AbstractSearchIterativeTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/AbstractSearchIterativeTaskHandler.java index 1399134236c..ae3304ddab7 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/AbstractSearchIterativeTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/AbstractSearchIterativeTaskHandler.java @@ -330,8 +330,11 @@ public TaskRunResult runInternal(Task coordinatorTask) { statistics += " Average time for one object: " + resultHandler.getAverageTime() + " milliseconds" + " (wall clock time average: " + resultHandler.getWallAverageTime() + " ms)."; } - - opResult.createSubresult(taskOperationPrefix + ".statistics").recordStatus(OperationResultStatus.SUCCESS, statistics); + if (!coordinatorTask.canRun()) { + statistics += " Task was interrupted during processing."; + } + + opResult.createSubresult(taskOperationPrefix + ".statistics").recordStatus(OperationResultStatus.SUCCESS, statistics); TaskHandlerUtil.appendLastFailuresInformation(taskOperationPrefix, coordinatorTask.getLastFailures(), opResult); LOGGER.info("{}", finishMessage + statistics); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/DeleteTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/DeleteTaskHandler.java index 092272f2895..8fb67ae7be2 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/DeleteTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/DeleteTaskHandler.java @@ -39,7 +39,6 @@ import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.query.ObjectPaging; @@ -58,6 +57,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/RestServiceUtil.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/RestServiceUtil.java index 6175762542e..ca21ab698bb 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/RestServiceUtil.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/util/RestServiceUtil.java @@ -17,7 +17,6 @@ package com.evolveum.midpoint.model.impl.util; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.security.SecurityHelper; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.security.api.ConnectionEnvironment; diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/controller/ControllerAddObjectTest.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/controller/ControllerAddObjectTest.java index 7b2da46bc3b..41106952fa3 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/controller/ControllerAddObjectTest.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/controller/ControllerAddObjectTest.java @@ -42,7 +42,6 @@ import org.testng.annotations.Test; import org.xml.sax.SAXException; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.ModelCrudService; import com.evolveum.midpoint.model.impl.util.ModelTUtil; import com.evolveum.midpoint.model.impl.util.ObjectTypeNameMatcher; @@ -66,6 +65,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.Trace; diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestClockwork.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestClockwork.java index dd8740172ca..3da41c8bd3f 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestClockwork.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestClockwork.java @@ -42,7 +42,6 @@ import org.testng.AssertJUnit; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelState; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.api.hooks.HookOperationMode; @@ -71,6 +70,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestDependencies.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestDependencies.java index 6a44f0d2117..d857c7d44c8 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestDependencies.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestDependencies.java @@ -33,7 +33,6 @@ import com.evolveum.icf.dummy.resource.ConflictException; import com.evolveum.icf.dummy.resource.SchemaViolationException; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.AbstractInternalModelIntegrationTest; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensFocusContext; @@ -52,6 +51,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPasswordPolicyProcessor.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPasswordPolicyProcessor.java index 8533a20c9d0..83a7254a95a 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPasswordPolicyProcessor.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPasswordPolicyProcessor.java @@ -14,7 +14,6 @@ import org.testng.AssertJUnit; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.crypto.EncryptionException; import com.evolveum.midpoint.prism.path.ItemPath; @@ -23,6 +22,7 @@ import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; 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.PasswordHistoryEntryType; diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java index 570f8f0c161..f7d91e7ed10 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java @@ -37,7 +37,6 @@ import org.testng.annotations.Test; import com.evolveum.icf.dummy.resource.DummyAccount; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.SynchronizationPolicyDecision; import com.evolveum.midpoint.model.impl.trigger.RecomputeTriggerHandler; import com.evolveum.midpoint.prism.OriginType; @@ -66,6 +65,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestConnectorDummyFake.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestConnectorDummyFake.java index 3660ffc0132..114484c7baf 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestConnectorDummyFake.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestConnectorDummyFake.java @@ -31,7 +31,6 @@ import com.evolveum.icf.dummy.resource.DummyResource; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismReference; import com.evolveum.midpoint.prism.delta.DiffUtil; @@ -49,6 +48,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestIteration.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestIteration.java index 8524dcf963e..90d2c3f41e5 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestIteration.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestIteration.java @@ -26,7 +26,6 @@ import java.util.Collection; import java.util.List; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; @@ -67,6 +66,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMapping.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMapping.java index 91cefedf03e..bec054cc5ff 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMapping.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMapping.java @@ -35,7 +35,6 @@ import com.evolveum.icf.dummy.resource.DummyAccount; import com.evolveum.icf.dummy.resource.SchemaViolationException; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.trigger.RecomputeTriggerHandler; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ChangeType; @@ -52,6 +51,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestModelServiceContract.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestModelServiceContract.java index f7ec916adb8..f9c320ca615 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestModelServiceContract.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestModelServiceContract.java @@ -58,7 +58,6 @@ import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.common.refinery.ShadowDiscriminatorObjectDelta; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.prism.delta.ChangeType; import com.evolveum.midpoint.prism.delta.ObjectDelta; @@ -82,6 +81,7 @@ import com.evolveum.midpoint.util.MiscUtil; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMultiResource.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMultiResource.java index 38191e0dcce..5f806ef5e13 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMultiResource.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestMultiResource.java @@ -31,7 +31,6 @@ import com.evolveum.icf.dummy.resource.ConflictException; import com.evolveum.icf.dummy.resource.DummyResource; import com.evolveum.icf.dummy.resource.SchemaViolationException; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.intest.rbac.TestRbac; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; @@ -57,6 +56,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPassword.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPassword.java index 7f2db436cbc..71087913570 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPassword.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPassword.java @@ -38,7 +38,6 @@ import com.evolveum.icf.dummy.resource.ConflictException; import com.evolveum.icf.dummy.resource.SchemaViolationException; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismReferenceValue; import com.evolveum.midpoint.prism.delta.ObjectDelta; @@ -48,6 +47,7 @@ import com.evolveum.midpoint.schema.util.MiscSchemaUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; /** * @author semancik diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java index 7c4b41ffff8..861ac1493ea 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java @@ -38,7 +38,6 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.api.context.ModelElementContext; import com.evolveum.midpoint.model.api.context.ModelProjectionContext; @@ -70,6 +69,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestResources.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestResources.java index 851f5225d28..9092d7dac3b 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestResources.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestResources.java @@ -39,7 +39,6 @@ import com.evolveum.icf.dummy.resource.DummyResource; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.delta.PropertyDelta; @@ -68,6 +67,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSecurity.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSecurity.java index 4e250946829..e6f6d2864f9 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSecurity.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSecurity.java @@ -23,7 +23,6 @@ import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.model.api.ModelAuthorizationAction; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.RoleSelectionSpecification; import com.evolveum.midpoint.model.intest.rbac.TestRbac; import com.evolveum.midpoint.prism.Containerable; @@ -64,6 +63,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSegregationOfDuties.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSegregationOfDuties.java index 4856de336b4..90f59e7ee6d 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSegregationOfDuties.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestSegregationOfDuties.java @@ -25,13 +25,13 @@ import org.testng.AssertJUnit; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.MiscSchemaUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestStrangeCases.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestStrangeCases.java index 5c5cb540d2b..71e2dbae9b6 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestStrangeCases.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestStrangeCases.java @@ -46,7 +46,6 @@ import com.evolveum.icf.dummy.resource.BreakMode; import com.evolveum.icf.dummy.resource.DummyAccount; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.delta.ChangeType; import com.evolveum.midpoint.prism.delta.ItemDelta; import com.evolveum.midpoint.prism.delta.ObjectDelta; @@ -69,6 +68,7 @@ import com.evolveum.midpoint.util.MiscUtil; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestTolerantAttributes.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestTolerantAttributes.java index 06633b0c8ae..9727701c2b5 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestTolerantAttributes.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestTolerantAttributes.java @@ -34,7 +34,6 @@ import org.testng.annotations.Test; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; import com.evolveum.midpoint.prism.PrismReferenceValue; @@ -47,6 +46,7 @@ import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.MiscUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/negative/TestAssignmentErrors.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/negative/TestAssignmentErrors.java index ae53e11a538..efbfb0ad5b7 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/negative/TestAssignmentErrors.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/negative/TestAssignmentErrors.java @@ -61,11 +61,14 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType; 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.ResourceType; 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.UserType; +import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; /** * Tests the model service contract by using a broken CSV resource. Tests for negative test cases, mostly @@ -85,6 +88,9 @@ public class TestAssignmentErrors extends AbstractInitializedModelIntegrationTes private static final String USER_LEMONHEAD_FULLNAME = "Lemonhead"; private static final String USER_SHARPTOOTH_NAME = "sharptooth"; private static final String USER_SHARPTOOTH_FULLNAME = "Sharptooth"; + private static final String USER_SHARPTOOTH_PASSWORD_1_CLEAR = "SHARPyourT33TH"; + private static final String USER_SHARPTOOTH_PASSWORD_2_CLEAR = "L00SEyourT33TH"; + private static final String USER_SHARPTOOTH_PASSWORD_3_CLEAR = "HAV3noT33TH"; private static final String USER_REDSKULL_NAME = "redskull"; private static final String USER_REDSKULL_FULLNAME = "Red Skull"; @@ -99,6 +105,7 @@ public class TestAssignmentErrors extends AbstractInitializedModelIntegrationTes private PrismObject resource; private String userLemonheadOid; + private String userSharptoothOid; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { @@ -339,7 +346,15 @@ public void test210UserSharptoothAssignAccountBrokenGeneric() throws Exception { assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); PrismObject user = createUser(USER_SHARPTOOTH_NAME, USER_SHARPTOOTH_FULLNAME); + CredentialsType credentialsType = new CredentialsType(); + PasswordType passwordType = new PasswordType(); + ProtectedStringType passwordPs = new ProtectedStringType(); + passwordPs.setClearValue(USER_SHARPTOOTH_PASSWORD_1_CLEAR); + passwordType.setValue(passwordPs); + credentialsType.setPassword(passwordType); + user.asObjectable().setCredentials(credentialsType); addObject(user); + userSharptoothOid = user.getOid(); Collection> deltas = new ArrayList>(); ObjectDelta accountAssignmentUserDelta = createAccountAssignmentUserDelta(user.getOid(), RESOURCE_DUMMY_OID, null, true); @@ -353,6 +368,7 @@ public void test210UserSharptoothAssignAccountBrokenGeneric() throws Exception { //not expected that it fails, instead the error in the result is expected modelService.executeChanges(deltas, null, task, result); + // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); @@ -384,6 +400,92 @@ public void test210UserSharptoothAssignAccountBrokenGeneric() throws Exception { } + /** + * User has assigned account. We recover the resource (clear break mode) and recompute. + * The account should be created. + */ + @Test + public void test212UserSharptoothAssignAccountRecovery() throws Exception { + final String TEST_NAME = "test212UserSharptoothAssignAccountRecovery"; + TestUtil.displayTestTile(this, TEST_NAME); + + // GIVEN + Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); + + getDummyResource().resetBreakMode(); + dummyAuditService.clear(); + + // WHEN + TestUtil.displayWhen(TEST_NAME); + recomputeUser(userSharptoothOid, task, result); + + // THEN + TestUtil.displayThen(TEST_NAME); + result.computeStatus(); + TestUtil.assertSuccess(result); + + assertDummyAccount(null, USER_SHARPTOOTH_NAME, USER_SHARPTOOTH_FULLNAME, true); + assertDummyPassword(null, USER_SHARPTOOTH_NAME, USER_SHARPTOOTH_PASSWORD_1_CLEAR); + } + + /** + * Change user password. But there is error on the resource. + * User password should be changed, account password unchanged and there + * should be handled error in the result. Delta is remembered in the shadow. + * MID-3569 + */ + @Test + public void test214UserSharptoothChangePasswordNetworkError() throws Exception { + testUserSharptoothChangePasswordError("test214UserSharptoothChangePasswordNetworkError", + BreakMode.NETWORK, USER_SHARPTOOTH_PASSWORD_1_CLEAR, USER_SHARPTOOTH_PASSWORD_2_CLEAR, + OperationResultStatus.HANDLED_ERROR); + } + + /** + * Change user password. But there is error on the resource. + * User password should be changed, account password unchanged and there + * should be partial error in the result. We have no idea what's going on here. + * MID-3569 + */ + @Test + public void test215UserSharptoothChangePasswordGenericError() throws Exception { + testUserSharptoothChangePasswordError("test215UserSharptoothChangePasswordGenericError", + BreakMode.GENERIC, USER_SHARPTOOTH_PASSWORD_1_CLEAR, USER_SHARPTOOTH_PASSWORD_3_CLEAR, + OperationResultStatus.PARTIAL_ERROR); + } + + public void testUserSharptoothChangePasswordError(final String TEST_NAME, BreakMode breakMode, String oldPassword, String newPassword, OperationResultStatus expectedResultStatus) throws Exception { + TestUtil.displayTestTile(this, TEST_NAME); + + // GIVEN + Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); + + getDummyResource().setBreakMode(breakMode); + dummyAuditService.clear(); + + // WHEN + TestUtil.displayWhen(TEST_NAME); + modifyUserChangePassword(userSharptoothOid, newPassword, task, result); + + // THEN + TestUtil.displayThen(TEST_NAME); + result.computeStatus(); + TestUtil.assertStatus(result, expectedResultStatus); + + getDummyResource().resetBreakMode(); + + PrismObject userAfter = getUser(userSharptoothOid); + display("User afte", userAfter); + assertEncryptedUserPassword(userAfter, newPassword); + + assertDummyAccount(null, USER_SHARPTOOTH_NAME, USER_SHARPTOOTH_FULLNAME, true); + assertDummyPassword(null, USER_SHARPTOOTH_NAME, oldPassword); + } + /** * Assign account to user, delete the account shadow (not the account), recompute the user. * We expect that the shadow will be re-created and re-linked. @@ -592,4 +694,6 @@ private PrismObject setupUserAssignAccountDeletedShadowRecompute(final return user; } + + } diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java index c1e5f4500fa..76db0c31895 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/orgstruct/TestOrgStruct.java @@ -23,7 +23,6 @@ import java.util.Collection; import java.util.List; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.expr.ModelExpressionThreadLocalHolder; import com.evolveum.midpoint.model.intest.AbstractInitializedModelIntegrationTest; import com.evolveum.midpoint.prism.PrismReferenceDefinition; @@ -58,6 +57,7 @@ import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbac.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbac.java index 17c4a9f2a31..ff879690f27 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbac.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbac.java @@ -36,7 +36,6 @@ import org.testng.annotations.Test; import com.evolveum.icf.dummy.resource.DummyAccount; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget; import com.evolveum.midpoint.model.api.context.ModelContext; @@ -65,6 +64,7 @@ import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DOMUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; @@ -163,6 +163,11 @@ public class TestRbac extends AbstractInitializedModelIntegrationTest { private static final String GROUP_FOOLS_NAME = "fools"; private static final String GROUP_SIMPLETONS_NAME = "simpletons"; + /** + * Undefined relation. It is not standard relation not a relation that is in any way configured. + */ + private static final QName RELATION_COMPLICATED_QNAME = new QName("http://exmple.com/relation", "complicated"); + private String userLemonheadOid; private String userSharptoothOid; @@ -747,7 +752,7 @@ public void test136JackUnAssignRoleAdriaticPirate() throws Exception { OperationResult result = task.getResult(); // WHEN - unassignRole(USER_JACK_OID, ROLE_ADRIATIC_PIRATE_OID, null, task, result); + unassignRole(USER_JACK_OID, ROLE_ADRIATIC_PIRATE_OID, task, result); // THEN result.computeStatus(); @@ -874,7 +879,7 @@ public void test146JackUnAssignRoleBlackSeaPirate() throws Exception { OperationResult result = task.getResult(); // WHEN - unassignRole(USER_JACK_OID, ROLE_BLACK_SEA_PIRATE_OID, null, task, result); + unassignRole(USER_JACK_OID, ROLE_BLACK_SEA_PIRATE_OID, task, result); // THEN result.computeStatus(); @@ -1001,7 +1006,7 @@ public void test156JackUnAssignRoleIndianOceanPirate() throws Exception { OperationResult result = task.getResult(); // WHEN - unassignRole(USER_JACK_OID, ROLE_INDIAN_OCEAN_PIRATE_OID, null, task, result); + unassignRole(USER_JACK_OID, ROLE_INDIAN_OCEAN_PIRATE_OID, task, result); // THEN result.computeStatus(); @@ -1015,6 +1020,121 @@ public void test156JackUnAssignRoleIndianOceanPirate() throws Exception { assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); } + + /** + * Approver relation is not supposed to give any role privileges. + * MID-3580 + */ + @Test + public void test160JackAssignRolePirateApprover() throws Exception { + testJackAssignRolePirateRelationNoPrivs("test160JackAssignRolePirateApprover", SchemaConstants.ORG_APPROVER); + } + + /** + * MID-3580 + */ + @Test + public void test162JackUnassignRolePirateApprover() throws Exception { + testJackUnassignRolePirateRelationNoPrivs("test160JackAssignRolePirateApprover", SchemaConstants.ORG_APPROVER); + + } + + /** + * Owner relation is not supposed to give any role privileges. + * MID-3580 + */ + @Test + public void test164JackAssignRolePirateOwner() throws Exception { + testJackAssignRolePirateRelationNoPrivs("test164JackAssignRolePirateOwner", SchemaConstants.ORG_OWNER); + } + + /** + * MID-3580 + */ + @Test + public void test166JackUnassignRolePirateOwner() throws Exception { + testJackUnassignRolePirateRelationNoPrivs("test166JackUnassignRolePirateOwner", SchemaConstants.ORG_OWNER); + } + + /** + * Unknown custom relation is not supposed to give any role privileges. + * MID-3580 + */ + @Test + public void test168JackAssignRolePirateComplicated() throws Exception { + testJackAssignRolePirateRelationNoPrivs("test168JackAssignRolePirateComplicated", RELATION_COMPLICATED_QNAME); + } + + /** + * MID-3580 + */ + @Test + public void test169JackUnassignRolePirateComplicated() throws Exception { + testJackUnassignRolePirateRelationNoPrivs("test169JackUnassignRolePirateComplicated", RELATION_COMPLICATED_QNAME); + } + + public void testJackAssignRolePirateRelationNoPrivs(final String TEST_NAME, QName relation) throws Exception { + TestUtil.displayTestTile(this, TEST_NAME); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + PrismObject userBefore = getUser(USER_JACK_OID); + display("User jack before", userBefore); + assertNoAssignments(userBefore); + + assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); + + XMLGregorianCalendar startTs = clock.currentTimeXMLGregorianCalendar(); + + // WHEN + assignRole(USER_JACK_OID, ROLE_PIRATE_OID, relation, task, result); + + // THEN + TestUtil.displayThen(TEST_NAME); + result.computeStatus(); + TestUtil.assertSuccess(result); + + XMLGregorianCalendar endTs = clock.currentTimeXMLGregorianCalendar(); + PrismObject userAfter = getUser(USER_JACK_OID); + display("User jack after", userAfter); + assertAssignedRole(userAfter, ROLE_PIRATE_OID); + // Still needs to be as a member, although with the right relation. + assertRoleMembershipRef(userAfter, relation, ROLE_PIRATE_OID); + + assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); + } + + public void testJackUnassignRolePirateRelationNoPrivs(final String TEST_NAME, QName relation) throws Exception { + TestUtil.displayTestTile(this, TEST_NAME); + + Task task = createTask(TEST_NAME); + OperationResult result = task.getResult(); + + PrismObject userBefore = getUser(USER_JACK_OID); + display("User jack before", userBefore); + + XMLGregorianCalendar startTs = clock.currentTimeXMLGregorianCalendar(); + + // WHEN + unassignRole(USER_JACK_OID, ROLE_PIRATE_OID, relation, task, result); + + // THEN + TestUtil.displayThen(TEST_NAME); + result.computeStatus(); + TestUtil.assertSuccess(result); + + XMLGregorianCalendar endTs = clock.currentTimeXMLGregorianCalendar(); + PrismObject userAfter = getUser(USER_JACK_OID); + display("User jack after", userAfter); + assertNoAssignments(userAfter); + + assertNoDummyAccount(ACCOUNT_JACK_DUMMY_USERNAME); + } + + // TODO: assign with owner relation + // TODO: assign with custom(unknown) relation + ////////////////////// // Following tests use POSITIVE enforcement mode ///////////////////// diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbacDeprecated.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbacDeprecated.java index 2d9c3dcf5fd..cc962aa144d 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbacDeprecated.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/rbac/TestRbacDeprecated.java @@ -36,7 +36,6 @@ import org.testng.annotations.Test; import com.evolveum.icf.dummy.resource.DummyAccount; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget; import com.evolveum.midpoint.model.api.context.EvaluatedAssignment; import com.evolveum.midpoint.model.api.context.ModelContext; @@ -65,6 +64,7 @@ import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DOMUtil; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestValidityRecomputeTask.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestValidityRecomputeTask.java index 2de0ecf4fb9..5a63782b2c9 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestValidityRecomputeTask.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/sync/TestValidityRecomputeTask.java @@ -33,7 +33,6 @@ import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.impl.trigger.RecomputeTriggerHandler; import com.evolveum.midpoint.model.intest.AbstractInitializedModelIntegrationTest; import com.evolveum.midpoint.model.intest.TestActivation; @@ -59,6 +58,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; 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 5ebade05d5c..a35574c2f36 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 @@ -31,7 +31,6 @@ import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelInteractionService; import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.RoleSelectionSpecification; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.api.context.ModelElementContext; @@ -817,7 +816,13 @@ protected void assignRole(String userOid, String roleOid, ActivationType activat PolicyViolationException, SecurityViolationException { modifyUserAssignment(userOid, roleOid, RoleType.COMPLEX_TYPE, null, task, null, activationType, true, result); } - + + protected void assignRole(String userOid, String roleOid, QName relation, Task task, OperationResult result) throws ObjectNotFoundException, + SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, + PolicyViolationException, SecurityViolationException { + modifyUserAssignment(userOid, roleOid, RoleType.COMPLEX_TYPE, relation, task, null, null, true, result); + } + protected void unassignRole(String userOid, String roleOid) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, PolicyViolationException, SecurityViolationException { Task task = taskManager.createTaskInstance(AbstractModelIntegrationTest.class+".unassignRole"); OperationResult result = task.getResult(); @@ -844,6 +849,12 @@ protected void unassignRole(String userOid, String roleOid, PrismContainer ex modifyUserAssignment(userOid, roleOid, RoleType.COMPLEX_TYPE, null, task, extension, false, result); } + protected void unassignRole(String userOid, String roleOid, QName relation, Task task, OperationResult result) throws ObjectNotFoundException, + SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, + PolicyViolationException, SecurityViolationException { + modifyUserAssignment(userOid, roleOid, RoleType.COMPLEX_TYPE, relation, task, null, null, false, result); + } + protected void unassignAllRoles(String userOid) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, PolicyViolationException, SecurityViolationException { @@ -1524,6 +1535,23 @@ protected void assertRoleMembershipRef(PrismObject focu } PrismAsserts.assertSets("Wrong values in roleMembershipRef in "+focus, refOids, roleOids); } + + protected void assertRoleMembershipRef(PrismObject focus, QName relation, String... roleOids) { + if (!MiscUtil.unorderedCollectionEquals(Arrays.asList(roleOids), focus.asObjectable().getRoleMembershipRef(), + (expectedOid, hasRef) -> { + if (!expectedOid.equals(hasRef.getOid())) { + return false; + } + if (!QNameUtil.match(relation, hasRef.getRelation())) { + return false; + } + return true; + })) { + AssertJUnit.fail("Wrong values in roleMembershipRef in "+focus + +", expected relation "+relation+", OIDs "+Arrays.toString(roleOids) + +", but was "+focus.asObjectable().getRoleMembershipRef()); + } + } protected void assertDelegatedRef(PrismObject focus, String... oids) { List refOids = new ArrayList<>(); diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalLevelImpl.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalLevelImpl.java index 486b2c0aeab..a2fcdaae44a 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalLevelImpl.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalLevelImpl.java @@ -50,7 +50,8 @@ public class ApprovalLevelImpl implements ApprovalLevel, Serializable { private transient PrismContext prismContext; - public ApprovalLevelImpl(ApprovalLevelType levelType, PrismContext prismContext) { + public ApprovalLevelImpl(ApprovalLevelType levelType, PrismContext prismContext, + RelationResolver relationResolver) { Validate.notNull(prismContext, "prismContext must not be null"); @@ -60,12 +61,9 @@ public ApprovalLevelImpl(ApprovalLevelType levelType, PrismContext prismContext) setPrismContext(prismContext); - for (ObjectReferenceType approverRef : levelType.getApproverRef()) { - addApproverRef(approverRef); - } - for (ExpressionType approverExpression : levelType.getApproverExpression()) { - addApproverExpression(approverExpression); - } + levelType.getApproverRef().forEach(this::addApproverRef); + relationResolver.getApprovers(levelType.getApproverRelation()).forEach(this::addApproverRef); + levelType.getApproverExpression().forEach(this::addApproverExpression); this.evaluationStrategy = levelType.getEvaluationStrategy(); setAutomaticallyApproved(levelType.getAutomaticallyApproved()); } @@ -80,14 +78,10 @@ public ApprovalLevelImpl(List approverRefList, List approverRef, List approverExpression, ExpressionType automaticallyApproved, PrismContext prismContext) { + public ApprovalRequestImpl(SerializationSafeContainer itemToApproveWrapped, PcpAspectConfigurationType config, + ApprovalSchemaType approvalSchema, List approverRef, + List approverExpression, ExpressionType automaticallyApproved, + PrismContext prismContext, RelationResolver relationResolver) { this(itemToApproveWrapped, prismContext); - setSchemaFromConfigAndParameters(config, approvalSchema, approverRef, approverExpression, automaticallyApproved, prismContext); + setSchemaFromConfigAndParameters(config, approvalSchema, approverRef, approverExpression, automaticallyApproved, + prismContext, relationResolver); } - public ApprovalRequestImpl(I itemToApprove, PcpAspectConfigurationType config, ApprovalSchemaType approvalSchema, List approverRef, List approverExpression, ExpressionType automaticallyApproved, PrismContext prismContext) { + public ApprovalRequestImpl(I itemToApprove, PcpAspectConfigurationType config, ApprovalSchemaType approvalSchema, + List approverRef, List approverExpression, + ExpressionType automaticallyApproved, PrismContext prismContext, + RelationResolver relationResolver) { this(itemToApprove, prismContext); - setSchemaFromConfigAndParameters(config, approvalSchema, approverRef, approverExpression, automaticallyApproved, prismContext); + setSchemaFromConfigAndParameters(config, approvalSchema, approverRef, approverExpression, automaticallyApproved, + prismContext, relationResolver); } private void setSchemaFromConfigAndParameters(PcpAspectConfigurationType config, ApprovalSchemaType approvalSchema, List approverRef, List approverExpression, ExpressionType automaticallyApproved, - PrismContext prismContext) { + PrismContext prismContext, RelationResolver relationResolver) { if (config != null && (!config.getApproverRef().isEmpty() || config.getApprovalSchema() != null || !config.getApproverExpression().isEmpty() || config.getAutomaticallyApproved() != null)) { setApprovalSchema(new ApprovalSchemaImpl(config.getApprovalSchema(), config.getApproverRef(), - config.getApproverExpression(), config.getAutomaticallyApproved(), prismContext)); + config.getApproverExpression(), config.getAutomaticallyApproved(), prismContext, relationResolver)); } else { setApprovalSchema(new ApprovalSchemaImpl(approvalSchema, approverRef, - approverExpression, automaticallyApproved, prismContext)); + approverExpression, automaticallyApproved, prismContext, relationResolver)); } } diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalSchemaImpl.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalSchemaImpl.java index 3563c7878ab..2ad3492a6b2 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalSchemaImpl.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processes/itemApproval/ApprovalSchemaImpl.java @@ -39,16 +39,18 @@ public class ApprovalSchemaImpl implements ApprovalSchema, Serializable { private transient PrismContext prismContext; - @SuppressWarnings("unused") // TODO check if not called from dynamic code - public ApprovalSchemaImpl(ApprovalSchemaType approvalSchemaType, PrismContext prismContext) { + public ApprovalSchemaImpl(ApprovalSchemaType approvalSchemaType, PrismContext prismContext, + RelationResolver relationResolver) { setPrismContext(prismContext); - initFromApprovalSchemaType(approvalSchemaType); + initFromApprovalSchemaType(approvalSchemaType, relationResolver); } - public ApprovalSchemaImpl(ApprovalSchemaType approvalSchema, List approverRefList, List approverExpressionList, ExpressionType automaticallyApproved, PrismContext prismContext) { + public ApprovalSchemaImpl(ApprovalSchemaType approvalSchema, List approverRefList, + List approverExpressionList, ExpressionType automaticallyApproved, + PrismContext prismContext, RelationResolver relationResolver) { setPrismContext(prismContext); if (approvalSchema != null) { - initFromApprovalSchemaType(approvalSchema); + initFromApprovalSchemaType(approvalSchema, relationResolver); } else if ((approverRefList != null && !approverRefList.isEmpty()) || (approverExpressionList != null && !approverExpressionList.isEmpty())) { ApprovalLevelImpl level = new ApprovalLevelImpl(approverRefList, approverExpressionList, automaticallyApproved, prismContext); addLevel(level); @@ -57,11 +59,12 @@ public ApprovalSchemaImpl(ApprovalSchemaType approvalSchema, List getApprovers(List relations); +} diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/BasePrimaryChangeAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/BasePrimaryChangeAspect.java index 4f15be88026..34b0e2414c4 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/BasePrimaryChangeAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/BasePrimaryChangeAspect.java @@ -17,11 +17,22 @@ package com.evolveum.midpoint.wf.impl.processors.primary.aspect; import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.PrismReferenceValue; +import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.prism.query.builder.QueryBuilder; +import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit; import com.evolveum.midpoint.repo.api.RepositoryService; +import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; +import com.evolveum.midpoint.util.DebugUtil; +import com.evolveum.midpoint.util.QNameUtil; 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.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processors.BaseModelInvocationProcessingHelper; import com.evolveum.midpoint.wf.impl.tasks.WfTaskUtil; import com.evolveum.midpoint.wf.impl.messages.ProcessEvent; @@ -32,14 +43,18 @@ import com.evolveum.midpoint.wf.impl.processors.primary.PcpWfTask; import com.evolveum.midpoint.wf.impl.processors.primary.PrimaryChangeProcessor; import com.evolveum.midpoint.wf.impl.util.MiscDataUtil; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.PrimaryChangeProcessorConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import javax.annotation.PostConstruct; +import javax.xml.namespace.QName; +import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * @author mederly @@ -123,4 +138,40 @@ public boolean isEnabled(PrimaryChangeProcessorConfigurationType processorConfig return primaryChangeAspectHelper.isEnabled(processorConfigurationType, this); } + public RelationResolver createRelationResolver(ObjectType object, OperationResult result) { + return createRelationResolver(object != null ? object.asPrismObject() : null, result); + } + + public RelationResolver createRelationResolver(PrismObject object, OperationResult result) { + return relations -> { + if (object == null || object.getOid() == null || relations.isEmpty()) { + return Collections.emptyList(); + } + S_AtomicFilterExit q = QueryBuilder.queryFor(FocusType.class, prismContext).none(); + for (QName approverRelation : relations) { + PrismReferenceValue approverReference = new PrismReferenceValue(object.getOid()); + approverReference.setRelation(QNameUtil.qualifyIfNeeded(approverRelation, SchemaConstants.NS_ORG)); + q = q.or().item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(approverReference); + } + ObjectQuery query = q.build(); + LOGGER.trace("Looking for approvers for {} using query:\n{}", object, DebugUtil.debugDumpLazily(query)); + List> objects = null; + try { + objects = repositoryService.searchObjects(FocusType.class, query, null, result); + } catch (SchemaException e) { + throw new SystemException("Couldn't retrieve approvers for " + object + ": " + e.getMessage(), e); + } + Set> distinctObjects = new HashSet<>(objects); + LOGGER.trace("Found {} approver(s): {}", distinctObjects.size(), DebugUtil.toStringLazily(distinctObjects)); + return distinctObjects.stream() + .map(ObjectTypeUtil::createObjectRef) + .collect(Collectors.toList()); + }; + } + + protected List findApproversByReference(PrismObject target, ApprovalPolicyActionType action, + OperationResult result) throws SchemaException { + return createRelationResolver(target, result) + .getApprovers(action.getApproverRelation()); + } } diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/PolicyRuleBasedAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/PolicyRuleBasedAspect.java index 113786dad47..7b94bdbebe8 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/PolicyRuleBasedAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/aspect/PolicyRuleBasedAspect.java @@ -22,24 +22,22 @@ import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensFocusContext; -import com.evolveum.midpoint.prism.*; +import com.evolveum.midpoint.prism.Objectable; +import com.evolveum.midpoint.prism.PrismContainerValue; +import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ChangeType; import com.evolveum.midpoint.prism.delta.DeltaSetTriple; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.delta.builder.DeltaBuilder; import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.prism.query.builder.QueryBuilder; -import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit; import com.evolveum.midpoint.prism.util.CloneUtil; import com.evolveum.midpoint.schema.ObjectTreeDeltas; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.schema.util.OidUtil; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.DebugUtil; -import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -54,9 +52,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.xml.namespace.QName; import java.util.*; -import java.util.stream.Collectors; import static com.evolveum.midpoint.schema.util.ObjectTypeUtil.createObjectRef; import static com.evolveum.midpoint.wf.impl.util.MiscDataUtil.getFocusObjectName; @@ -247,7 +243,8 @@ private void extractObjectBasedInstructions(@NotNull LensContext modelContext } else { itemsProcessed = items; } - ApprovalRequest request = new ApprovalRequestImpl<>("dummy", entry.getValue(), prismContext); + ApprovalRequest request = new ApprovalRequestImpl<>("dummy", entry.getValue(), prismContext, + createRelationResolver(object, result)); if (!request.getApprovalSchema().isEmpty()) { instructions.add( prepareObjectRelatedTaskInstruction(request, focusDelta, items, modelContext, requester, result)); @@ -297,33 +294,13 @@ private ApprovalRequest createAssignmentApprovalRequest(Evaluate approvalSchema = addApprovalActionIntoApprovalSchema(approvalSchema, action, findApproversByReference(target, action, result)); } if (approvalSchema != null) { - return new ApprovalRequestImpl<>(newAssignment.getAssignmentType(), approvalSchema, prismContext); + return new ApprovalRequestImpl<>(newAssignment.getAssignmentType(), approvalSchema, prismContext, + createRelationResolver(target, result)); } else { return null; } } - private List findApproversByReference(PrismObject target, ApprovalPolicyActionType action, - OperationResult result) throws SchemaException { - if (target == null || target.getOid() == null || action.getApproverRelation().isEmpty()) { - return Collections.emptyList(); - } - S_AtomicFilterExit q = QueryBuilder.queryFor(FocusType.class, prismContext).none(); - for (QName approverRelation : action.getApproverRelation()) { - PrismReferenceValue approverReference = new PrismReferenceValue(target.getOid()); - approverReference.setRelation(QNameUtil.qualifyIfNeeded(approverRelation, SchemaConstants.NS_ORG)); - q = q.or().item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(approverReference); - } - ObjectQuery query = q.build(); - LOGGER.trace("Looking for approvers for {} using query:\n{}", target, DebugUtil.debugDumpLazily(query)); - List> objects = repositoryService.searchObjects(FocusType.class, query, null, result); - Set> distinctObjects = new HashSet<>(objects); - LOGGER.trace("Found {} approver(s): {}", distinctObjects.size(), DebugUtil.toStringLazily(distinctObjects)); - return distinctObjects.stream() - .map(ObjectTypeUtil::createObjectRef) - .collect(Collectors.toList()); - } - private ApprovalSchemaType addApprovalActionIntoApprovalSchema(ApprovalSchemaType approvalSchema, ApprovalPolicyActionType action, @Nullable List additionalReviewers) { if (action.getApprovalSchema() != null) { diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAbstractRoleAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAbstractRoleAssignmentAspect.java index 683ca1d4de5..5d29e09bf45 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAbstractRoleAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAbstractRoleAssignmentAspect.java @@ -49,8 +49,8 @@ public boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, Abs } @Override - public ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType a, AbstractRoleType role) { - return specificAssignmentHelper.createApprovalRequest(config, a, role); + public ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType a, AbstractRoleType role, OperationResult result) { + return specificAssignmentHelper.createApprovalRequest(config, a, role, createRelationResolver(role, result)); } @Override diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAssignmentAspect.java index 7d6b689ccbe..332cc8f278d 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddAssignmentAspect.java @@ -118,7 +118,7 @@ private List> getApprovalRequestsFromFocusAdd(Pc LOGGER.trace(" - {} (approval required = {})", specificObjectType, approvalRequired); if (approvalRequired) { AssignmentType aCopy = cloneAndCanonicalizeAssignment(a); - approvalRequestList.add(createApprovalRequest(config, aCopy, specificObjectType)); + approvalRequestList.add(createApprovalRequest(config, aCopy, specificObjectType, result)); assignmentTypeIterator.remove(); miscDataUtil.generateFocusOidIfNeeded(modelContext, change); } @@ -203,7 +203,7 @@ private ApprovalRequest processAssignmentToAdd(PcpAspectConfigur LOGGER.trace(" - {} (approval required = {})", specificObjectType, approvalRequired); if (approvalRequired) { AssignmentType aCopy = cloneAndCanonicalizeAssignment(assignmentType); - return createApprovalRequest(config, aCopy, specificObjectType); + return createApprovalRequest(config, aCopy, specificObjectType, result); } } return null; @@ -282,7 +282,7 @@ private ObjectDelta assignmentToDelta(ModelContext model protected abstract AssignmentType cloneAndCanonicalizeAssignment(AssignmentType a); // creates an approval requests (e.g. by providing approval schema) for a given assignment and a target - protected abstract ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, T target); + protected abstract ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, T target, OperationResult result); // retrieves the relevant target for a given assignment - a role, an org, or a resource protected abstract T getAssignmentApprovalTarget(AssignmentType assignmentType, OperationResult result); diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddResourceAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddResourceAssignmentAspect.java index 1f0695329e6..0a034c0b93d 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddResourceAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/AddResourceAssignmentAspect.java @@ -51,8 +51,8 @@ protected boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, } @Override - protected ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType) { - return specificAssignmentHelper.createApprovalRequest(config, assignmentType, resourceType); + protected ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, OperationResult result) { + return specificAssignmentHelper.createApprovalRequest(config, assignmentType, resourceType, createRelationResolver(resourceType, result)); } @Override diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAbstractRoleAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAbstractRoleAssignmentAspect.java index 63f971ab258..7ac10ca4a87 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAbstractRoleAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAbstractRoleAssignmentAspect.java @@ -20,6 +20,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequest; +import com.evolveum.midpoint.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processes.modifyAssignment.AssignmentModification; import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; @@ -53,8 +54,8 @@ public boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, Abs } @Override - public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, AbstractRoleType role, List modifications) { - return specificAssignmentHelper.createApprovalRequestForModification(config, assignmentType, role, modifications); + public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, AbstractRoleType role, List modifications, RelationResolver relationResolver) { + return specificAssignmentHelper.createApprovalRequestForModification(config, assignmentType, role, modifications, relationResolver); } @Override diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAssignmentAspect.java index 4b5b33679d0..9679862efe2 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyAssignmentAspect.java @@ -37,6 +37,7 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequest; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ItemApprovalProcessInterface; +import com.evolveum.midpoint.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processes.modifyAssignment.AssignmentModification; import com.evolveum.midpoint.schema.ObjectTreeDeltas; import com.evolveum.midpoint.wf.impl.processors.primary.PcpChildWfTaskCreationInstruction; @@ -138,7 +139,8 @@ private List> getApprovalRequests(ModelC AssignmentType assignmentType = getAssignmentToBeModified(assignmentsOld, id); AssignmentType aCopy = cloneAndCanonicalizeAssignment(assignmentType); T target = getAssignmentApprovalTarget(assignmentType, result); - ApprovalRequest approvalRequest = createApprovalRequestForModification(config, aCopy, target, entry.getValue()); + ApprovalRequest approvalRequest = createApprovalRequestForModification(config, aCopy, target, entry.getValue(), + createRelationResolver(target, result)); approvalRequestList.add(approvalRequest); } } @@ -265,7 +267,7 @@ private ObjectDelta requestToDelta(ModelContext modelCo protected abstract AssignmentType cloneAndCanonicalizeAssignment(AssignmentType a); // creates an approval requests (e.g. by providing approval schema) for a given assignment and a target - protected abstract ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, T target, List modifications); + protected abstract ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, T target, List modifications, RelationResolver relationResolver); // retrieves the relevant target for a given assignment - a role, an org, or a resource protected abstract T getAssignmentApprovalTarget(AssignmentType assignmentType, OperationResult result); diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyResourceAssignmentAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyResourceAssignmentAspect.java index 06345ec9092..7a3a3468794 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyResourceAssignmentAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ModifyResourceAssignmentAspect.java @@ -20,6 +20,7 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequest; +import com.evolveum.midpoint.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processes.modifyAssignment.AssignmentModification; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; @@ -53,8 +54,8 @@ public boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, Res } @Override - public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, List modifications) { - return specificAssignmentHelper.createApprovalRequestForModification(config, assignmentType, resourceType, modifications); + public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, List modifications, RelationResolver relationResolver) { + return specificAssignmentHelper.createApprovalRequestForModification(config, assignmentType, resourceType, modifications, relationResolver); } @Override diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ResourceAssignmentHelper.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ResourceAssignmentHelper.java index 32ae381b4e1..f1ccb4c3edb 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ResourceAssignmentHelper.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/ResourceAssignmentHelper.java @@ -21,13 +21,10 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequest; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequestImpl; +import com.evolveum.midpoint.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processes.modifyAssignment.AssignmentModification; import com.evolveum.midpoint.wf.impl.processors.primary.aspect.PrimaryChangeAspectHelper; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.PcpAspectConfigurationType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -48,25 +45,27 @@ public class ResourceAssignmentHelper { @Autowired private PrismContext prismContext; - public boolean isResourceAssignment(AssignmentType assignmentType) { + boolean isResourceAssignment(AssignmentType assignmentType) { return assignmentType.getConstruction() != null; } - public boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, ResourceType resourceType) { + boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, ResourceType resourceType) { return primaryChangeAspectHelper.hasApproverInformation(config) || (resourceType.getBusiness() != null && !resourceType.getBusiness().getApproverRef().isEmpty()); } - public ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType) { - return new ApprovalRequestImpl<>(assignmentType, config, null, resourceType.getBusiness().getApproverRef(), null, null, prismContext); + ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, RelationResolver relationResolver) { + return new ApprovalRequestImpl<>(assignmentType, config, null, resourceType.getBusiness().getApproverRef(), + null, null, prismContext, relationResolver); } - public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, List modifications) { + ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, ResourceType resourceType, List modifications, RelationResolver relationResolver) { AssignmentModification itemToApprove = new AssignmentModification(assignmentType, resourceType, modifications); - return new ApprovalRequestImpl(itemToApprove.wrap(prismContext), config, null, resourceType.getBusiness().getApproverRef(), null, null, prismContext); + return new ApprovalRequestImpl<>(itemToApprove.wrap(prismContext), config, null, + resourceType.getBusiness().getApproverRef(), null, null, prismContext, relationResolver); } - protected ResourceType getAssignmentApprovalTarget(AssignmentType assignmentType, OperationResult result) { + ResourceType getAssignmentApprovalTarget(AssignmentType assignmentType, OperationResult result) { if (assignmentType.getConstruction() == null) { return null; } @@ -77,7 +76,7 @@ protected ResourceType getAssignmentApprovalTarget(AssignmentType assignmentType return primaryChangeAspectHelper.resolveTargetRef(resourceRef, ResourceType.class, result); } - protected AssignmentType cloneAndCanonicalizeAssignment(AssignmentType assignmentType) { + AssignmentType cloneAndCanonicalizeAssignment(AssignmentType assignmentType) { AssignmentType assignmentClone = assignmentType.clone(); PrismContainerValue.copyDefinition(assignmentClone, assignmentType, prismContext); ConstructionType constructionType = assignmentClone.getConstruction(); diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/RoleAssignmentHelper.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/RoleAssignmentHelper.java index 7ecec237b3c..280aef1f7c7 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/RoleAssignmentHelper.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/assignments/RoleAssignmentHelper.java @@ -24,6 +24,7 @@ import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequest; import com.evolveum.midpoint.wf.impl.processes.itemApproval.ApprovalRequestImpl; +import com.evolveum.midpoint.wf.impl.processes.itemApproval.RelationResolver; import com.evolveum.midpoint.wf.impl.processes.modifyAssignment.AssignmentModification; import com.evolveum.midpoint.wf.impl.processors.primary.aspect.PrimaryChangeAspectHelper; import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; @@ -70,13 +71,14 @@ protected boolean shouldAssignmentBeApproved(PcpAspectConfigurationType config, !role.getApproverRef().isEmpty() || !role.getApproverExpression().isEmpty() || role.getApprovalSchema() != null; } - public ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType a, AbstractRoleType role) { - return new ApprovalRequestImpl<>(a, config, role.getApprovalSchema(), role.getApproverRef(), role.getApproverExpression(), role.getAutomaticallyApproved(), prismContext); + public ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssignmentType a, AbstractRoleType role, RelationResolver relationResolver) { + return new ApprovalRequestImpl<>(a, config, role.getApprovalSchema(), role.getApproverRef(), + role.getApproverExpression(), role.getAutomaticallyApproved(), prismContext, relationResolver); } - public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, AbstractRoleType role, List modifications) { + public ApprovalRequest createApprovalRequestForModification(PcpAspectConfigurationType config, AssignmentType assignmentType, AbstractRoleType role, List modifications, RelationResolver relationResolver) { AssignmentModification itemToApprove = new AssignmentModification(assignmentType, role, modifications); - return new ApprovalRequestImpl(itemToApprove.wrap(prismContext), config, role.getApprovalSchema(), role.getApproverRef(), role.getApproverExpression(), role.getAutomaticallyApproved(), prismContext); + return new ApprovalRequestImpl(itemToApprove.wrap(prismContext), config, role.getApprovalSchema(), role.getApproverRef(), role.getApproverExpression(), role.getAutomaticallyApproved(), prismContext, relationResolver); } // TODO is this ok? diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/entitlements/AddAssociationAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/entitlements/AddAssociationAspect.java index 04fac936fb2..2eb7fc15483 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/entitlements/AddAssociationAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/entitlements/AddAssociationAspect.java @@ -325,7 +325,7 @@ protected ShadowAssociationType cloneAndCanonicalizeAssociation(ShadowAssociatio // creates an approval requests (e.g. by providing approval schema) for a given assignment and a target protected ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, AssociationAdditionType itemToApprove) { - return new ApprovalRequestImpl<>(itemToApprove, config, prismContext); + return new ApprovalRequestImpl<>(itemToApprove, config, prismContext, createRelationResolver((PrismObject) null, null)); // TODO rel resolver } // retrieves the relevant target for a given assignment - a role, an org, or a resource diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/objects/AddObjectAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/objects/AddObjectAspect.java index f49651a803a..382f725b04c 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/objects/AddObjectAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/objects/AddObjectAspect.java @@ -87,13 +87,12 @@ private List> getApprovalRequests(ModelContext modelContex ((LensFocusContext) modelContext.getFocusContext()).setOid(newOid); } change.setObjectToAdd(null); // make the change empty - return Arrays.asList(createApprovalRequest(config, objectType)); + return Arrays.asList(createApprovalRequest(config, objectType, result)); } // creates an approval request for a given role create request - private ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, T objectType) { - - return new ApprovalRequestImpl(objectType, config, prismContext); + private ApprovalRequest createApprovalRequest(PcpAspectConfigurationType config, T objectType, OperationResult result) { + return new ApprovalRequestImpl(objectType, config, prismContext, createRelationResolver(objectType, result)); } private List prepareJobCreateInstructions(ModelContext modelContext, Task taskFromModel, OperationResult result, diff --git a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/other/ChangePasswordAspect.java b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/other/ChangePasswordAspect.java index 61761da925c..a2f18ba78d7 100644 --- a/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/other/ChangePasswordAspect.java +++ b/model/workflow-impl/src/main/java/com/evolveum/midpoint/wf/impl/processors/primary/other/ChangePasswordAspect.java @@ -112,7 +112,7 @@ private ApprovalRequest createApprovalRequest(ItemDelta delta) { List approvers = new ArrayList(); approvers.add(approverRef); - return new ApprovalRequestImpl("Password change", null, null, approvers, null, null, prismContext); + return new ApprovalRequestImpl("Password change", null, null, approvers, null, null, prismContext, createRelationResolver((PrismObject) null, null)); } private PcpChildWfTaskCreationInstruction createStartProcessInstruction(ModelContext modelContext, ItemDelta delta, ApprovalRequest approvalRequest, Task taskFromModel, OperationResult result) throws SchemaException { diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java index 9b138c70786..ec1f0daddac 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/general/TestGeneralChangeProcessor.java @@ -244,7 +244,7 @@ void assertsRootTaskFinishes(Task task, OperationResult result) throws Exception }); } - protected void enableDisableScenarios(boolean... values) throws ObjectNotFoundException, SchemaException, com.evolveum.midpoint.util.exception.ExpressionEvaluationException, com.evolveum.midpoint.util.exception.CommunicationException, com.evolveum.midpoint.util.exception.ConfigurationException, com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException, com.evolveum.midpoint.model.api.PolicyViolationException, com.evolveum.midpoint.util.exception.SecurityViolationException { + protected void enableDisableScenarios(boolean... values) throws ObjectNotFoundException, SchemaException, com.evolveum.midpoint.util.exception.ExpressionEvaluationException, com.evolveum.midpoint.util.exception.CommunicationException, com.evolveum.midpoint.util.exception.ConfigurationException, com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException, com.evolveum.midpoint.util.exception.PolicyViolationException, com.evolveum.midpoint.util.exception.SecurityViolationException { OperationResult result = new OperationResult("execution"); Task task = taskManager.createTaskInstance("execution"); GeneralChangeProcessorConfigurationType gcpConfig = getSystemConfiguration().getWorkflowConfiguration().getGeneralChangeProcessor(); diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java index 4122f9fde3d..cfc34fc061f 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/AbstractWfTestLegacy.java @@ -20,7 +20,6 @@ import com.evolveum.midpoint.audit.api.AuditEventStage; import com.evolveum.midpoint.audit.api.AuditEventType; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.api.context.ModelState; import com.evolveum.midpoint.model.api.hooks.HookOperationMode; diff --git a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java index 6170eecbfcb..329e37c9c94 100644 --- a/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java +++ b/model/workflow-impl/src/test/java/com/evolveum/midpoint/wf/impl/legacy/TestUserChangeApprovalLegacy.java @@ -16,7 +16,6 @@ package com.evolveum.midpoint.wf.impl.legacy; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.prism.PrismContainerDefinition; diff --git a/model/workflow-impl/src/test/resources/policy/metarole-security.xml b/model/workflow-impl/src/test/resources/policy/metarole-security.xml index dd7ff89b1ef..9e9af09033f 100644 --- a/model/workflow-impl/src/test/resources/policy/metarole-security.xml +++ b/model/workflow-impl/src/test/resources/policy/metarole-security.xml @@ -30,7 +30,7 @@ - + security-approver diff --git a/model/workflow-impl/src/test/resources/policy/user-security-approver.xml b/model/workflow-impl/src/test/resources/policy/user-security-approver.xml index 29981939cc7..b2fcdfe346a 100644 --- a/model/workflow-impl/src/test/resources/policy/user-security-approver.xml +++ b/model/workflow-impl/src/test/resources/policy/user-security-approver.xml @@ -22,5 +22,8 @@ xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:piracy='http://midpoint.evolveum.com/xml/ns/samples/piracy'> security-approver + + + Security approver diff --git a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java index a30932fc20a..584155df712 100644 --- a/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java +++ b/repo/repo-test-util/src/main/java/com/evolveum/midpoint/test/AbstractIntegrationTest.java @@ -632,7 +632,12 @@ protected QName getGroupObjectClass(ResourceType resourceType) { } protected void assertShadowCommon(PrismObject shadow, String oid, String username, ResourceType resourceType, - QName objectClass, MatchingRule nameMatchingRule, boolean requireNormalizedIdentfiers) throws SchemaException { + QName objectClass, MatchingRule nameMatchingRule, boolean requireNormalizedIdentfiers) throws SchemaException { + assertShadowCommon(shadow, oid, username, resourceType, objectClass, nameMatchingRule, requireNormalizedIdentfiers, false); + } + + protected void assertShadowCommon(PrismObject shadow, String oid, String username, ResourceType resourceType, + QName objectClass, final MatchingRule nameMatchingRule, boolean requireNormalizedIdentfiers, boolean useMatchingRuleForShadowName) throws SchemaException { assertShadow(shadow); if (oid != null) { assertEquals("Shadow OID mismatch (prism)", oid, shadow.getOid()); @@ -647,7 +652,39 @@ protected void assertShadowCommon(PrismObject shadow, String oid, St assertNotNull("Null attributes in shadow for "+username, attributesContainer); assertFalse("Empty attributes in shadow for "+username, attributesContainer.isEmpty()); - PrismAsserts.assertPropertyValue(shadow, ShadowType.F_NAME, PrismTestUtil.createPolyString(username)); + if (useMatchingRuleForShadowName) { + MatchingRule polyMatchingRule = new MatchingRule() { + + @Override + public QName getName() { + return nameMatchingRule.getName(); + } + + @Override + public boolean isSupported(QName xsdType) { + return nameMatchingRule.isSupported(xsdType); + } + + @Override + public boolean match(PolyString a, PolyString b) throws SchemaException { + return nameMatchingRule.match(a.getOrig(), b.getOrig()); + } + + @Override + public boolean matchRegex(PolyString a, String regex) throws SchemaException { + return nameMatchingRule.matchRegex(a.getOrig(), regex); + } + + @Override + public PolyString normalize(PolyString original) throws SchemaException { + return new PolyString(nameMatchingRule.normalize(original.getOrig())); + } + + }; + PrismAsserts.assertPropertyValueMatch(shadow, ShadowType.F_NAME, polyMatchingRule, PrismTestUtil.createPolyString(username)); + } else { + PrismAsserts.assertPropertyValue(shadow, ShadowType.F_NAME, PrismTestUtil.createPolyString(username)); + } RefinedResourceSchema rSchema = RefinedResourceSchemaImpl.getRefinedSchema(resourceType); ObjectClassComplexTypeDefinition ocDef = rSchema.findObjectClassDefinition(objectClass); diff --git a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java index 6d964c2b994..ae8de32999a 100644 --- a/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java +++ b/testing/conntest/src/test/java/com/evolveum/midpoint/testing/conntest/AbstractLdapTest.java @@ -902,7 +902,7 @@ protected void assertAccountRepoShadow(PrismObject shadow, String dn } protected void assertGroupShadow(PrismObject shadow, String dn) throws SchemaException { - assertShadowCommon(shadow, null, dn, resourceType, getGroupObjectClass(), ciMatchingRule, false); + assertShadowCommon(shadow, null, dn, resourceType, getGroupObjectClass(), ciMatchingRule, false, true); } protected long roundTsDown(long ts) { 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 128e75c795d..1a9c198b0ca 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 @@ -53,7 +53,6 @@ import org.w3c.dom.Element; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.test.AbstractModelIntegrationTest; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.Item; @@ -115,6 +114,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/rest/src/test/java/com/evolveum/midpoint/testing/rest/TestRestService.java b/testing/rest/src/test/java/com/evolveum/midpoint/testing/rest/TestRestService.java index 6d674625ba8..aa063f089e1 100644 --- a/testing/rest/src/test/java/com/evolveum/midpoint/testing/rest/TestRestService.java +++ b/testing/rest/src/test/java/com/evolveum/midpoint/testing/rest/TestRestService.java @@ -578,7 +578,7 @@ public void test121AddUserDarthAdder() throws Exception { assertStatus(response, 201); IntegrationTestTools.display("Audit", dummyAuditService); - dummyAuditService.assertRecords(5); + dummyAuditService.assertRecords(4); dummyAuditService.assertLoginLogout(SchemaConstants.CHANNEL_REST_URI); dummyAuditService.assertHasDelta(1, ChangeType.ADD, UserType.class); } @@ -675,7 +675,7 @@ public void test130DarthAdderDisableHimself() throws Exception { assertStatus(response, 204); IntegrationTestTools.display("Audit", dummyAuditService); - dummyAuditService.assertRecords(5); + dummyAuditService.assertRecords(4); dummyAuditService.assertLoginLogout(SchemaConstants.CHANNEL_REST_URI); dummyAuditService.assertHasDelta(1, ChangeType.MODIFY, UserType.class); @@ -724,7 +724,7 @@ public void test132DarthAdderEnableByAdministrator() throws Exception { assertStatus(response, 204); IntegrationTestTools.display("Audit", dummyAuditService); - dummyAuditService.assertRecords(5); + dummyAuditService.assertRecords(4); dummyAuditService.assertLoginLogout(SchemaConstants.CHANNEL_REST_URI); dummyAuditService.assertHasDelta(1, ChangeType.MODIFY, UserType.class); @@ -775,7 +775,7 @@ public void test135AddUserNopasswordAsDarthAdder() throws Exception { assertStatus(response, 201); IntegrationTestTools.display("Audit", dummyAuditService); - dummyAuditService.assertRecords(5); + dummyAuditService.assertRecords(4); dummyAuditService.assertLoginLogout(SchemaConstants.CHANNEL_REST_URI); dummyAuditService.assertHasDelta(1, ChangeType.ADD, UserType.class); } diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/AbstractLdapHierarchyTest.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/AbstractLdapHierarchyTest.java index 6ff6039591f..3ccc34b45a6 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/AbstractLdapHierarchyTest.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/AbstractLdapHierarchyTest.java @@ -36,7 +36,6 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; @@ -61,6 +60,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapDeeplyHierarchical.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapDeeplyHierarchical.java index b64342108ef..c6b2e7edfd0 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapDeeplyHierarchical.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapDeeplyHierarchical.java @@ -30,7 +30,6 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.ResultHandler; import com.evolveum.midpoint.schema.result.OperationResult; @@ -42,6 +41,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapFlat.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapFlat.java index 60fb3893298..2500d2dab43 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapFlat.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapFlat.java @@ -28,7 +28,6 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.ResultHandler; import com.evolveum.midpoint.schema.result.OperationResult; @@ -40,6 +39,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapHierarchical.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapHierarchical.java index 137caa2a04c..ee7a431e677 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapHierarchical.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestLdapHierarchical.java @@ -30,7 +30,6 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.schema.ResultHandler; import com.evolveum.midpoint.schema.result.OperationResult; @@ -42,6 +41,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java index cb544a7a4c5..fca7d1b5527 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestRetirement.java @@ -38,7 +38,6 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.Test; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; @@ -66,6 +65,7 @@ import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.exception.SystemException; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUuid.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUuid.java index 2a351cb9d81..abad86dcc7e 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUuid.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestUuid.java @@ -55,7 +55,6 @@ import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.common.refinery.ShadowDiscriminatorObjectDelta; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.common.expression.evaluator.LiteralExpressionEvaluatorFactory; import com.evolveum.midpoint.model.test.AbstractModelIntegrationTest; @@ -102,6 +101,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; diff --git a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestVillage.java b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestVillage.java index 07c170bfaa3..c3a93f881ae 100644 --- a/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestVillage.java +++ b/testing/story/src/test/java/com/evolveum/midpoint/testing/story/TestVillage.java @@ -57,7 +57,6 @@ import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.common.refinery.ShadowDiscriminatorObjectDelta; import com.evolveum.midpoint.model.api.ModelExecuteOptions; -import com.evolveum.midpoint.model.api.PolicyViolationException; import com.evolveum.midpoint.model.api.context.ModelContext; import com.evolveum.midpoint.model.common.expression.evaluator.LiteralExpressionEvaluatorFactory; import com.evolveum.midpoint.model.test.AbstractModelIntegrationTest; @@ -105,6 +104,7 @@ import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.util.exception.ObjectAlreadyExistsException; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; +import com.evolveum.midpoint.util.exception.PolicyViolationException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType;