Skip to content

Commit

Permalink
role catalog: assignments multiplicity
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Mar 16, 2017
1 parent 15ae747 commit ba82303
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 15 deletions.
Expand Up @@ -31,6 +31,7 @@ public class GuiStyleConstants {

public static final String CLASS_OBJECT_ROLE_ICON = "fa fa-street-view";
public static final String CLASS_OBJECT_ROLE_BG = "object-role-bg";
public static final String CLASS_DISABLED_OBJECT_ROLE_BG = "object-disabled-bg";
public static final String CLASS_OBJECT_ROLE_ICON_COLORED = CLASS_OBJECT_ROLE_ICON + " object-role-color";
public static final String CLASS_OBJECT_ROLE_BOX_CSS_CLASSES = "object-role-box";
public static final String CLASS_OBJECT_ROLE_BOX_THIN_CSS_CLASSES = "object-role-box-thin";
Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.model.api.RoleSelectionSpecification;
import com.evolveum.midpoint.model.api.context.*;
Expand All @@ -30,6 +31,8 @@
import com.evolveum.midpoint.prism.query.*;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand All @@ -45,6 +48,7 @@
import com.evolveum.midpoint.web.page.admin.orgs.OrgTreePanel;
import com.evolveum.midpoint.web.page.admin.users.dto.TreeStateSet;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.page.self.PageAssignmentShoppingKart;
import com.evolveum.midpoint.web.page.self.PageAssignmentsList;
import com.evolveum.midpoint.web.page.self.dto.AssignmentConflictDto;
import com.evolveum.midpoint.web.page.self.dto.AssignmentViewType;
Expand Down Expand Up @@ -142,7 +146,9 @@ protected void initProvider() {

@Override
public AssignmentEditorDto createDataObjectWrapper(PrismObject<AbstractRoleType> obj) {
return AssignmentEditorDto.createDtoFromObject(obj.asObjectable(), UserDtoStatus.ADD, pageBase);
AssignmentEditorDto dto = AssignmentEditorDto.createDtoFromObject(obj.asObjectable(), UserDtoStatus.ADD, pageBase);
dto.setAlreadyAssigned(isAlreadyAssigned(obj));
return dto;
}

@Override
Expand Down Expand Up @@ -334,15 +340,7 @@ public Search load() {
targetUserModel = new IModel<PrismObject<UserType>>() {
@Override
public PrismObject<UserType> getObject() {
PrismObject<UserType> targetUser = pageBase.getSessionStorage().getRoleCatalog().getTargetUser();
if (targetUser != null){
return targetUser;
}
PrismObject<UserType> user = pageBase.loadUserSelf(pageBase);
if (user != null){
return user;
}
return null;
return getTargetUser();
}

@Override
Expand Down Expand Up @@ -663,5 +661,26 @@ public void detach() {
}
};
}

private boolean isAlreadyAssigned(PrismObject<AbstractRoleType> obj){
PrismObject<UserType> user = getTargetUser();
if (user == null || user.asObjectable().getAssignment() == null){
return false;
}
for (AssignmentType assignment : user.asObjectable().getAssignment()){
if (assignment.getTargetRef() != null && assignment.getTargetRef().getOid().equals(obj.getOid())){
return true;
}
}
return false;
}

private PrismObject<UserType> getTargetUser(){
PrismObject<UserType> targetUser = pageBase.getSessionStorage().getRoleCatalog().getTargetUser();
if (targetUser != null){
return targetUser;
}
return pageBase.loadUserSelf(pageBase);
}
}

Expand Up @@ -94,6 +94,8 @@ public class AssignmentEditorDto extends SelectableBean implements Comparable<As
private boolean editable = true;
private boolean simpleView = false;

private boolean isAlreadyAssigned = false;

private Boolean isOrgUnitManager = Boolean.FALSE;
private AssignmentType newAssignment;
private List<ACAttributeDto> attributes;
Expand Down Expand Up @@ -663,6 +665,14 @@ public void setSimpleView(boolean simpleView) {
this.simpleView = simpleView;
}

public boolean isAlreadyAssigned() {
return isAlreadyAssigned;
}

public void setAlreadyAssigned(boolean alreadyAssigned) {
isAlreadyAssigned = alreadyAssigned;
}

public List<AssignmentsPreviewDto> getPrivilegeLimitationList() {
return privilegeLimitationList;
}
Expand Down
Expand Up @@ -18,9 +18,17 @@
import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
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.*;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.self.PageAssignmentDetails;
import com.evolveum.midpoint.web.session.RoleCatalogStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentMultiplicityType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
Expand Down Expand Up @@ -51,6 +59,10 @@ public class MultiButtonTable extends BasePanel<List<AssignmentEditorDto>> {
private static final String ID_DETAILS_LINK_LABEL = "detailsLinkLabel";
private static final String ID_DETAILS_LINK_ICON = "detailsLinkIcon";

private static final String DOT_CLASS = AssignmentCatalogPanel.class.getName();
private static final Trace LOGGER = TraceManager.getTrace(AssignmentCatalogPanel.class);
private static final String OPERATION_LOAD_ASSIGNMENT_MULTIPLICITY = DOT_CLASS + "loadAssignmentMultiplicity";

private String addToCartLinkIcon = "fa fa-times-circle fa-lg text-danger";
private String detailsLinkIcon = "fa fa-arrow-circle-right";
private long itemsCount = 0;
Expand Down Expand Up @@ -92,7 +104,7 @@ private void initLayout(){

WebMarkupContainer itemButtonContainer = new WebMarkupContainer(ID_ITEM_BUTTON_CONTAINER);
itemButtonContainer.setOutputMarkupId(true);
itemButtonContainer.add(new AttributeAppender("class", getBackgroundClass(assignmentsList.get(index).getType())));
itemButtonContainer.add(new AttributeAppender("class", getBackgroundClass(assignmentsList.get(index))));
colContainer.add(itemButtonContainer);
populateCell(itemButtonContainer, assignmentsList.get(index));
index++;
Expand All @@ -115,6 +127,15 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
assignmentDetailsPerformed(assignment, ajaxRequestTarget);
}
};
inner.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isEnabled(){
return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity())
&& assignment.isAlreadyAssigned());
}
});
cellContainer.add(inner);

Label nameLabel = new Label(ID_INNER_LABEL, assignment.getName());
Expand All @@ -126,6 +147,15 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
assignmentDetailsPerformed(assignment, ajaxRequestTarget);
}
};
detailsLink.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isEnabled(){
return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity())
&& assignment.isAlreadyAssigned());
}
});
cellContainer.add(detailsLink);

Label detailsLinkLabel = new Label(ID_DETAILS_LINK_LABEL, pageBase.createStringResource("MultiButtonPanel.detailsLink"));
Expand All @@ -140,6 +170,15 @@ public void onClick(AjaxRequestTarget target) {
}

};
detailsLinkIcon.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isEnabled(){
return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity())
&& assignment.isAlreadyAssigned());
}
});
detailsLink.add(detailsLinkIcon);

AjaxLink addToCartLink = new AjaxLink(ID_ADD_TO_CART_LINK) {
Expand All @@ -148,6 +187,15 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
addAssignmentPerformed(assignment, ajaxRequestTarget);
}
};
addToCartLink.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isEnabled(){
return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity())
&& assignment.isAlreadyAssigned());
}
});
cellContainer.add(addToCartLink);

AjaxLink addToCartLinkIcon = new AjaxLink(ID_ADD_TO_CART_LINK_ICON) {
Expand All @@ -158,6 +206,15 @@ public void onClick(AjaxRequestTarget target) {
}

};
addToCartLinkIcon.add(new VisibleEnableBehaviour(){
private static final long serialVersionUID = 1L;

@Override
public boolean isEnabled(){
return !(AssignmentMultiplicityType.SINGLE.equals(getAssignmentMultiplicity())
&& assignment.isAlreadyAssigned());
}
});
addToCartLink.add(addToCartLinkIcon);

WebMarkupContainer icon = new WebMarkupContainer(ID_TYPE_ICON);
Expand Down Expand Up @@ -205,12 +262,14 @@ private String getIconClass(AssignmentEditorDtoType type){
}
}

private String getBackgroundClass(AssignmentEditorDtoType type){
if (AssignmentEditorDtoType.ROLE.equals(type)){
private String getBackgroundClass(AssignmentEditorDto dto){
if (dto.isAlreadyAssigned()){
return GuiStyleConstants.CLASS_DISABLED_OBJECT_ROLE_BG;
} else if (AssignmentEditorDtoType.ROLE.equals(dto.getType())){
return GuiStyleConstants.CLASS_OBJECT_ROLE_BG;
}else if (AssignmentEditorDtoType.SERVICE.equals(type)){
}else if (AssignmentEditorDtoType.SERVICE.equals(dto.getType())){
return GuiStyleConstants.CLASS_OBJECT_SERVICE_BG;
}else if (AssignmentEditorDtoType.ORG_UNIT.equals(type)){
}else if (AssignmentEditorDtoType.ORG_UNIT.equals(dto.getType())){
return GuiStyleConstants.CLASS_OBJECT_ORG_BG;
} else {
return "";
Expand All @@ -231,4 +290,20 @@ private void addAssignmentPerformed(AssignmentEditorDto assignment, AjaxRequestT

}

private AssignmentMultiplicityType getAssignmentMultiplicity(){
OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNMENT_MULTIPLICITY);
SystemConfigurationType systemConfig = null;
try {
systemConfig = pageBase.getModelInteractionService().getSystemConfiguration(result);
} catch (ObjectNotFoundException | SchemaException e) {
LOGGER.error("Error getting system configuration: {}", e.getMessage(), e);
return AssignmentMultiplicityType.SINGLE;
}
if (systemConfig != null && systemConfig.getRoleManagement() != null &&
systemConfig.getRoleManagement().getDefaultAssignmentMultiplicity() != null &&
!systemConfig.getRoleManagement().getDefaultAssignmentMultiplicity().toString().equals("")){
return systemConfig.getRoleManagement().getDefaultAssignmentMultiplicity();
}
return AssignmentMultiplicityType.SINGLE;
}
}
Expand Up @@ -27,3 +27,4 @@
@object-resource-color: #605CA8;
@object-task-color: #001f3f;
@object-shadow-color: #001F3F;
@object-disabled-color: #BEBEBE;
5 changes: 5 additions & 0 deletions gui/admin-gui/src/main/webapp/less/midpoint-theme.less
Expand Up @@ -270,6 +270,11 @@ th.cog, td.cog {
color: #fff !important;
}

.object-disabled-bg {
background-color: @object-disabled-color !important;
color: #fff !important;
}

// Colored boxes for each object type

#box-object(@color) {
Expand Down

0 comments on commit ba82303

Please sign in to comment.