Skip to content

Commit

Permalink
new assignment popup panel (AbstractRoleType tabs)
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jun 20, 2018
1 parent 21135b6 commit 4d96108
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 62 deletions.
Expand Up @@ -39,7 +39,7 @@
/**
* Created by honchar.
*/
public abstract class AbstractAssignmentPopupTabPanel<O extends ObjectType> extends BasePanel<List<O>> {
public abstract class AbstractAssignmentPopupTabPanel<O extends ObjectType> extends BasePanel {

private static final long serialVersionUID = 1L;

Expand All @@ -51,8 +51,8 @@ public abstract class AbstractAssignmentPopupTabPanel<O extends ObjectType> exte

private ObjectTypes type;

public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type, IModel<List<O>> selectedObjectsList){
super(id, selectedObjectsList);
public AbstractAssignmentPopupTabPanel(String id, ObjectTypes type){
super(id);
this.type = type;
}

Expand All @@ -64,8 +64,7 @@ protected void onInitialize(){
}

private PopupObjectListPanel initObjectListPanel(){
PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), null, true,
getPageBase(), getModelObject()) {
PopupObjectListPanel<O> listPanel = new PopupObjectListPanel<O>(ID_OBJECT_LIST_PANEL, (Class)type.getClassDefinition(), true, getPageBase()) {

private static final long serialVersionUID = 1L;

Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -34,6 +37,13 @@ public class AssignmentPopup<O extends ObjectType> 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);
}
Expand Down Expand Up @@ -71,7 +81,38 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void onClick(AjaxRequestTarget target) {
addPerformed(target);
List<AssignmentType> newAssignmentsList = new ArrayList<>();
if (rolesTabPanel != null){
List<O> 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<O> 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<O> 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);

}
};
Expand All @@ -84,45 +125,29 @@ private List<ITab> createAssignmentTabs() {
VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){
};


List<O> selectedRoles = new ArrayList<>();
IModel<List<O>> selectedRolesModel = new IModel<List<O>>() {
@Override
public List<O> getObject() {
return selectedRoles;
}

@Override
public void setObject(List<O> 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
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());
}
});

Expand All @@ -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
Expand All @@ -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());
}
});

Expand All @@ -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
Expand All @@ -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());
}
});

Expand Down Expand Up @@ -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);
}

Expand Down
Expand Up @@ -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;
Expand All @@ -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;

/**
Expand All @@ -42,8 +44,8 @@ public class FocusTypeAssignmentPopupTabPanel<F extends FocusType> 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<List<F>> selectedObjectsList){
super(id, type, selectedObjectsList);
public FocusTypeAssignmentPopupTabPanel(String id, ObjectTypes type){
super(id, type);
}

@Override
Expand All @@ -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<RelationTypes> relationPanel = getRelationDropDown();
RelationTypes relation = relationPanel.getModel().getObject();
if (relation == null) {
return SchemaConstants.ORG_DEFAULT;
}
return relation.getRelation();
}
}
Expand Up @@ -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
Expand All @@ -193,30 +192,28 @@ protected Class getDefaultNewAssignmentFocusType(){
return RoleType.class;
}

protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList, QName relation,
ShadowKindType kind, String intent){
if (assignmentsList == null || assignmentsList.isEmpty()){
protected void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<AssignmentType> 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<AssignmentType> definition = getModelObject().getItem().getDefinition();
PrismContainerValue<AssignmentType> 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);
Expand All @@ -226,7 +223,7 @@ protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxReques
target.add(this);
}

}
});


}
Expand Down
Expand Up @@ -100,11 +100,11 @@ protected boolean isRelationVisible() {
return false;
}

@Override
protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList,
QName relation, ShadowKindType kind, String intent) {
super.addSelectedAssignmentsPerformed(target, assignmentsList, SchemaConstants.ORG_CONSENT, kind, intent);
}
// @Override
// protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> 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())
Expand Down

0 comments on commit 4d96108

Please sign in to comment.