Skip to content

Commit

Permalink
some improvements for member creation/assigning with relation specifi…
Browse files Browse the repository at this point in the history
…cation
  • Loading branch information
KaterynaHonchar committed Apr 22, 2019
1 parent 5ab48c8 commit 6834ba7
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 36 deletions.
Expand Up @@ -40,6 +40,7 @@
import com.evolveum.midpoint.web.component.dialog.Popupable;
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.roles.MemberOperationsHelper;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand Down Expand Up @@ -150,11 +151,9 @@ public void onClick(AjaxRequestTarget target) {

protected List<ITab> createAssignmentTabs() {
List<ITab> tabs = new ArrayList<>();
//TODO should we have any authorization here?
VisibleEnableBehaviour authorization = new VisibleEnableBehaviour(){
};

tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.USER"), authorization) {
List<QName> objectTypes = getAvailableObjectTypes();
tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.USER"),
new VisibleBehaviour(() -> objectTypes == null || objectTypes.contains(UserType.COMPLEX_TYPE))) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -186,7 +185,8 @@ public String getCount() {
}
});

tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"), authorization) {
tabs.add(new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ROLE"),
new VisibleBehaviour(() -> objectTypes == null || objectTypes.contains(RoleType.COMPLEX_TYPE))) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -219,7 +219,8 @@ public String getCount() {
});

tabs.add(
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"), authorization) {
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.ORG"),
new VisibleBehaviour(() -> objectTypes == null || objectTypes.contains(OrgType.COMPLEX_TYPE))) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -259,7 +260,8 @@ public String getCount() {
});


tabs.add(new CountablePanelTab(createStringResource("TypedAssignablePanel.orgTreeView"), authorization) {
tabs.add(new CountablePanelTab(createStringResource("TypedAssignablePanel.orgTreeView"),
new VisibleBehaviour(() -> objectTypes == null || objectTypes.contains(OrgType.COMPLEX_TYPE))) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -293,7 +295,8 @@ public String getCount() {
});

tabs.add(
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"), authorization) {
new CountablePanelTab(getPageBase().createStringResource("ObjectTypes.SERVICE"),
new VisibleBehaviour(() -> objectTypes == null || objectTypes.contains(ServiceType.COMPLEX_TYPE))) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -329,6 +332,10 @@ public String getCount() {
return tabs;
}

protected List<QName> getAvailableObjectTypes(){
return null;
}

protected int getTabPanelSelectedCount(WebMarkupContainer panel){
if (panel != null && panel instanceof MemberPopupTabPanel){
return ((MemberPopupTabPanel) panel).getSelectedObjectsList().size();
Expand Down
Expand Up @@ -24,8 +24,10 @@
*/

import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
Expand All @@ -44,7 +46,8 @@ public ChooseOrgMemberPopup(String id, List<QName> availableRelationList){
@Override
protected List<ITab> createAssignmentTabs() {
List<ITab> tabs = super.createAssignmentTabs();
tabs.add(new CountablePanelTab(getPageBase().createStringResource("chooseMemberForOrgPopup.otherTypesLabel"), null) {
tabs.add(new CountablePanelTab(getPageBase().createStringResource("chooseMemberForOrgPopup.otherTypesLabel"),
new VisibleBehaviour(() -> getAvailableObjectTypes() == null)) {

private static final long serialVersionUID = 1L;

Expand Down
Expand Up @@ -3383,16 +3383,23 @@ public static List<AssignmentObjectRelation> getRelationsDividedList(List<Assign
return combinedRelationList;
}

public static DisplayType getAssignmentObjectRelationDisplayType(AssignmentObjectRelation assignmentTargetRelation, String defaultTitle){
public static DisplayType getAssignmentObjectRelationDisplayType(PageBase pageBase, AssignmentObjectRelation assignmentTargetRelation, String defaultTitle){
QName relation = assignmentTargetRelation != null && !org.apache.commons.collections.CollectionUtils.isEmpty(assignmentTargetRelation.getRelations()) ?
assignmentTargetRelation.getRelations().get(0) : null;
QName type = assignmentTargetRelation != null && !org.apache.commons.collections.CollectionUtils.isEmpty(assignmentTargetRelation.getObjectTypes()) ?
assignmentTargetRelation.getObjectTypes().get(0) : null;
String typeName = type != null ? pageBase.createStringResource("ObjectTypeLowercase." + type.getLocalPart()).getString() : null;
if (relation != null){
RelationDefinitionType def = WebComponentUtil.getRelationDefinition(relation);
if (def != null){
DisplayType displayType = def.getDisplay();
String titleValue = displayType != null && displayType.getTooltip() != null
&& StringUtils.isNotEmpty(displayType.getTooltip().getNorm()) ?
displayType.getTooltip().getNorm() : defaultTitle + " " + relation.getLocalPart();
displayType.getTooltip().getNorm()
: defaultTitle + " " + relation.getLocalPart() + " " +
pageBase.createStringResource("roleMemberPanel.relation").getString().toLowerCase()
+ (StringUtils.isNotEmpty(typeName) ? " " + typeName + " " +
pageBase.createStringResource("abstractRoleMemberPanel.type").getString().toLowerCase() : "");

if (displayType == null || displayType.getIcon() == null){
displayType = createDisplayType(GuiStyleConstants.EVO_ASSIGNMENT_ICON, "green", titleValue);
Expand All @@ -3405,7 +3412,7 @@ public static DisplayType getAssignmentObjectRelationDisplayType(AssignmentObjec
return displayType;
}
}
return createDisplayType("", "", "");
return createDisplayType("", "", defaultTitle);
}

public static void saveTask(PrismObject<TaskType> oldTask, OperationResult result, PageBase pageBase){
Expand Down
Expand Up @@ -171,7 +171,7 @@ protected DisplayType getNewObjectButtonDisplayType() {

@Override
protected DisplayType getNewObjectAdditionalButtonDisplayType(AssignmentObjectRelation assignmentTargetRelation) {
return WebComponentUtil.getAssignmentObjectRelationDisplayType(assignmentTargetRelation,
return WebComponentUtil.getAssignmentObjectRelationDisplayType(AssignmentPanel.this.getPageBase(), assignmentTargetRelation,
AssignmentPanel.this.createStringResource(isInducement() ?
"AssignmentPanel.newInducementTitle" : "AssignmentPanel.newAssignmentTitle").getString());
}
Expand Down
Expand Up @@ -227,7 +227,7 @@ protected List<AssignmentObjectRelation> getNewObjectInfluencesList() {

@Override
protected DisplayType getNewObjectButtonAdditionalDisplayType(AssignmentObjectRelation relationSpec){
return WebComponentUtil.getAssignmentObjectRelationDisplayType(relationSpec,
return WebComponentUtil.getAssignmentObjectRelationDisplayType(AbstractRoleMemberPanel.this.getPageBase(), relationSpec,
createStringResource("abstractRoleMemberPanel.menu.createMember").getString());
}

Expand All @@ -236,20 +236,15 @@ protected DisplayType getNewObjectButtonSpecialDisplayType(){
return getCreateMemberButtonDisplayType();
}

@Override
protected DisplayType getNewObjectButtonStandardDisplayType(){
return WebComponentUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green",
createStringResource("abstractRoleMemberPanel.menu.createMember").getString());
}

@Override
protected CompositedIconBuilder getNewObjectButtonAdditionalIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){
CompositedIconBuilder builder = new CompositedIconBuilder();
QName objectType = relationSpec != null && relationSpec.getObjectTypes() != null && relationSpec.getObjectTypes().size() > 0 ?
relationSpec.getObjectTypes().get(0) : null;
if (objectType != null) {
builder.setBasicIcon(WebComponentUtil.getIconCssClass(additionalButtonDisplayType), IconCssStyle.IN_ROW_STYLE)
.appendColorHtmlValue(WebComponentUtil.getIconColor(additionalButtonDisplayType))
.appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, GuiStyleConstants.GREEN_COLOR)
.appendLayerIcon(WebComponentUtil.createDefaultBlackIcon(objectType), IconCssStyle.BOTTOM_LEFT_STYLE);
return builder;
} else {
return null;
}
return getAdditionalButtonIconBuilder(relationSpec, additionalButtonDisplayType);
}

@Override
Expand All @@ -271,7 +266,9 @@ protected List<AssignmentObjectRelation> getAdditionalButtonsObjects() {
@Override
protected void buttonClickPerformed(AjaxRequestTarget target, AssignmentObjectRelation relation) {
AbstractRoleMemberPanel.this.assignMembers(target, relation != null && !CollectionUtils.isEmpty(relation.getRelations()) ?
Arrays.asList(relation.getRelations().get(0)) : getSupportedRelations());
Arrays.asList(relation.getRelations().get(0)) : getSupportedRelations(),
relation != null && !CollectionUtils.isEmpty(relation.getObjectTypes()) ?
relation.getObjectTypes() : null);
}

@Override
Expand All @@ -281,14 +278,19 @@ protected DisplayType getMainButtonDisplayType(){

@Override
protected DisplayType getAdditionalButtonDisplayType(AssignmentObjectRelation assignmentTargetRelation){
return WebComponentUtil.getAssignmentObjectRelationDisplayType(assignmentTargetRelation,
return WebComponentUtil.getAssignmentObjectRelationDisplayType(AbstractRoleMemberPanel.this.getPageBase(), assignmentTargetRelation,
createStringResource("abstractRoleMemberPanel.menu.assignMember").getString());
}

@Override
protected DisplayType getDefaultObjectButtonDisplayType(){
return getAssignMemberButtonDisplayType();
}

@Override
protected CompositedIconBuilder getAdditionalIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){
return getAdditionalButtonIconBuilder(relationSpec, additionalButtonDisplayType);
}
};
assignButton.add(AttributeAppender.append("class", "btn-margin-right"));

Expand Down Expand Up @@ -424,6 +426,21 @@ private List<AssignmentObjectRelation> prepareAssignmentListForMemberCreation(){
return resultList;
}

private CompositedIconBuilder getAdditionalButtonIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){
CompositedIconBuilder builder = new CompositedIconBuilder();
QName objectType = relationSpec != null && relationSpec.getObjectTypes() != null && relationSpec.getObjectTypes().size() > 0 ?
relationSpec.getObjectTypes().get(0) : null;
if (objectType != null) {
builder.setBasicIcon(WebComponentUtil.getIconCssClass(additionalButtonDisplayType), IconCssStyle.IN_ROW_STYLE)
.appendColorHtmlValue(WebComponentUtil.getIconColor(additionalButtonDisplayType))
.appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, GuiStyleConstants.GREEN_COLOR)
.appendLayerIcon(WebComponentUtil.createDefaultBlackIcon(objectType), IconCssStyle.BOTTOM_LEFT_STYLE);
return builder;
} else {
return null;
}
}

private List<InlineMenuItem> createRowActions() {
List<InlineMenuItem> menu = new ArrayList<>();
if (isAuthorized(GuiAuthorizationConstants.MEMBER_OPERATION_ASSIGN)) {
Expand All @@ -437,7 +454,7 @@ public InlineMenuItemAction initAction() {

@Override
public void onClick(AjaxRequestTarget target) {
assignMembers(target, getSupportedRelations());
assignMembers(target, getSupportedRelations(), null);
}
};
}
Expand Down Expand Up @@ -568,8 +585,8 @@ private AssignmentCandidatesSpecification loadCandidateSpecification(){
return spec;
}

protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
MemberOperationsHelper.assignMembers(getPageBase(), getModelObject(), target, availableRelationList);
protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList, List<QName> objectTypes) {
MemberOperationsHelper.assignMembers(getPageBase(), getModelObject(), target, availableRelationList, objectTypes);
}

private void unassignMembersPerformed(AjaxRequestTarget target) {
Expand Down
Expand Up @@ -162,7 +162,8 @@ private static <R extends AbstractRoleType> void recomputeOrDeleteMembersPerform

}

public static <O extends ObjectType, R extends AbstractRoleType> void assignMembers(PageBase pageBase, R targetRefObject, AjaxRequestTarget target, List<QName> availableRelationList) {
public static <O extends ObjectType, R extends AbstractRoleType> void assignMembers(PageBase pageBase, R targetRefObject, AjaxRequestTarget target,
List<QName> availableRelationList, List<QName> objectTypes) {

ChooseMemberPopup<O, R> browser = new ChooseMemberPopup<O, R>(pageBase.getMainPopupBodyId(), availableRelationList) {
private static final long serialVersionUID = 1L;
Expand All @@ -171,12 +172,18 @@ public static <O extends ObjectType, R extends AbstractRoleType> void assignMemb
protected R getAssignmentTargetRefObject(){
return targetRefObject;
}

@Override
protected List<QName> getAvailableObjectTypes(){
return objectTypes;
}
};
browser.setOutputMarkupId(true);
pageBase.showMainPopup(browser, target);
}

public static <O extends ObjectType> void assignOrgMembers(PageBase pageBase, OrgType targetRefObject, AjaxRequestTarget target, List<QName> availableRelationList) {
public static <O extends ObjectType> void assignOrgMembers(PageBase pageBase, OrgType targetRefObject, AjaxRequestTarget target,
List<QName> availableRelationList, List<QName> objectTypes) {
ChooseOrgMemberPopup<O> browser = new ChooseOrgMemberPopup<O>(pageBase.getMainPopupBodyId(), availableRelationList) {

private static final long serialVersionUID = 1L;
Expand All @@ -185,6 +192,11 @@ public static <O extends ObjectType> void assignOrgMembers(PageBase pageBase, Or
protected OrgType getAssignmentTargetRefObject(){
return targetRefObject;
}

@Override
protected List<QName> getAvailableObjectTypes(){
return objectTypes;
}
};

browser.setOutputMarkupId(true);
Expand Down
Expand Up @@ -98,8 +98,8 @@ protected SearchBoxScopeType getOrgSearchScope() {
}

@Override
protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
MemberOperationsHelper.assignOrgMembers(getPageBase(), getModelObject(), target, availableRelationList);
protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList, List<QName> objectTypes) {
MemberOperationsHelper.assignOrgMembers(getPageBase(), getModelObject(), target, availableRelationList, objectTypes);
}

// @Override
Expand Down

0 comments on commit 6834ba7

Please sign in to comment.