diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java index 8bb2e318965..f06810a5892 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java @@ -8,6 +8,8 @@ import java.util.*; +import com.evolveum.midpoint.model.common.util.DefaultColumnUtils; + import org.apache.commons.collections4.CollectionUtils; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -202,6 +204,15 @@ protected MultiFunctinalButtonDto load() { } + @Override + protected List, String>> createDefaultColumns() { + GuiObjectListViewType defaultView = DefaultColumnUtils.getDefaultView(getType()); + if (defaultView == null) { + return null; + } + return getViewColumnsTransformed(defaultView.getColumn()); + } + private DisplayType getNewObjectButtonStandardDisplayType() { if (isCollectionViewPanelForCompiledView()) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java index 53fd2297f02..9da81c40ca4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java @@ -91,11 +91,6 @@ protected List getFixedSearchItems() { return fixedSearchItems; } - @Override - protected LoadableModel> getSearchModel() { - return super.getSearchModel(); - } - protected final SelectableBeanObjectDataProvider createSelectableBeanObjectDataProvider(SerializableSupplier querySuplier, SerializableFunction, List> orderingSuplier) { List preSelectedObjectList = getPreselectedObjectList(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AssignmentsDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AssignmentsDetailsPanel.java new file mode 100644 index 00000000000..ce4d0ebdc96 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AssignmentsDetailsPanel.java @@ -0,0 +1,275 @@ +/* + * Copyright (C) 2021 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.impl.component; + +import java.util.List; +import javax.xml.namespace.QName; + +import org.apache.wicket.extensions.markup.html.tabs.ITab; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.jetbrains.annotations.NotNull; + +import com.evolveum.midpoint.gui.api.component.DisplayNamePanel; +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; +import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.gui.impl.prism.panel.SingleContainerPanel; +import com.evolveum.midpoint.gui.impl.prism.wrapper.ConstructionValueWrapper; +import com.evolveum.midpoint.prism.Containerable; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.task.api.Task; +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; +import com.evolveum.midpoint.web.component.assignment.AssignmentsUtil; +import com.evolveum.midpoint.web.component.assignment.ConstructionAssociationPanel; +import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import com.evolveum.midpoint.web.model.PrismContainerWrapperModel; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; + +public class AssignmentsDetailsPanel extends MultivalueContainerDetailsPanel { + + private static final Trace LOGGER = TraceManager.getTrace(AssignmentsDetailsPanel.class); + private boolean isEntitledAssignemnt; + + public AssignmentsDetailsPanel(String id, IModel> model, boolean isEntitledAssignment) { + super(id, model, !isEntitledAssignment); + this.isEntitledAssignemnt = isEntitledAssignment; + } + + @NotNull + @Override + protected List createTabs() { + List tabs = super.createTabs(); + if (isEntitledAssignemnt) { + tabs.add(getConstructionAssociationPanel()); + return tabs; + } + + AssignmentsUtil.AssignmentTypeType assignmentTypeType = AssignmentsUtil.getAssignmentType(getModelObject()); + switch (assignmentTypeType) { + case CONSTRUCTION: + tabs.add(createConstructionTabs()); + break; + case POLICY_RULE: + tabs.add(createTabs("AssignmentType.policyRule", AssignmentType.F_POLICY_RULE, PolicyRuleType.COMPLEX_TYPE)); + break; + case FOCUS_MAPPING: + tabs.add(createTabs("AssignmentType.focusMappings", AssignmentType.F_FOCUS_MAPPINGS, MappingType.COMPLEX_TYPE)); + break; + case PERSONA_CONSTRUCTION: + tabs.add(createTabs("AssignmentType.personaConstruction", AssignmentType.F_PERSONA_CONSTRUCTION, PersonaConstructionType.COMPLEX_TYPE)); + break; + case ASSIGNMENT_RELATION: + tabs.add(createTabs("AssignmentType.assignmentRelation", AssignmentType.F_ASSIGNMENT_RELATION, AssignmentRelationType.COMPLEX_TYPE)); + break; + } + + tabs.add(createActivationTab()); + tabs.add(createConditionTab()); + return tabs; + } + + private PanelTab getConstructionAssociationPanel() { + return new PanelTab(createStringResource("AssignmentPanel.inducedEntitlements")) { + @Override + public WebMarkupContainer createPanel(String panelId) { + IModel> constructionModel = PrismContainerWrapperModel.fromContainerValueWrapper(getModel(), AssignmentType.F_CONSTRUCTION); + ConstructionAssociationPanel constructionDetailsPanel = new ConstructionAssociationPanel(panelId, constructionModel); + constructionDetailsPanel.setOutputMarkupId(true); + return constructionDetailsPanel; + } + }; + } + @Override + protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper) { + return getContainerVisibility(itemWrapper); + } + + @Override + protected boolean getBasicTabEditability(ItemWrapper itemWrapper) { + return getContainerReadability(itemWrapper); + } + + @Override + protected DisplayNamePanel createDisplayNamePanel(String displayNamePanelId) { + IModel displayNameModel = getDisplayModel(getModelObject().getRealValue()); + return new DisplayNamePanel<>(displayNamePanelId, displayNameModel) { + + private static final long serialVersionUID = 1L; + + @Override + protected QName getRelation() { + return getRelationForDisplayNamePanel(AssignmentsDetailsPanel.this.getModelObject()); + } + + @Override + protected IModel getKindIntentLabelModel() { + return getKindIntentLabelModelForDisplayNamePanel(AssignmentsDetailsPanel.this.getModelObject()); + } + + }; + } + + @SuppressWarnings("unchecked") + private IModel getDisplayModel(AssignmentType assignment) { + return () -> { + if (assignment.getTargetRef() != null && assignment.getTargetRef().getOid() != null) { + Task task = getPageBase().createSimpleTask("Load target"); + OperationResult result = task.getResult(); + PrismObject targetObject = WebModelServiceUtils.loadObject(assignment.getTargetRef(), getPageBase(), task, result); + return targetObject != null ? (C) targetObject.asObjectable() : null; + } + if (assignment.getConstruction() != null && assignment.getConstruction().getResourceRef() != null) { + if (assignment.getConstruction().getResourceRef().getOid() != null) { + Task task = getPageBase().createSimpleTask("Load resource"); + OperationResult result = task.getResult(); + PrismObject object = WebModelServiceUtils.loadObject(assignment.getConstruction().getResourceRef(), getPageBase(), task, result); + if (object != null) { + return (C) object.asObjectable(); + } + } else { + return (C) assignment.getConstruction(); + } + } else if (assignment.getPersonaConstruction() != null) { + return (C) assignment.getPersonaConstruction(); + } else if (assignment.getPolicyRule() != null) { + return (C) assignment.getPolicyRule(); + } + return null; + }; + } + + private QName getRelationForDisplayNamePanel(PrismContainerValueWrapper modelObject) { + AssignmentType assignment = modelObject.getRealValue(); + if (assignment.getTargetRef() != null) { + return assignment.getTargetRef().getRelation(); + } else { + return null; + } + } + + private IModel getKindIntentLabelModelForDisplayNamePanel(PrismContainerValueWrapper modelObject) { + AssignmentType assignment = modelObject.getRealValue(); + if (assignment.getConstruction() != null) { + PrismContainerValueWrapper constructionValue = null; + try { + PrismContainerWrapper construction = modelObject.findContainer(AssignmentType.F_CONSTRUCTION); + if (construction == null) { + return null; + } + constructionValue = construction.getValue(); + } catch (SchemaException e) { + LOGGER.error("Unexpected problem during construction wrapper lookup, {}", e.getMessage(), e); + } + ShadowKindType kind; + String intent; + if (constructionValue instanceof ConstructionValueWrapper) { + kind = ((ConstructionValueWrapper) constructionValue).getKind(); + intent = ((ConstructionValueWrapper) constructionValue).getIntent(); + } else { + kind = assignment.getConstruction().getKind(); + intent = assignment.getConstruction().getIntent(); + } + + return createStringResource("DisplayNamePanel.kindIntentLabel", kind, intent); + } + return Model.of(); + } + + protected boolean getContainerReadability(ItemWrapper wrapper) { + if (QNameUtil.match(ConstructionType.F_KIND, wrapper.getItemName())) { + return false; + } + + return !QNameUtil.match(ConstructionType.F_INTENT, wrapper.getItemName()); + } + + private ItemVisibility getContainerVisibility(ItemWrapper wrapper) { + if (wrapper instanceof PrismContainerWrapper) { + return ItemVisibility.HIDDEN; + } + return ItemVisibility.AUTO; + } + + private PanelTab createTabs(String titleKey, ItemPath path, QName type) { + return new PanelTab(createStringResource(titleKey)) { + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new SingleContainerPanel<>(panelId, PrismContainerWrapperModel.fromContainerValueWrapper(getModel(), path), type); + } + }; + + } + private PanelTab createConstructionTabs() { + return createTabs("AssignmentType.construction", AssignmentType.F_CONSTRUCTION, ConstructionType.COMPLEX_TYPE); + } + + private PanelTab createActivationTab() { + return new PanelTab(createStringResource("AssignmentType.activation")) { + @Override + public WebMarkupContainer createPanel(String panelId) { + return new SingleContainerPanel<>(panelId, + PrismContainerWrapperModel.fromContainerValueWrapper(getModel(), AssignmentType.F_ACTIVATION), ActivationType.COMPLEX_TYPE) { + + @Override + protected ItemVisibility getVisibility(ItemPath itemPath) { + if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_EXPIRATION_TIMESTAMP).equivalent(itemPath.namedSegmentsOnly())) { + return ItemVisibility.HIDDEN; + } + + if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_STATUS).equivalent(itemPath.namedSegmentsOnly())) { + return ItemVisibility.HIDDEN; + } + + if (ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_EXPIRATION_TIMESTAMP).equivalent(itemPath.namedSegmentsOnly())) { + return ItemVisibility.HIDDEN; + } + + if (ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_STATUS).equivalent(itemPath.namedSegmentsOnly())) { + return ItemVisibility.HIDDEN; + } + + return super.getVisibility(itemPath); + } + }; + } + }; + } + + private PanelTab createConditionTab() { + return new PanelTab(createStringResource("AssignmentType.condition")) { + + @Override + public WebMarkupContainer createPanel(String panelId) { + return new SingleContainerPanel<>(panelId, PrismContainerWrapperModel.fromContainerValueWrapper(getModel(), AssignmentType.F_CONDITION), MappingType.COMPLEX_TYPE) { + + @Override + protected ItemVisibility getVisibility(ItemPath itemPath) { + ItemPath assignmentConditionExpressionPath = ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_CONDITION, MappingType.F_EXPRESSION); + ItemPath inducementConditionExpressionPath = ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_CONDITION, MappingType.F_EXPRESSION); + if (itemPath.namedSegmentsOnly().equivalent(assignmentConditionExpressionPath) || itemPath.namedSegmentsOnly().equivalent(inducementConditionExpressionPath)) { + return ItemVisibility.AUTO; + } else { + return ItemVisibility.HIDDEN; + } + } + }; + } + }; + } + + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/ContainerableListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/ContainerableListPanel.java index ed3c681d752..b4a4ebfef2d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/ContainerableListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/ContainerableListPanel.java @@ -342,11 +342,6 @@ protected boolean isNewObjectButtonEnabled(){ return true; } - protected boolean getNewObjectGenericButtonVisibility(){ - return true; - } - - protected DisplayType getNewObjectButtonDisplayType(){ return WebComponentUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green", createStringResource("MainObjectListPanel.newObject").getString()); } @@ -422,7 +417,7 @@ private void addingCheckAndIconColumnIfExists(List> columns) } } - private List> getViewColumnsTransformed(List customColumns){ + protected List> getViewColumnsTransformed(List customColumns){ List> columns = new ArrayList<>(); if (customColumns == null || customColumns.isEmpty()) { return columns; @@ -696,11 +691,7 @@ private List> initColumns() { List> others = createDefaultColumns(); if (others == null) { - GuiObjectListViewType defaultView = DefaultColumnUtils.getDefaultView(getType()); - if (defaultView == null) { - return columns; - } - others = getViewColumnsTransformed(defaultView.getColumn()); + return columns; } else { IColumn nameColumn = createNameColumn(null, null, null); if (nameColumn != null) { @@ -725,9 +716,7 @@ protected IColumn createNameColumn(IModel displayModel, Stri return null; } - protected List> createDefaultColumns() { - return null; - } + protected abstract List> createDefaultColumns(); protected List createInlineMenu() { return null; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.html index 2e063fe32d3..087d981da25 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.html @@ -12,9 +12,8 @@
-
+
-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java index 47c860f2fc3..f8ce5f833bc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsPanel.java @@ -6,6 +6,12 @@ */ package com.evolveum.midpoint.gui.impl.component; +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.web.component.TabbedPanel; + +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; +import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; @@ -20,6 +26,11 @@ import com.evolveum.midpoint.prism.Containerable; import com.evolveum.midpoint.web.component.prism.ItemVisibility; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + /** * @author skublik */ @@ -29,13 +40,19 @@ public abstract class MultivalueContainerDetailsPanel private static final long serialVersionUID = 1L; private static final String ID_DISPLAY_NAME = "displayName"; - private static final String ID_BASIC_PANEL = "basicPanel"; - protected static final String ID_SPECIFIC_CONTAINERS_PANEL = "specificContainersPanel"; + private static final String ID_DETAILS = "details"; + + private boolean isAddDefaultPanel; public MultivalueContainerDetailsPanel(String id, IModel> model) { super(id, model); } + public MultivalueContainerDetailsPanel(String id, IModel> model, boolean addDefaultPanel) { + super(id, model); + this.isAddDefaultPanel = addDefaultPanel; + } + @Override protected void onInitialize() { super.onInitialize(); @@ -47,8 +64,12 @@ protected void onInitialize() { private void initLayout() { - addBasicContainerValuePanel(ID_BASIC_PANEL); - add(getSpecificContainers(ID_SPECIFIC_CONTAINERS_PANEL)); + List tabs = createTabs(); + TabbedPanel tabbedPanel = WebComponentUtil.createTabPanel(ID_DETAILS, getPageBase(), tabs, null); + tabbedPanel.setOutputMarkupId(true); + add(tabbedPanel); + + DisplayNamePanel displayNamePanel = createDisplayNamePanel(ID_DISPLAY_NAME); @@ -56,12 +77,23 @@ private void initLayout() { add(displayNamePanel); } - protected WebMarkupContainer getSpecificContainers(String contentAreaId) { - return new WebMarkupContainer(contentAreaId); + @NotNull protected List createTabs() { + List tabs = new ArrayList<>(); + if (isAddDefaultPanel) { + tabs.add(addBasicContainerValuePanel()); + } + return tabs; } + protected AbstractTab addBasicContainerValuePanel() { + PanelTab panel = new PanelTab(createStringResource("Basic")) { + + @Override + public WebMarkupContainer createPanel(String panelId) { + return getBasicContainerValuePanel(panelId); + } + }; + return panel; - protected void addBasicContainerValuePanel(String idPanel) { - add(getBasicContainerValuePanel(idPanel)); } protected Panel getBasicContainerValuePanel(String idPanel) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsWithSummaryPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsWithSummaryPanel.java deleted file mode 100644 index 6e58a1fec18..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerDetailsWithSummaryPanel.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.gui.impl.component; - -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.model.IModel; - -import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; -import com.evolveum.midpoint.prism.Containerable; - -/** - * Created by honchar - */ -public abstract class MultivalueContainerDetailsWithSummaryPanel extends MultivalueContainerDetailsPanel{ - - private static final long serialVersionUID = 1L; - - private static final String ID_SUMMARY_PANEL = "summaryPanel"; - - public MultivalueContainerDetailsWithSummaryPanel(String id, IModel> model){ - super(id, model); - } - - @Override - protected void onInitialize(){ - super.onInitialize(); - initLayout(); - } - - private void initLayout(){ - WebMarkupContainer summaryPanel = getSummaryPanel(); - summaryPanel.setOutputMarkupId(true); - add(summaryPanel); - } - - protected abstract WebMarkupContainer getSummaryPanel(); -} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java index f498cb8ea73..75ef232200c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanel.java @@ -9,12 +9,6 @@ import java.util.ArrayList; import java.util.List; -import com.evolveum.midpoint.gui.api.model.LoadableModel; - -import com.evolveum.midpoint.prism.path.ItemPath; - -import com.evolveum.midpoint.web.component.CompositedIconButtonDto; - import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -24,9 +18,9 @@ import org.apache.wicket.model.PropertyModel; import com.evolveum.midpoint.gui.api.GuiStyleConstants; +import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.gui.api.util.WebPrismUtil; import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder; import com.evolveum.midpoint.model.api.AssignmentObjectRelation; @@ -35,9 +29,10 @@ import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectQuery; +import com.evolveum.midpoint.web.component.CompositedIconButtonDto; import com.evolveum.midpoint.web.component.MultiCompositedButtonPanel; -import com.evolveum.midpoint.web.component.MultiFunctinalButtonDto; import com.evolveum.midpoint.web.component.data.BoxedTablePanel; import com.evolveum.midpoint.web.component.data.ISelectableDataProvider; import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction; @@ -52,7 +47,6 @@ import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; /** * @author skublik @@ -86,29 +80,9 @@ protected ItemPath getDefaultSearchItem() { return null; } - protected IModel>> loadValuesModel() { - return getContainerModel() != null ? new PropertyModel<>(getContainerModel(), "values") : Model.ofList(new ArrayList<>()); - } - @Override protected ISelectableDataProvider> createProvider() { - return new MultivalueContainerListDataProvider<>(MultivalueContainerListPanel.this, getSearchModel(), loadValuesModel()) { - - @Override - protected ObjectQuery getCustomizeContentQuery() { - return MultivalueContainerListPanel.this.getCustomizeContentQuery(); - } - - @Override - protected List> searchThroughList() { - List> resultList = super.searchThroughList(); - return postSearch(resultList); - } - - @Override - protected void postProcessWrapper(PrismContainerValueWrapper valueWrapper) { - MultivalueContainerListPanel.this.postProcessWrapper(valueWrapper); - } + return new MultivalueContainerListDataProvider<>(MultivalueContainerListPanel.this, getSearchModel(), new PropertyModel<>(getContainerModel(), "values")) { @Override protected PageStorage getPageStorage() { @@ -117,37 +91,17 @@ protected PageStorage getPageStorage() { }; } - protected void postProcessWrapper(PrismContainerValueWrapper valueWrapper) { - - } - - protected ObjectQuery getCustomizeContentQuery() { - return null; - } - @Override protected List createToolbarButtonsList(String idButton) { List bar = new ArrayList<>(); MultiCompositedButtonPanel newObjectIcon = - new MultiCompositedButtonPanel(idButton, new LoadableModel>(false) { - @Override - protected List load() { - return createNewButtonDescription(); - } - }) { - private static final long serialVersionUID = 1L; - - @Override - protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSepc, CompiledObjectCollectionView collectionViews) { - newItemPerformed(target, relationSepc); - } - -// @Override -// protected boolean isDefaultButtonVisible(){ -// return getNewObjectGenericButtonVisibility(); -// } - - }; + new MultiCompositedButtonPanel(idButton, createNewButtonDescriptionModel()) { + + @Override + protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSepc, CompiledObjectCollectionView collectionViews) { + newItemPerformed(target, relationSepc); + } + }; newObjectIcon.add(AttributeModifier.append("class", "btn-group btn-margin-right")); newObjectIcon.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -166,27 +120,29 @@ public boolean isEnabled() { return bar; } - protected List createNewButtonDescription() { - return null; - } - - protected boolean isNewObjectButtonEnabled(){ - return true; + private IModel> createNewButtonDescriptionModel() { + return new LoadableModel<>(false) { + @Override + protected List load() { + return createNewButtonDescription(); + } + }; } - protected boolean getNewObjectGenericButtonVisibility(){ - return true; + protected List createNewButtonDescription() { + return null; } - protected DisplayType getNewObjectButtonDisplayType(){ - return WebComponentUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green", createStringResource("MainObjectListPanel.newObject").getString()); - } +// protected boolean isNewObjectButtonEnabled(){ +// return true; +// } +// +// protected boolean getNewObjectGenericButtonVisibility(){ +// return true; +// } - protected List> postSearch(List> items){ - return items; - } + protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSepc) { - protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSepc){ } public List> getSelectedItems() { @@ -224,7 +180,6 @@ public PrismContainerValueWrapper createNewItemContainerValueWrapper( PrismContainerWrapper model, AjaxRequestTarget target) { return WebPrismUtil.createNewValueWrapper(model, newItem, getPageBase(), target); - } protected abstract void editItemPerformed(AjaxRequestTarget target, IModel> rowModel, List> listItems); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.java index 3b9e5da2ee2..8c0871b246e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/MultivalueContainerListPanelWithDetailsPanel.java @@ -7,8 +7,15 @@ package com.evolveum.midpoint.gui.impl.component; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; +import com.evolveum.midpoint.model.api.AssignmentObjectRelation; + +import com.evolveum.midpoint.prism.PrismContainerValue; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GlobalPolicyRuleType; + import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.list.ListItem; @@ -172,4 +179,12 @@ protected WebMarkupContainer getDetailsPanelContainer() { protected List> getDetailsPanelItemsList() { return detailsPanelItemsList; } + + @Override + protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relationSepc) { + PrismContainerWrapper container = getContainerModel().getObject(); + PrismContainerValue newObjectPolicy = container.getItem().createNewValue(); + PrismContainerValueWrapper newObjectPolicyWrapper = createNewItemContainerValueWrapper(newObjectPolicy, container, target); + itemDetailsPerformed(target, Arrays.asList(newObjectPolicyWrapper)); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java index d5449b9e91f..ebd8d7b0e0d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/panel/WorkItemDetailsPanelFactory.java @@ -8,7 +8,12 @@ import javax.annotation.PostConstruct; +import com.evolveum.midpoint.gui.api.factory.GuiComponentFactory; + +import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry; + import org.apache.wicket.markup.html.panel.Panel; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory; @@ -20,11 +25,13 @@ * Created by honchar */ @Component -public class WorkItemDetailsPanelFactory extends AbstractGuiComponentFactory { +public class WorkItemDetailsPanelFactory implements GuiComponentFactory> { + + @Autowired private GuiComponentRegistry registry; @PostConstruct public void register() { - getRegistry().addToRegistry(this); + registry.addToRegistry(this); } @Override @@ -33,9 +40,14 @@ public void register() { } @Override - protected Panel getPanel(PrismPropertyPanelContext panelCtx) { + public org.apache.wicket.Component createPanel(PrismContainerPanelContext panelCtx) { WorkItemDetailsPanel panel = new WorkItemDetailsPanel(panelCtx.getComponentId(), panelCtx.getRealValueModel()); panel.setOutputMarkupId(true); return panel; } + + @Override + public Integer getOrder() { + return Integer.MAX_VALUE - 10; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/wrapper/AssignmentWrapperFactoryImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/wrapper/AssignmentWrapperFactoryImpl.java index 68795c48f43..5b29508c09a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/wrapper/AssignmentWrapperFactoryImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/wrapper/AssignmentWrapperFactoryImpl.java @@ -19,12 +19,17 @@ import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.assignment.AssignmentsUtil; +import com.evolveum.midpoint.web.component.assignment.AssignmentsUtil.AssignmentTypeType; import com.evolveum.midpoint.web.component.prism.ValueStatus; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.springframework.stereotype.Component; +import javax.xml.namespace.QName; +import java.util.ArrayList; +import java.util.List; + /** * @author skublik */ @@ -41,6 +46,77 @@ public boolean match(ItemDefinition def) { return def instanceof PrismContainerDefinition && QNameUtil.match(def.getTypeName(), AssignmentType.COMPLEX_TYPE); } + @Override + protected List getItemDefinitions(PrismContainerWrapper parent, PrismContainerValue value) { + AssignmentType assignmentType = value.getRealValue(); + AssignmentTypeType assignmentTypeType = AssignmentsUtil.getAssignmentType(assignmentType); + List definitions = parent.getDefinitions(); + List> filteredDefinitions = new ArrayList<>(); + for (ItemDefinition definition : definitions) { + if (isNotDefinedForAssignmentType(assignmentTypeType, definition, assignmentType)) { + continue; + } + filteredDefinitions.add(definition); + } + return filteredDefinitions; + } + + //CONSTRUCTION, ABSTRACT_ROLE, POLICY_RULE, FOCUS_MAPPING, PERSONA_CONSTRUCTION, ASSIGNMENT_RELATION; + private boolean isNotDefinedForAssignmentType(AssignmentTypeType assignmentTypeType, ItemDefinition def, AssignmentType assignmentType) { + if (def instanceof PrismContainerDefinition) { + if (QNameUtil.match(ConstructionType.COMPLEX_TYPE, def.getTypeName()) && AssignmentTypeType.CONSTRUCTION != assignmentTypeType) { + return true; + } + if (QNameUtil.match(PolicyRuleType.COMPLEX_TYPE, def.getTypeName()) && AssignmentTypeType.POLICY_RULE != assignmentTypeType) { + return true; + } + if (QNameUtil.match(MappingsType.COMPLEX_TYPE, def.getTypeName()) && AssignmentTypeType.FOCUS_MAPPING != assignmentTypeType) { + return true; + } + if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, def.getTypeName()) && AssignmentTypeType.PERSONA_CONSTRUCTION != assignmentTypeType) { + return true; + } + if (QNameUtil.match(AssignmentRelationType.COMPLEX_TYPE, def.getTypeName()) && AssignmentTypeType.ASSIGNMENT_RELATION != assignmentTypeType && !isArchetype(assignmentType)) { + return true; + } + return false; + } + if (AssignmentTypeType.ABSTRACT_ROLE != assignmentTypeType && AssignmentType.F_TARGET_REF.equivalent(def.getItemName())) { + return true; + } + if ((AssignmentTypeType.ABSTRACT_ROLE != assignmentTypeType || isOrg(assignmentType)) && AssignmentType.F_TENANT_REF.equivalent(def.getItemName())) { + return true; + } + if ((AssignmentTypeType.ABSTRACT_ROLE != assignmentTypeType || isOrg(assignmentType)) && AssignmentType.F_ORG_REF.equivalent(def.getItemName())) { + return true; + } + return false; + } + + private boolean isArchetype(AssignmentType assignmentType) { + return isAssignemntWithTarget(assignmentType, ArchetypeType.COMPLEX_TYPE); + } + + private boolean isOrg(AssignmentType assignmentType) { + return isAssignemntWithTarget(assignmentType, OrgType.COMPLEX_TYPE); + } + + private boolean isAssignemntWithTarget(AssignmentType assignmentType, QName targetType) { + ObjectReferenceType ref = getRefFromAssignment(assignmentType); + if (ref == null) { + return false; + } + return QNameUtil.match(ref.getType(), targetType); + } + + private ObjectReferenceType getRefFromAssignment(AssignmentType assignmentType) { + if (assignmentType == null) { + return null; + } + return assignmentType.getTargetRef(); + + } + @Override public int getOrder() { return 99; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java index fa2a6dce9bd..d2ae5df4731 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/GlobalPolicyRuleTabPanel.java @@ -79,61 +79,55 @@ protected void onInitialize() { protected void initLayout() { MultivalueContainerListPanelWithDetailsPanel multivalueContainerListPanel = - new MultivalueContainerListPanelWithDetailsPanel(ID_GLOBAL_POLICY_RULE, GlobalPolicyRuleType.class) { + new MultivalueContainerListPanelWithDetailsPanel<>(ID_GLOBAL_POLICY_RULE, GlobalPolicyRuleType.class) { - private static final long serialVersionUID = 1L; - - @Override - protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { - newGlobalPolicuRuleClickPerformed(target); - } - - @Override - protected boolean isCreateNewObjectVisible() { - return true; - } + @Override + protected boolean isCreateNewObjectVisible() { + return true; + } - @Override - protected IModel> getContainerModel() { - return GlobalPolicyRuleTabPanel.this.getModel(); - } + @Override + protected IModel> getContainerModel() { + return GlobalPolicyRuleTabPanel.this.getModel(); + } - @Override - protected String getStorageKey() { - return SessionStorage.KEY_OBJECT_POLICIES_TAB; - } + @Override + protected String getStorageKey() { + return SessionStorage.KEY_OBJECT_POLICIES_TAB; + } - @Override - protected TableId getTableId() { - return UserProfileStorage.TableId.OBJECT_POLICIES_TAB_TABLE; } + @Override + protected TableId getTableId() { + return UserProfileStorage.TableId.OBJECT_POLICIES_TAB_TABLE; + } - @Override - protected List, String>> createDefaultColumns() { - return initBasicColumns(); - } + @Override + protected List, String>> createDefaultColumns() { + return initBasicColumns(); + } @Override - protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel( - ListItem> item) { - return GlobalPolicyRuleTabPanel.this.getMultivalueContainerDetailsPanel(item); - } + protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel( + ListItem> item) { + return GlobalPolicyRuleTabPanel.this.getMultivalueContainerDetailsPanel(item); + } - @Override - protected List initSearchableItems( - PrismContainerDefinition containerDef) { - List defs = new ArrayList<>(); + @Override + protected List initSearchableItems( + PrismContainerDefinition containerDef) { + List defs = new ArrayList<>(); - SearchFactory.addSearchPropertyDef(containerDef, ItemPath - .create(GlobalPolicyRuleType.F_FOCUS_SELECTOR, ObjectSelectorType.F_SUBTYPE), defs); - SearchFactory.addSearchRefDef(containerDef, - ItemPath.create(GlobalPolicyRuleType.F_POLICY_CONSTRAINTS, - PolicyConstraintsType.F_EXCLUSION, ExclusionPolicyConstraintType.F_TARGET_REF), defs, AreaCategoryType.POLICY, getPageBase()); + SearchFactory.addSearchPropertyDef(containerDef, ItemPath + .create(GlobalPolicyRuleType.F_FOCUS_SELECTOR, ObjectSelectorType.F_SUBTYPE), defs); + SearchFactory.addSearchRefDef(containerDef, + ItemPath.create(GlobalPolicyRuleType.F_POLICY_CONSTRAINTS, + PolicyConstraintsType.F_EXCLUSION, ExclusionPolicyConstraintType.F_TARGET_REF), defs, AreaCategoryType.POLICY, getPageBase()); - defs.addAll(SearchFactory.createExtensionDefinitionList(containerDef)); + defs.addAll(SearchFactory.createExtensionDefinitionList(containerDef)); - return defs; - } - }; + return defs; + } + }; add(multivalueContainerListPanel); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java index 88de7caef3d..89b63be972b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/configuration/component/ObjectPolicyConfigurationTabPanel.java @@ -84,13 +84,6 @@ protected void initLayout() { MultivalueContainerListPanelWithDetailsPanel multivalueContainerListPanel = new MultivalueContainerListPanelWithDetailsPanel(ID_OBJECTS_POLICY, ObjectPolicyConfigurationType.class) { - private static final long serialVersionUID = 1L; - - @Override - protected void newItemPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) { - newObjectPolicyClickPerformed(target); - } - @Override protected boolean isCreateNewObjectVisible() { return true; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributePanel.java index 76f3e4f5529..4c311467e32 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/ResourceAttributePanel.java @@ -1,38 +1,80 @@ package com.evolveum.midpoint.gui.impl.prism.panel; +import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.component.DisplayNamePanel; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel; +import com.evolveum.midpoint.gui.impl.component.data.column.AbstractItemWrapperColumn; +import com.evolveum.midpoint.gui.impl.component.data.column.PrismPropertyWrapperColumn; +import com.evolveum.midpoint.gui.impl.factory.panel.ItemRealValueModel; import com.evolveum.midpoint.web.session.UserProfileStorage; +import com.evolveum.midpoint.xml.ns._public.common.common_3.GlobalPolicyRuleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; -public class ResourceAttributePanel extends MultivalueContainerListPanelWithDetailsPanel { +import java.util.ArrayList; +import java.util.List; - public ResourceAttributePanel(String id, Class type) { - super(id, type); - } +public class ResourceAttributePanel extends BasePanel> { - @Override - protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel(ListItem> item) { - return null; - } + private static final String ID_TABLE = "table"; - @Override - protected boolean isCreateNewObjectVisible() { - return false; + public ResourceAttributePanel(String id, IModel> model) { + super(id, model); } @Override - protected IModel> getContainerModel() { - return null; + protected void onInitialize() { + super.onInitialize(); + initLayout(); } - @Override - protected UserProfileStorage.TableId getTableId() { - return null; + private void initLayout() { + MultivalueContainerListPanelWithDetailsPanel table = new MultivalueContainerListPanelWithDetailsPanel(ID_TABLE, ResourceAttributeDefinitionType.class) { + + @Override + protected MultivalueContainerDetailsPanel getMultivalueContainerDetailsPanel(ListItem> item) { + return new MultivalueContainerDetailsPanel(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS, item.getModel()) { + + @Override + protected DisplayNamePanel createDisplayNamePanel(String displayNamePanelId) { + ItemRealValueModel displayNameModel = + new ItemRealValueModel<>(item.getModel()); + return new DisplayNamePanel<>(displayNamePanelId, displayNameModel); + } + }; + } + + @Override + protected boolean isCreateNewObjectVisible() { + return true; + } + + @Override + protected IModel> getContainerModel() { + return ResourceAttributePanel.this.getModel(); + } + + @Override + protected UserProfileStorage.TableId getTableId() { + return null; + } + + @Override + protected List, String>> createDefaultColumns() { + List, String>> columns = new ArrayList<>(); + + columns.add(new PrismPropertyWrapperColumn<>(getModel(), ResourceAttributeDefinitionType.F_REF, AbstractItemWrapperColumn.ColumnType.STRING, getPageBase())); + columns.add(new PrismPropertyWrapperColumn<>(getModel(), ResourceAttributeDefinitionType.F_DISPLAY_NAME, AbstractItemWrapperColumn.ColumnType.STRING, getPageBase())); + return columns; + } + }; + add(table); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/SingleContainerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/SingleContainerPanel.java index 502b4d5bae4..53b086acd2d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/SingleContainerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/panel/SingleContainerPanel.java @@ -41,7 +41,7 @@ protected void onInitialize() { initLayout(); } - protected void initLayout() { + private void initLayout() { try { ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder() diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java index 8132261c0c6..81938b98258 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AbstractRoleAssignmentPanel.java @@ -20,7 +20,6 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; -import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; @@ -34,8 +33,6 @@ import com.evolveum.midpoint.prism.query.ObjectQuery; import com.evolveum.midpoint.prism.query.RefFilter; import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.util.QNameUtil; -import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -150,19 +147,4 @@ protected List createSearchableItems(PrismContainerDefinit return defs; } - @Override - protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { - if (QNameUtil.match(PolicyRuleType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(ConstructionType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - return ItemVisibility.AUTO; - } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java index 2de5a43eff0..b732c4e1f86 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java @@ -6,19 +6,14 @@ */ package com.evolveum.midpoint.web.component.assignment; -import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import javax.xml.namespace.QName; -import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; - -import com.evolveum.midpoint.gui.impl.component.data.column.CompositedIconColumn; -import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle; -import com.evolveum.midpoint.web.component.CompositedIconButtonDto; -import com.evolveum.midpoint.web.component.util.SelectableBean; +import com.evolveum.midpoint.gui.impl.component.AssignmentsDetailsPanel; +import com.evolveum.midpoint.web.component.search.Search; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -47,9 +42,11 @@ import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerDetailsPanel; import com.evolveum.midpoint.gui.impl.component.MultivalueContainerListPanelWithDetailsPanel; +import com.evolveum.midpoint.gui.impl.component.data.column.CompositedIconColumn; import com.evolveum.midpoint.gui.impl.component.data.column.PrismContainerWrapperColumn; import com.evolveum.midpoint.gui.impl.component.icon.CompositedIcon; import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder; +import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle; import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettings; import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder; import com.evolveum.midpoint.gui.impl.prism.wrapper.ConstructionValueWrapper; @@ -70,8 +67,11 @@ import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.component.MultiFunctinalButtonDto; -import com.evolveum.midpoint.web.component.data.column.*; +import com.evolveum.midpoint.web.component.CompositedIconButtonDto; +import com.evolveum.midpoint.web.component.data.column.AjaxLinkColumn; +import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn; +import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction; +import com.evolveum.midpoint.web.component.data.column.InlineMenuButtonColumn; import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction; @@ -79,11 +79,15 @@ import com.evolveum.midpoint.web.component.prism.ValueStatus; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; +import com.evolveum.midpoint.web.component.util.AssignmentListProvider; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; +import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.SessionStorage; import com.evolveum.midpoint.web.session.UserProfileStorage; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import org.apache.wicket.model.PropertyModel; + public class AssignmentPanel extends BasePanel> { private static final long serialVersionUID = 1L; @@ -133,11 +137,6 @@ protected void cancelItemDetailsPerformed(AjaxRequestTarget target) { AssignmentPanel.this.cancelAssignmentDetailsPerformed(target); } - @Override - protected ObjectQuery getCustomizeContentQuery() { - return AssignmentPanel.this.getCustomizeQuery(); - } - protected List, String>> createDefaultColumns() { if (AssignmentPanel.this.getModelObject() == null) { return new ArrayList<>(); @@ -160,12 +159,6 @@ protected List createNewButtonDescription() { return newButtonDescription(); } - @Override - protected boolean getNewObjectGenericButtonVisibility() { - AssignmentCandidatesSpecification spec = loadAssignmentHolderSpecification(); - return spec == null || spec.isSupportGenericAssignment(); - } - @Override protected boolean isNewObjectButtonEnabled() { return !isAssignmentsLimitReached(); @@ -189,9 +182,9 @@ protected void deleteItemPerformed(AjaxRequestTarget target, List> postSearch( - List> assignments) { - return customPostSearch(assignments); + protected AssignmentListProvider createProvider() { + PageStorage pageStorage = getPageStorage(getAssignmentsTabStorageKey()); + return createAssignmentProvider(pageStorage, getSearchModel(), loadValuesModel()); } @Override @@ -200,11 +193,6 @@ protected MultivalueContainerDetailsPanel getMultivalueContainer return createMultivalueContainerDetailsPanel(item); } - @Override - protected String getStorageKey() { - return getAssignmentsTabStorageKey(); - } - @Override protected UserProfileStorage.TableId getTableId() { return AssignmentPanel.this.getTableId(); @@ -220,26 +208,6 @@ public void refreshTable(AjaxRequestTarget ajaxRequestTarget) { super.refreshTable(ajaxRequestTarget); AssignmentPanel.this.refreshTable(ajaxRequestTarget); } - - @Override - protected IModel>> loadValuesModel() { - return AssignmentPanel.this.loadValuesModel(super.loadValuesModel()); - } - - @Override - protected void postProcessWrapper(PrismContainerValueWrapper valueWrapper) { - AssignmentType assignmentType = valueWrapper.getRealValue(); - if (assignmentType == null) { - return; - } - ObjectReferenceType targetRef = assignmentType.getTargetRef(); - if (targetRef == null || targetRef.getOid() == null || targetRef.getObject() != null) { - return; - } - - PrismObject object = WebModelServiceUtils.loadObject(targetRef, getPageBase()); - targetRef.asReferenceValue().setObject(object); - } }; multivalueContainerListPanel.add(new VisibleBehaviour(() -> getModel() != null && getModelObject() != null)); add(multivalueContainerListPanel); @@ -247,8 +215,28 @@ protected void postProcessWrapper(PrismContainerValueWrapper val setOutputMarkupId(true); } - protected IModel>> loadValuesModel(IModel>> originalLoadValuesModel) { - return originalLoadValuesModel; + private AssignmentListProvider createAssignmentProvider(PageStorage pageStorage, IModel> searchModel, IModel>> assignments) { + return new AssignmentListProvider(AssignmentPanel.this, searchModel, assignments) { + + @Override + protected PageStorage getPageStorage() { + return pageStorage; + } + + @Override + protected List> postFilter(List> assignmentList) { + return customPostSearch(assignmentList); + } + + @Override + protected ObjectQuery getCustomizeContentQuery() { + return AssignmentPanel.this.getCustomizeQuery(); + } + }; + } + + protected IModel>> loadValuesModel() { + return new PropertyModel<>(getModel(), "values"); } protected void refreshTable(AjaxRequestTarget ajaxRequestTarget) { @@ -542,7 +530,7 @@ protected List, String>> init } private IColumn, String> createAssignmentIconColumn() { - return new CompositedIconColumn>(Model.of("")) { + return new CompositedIconColumn<>(Model.of("")) { @Override protected CompositedIcon getCompositedIcon(IModel> rowModel) { @@ -567,7 +555,7 @@ private IColumn, String> createAssign @Override protected IModel createLinkModel(IModel> rowModel) { - return new LoadableModel() { + return new LoadableModel<>() { @Override protected String load() { LOGGER.trace("Create name for AssignmentType: " + rowModel.getObject().getRealValue()); @@ -745,165 +733,7 @@ private MultivalueContainerDetailsPanel createMultivalueContaine } else if (item.getModelObject().isReadOnly()) { item.getModelObject().setReadOnly(false, true); } - - return new MultivalueContainerDetailsPanel<>(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS, item.getModel()) { - - private static final long serialVersionUID = 1L; - - @Override - protected ItemVisibility getBasicTabVisibity(ItemWrapper itemWrapper) { - return AssignmentPanel.this.getContainerVisibility(itemWrapper); - } - - @Override - protected void addBasicContainerValuePanel(String idPanel) { - add(getBasicContainerPanel(idPanel, item.getModel())); - } - - @Override - protected boolean getBasicTabEditability(ItemWrapper itemWrapper) { - return getContainerReadability(itemWrapper); - } - - @Override - protected DisplayNamePanel createDisplayNamePanel(String displayNamePanelId) { - IModel displayNameModel = getDisplayModel(item.getModelObject().getRealValue()); - return new DisplayNamePanel<>(displayNamePanelId, displayNameModel) { - - private static final long serialVersionUID = 1L; - - @Override - protected QName getRelation() { - return getRelationForDisplayNamePanel(item.getModelObject()); - } - - @Override - protected IModel getKindIntentLabelModel() { - return getKindIntentLabelModelForDisplayNamePanel(item.getModelObject()); - } - - }; - } - - }; - } - - protected Panel getBasicContainerPanel(String idPanel, IModel> model) { - ItemPanelSettings settings = new ItemPanelSettingsBuilder() - .visibilityHandler(this::getContainerVisibility) - .editabilityHandler(this::getContainerReadability) - .build(); - return getPageBase().initContainerValuePanel(idPanel, model, settings); - } - - protected boolean getContainerReadability(ItemWrapper wrapper) { - return true; - } - - protected ItemVisibility getContainerVisibility(ItemWrapper wrapper) { - if (QNameUtil.match(ActivationType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.AUTO; - } - if (QNameUtil.match(MetadataType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.AUTO; - } - - if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())) { - return ItemVisibility.HIDDEN; - } - - if (ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(OrderConstraintsType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentSelectorType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(OtherPrivilegesLimitationType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PolicyExceptionType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentRelationType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(ExtensionType.COMPLEX_TYPE, wrapper.getTypeName())) { - return ItemVisibility.HIDDEN; - } - - ItemPath assignmentConditionPath = ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_CONDITION); - ItemPath inducementConditionPath = ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_CONDITION); - - ItemPath wrapperPath = wrapper.getPath().namedSegmentsOnly(); - if (assignmentConditionPath.isSubPath(wrapperPath) || inducementConditionPath.isSubPath(wrapperPath)) { - ItemPath assignmentConditionExpressionPath = ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_CONDITION, MappingType.F_EXPRESSION); - ItemPath inducementConditionExpressionPath = ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_CONDITION, MappingType.F_EXPRESSION); - if (wrapperPath.equivalent(assignmentConditionExpressionPath) || wrapperPath.equivalent(inducementConditionExpressionPath)) { - return ItemVisibility.AUTO; - } else { - return ItemVisibility.HIDDEN; - } - } - - if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_EXPIRATION_TIMESTAMP).equivalent(wrapper.getPath().namedSegmentsOnly())) { - return ItemVisibility.HIDDEN; - } - - if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_ACTIVATION, ActivationType.F_LOCKOUT_STATUS).equivalent(wrapper.getPath().namedSegmentsOnly())) { - return ItemVisibility.HIDDEN; - } - - return getTypedContainerVisibility(wrapper); - } - - protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { - return ItemVisibility.AUTO; - } - - private QName getRelationForDisplayNamePanel(PrismContainerValueWrapper modelObject) { - AssignmentType assignment = modelObject.getRealValue(); - if (assignment.getTargetRef() != null) { - return assignment.getTargetRef().getRelation(); - } else { - return null; - } - } - - private IModel getKindIntentLabelModelForDisplayNamePanel(PrismContainerValueWrapper modelObject) { - AssignmentType assignment = modelObject.getRealValue(); - if (assignment.getConstruction() != null) { - PrismContainerValueWrapper constructionValue = null; - try { - PrismContainerWrapper construction = modelObject.findContainer(AssignmentType.F_CONSTRUCTION); - if (construction == null) { - return null; - } - constructionValue = construction.getValue(); - } catch (SchemaException e) { - LOGGER.error("Unexpected problem during construction wrapper lookup, {}", e.getMessage(), e); - } - ShadowKindType kind; - String intent; - if (constructionValue instanceof ConstructionValueWrapper) { - kind = ((ConstructionValueWrapper) constructionValue).getKind(); - intent = ((ConstructionValueWrapper) constructionValue).getIntent(); - } else { - kind = assignment.getConstruction().getKind(); - intent = assignment.getConstruction().getIntent(); - } - - return createStringResource("DisplayNamePanel.kindIntentLabel", kind, intent); - } - return Model.of(); + return new AssignmentsDetailsPanel(MultivalueContainerListPanelWithDetailsPanel.ID_ITEM_DETAILS, item.getModel(), isEntitlementAssignment()); } private List mergeNewAssignmentTargetTypeLists(List allowedByAssignmentTargetSpecification, List availableTypesList) { @@ -926,35 +756,6 @@ private List mergeNewAssignmentTargetTypeLists(List allowedB return mergedList; } - @SuppressWarnings("unchecked") - private IModel getDisplayModel(AssignmentType assignment) { - return () -> { - if (assignment.getTargetRef() != null && assignment.getTargetRef().getOid() != null) { - Task task = getPageBase().createSimpleTask("Load target"); - OperationResult result = task.getResult(); - PrismObject targetObject = WebModelServiceUtils.loadObject(assignment.getTargetRef(), getPageBase(), task, result); - return targetObject != null ? (C) targetObject.asObjectable() : null; - } - if (assignment.getConstruction() != null && assignment.getConstruction().getResourceRef() != null) { - if (assignment.getConstruction().getResourceRef().getOid() != null) { - Task task = getPageBase().createSimpleTask("Load resource"); - OperationResult result = task.getResult(); - PrismObject object = WebModelServiceUtils.loadObject(assignment.getConstruction().getResourceRef(), getPageBase(), task, result); - if (object != null) { - return (C) object.asObjectable(); - } - } else { - return (C) assignment.getConstruction(); - } - } else if (assignment.getPersonaConstruction() != null) { - return (C) assignment.getPersonaConstruction(); - } else if (assignment.getPolicyRule() != null) { - return (C) assignment.getPolicyRule(); - } - return null; - }; - } - private List getAssignmentMenuActions() { List menuItems = new ArrayList<>(); PrismObject obj = getMultivalueContainerListPanel().getFocusObject(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java index 7cc73267547..69900cbfbdf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentsUtil.java @@ -42,8 +42,44 @@ */ public class AssignmentsUtil { + public enum AssignmentTypeType { + CONSTRUCTION, ABSTRACT_ROLE, POLICY_RULE, FOCUS_MAPPING, PERSONA_CONSTRUCTION, ASSIGNMENT_RELATION; + } + private static final Trace LOGGER = TraceManager.getTrace(AssignmentsUtil.class); + public static AssignmentTypeType getAssignmentType(PrismContainerValueWrapper assignmentValueWrapper) { + if (assignmentValueWrapper == null) { + return AssignmentTypeType.ABSTRACT_ROLE; + } + return getAssignmentType(assignmentValueWrapper.getRealValue()); + } + + public static AssignmentTypeType getAssignmentType(AssignmentType assignment) { + if (assignment.getConstruction() != null) { + return AssignmentTypeType.CONSTRUCTION; + } + + if (assignment.getPolicyRule() != null) { + return AssignmentTypeType.POLICY_RULE; + } + + if (assignment.getFocusMappings() != null) { + return AssignmentTypeType.FOCUS_MAPPING; + } + + if (assignment.getPersonaConstruction() != null) { + return AssignmentTypeType.PERSONA_CONSTRUCTION; + } + +// if (assignment.getAssignmentRelation() != null) { +// return AssignmentTypeType.ASSIGNMENT_RELATION; +// } + + return AssignmentTypeType.ABSTRACT_ROLE; + + } + public static String createActivationTitleModel(ActivationType activation, String defaultTitle, PageBase basePanel) { if (activation == null) { return defaultTitle; @@ -432,24 +468,22 @@ public static QName getTargetType(AssignmentType assignment) { if (assignment.getConstruction() != null) { return ConstructionType.COMPLEX_TYPE; } - ObjectReferenceType targetRef = assignment.getTargetRef(); - if (targetRef.asReferenceValue().getObject() != null) { - // object assignment - return targetRef.asReferenceValue().getObject().getComplexTypeDefinition().getTypeName(); - } else if (assignment.getTargetRef() != null && assignment.getTargetRef().getType() != null) { - return assignment.getTargetRef().getType(); - } if (assignment.getPolicyRule() != null) { return PolicyRuleType.COMPLEX_TYPE; } - if (assignment.getPersonaConstruction() != null) { return PersonaConstructionType.COMPLEX_TYPE; } if (assignment.getFocusMappings() != null) { return MappingType.COMPLEX_TYPE; } - + ObjectReferenceType targetRef = assignment.getTargetRef(); + if (targetRef != null && targetRef.asReferenceValue().getObject() != null) { + // object assignment + return targetRef.asReferenceValue().getObject().getComplexTypeDefinition().getTypeName(); + } else if (assignment.getTargetRef() != null && assignment.getTargetRef().getType() != null) { + return assignment.getTargetRef().getType(); + } // account assignment through account construction return ConstructionType.COMPLEX_TYPE; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssignmentPanel.java index 5bb93abe718..03d7f1fa07a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssignmentPanel.java @@ -10,24 +10,22 @@ import java.util.List; import javax.xml.namespace.QName; -import com.evolveum.midpoint.prism.query.ObjectFilter; - import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.model.IModel; -import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.gui.impl.component.data.column.AbstractItemWrapperColumn.ColumnType; import com.evolveum.midpoint.gui.impl.component.data.column.PrismPropertyWrapperColumn; -import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.util.QNameUtil; -import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AreaCategoryType; +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.ResourceType; /** * Created by honchar. @@ -66,42 +64,4 @@ protected ObjectQuery getCustomizeQuery() { .exists(AssignmentType.F_CONSTRUCTION).build(); } - @Override - protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { - if (QNameUtil.match(AssignmentType.F_TARGET_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_TENANT_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_ORG_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PolicyRuleType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - return ItemVisibility.AUTO; - } - - @Override - protected boolean getContainerReadability(ItemWrapper wrapper) { - - if (QNameUtil.match(ConstructionType.F_KIND, wrapper.getItemName())) { - return false; - } - - if (QNameUtil.match(ConstructionType.F_INTENT, wrapper.getItemName())) { - return false; - } - - return true; - } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssociationPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssociationPanel.html index 2e5bcaf5a99..eed5a5c50ae 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssociationPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionAssociationPanel.html @@ -17,7 +17,7 @@
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/DirectAndIndirectAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/DirectAndIndirectAssignmentPanel.java index c4d96d33868..adc2f8312d7 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/DirectAndIndirectAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/DirectAndIndirectAssignmentPanel.java @@ -6,6 +6,23 @@ */ package com.evolveum.midpoint.web.component.assignment; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +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.AbstractColumn; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.prism.wrapper.AssignmentValueWrapper; @@ -21,30 +38,8 @@ import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; import com.evolveum.midpoint.web.page.admin.PageAdminFocus; -import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard; -import com.evolveum.midpoint.web.page.admin.roles.PageRole; -import com.evolveum.midpoint.web.page.admin.orgs.PageOrgUnit; -import com.evolveum.midpoint.web.util.OnePageParameterEncoder; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.commons.collections4.CollectionUtils; -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.AbstractColumn; -import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - /** * @author lskublik */ @@ -58,11 +53,11 @@ public DirectAndIndirectAssignmentPanel(String id, IModel>> loadValuesModel(IModel>> originalLoadValuesModel) { + protected IModel>> loadValuesModel() { PageBase pageBase = getPageBase(); if (pageBase instanceof PageAdminFocus) { if (allAssignmentModel == null) { - allAssignmentModel = new LoadableModel>>() { + allAssignmentModel = new LoadableModel<>() { @Override protected List> load() { @@ -72,7 +67,7 @@ protected List> load() { } return allAssignmentModel; } else { - return originalLoadValuesModel; + return super.loadValuesModel(); } } @@ -80,7 +75,7 @@ protected List> load() { protected List, String>> initBasicColumns() { List, String>> columns = new ArrayList<>(); - columns.add(new IconColumn>(Model.of("")) { + columns.add(new IconColumn<>(Model.of("")) { private static final long serialVersionUID = 1L; @@ -122,20 +117,14 @@ protected Component createHeader(String componentId, IModel, String>(createStringResource("DirectAndIndirectAssignmentPanel.column.type")) { + columns.add(new AbstractColumn<>(createStringResource("DirectAndIndirectAssignmentPanel.column.type")) { @Override public void populateItem(Item>> cellItem, String componentId, final IModel> rowModel) { AssignmentValueWrapper object = (AssignmentValueWrapper) rowModel.getObject(); - cellItem.add(new Label(componentId, new IModel() { - - @Override - public String getObject() { - return object.isDirectAssignment() ? - createStringResource("DirectAndIndirectAssignmentPanel.type.direct").getString() : - createStringResource("DirectAndIndirectAssignmentPanel.type.indirect").getString(); - } - })); + cellItem.add(new Label(componentId, (IModel) () -> object.isDirectAssignment() ? + createStringResource("DirectAndIndirectAssignmentPanel.type.direct").getString() : + createStringResource("DirectAndIndirectAssignmentPanel.type.indirect").getString())); ObjectType assignmentParent = object.getAssignmentParent(); if (assignmentParent != null) { cellItem.add(AttributeModifier.replace("title", @@ -159,7 +148,7 @@ protected boolean isHelpTextVisible(boolean helpTextVisible) { columns.add(new PrismPropertyWrapperColumn(getModel(), ItemPath.create(AssignmentType.F_CONSTRUCTION, ConstructionType.F_KIND), ColumnType.STRING, getPageBase())); columns.add(new PrismPropertyWrapperColumn(getModel(), ItemPath.create(AssignmentType.F_CONSTRUCTION, ConstructionType.F_INTENT), ColumnType.STRING, getPageBase())); - columns.add(new AbstractColumn, String>( + columns.add(new AbstractColumn<>( createStringResource("AbstractRoleAssignmentPanel.relationLabel")) { @Override public void populateItem(Item>> item, String componentId, IModel> assignmentModel) { @@ -174,21 +163,6 @@ public String getCssClass() { return columns; } - private void chooseOperationPerformed(String oid, Class clazz){ - PageParameters parameters = new PageParameters(); - parameters.add(OnePageParameterEncoder.PARAMETER, oid); - - PageBase page = getPageBase(); - - if(clazz.equals(RoleType.class)){ - page.navigateToNext(PageRole.class, parameters); - } else if(clazz.equals(ResourceType.class)){ - page.navigateToNext(PageResourceWizard.class, parameters); - } else if(clazz.equals(OrgType.class)){ - page.navigateToNext(PageOrgUnit.class, parameters); - } - } - @Override protected List createSearchableItems(PrismContainerDefinition containerDef) { List defs = new ArrayList<>(); @@ -204,4 +178,5 @@ protected void refreshTable(AjaxRequestTarget ajaxRequestTarget) { super.refreshTable(ajaxRequestTarget); } + } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/FocusMappingsAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/FocusMappingsAssignmentPanel.java index f538a28c27f..5b496828c41 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/FocusMappingsAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/FocusMappingsAssignmentPanel.java @@ -9,20 +9,17 @@ import java.util.ArrayList; import java.util.List; -import com.evolveum.midpoint.prism.query.ObjectFilter; - import org.apache.wicket.model.IModel; -import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectQuery; -import com.evolveum.midpoint.util.QNameUtil; -import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingsType; public class FocusMappingsAssignmentPanel extends AssignmentPanel { private static final long serialVersionUID = 1L; @@ -49,34 +46,4 @@ protected ObjectQuery getCustomizeQuery() { return getParentPage().getPrismContext().queryFor(AssignmentType.class) .exists(AssignmentType.F_FOCUS_MAPPINGS).build(); } - - @Override - protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { - if (QNameUtil.match(AssignmentType.F_TARGET_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_TENANT_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_ORG_REF, wrapper.getItemName())) { - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PolicyRuleType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(ConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - return ItemVisibility.AUTO; - } - } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java index f0f26b61c7c..baa341788c6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GdprAssignmentPanel.java @@ -42,7 +42,7 @@ protected List, String>> init columns.add(new PrismPropertyWrapperColumn(getModel(), AssignmentType.F_LIFECYCLE_STATE, ColumnType.STRING, getPageBase())); - columns.add(new CheckBoxColumn>(createStringResource("AssignmentType.accepted")) { + columns.add(new CheckBoxColumn<>(createStringResource("AssignmentType.accepted")) { private static final long serialVersionUID = 1L; @@ -53,7 +53,7 @@ protected IModel getEnabled(IModel getCheckBoxValueModel(IModel> rowModel) { - return new IModel() { + return new IModel<>() { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GenericAbstractRoleAssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GenericAbstractRoleAssignmentPanel.java index f53b98bd4ba..1bd8ad2a65e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GenericAbstractRoleAssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/GenericAbstractRoleAssignmentPanel.java @@ -64,7 +64,7 @@ protected List> customPostSearch(List } protected ObjectFilter getSubtypeFilter(){ - ObjectFilter filter = getPageBase().getPrismContext().queryFor(OrgType.class) + return getPageBase().getPrismContext().queryFor(OrgType.class) .block() .item(OrgType.F_SUBTYPE) .contains("access") @@ -73,7 +73,6 @@ protected ObjectFilter getSubtypeFilter(){ .contains("access") .endBlock() .buildFilter(); - return filter; } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java index c358102d043..87ee08eb99f 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/InducedEntitlementsPanel.java @@ -160,7 +160,7 @@ protected List, String>> init columns.add(new PrismContainerWrapperColumn<>(getModel(), ItemPath.create(AssignmentType.F_CONSTRUCTION, ConstructionType.F_ASSOCIATION), getPageBase())); - columns.add(new AbstractColumn, String>(createStringResource("InducedEntitlements.value")) { + columns.add(new AbstractColumn<>(createStringResource("InducedEntitlements.value")) { private static final long serialVersionUID = 1L; @Override @@ -173,7 +173,7 @@ public void populateItem(Item valuesPanel = new MultiValueChoosePanel(componentId, + MultiValueChoosePanel valuesPanel = new MultiValueChoosePanel<>(componentId, Model.ofList(shadowsList), Collections.singletonList(ShadowType.class), false) { private static final long serialVersionUID = 1L; @@ -224,10 +224,10 @@ protected ObjectQuery getCustomizeQuery() { .build(); } - @Override - protected Panel getBasicContainerPanel(String idPanel, IModel> model) { - return getConstructionAssociationPanel(idPanel, model); - } +// @Override +// protected Panel getBasicContainerPanel(String idPanel, IModel> model) { +// return getConstructionAssociationPanel(idPanel, model); +// } private ConstructionAssociationPanel getConstructionAssociationPanel(String idPanel, IModel> model) { IModel> constructionModel = PrismContainerWrapperModel.fromContainerValueWrapper(model, AssignmentType.F_CONSTRUCTION); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java index a4deb0f05e2..c92aa77250a 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/PolicyRulesPanel.java @@ -10,29 +10,23 @@ import java.util.Collections; import java.util.List; -import com.evolveum.midpoint.prism.query.ObjectFilter; -import com.evolveum.midpoint.web.session.SessionStorage; - import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.model.IModel; -import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper; +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper; import com.evolveum.midpoint.gui.impl.component.data.column.AbstractItemWrapperColumn.ColumnType; import com.evolveum.midpoint.gui.impl.component.data.column.PrismContainerWrapperColumn; import com.evolveum.midpoint.gui.impl.component.data.column.PrismPropertyWrapperColumn; -import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; import com.evolveum.midpoint.model.api.AssignmentObjectRelation; import com.evolveum.midpoint.prism.PrismContainerDefinition; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectQuery; -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; -import com.evolveum.midpoint.web.component.prism.ItemVisibility; import com.evolveum.midpoint.web.component.search.SearchFactory; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; import com.evolveum.midpoint.web.session.UserProfileStorage; @@ -120,31 +114,31 @@ protected List createSearchableItems(PrismContainerDefinit return defs; } - @Override - protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { - if (QNameUtil.match(ConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_ORG_REF, wrapper.getItemName())){ - return ItemVisibility.HIDDEN; - } - - if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())){ - return ItemVisibility.HIDDEN; - } - - if (ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())){ - return ItemVisibility.HIDDEN; - } - - if (QNameUtil.match(AssignmentType.F_TENANT_REF, wrapper.getItemName())){ - return ItemVisibility.HIDDEN; - } - return ItemVisibility.AUTO; - } +// @Override +// protected ItemVisibility getTypedContainerVisibility(ItemWrapper wrapper) { +// if (QNameUtil.match(ConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ +// return ItemVisibility.HIDDEN; +// } +// +// if (QNameUtil.match(PersonaConstructionType.COMPLEX_TYPE, wrapper.getTypeName())){ +// return ItemVisibility.HIDDEN; +// } +// +// if (QNameUtil.match(AssignmentType.F_ORG_REF, wrapper.getItemName())){ +// return ItemVisibility.HIDDEN; +// } +// +// if (ItemPath.create(AssignmentHolderType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())){ +// return ItemVisibility.HIDDEN; +// } +// +// if (ItemPath.create(AbstractRoleType.F_INDUCEMENT, AssignmentType.F_TARGET_REF).equivalent(wrapper.getPath().namedSegmentsOnly())){ +// return ItemVisibility.HIDDEN; +// } +// +// if (QNameUtil.match(AssignmentType.F_TENANT_REF, wrapper.getItemName())){ +// return ItemVisibility.HIDDEN; +// } +// return ItemVisibility.AUTO; +// } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/FocusProjectionsTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/FocusProjectionsTabPanel.java index dcea74a538d..421bbf2172c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/FocusProjectionsTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/objectdetails/FocusProjectionsTabPanel.java @@ -11,12 +11,15 @@ import java.util.List; import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; import com.evolveum.midpoint.gui.api.model.ReadOnlyModel; -import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.util.DisplayableValue; +import com.evolveum.midpoint.web.component.data.ISelectableDataProvider; import com.evolveum.midpoint.web.component.search.*; +import com.evolveum.midpoint.web.component.util.ProjectionsListProvider; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; +import com.evolveum.midpoint.web.session.PageStorage; import com.evolveum.midpoint.web.session.SessionStorage; import org.apache.commons.lang3.BooleanUtils; @@ -24,6 +27,7 @@ import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListItem; @@ -128,21 +132,17 @@ private void initLayout() { private static final long serialVersionUID = 1L; @Override - protected IModel>> loadValuesModel() { - return new IModel>>() { - - private static final long serialVersionUID = 1L; - + protected ISelectableDataProvider> createProvider() { + return new ProjectionsListProvider(FocusProjectionsTabPanel.this, getSearchModel(), loadShadowModel()) { @Override - public List> getObject() { - List> items = new ArrayList<>(); - for (ShadowWrapper projection : projectionModel.getObject()) { - items.add(projection.getValue()); + protected PageStorage getPageStorage() { + PageStorage storage = getSession().getSessionStorage().getPageStorageMap().get(SessionStorage.KEY_FOCUS_PROJECTION_TABLE); + if (storage == null) { + storage = getSession().getSessionStorage().initPageStorage(SessionStorage.KEY_FOCUS_PROJECTION_TABLE); } - return items; + return storage; } }; - } @Override @@ -180,10 +180,6 @@ protected IModel> getContainerModel() { return null; } - @Override - protected String getStorageKey() { - return SessionStorage.KEY_FOCUS_PROJECTION_TABLE; - } @Override protected TableId getTableId() { @@ -244,6 +240,20 @@ protected MultivalueContainerDetailsPanel getMultivalueContainerDeta setOutputMarkupId(true); } + private IModel>> loadShadowModel() { + return new IModel>>() { + + @Override + public List> getObject() { + List> items = new ArrayList<>(); + for (ShadowWrapper projection : projectionModel.getObject()) { + items.add(projection.getValue()); + } + return items; + } + }; + } + private int countDeadShadows() { if (projectionModel == null) { return 0; @@ -328,9 +338,15 @@ public ShadowType getObject() { } @Override - protected void addBasicContainerValuePanel(String idPanel) { - ShadowPanel shadowPanel = new ShadowPanel(idPanel, getParentModel(getModel())); - add(shadowPanel); + protected AbstractTab addBasicContainerValuePanel() { + return new PanelTab(createStringResource("ShadowType.basic")) { + @Override + public WebMarkupContainer createPanel(String panelId) { + ShadowPanel shadowPanel = new ShadowPanel(panelId, getParentModel(getModel())); + return shadowPanel; + } + }; + // add(new WebMarkupContainer(idPanel)); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/AssignmentListProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/AssignmentListProvider.java new file mode 100644 index 00000000000..de096b73b02 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/AssignmentListProvider.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.web.component.util; + +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; +import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; +import com.evolveum.midpoint.prism.PrismObject; +import com.evolveum.midpoint.util.exception.SchemaException; +import com.evolveum.midpoint.web.component.search.Search; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; + +import org.apache.wicket.Component; +import org.apache.wicket.model.IModel; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class AssignmentListProvider extends MultivalueContainerListDataProvider { + + public AssignmentListProvider(Component component, @NotNull IModel> search, IModel>> model) { + super(component, search, model); + } + + @Override + protected List> searchThroughList() { + List> filteredList = super.searchThroughList(); + return postFilter(filteredList); + } + + protected List> postFilter(List> assignmentList) { + return assignmentList; + } + + @Override + protected void postProcessWrapper(PrismContainerValueWrapper valueWrapper) { + AssignmentType assignmentType = valueWrapper.getRealValue(); + if (assignmentType == null) { + return; + } + ObjectReferenceType targetRef = assignmentType.getTargetRef(); + if (targetRef == null || targetRef.getOid() == null || targetRef.getObject() != null) { + return; + } + + PrismObject object = WebModelServiceUtils.loadObject(targetRef, getPageBase()); + targetRef.asReferenceValue().setObject(object); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/MultivalueContainerListDataProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/MultivalueContainerListDataProvider.java index cbd256b6d81..3c85f68aea2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/MultivalueContainerListDataProvider.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/MultivalueContainerListDataProvider.java @@ -133,15 +133,13 @@ protected List> searchThroughList() { return list; } - List> filtered = list.stream().filter(a -> { + List> filtered = list.stream().filter(valueWrapper -> { try { - return ObjectQuery.match(a.getRealValue(), getQuery().getFilter(), getPageBase().getMatchingRuleRegistry()); + return ObjectQuery.match(valueWrapper.getRealValue(), getQuery().getFilter(), getPageBase().getMatchingRuleRegistry()); } catch (SchemaException e) { throw new TunnelException(e.getMessage()); } }).collect(Collectors.toList()); return filtered; - } - } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/ProjectionsListProvider.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/ProjectionsListProvider.java new file mode 100644 index 00000000000..c40d2050a66 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/util/ProjectionsListProvider.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2021 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.web.component.util; + +import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper; +import com.evolveum.midpoint.web.component.search.Search; +import com.evolveum.midpoint.web.session.PageStorage; +import com.evolveum.midpoint.web.session.SessionStorage; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; + +import org.apache.wicket.Component; +import org.apache.wicket.model.IModel; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class ProjectionsListProvider extends MultivalueContainerListDataProvider { + + public ProjectionsListProvider(Component component, @NotNull IModel> search, IModel>> model) { + super(component, search, model); + } + +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java index 2f3a2d2f421..cfc8bf6c82c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java @@ -12,6 +12,7 @@ import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; +import org.apache.wicket.extensions.markup.html.tabs.AbstractTab; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -171,13 +172,13 @@ protected IModel getDescriptionLabelModel() { }; } - @Override - protected void addBasicContainerValuePanel(String idPanel) { - //todo fix implement with WorkItemDetailsPanelFactory - workItemDetails = new WorkItemDetailsPanel(idPanel, Model.of(item.getModel().getObject().getRealValue())); - workItemDetails.setOutputMarkupId(true); - add(workItemDetails); - } +// @Override +// protected AbstractTab addBasicContainerValuePanel(String idPanel) { +// //todo fix implement with WorkItemDetailsPanelFactory +// workItemDetails = new WorkItemDetailsPanel(idPanel, Model.of(item.getModel().getObject().getRealValue())); +// workItemDetails.setOutputMarkupId(true); +// add(workItemDetails); +// } }; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java index c590fdf2a4d..0a8735c7eaf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java @@ -15,6 +15,7 @@ import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel;