Skip to content

Commit

Permalink
relation support for members popup panel
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jul 12, 2018
1 parent af19910 commit 310f3ae
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 41 deletions.
Expand Up @@ -43,6 +43,7 @@

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
Expand All @@ -59,9 +60,11 @@ public abstract class ChooseMemberPopup<O extends ObjectType, T extends Abstract
private static final String ID_FORM = "form";

private List<OrgType> selectedOrgsList = new ArrayList<>();
private List<RelationTypes> availableRelationList;

public ChooseMemberPopup(String id, List<RelationTypes> availableRelationList){
super(id);
this.availableRelationList = availableRelationList;
}

@Override
Expand Down Expand Up @@ -126,7 +129,7 @@ protected List<ITab> createAssignmentTabs() {

@Override
public WebMarkupContainer createPanel(String panelId) {
return new MemberPopupTabPanel(panelId, ObjectTypes.ROLE){
return new MemberPopupTabPanel(panelId, ObjectTypes.ROLE, availableRelationList){
private static final long serialVersionUID = 1L;

@Override
Expand Down Expand Up @@ -154,7 +157,7 @@ public String getCount() {

@Override
public WebMarkupContainer createPanel(String panelId) {
return new MemberPopupTabPanel(panelId, ObjectTypes.ORG){
return new MemberPopupTabPanel(panelId, ObjectTypes.ORG, availableRelationList){
private static final long serialVersionUID = 1L;

@Override
Expand Down Expand Up @@ -188,7 +191,7 @@ public String getCount() {

@Override
public WebMarkupContainer createPanel(String panelId) {
return new OrgTreeMemberPopupTabPanel(panelId){
return new OrgTreeMemberPopupTabPanel(panelId, availableRelationList){
private static final long serialVersionUID = 1L;

@Override
Expand Down Expand Up @@ -221,7 +224,7 @@ public String getCount() {

@Override
public WebMarkupContainer createPanel(String panelId) {
return new MemberPopupTabPanel(panelId, ObjectTypes.SERVICE){
return new MemberPopupTabPanel(panelId, ObjectTypes.SERVICE, availableRelationList){
private static final long serialVersionUID = 1L;

@Override
Expand Down
Expand Up @@ -27,13 +27,17 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.component.wizard.resource.component.schemahandling.modal.LimitationsEditorDialog;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.web.page.admin.roles.RoleMemberPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.collections.CollectionUtils;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.Model;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.List;

/**
* Created by honchar
Expand All @@ -47,9 +51,11 @@ public abstract class MemberPopupTabPanel<O extends ObjectType> extends Abstract
private static final String ID_RELATION = "relation";

private PageBase pageBase;
private List<RelationTypes> availableRelationList = new ArrayList<>();

public MemberPopupTabPanel(String id, ObjectTypes type){
public MemberPopupTabPanel(String id, ObjectTypes type, List<RelationTypes> availableRelationList){
super(id, type);
this.availableRelationList = availableRelationList;
}

@Override
Expand All @@ -62,17 +68,34 @@ protected void onInitialize(){
protected void initParametersPanel(){
WebMarkupContainer relationContainer = new WebMarkupContainer(ID_RELATION_CONTAINER);
relationContainer.setOutputMarkupId(true);
relationContainer.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible(){
return CollectionUtils.isNotEmpty(availableRelationList);
}

@Override
public boolean isEnabled(){
return CollectionUtils.isNotEmpty(availableRelationList) && availableRelationList.size() > 1;
}
});
add(relationContainer);

DropDownChoicePanel<RelationTypes> relationSelector = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION,
WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class), Model.of(RelationTypes.MEMBER),
MemberPopupTabPanel.this, false);
DropDownChoicePanel<RelationTypes> relationSelector = new DropDownChoicePanel<RelationTypes> (ID_RELATION,
Model.of(getDefaultRelationValue()), Model.ofList(availableRelationList),
WebComponentUtil.getEnumChoiceRenderer(MemberPopupTabPanel.this), false);
relationSelector.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
relationSelector.setOutputMarkupId(true);
relationSelector.setOutputMarkupPlaceholderTag(true);
relationContainer.add(relationSelector);
}

private RelationTypes getDefaultRelationValue(){
return CollectionUtils.isNotEmpty(availableRelationList) ? availableRelationList.get(0) : RelationTypes.MEMBER;
}

protected ObjectDelta prepareDelta(){
ObjectDelta delta = null;
try {
Expand Down
Expand Up @@ -16,13 +16,15 @@
package com.evolveum.midpoint.gui.api.component;

import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.orgs.OrgTreeAssignablePanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

Expand All @@ -34,8 +36,8 @@ public abstract class OrgTreeMemberPopupTabPanel extends MemberPopupTabPanel<Org

private static final String ID_ORG_TREE_VIEW_PANEL = "orgTreeViewPanel";

public OrgTreeMemberPopupTabPanel(String id){
super(id, ObjectTypes.ORG);
public OrgTreeMemberPopupTabPanel(String id, List<RelationTypes> availableRelationList){
super(id, ObjectTypes.ORG, availableRelationList);
}

@Override
Expand Down
Expand Up @@ -789,29 +789,8 @@ public static <E extends Enum> DropDownChoicePanel<E> createEnumPanel(Class<E> c

public static <E extends Enum> DropDownChoicePanel<E> createEnumPanel(Class<E> clazz, String id,
IModel<List<E>> choicesList, final IModel<E> model, final Component component, boolean allowNull, String nullValidDisplayValue) {
return new DropDownChoicePanel<E>(id, model, choicesList,
new IChoiceRenderer<E>() {

private static final long serialVersionUID = 1L;

@Override
public E getObject(String id, IModel<? extends List<? extends E>> choices) {
if (StringUtils.isBlank(id)) {
return null;
}
return choices.getObject().get(Integer.parseInt(id));
}

@Override
public Object getDisplayValue(E object) {
return WebComponentUtil.createLocalizedModelForEnum(object, component).getObject();
}

@Override
public String getIdValue(E object, int index) {
return Integer.toString(index);
}
}, allowNull){
return new DropDownChoicePanel<E>(id, model, choicesList, getEnumChoiceRenderer(component)
, allowNull){

private static final long serialVersionUID = 1L;

Expand All @@ -823,6 +802,31 @@ protected String getNullValidDisplayValue() {
};
}

public static <E extends Enum> IChoiceRenderer<E> getEnumChoiceRenderer(Component component){
return new IChoiceRenderer<E>() {

private static final long serialVersionUID = 1L;

@Override
public E getObject(String id, IModel<? extends List<? extends E>> choices) {
if (StringUtils.isBlank(id)) {
return null;
}
return choices.getObject().get(Integer.parseInt(id));
}

@Override
public Object getDisplayValue(E object) {
return WebComponentUtil.createLocalizedModelForEnum(object, component).getObject();
}

@Override
public String getIdValue(E object, int index) {
return Integer.toString(index);
}
};
}

public static DropDownChoicePanel createEnumPanel(final PrismPropertyDefinition def, String id,
final IModel model, final Component component) {
// final Class clazz = model.getObject().getClass();
Expand Down
Expand Up @@ -123,6 +123,11 @@ public void onClick(AjaxRequestTarget target) {
return unassignMenuItems;
}

@Override
protected List<RelationTypes> getAvailableRelationList(){
return Arrays.asList(RelationTypes.MANAGER, RelationTypes.APPROVER, RelationTypes.OWNER);
}

@Override
protected ObjectQuery createAllMemberQuery(List<QName> relations) {
return super.createDirectMemberQuery(relations);
Expand Down
Expand Up @@ -64,10 +64,7 @@
import org.apache.wicket.model.Model;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;

public class RoleMemberPanel<T extends AbstractRoleType> extends AbstractRoleMemberPanel<T> {

Expand Down Expand Up @@ -440,4 +437,9 @@ protected ObjectQuery createDirectMemberQuery(List<QName> relations) {
protected List<QName> getNewMemberSupportedTypes(){
return WebComponentUtil.createFocusTypeList();
}

@Override
protected List<RelationTypes> getAvailableRelationList(){
return Arrays.asList(RelationTypes.MEMBER);
}
}
Expand Up @@ -16,6 +16,7 @@
package com.evolveum.midpoint.web.page.admin.users.component;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

Expand Down Expand Up @@ -413,9 +414,7 @@ private void initObjectForAdd(ObjectReferenceType parentOrgRef, QName type, QNam

protected void addMembers(AjaxRequestTarget target) {

// List<QName> types = getNewMemberSupportedTypes();

ChooseMemberPopup browser = new ChooseMemberPopup(getPageBase().getMainPopupBodyId(), null) {
ChooseMemberPopup browser = new ChooseMemberPopup(getPageBase().getMainPopupBodyId(), getAvailableRelationList()) {
private static final long serialVersionUID = 1L;

@Override
Expand All @@ -429,6 +428,10 @@ protected T getAssignmentTargetRefObject(){

}

protected List<RelationTypes> getAvailableRelationList(){
return Arrays.asList(RelationTypes.values());
}

protected List<QName> getNewMemberSupportedTypes(){
List<QName> types = WebComponentUtil.createObjectTypeList();
types.remove(NodeType.COMPLEX_TYPE);
Expand Down
Expand Up @@ -448,6 +448,11 @@ protected void refreshTable(AjaxRequestTarget target) {
.qnameToClass(getPageBase().getPrismContext(), type.getTypeQName(), ObjectType.class), target);
}

@Override
protected List<RelationTypes> getAvailableRelationList(){
return Arrays.asList(RelationTypes.MANAGER);
}

protected void refreshSearch() {
getMemberTable().resetSearchModel();
}
Expand Down

0 comments on commit 310f3ae

Please sign in to comment.