diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java index 2ea65adb2f2..2828f5abba9 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AbstractAssignmentPopupTabPanel.java @@ -39,7 +39,7 @@ /** * Created by honchar. */ -public abstract class AbstractAssignmentPopupTabPanel extends BasePanel> { +public abstract class AbstractAssignmentPopupTabPanel extends BasePanel { private static final long serialVersionUID = 1L; @@ -51,8 +51,8 @@ public abstract class AbstractAssignmentPopupTabPanel exte private ObjectTypes type; - public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type, IModel> selectedObjectsList){ - super(id, selectedObjectsList); + public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type){ + super(id); this.type = type; } @@ -64,8 +64,7 @@ protected void onInitialize(){ } private PopupObjectListPanel initObjectListPanel(){ - PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), null, true, - getPageBase(), getModelObject()) { + PopupObjectListPanel listPanel = new PopupObjectListPanel(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), true, getPageBase()) { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java index 179716abe88..71dc00ea89d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java @@ -3,10 +3,13 @@ import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.TabbedPanel; import com.evolveum.midpoint.web.component.dialog.Popupable; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +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 com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; import org.apache.wicket.Component; @@ -34,6 +37,13 @@ public class AssignmentPopup extends BasePanel implements private static final String ID_ASSIGN_BUTTON = "assignButton"; private static final String ID_FORM = "form"; + private FocusTypeAssignmentPopupTabPanel rolesTabPanel; + private FocusTypeAssignmentPopupTabPanel orgsTabPanel; + private FocusTypeAssignmentPopupTabPanel servicesTabPanel; + private FocusTypeAssignmentPopupTabPanel usersTabPanel; + private FocusTypeAssignmentPopupTabPanel resourcesTabPanel; + + public AssignmentPopup(String id){ super(id); } @@ -71,7 +81,38 @@ public void onClick(AjaxRequestTarget target) { @Override public void onClick(AjaxRequestTarget target) { - addPerformed(target); + List newAssignmentsList = new ArrayList<>(); + if (rolesTabPanel != null){ + List selectedRoles = rolesTabPanel.getSelectedObjectsList(); + QName relation = rolesTabPanel.getRelationValue(); + selectedRoles.forEach(selectedRole -> { + ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(selectedRole, relation); + AssignmentType newAssignment = new AssignmentType(); + newAssignment.setTargetRef(ref); + newAssignmentsList.add(newAssignment); + }); + } + if (orgsTabPanel != null){ + List selectedOrgs = orgsTabPanel.getSelectedObjectsList(); + QName relation = orgsTabPanel.getRelationValue(); + selectedOrgs.forEach(selectedOrg -> { + ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(selectedOrg, relation); + AssignmentType newAssignment = new AssignmentType(); + newAssignment.setTargetRef(ref); + newAssignmentsList.add(newAssignment); + }); + } + if (servicesTabPanel != null){ + List selectedServices = servicesTabPanel.getSelectedObjectsList(); + QName relation = servicesTabPanel.getRelationValue(); + selectedServices.forEach(selectedService -> { + ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(selectedService, relation); + AssignmentType newAssignment = new AssignmentType(); + newAssignment.setTargetRef(ref); + newAssignmentsList.add(newAssignment); + }); + } + addPerformed(target, newAssignmentsList); } }; @@ -84,32 +125,13 @@ private List createAssignmentTabs() { VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){ }; - - List selectedRoles = new ArrayList<>(); - IModel> selectedRolesModel = new IModel>() { - @Override - public List getObject() { - return selectedRoles; - } - - @Override - public void setObject(List os) { - selectedRoles.clear(); - selectedRoles.addAll(os); - } - - @Override - public void detach() { - - } - }; tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"), authorization) { private static final long serialVersionUID = 1L; @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ROLE, selectedRolesModel){ + rolesTabPanel = new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ROLE){ private static final long serialVersionUID = 1L; @Override @@ -117,12 +139,15 @@ protected void onSelectionPerformed(AjaxRequestTarget target){ tabLabelPanelUpdate(target); } }; + return rolesTabPanel; } @Override public String getCount() { - List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); - return Integer.toString(selectedObjectsList.size()); + if (rolesTabPanel == null){ + return "0"; + } + return Integer.toString(rolesTabPanel.getObjectListPanel().getSelectedObjectsCount()); } }); @@ -133,7 +158,7 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG, Model.ofList(new ArrayList<>())){ + orgsTabPanel = new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.ORG){ private static final long serialVersionUID = 1L; @Override @@ -142,12 +167,15 @@ protected void onSelectionPerformed(AjaxRequestTarget target){ } }; + return orgsTabPanel; } @Override public String getCount() { - List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); - return Integer.toString(selectedObjectsList.size()); + if (orgsTabPanel == null){ + return "0"; + } + return Integer.toString(orgsTabPanel.getObjectListPanel().getSelectedObjectsCount()); } }); @@ -158,7 +186,7 @@ public String getCount() { @Override public WebMarkupContainer createPanel(String panelId) { - return new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.SERVICE, Model.ofList(new ArrayList<>())){ + servicesTabPanel = new FocusTypeAssignmentPopupTabPanel(panelId, ObjectTypes.SERVICE){ private static final long serialVersionUID = 1L; @Override @@ -167,12 +195,15 @@ protected void onSelectionPerformed(AjaxRequestTarget target){ } }; + return servicesTabPanel; } @Override public String getCount() { - List selectedObjectsList = ((FocusTypeAssignmentPopupTabPanel)this.getPanel()).getObjectListPanel().getSelectedObjects(); - return Integer.toString(selectedObjectsList.size()); + if (servicesTabPanel == null){ + return "0"; + } + return Integer.toString(servicesTabPanel.getObjectListPanel().getSelectedObjectsCount()); } }); @@ -209,7 +240,7 @@ private void tabLabelPanelUpdate(AjaxRequestTarget target){ target.add(getTabbedPanel()); } - protected void addPerformed(AjaxRequestTarget target) { + protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { getPageBase().hideMainPopup(target); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java index eec6318a5df..4197c319b25 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/FocusTypeAssignmentPopupTabPanel.java @@ -17,6 +17,7 @@ import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.schema.constants.ObjectTypes; +import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.assignment.RelationTypes; @@ -27,6 +28,7 @@ import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; +import javax.xml.namespace.QName; import java.util.List; /** @@ -42,8 +44,8 @@ public class FocusTypeAssignmentPopupTabPanel extends Abstr private static final String DOT_CLASS = FocusTypeAssignmentPopupTabPanel.class.getName(); private static final Trace LOGGER = TraceManager.getTrace(FocusTypeAssignmentPopupTabPanel.class); - public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type, IModel> selectedObjectsList){ - super(id, type, selectedObjectsList); + public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type){ + super(id, type); } @Override @@ -60,4 +62,17 @@ protected void initParametersPanel(){ relationSelector.setOutputMarkupPlaceholderTag(true); relationContainer.add(relationSelector); } + + private DropDownChoicePanel getRelationDropDown(){ + return (DropDownChoicePanel)get(ID_RELATION_CONTAINER).get(ID_RELATION); + } + + public QName getRelationValue(){ + DropDownChoicePanel relationPanel = getRelationDropDown(); + RelationTypes relation = relationPanel.getModel().getObject(); + if (relation == null) { + return SchemaConstants.ORG_DEFAULT; + } + return relation.getRelation(); + } } 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 b4d81830798..4504a5be856 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 @@ -168,15 +168,14 @@ protected void showAllAssignments(AjaxRequestTarget target) { @Override protected void newAssignmentClickPerformed(AjaxRequestTarget target) { - AssignmentPopup popupPanel = new AssignmentPopup( - getPageBase().getMainPopupBodyId()) { + AssignmentPopup popupPanel = new AssignmentPopup(getPageBase().getMainPopupBodyId()) { private static final long serialVersionUID = 1L; @Override - protected void addPerformed(AjaxRequestTarget target, List selected, QName relation, ShadowKindType kind, String intent) { - super.addPerformed(target, selected, relation, kind, intent); - addSelectedAssignmentsPerformed(target, selected, relation, kind, intent); + protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { + super.addPerformed(target, newAssignmentsList); + addSelectedAssignmentsPerformed(target, newAssignmentsList); } // @Override @@ -193,30 +192,28 @@ protected Class getDefaultNewAssignmentFocusType(){ return RoleType.class; } - protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, QName relation, - ShadowKindType kind, String intent){ - if (assignmentsList == null || assignmentsList.isEmpty()){ + protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List newAssignmentsList){ + if (newAssignmentsList == null || newAssignmentsList.isEmpty()){ warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected")); target.add(getPageBase().getFeedbackPanel()); return; } - for (T object : assignmentsList){ + newAssignmentsList.forEach(assignment -> { PrismContainerDefinition definition = getModelObject().getItem().getDefinition(); PrismContainerValue newAssignment; try { newAssignment = definition.instantiate().createNewValue(); - ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, relation); AssignmentType assignmentType = newAssignment.asContainerable(); - if (ResourceType.class.equals(object.getClass())) { - ConstructionType constructionType = new ConstructionType(); - constructionType.setResourceRef(ref); - constructionType.setKind(kind); - constructionType.setIntent(intent); - assignmentType.setConstruction(constructionType); - } else { - assignmentType.setTargetRef(ref); - } +// if (ResourceType.class.equals(object.getClass())) { +// ConstructionType constructionType = new ConstructionType(); +// constructionType.setResourceRef(ref); +// constructionType.setKind(kind); +// constructionType.setIntent(intent); +// assignmentType.setConstruction(constructionType); +// } else { + assignmentType.setTargetRef(assignment.getTargetRef()); +// } createNewAssignmentContainerValueWrapper(newAssignment); refreshTable(target); reloadSavePreviewButtons(target); @@ -226,7 +223,7 @@ protected void addSelectedAssignmentsPerformed(AjaxReques target.add(this); } - } + }); } 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 2fe4d6b7e4f..d10703992d8 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 @@ -100,11 +100,11 @@ protected boolean isRelationVisible() { return false; } - @Override - protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, - QName relation, ShadowKindType kind, String intent) { - super.addSelectedAssignmentsPerformed(target, assignmentsList, SchemaConstants.ORG_CONSENT, kind, intent); - } +// @Override +// protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List assignmentsList, +// QName relation, ShadowKindType kind, String intent) { +// super.addSelectedAssignmentsPerformed(target, assignmentsList, SchemaConstants.ORG_CONSENT, kind, intent); +// } protected ObjectQuery createObjectQuery() { return QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext())