Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Mar 23, 2017
2 parents c22de77 + 7f72c64 commit 4d4bb3a
Show file tree
Hide file tree
Showing 40 changed files with 1,640 additions and 236 deletions.
Expand Up @@ -581,9 +581,13 @@ public static <E extends Enum> DropDownChoicePanel createEnumPanel(Class clazz,
}
public static <E extends Enum> DropDownChoicePanel createEnumPanel(Class clazz, String id,
final IModel<E> model, final Component component, boolean allowNull) {
// final Class clazz = model.getObject().getClass();
final Object o = model.getObject();
return new DropDownChoicePanel(id, model, WebComponentUtil.createReadonlyModelFromEnum(clazz),
return createEnumPanel(clazz, id, WebComponentUtil.createReadonlyModelFromEnum(clazz),
model, component, allowNull );
}

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

@Override
Expand Down
Expand Up @@ -19,18 +19,11 @@
import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel;
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.*;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.DeltaSetTriple;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
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;
Expand All @@ -46,18 +39,14 @@
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
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;
import com.evolveum.midpoint.web.security.SecurityUtils;
import com.evolveum.midpoint.web.session.OrgTreeStateStorage;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.EnumUtils;
import org.apache.wicket.ajax.AjaxChannel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
Expand All @@ -72,7 +61,6 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.model.util.ListModel;

import javax.xml.namespace.QName;
import java.util.*;
Expand All @@ -83,11 +71,11 @@
public class AssignmentCatalogPanel<F extends AbstractRoleType> extends BasePanel {
private static final long serialVersionUID = 1L;

private static String ID_TREE_PANEL_CONTAINER = "treePanelContainer";
private static String ID_TREE_PANEL = "treePanel";
private static String ID_CATALOG_ITEMS_PANEL_CONTAINER = "catalogItemsPanelContainer";
private static String ID_ASSIGNMENTS_OWNER_NAME = "assignmentsOwnerName";
private static String ID_CATALOG_ITEMS_PANEL = "catalogItemsPanel";
private static final String ID_TREE_PANEL_CONTAINER = "treePanelContainer";
private static final String ID_TREE_PANEL = "treePanel";
private static final String ID_CATALOG_ITEMS_PANEL_CONTAINER = "catalogItemsPanelContainer";
private static final String ID_ASSIGNMENTS_OWNER_NAME = "assignmentsOwnerName";
private static final String ID_CATALOG_ITEMS_PANEL = "catalogItemsPanel";
private static final String ID_CART_BUTTON = "cartButton";
private static final String ID_CART_ITEMS_COUNT = "itemsCount";
private static final String ID_HEADER_PANEL = "headerPanel";
Expand All @@ -102,6 +90,7 @@ public class AssignmentCatalogPanel<F extends AbstractRoleType> extends BasePane

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_CONSTRAINTS = DOT_CLASS + "loadAssignmentConstraints";
private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles";

private PageBase pageBase;
Expand All @@ -111,11 +100,9 @@ public class AssignmentCatalogPanel<F extends AbstractRoleType> extends BasePane
private IModel<AssignmentViewType> viewModel;
private IModel<PrismObject<UserType>> targetUserModel;
private ObjectDataProvider<AssignmentEditorDto, AbstractRoleType> objectProvider;
private ListDataProvider<AssignmentEditorDto> listProvider;
private int itemsPerRow = 4;
private boolean showUserSelectionPopup = true;
private List<AssignmentEditorDto> listProviderData;
private AssignmentViewType defaultAssignmentViewType = AssignmentViewType.ROLE_CATALOG_VIEW;
List<AssignmentViewType> viewTypeList = new ArrayList<>();

public AssignmentCatalogPanel(String id) {
Expand Down Expand Up @@ -153,7 +140,8 @@ protected void initProvider() {
@Override
public AssignmentEditorDto createDataObjectWrapper(PrismObject<AbstractRoleType> obj) {
AssignmentEditorDto dto = AssignmentEditorDto.createDtoFromObject(obj.asObjectable(), UserDtoStatus.ADD, pageBase);
dto.setAlreadyAssigned(isAlreadyAssigned(obj));
dto.setAlreadyAssigned(isAlreadyAssigned(obj, dto));
dto.setDefualtAssignmentConstraints(getAssignmentConstraints());
return dto;
}

Expand Down Expand Up @@ -534,9 +522,8 @@ private ObjectQuery createMemberQuery(String oid) {
ObjectFilter filter = OrgFilter.createOrg(oid, OrgFilter.Scope.ONE_LEVEL);

TypeFilter roleTypeFilter = TypeFilter.createType(RoleType.COMPLEX_TYPE, filter);
TypeFilter orgTypeFilter = TypeFilter.createType(OrgType.COMPLEX_TYPE, filter);
TypeFilter serviceTypeFilter = TypeFilter.createType(ServiceType.COMPLEX_TYPE, filter);
ObjectQuery query = ObjectQuery.createObjectQuery(OrFilter.createOr(roleTypeFilter, orgTypeFilter, serviceTypeFilter));
ObjectQuery query = ObjectQuery.createObjectQuery(OrFilter.createOr(roleTypeFilter, serviceTypeFilter));
return query;

}
Expand Down Expand Up @@ -642,7 +629,9 @@ protected void onSelectPerformed(AjaxRequestTarget target, UserType targetUser)
super.onSelectPerformed(target, targetUser);
if (targetUserSelection) {
pageBase.getSessionStorage().getRoleCatalog().setTargetUser(targetUser.asPrismContainer());
target.add(getTargetUserContainer());
AssignmentCatalogPanel.this.addOrReplaceLayout(target, getCatalogItemsPanelContainer());
target.add(getHeaderPanel());
target.add(getCatalogItemsPanelContainer());
} else {
pageBase.getSessionStorage().getRoleCatalog().setAssignmentsUserOwner(targetUser.asPrismContainer());
AssignmentCatalogPanel.this.addOrReplaceLayout(target, getCatalogItemsPanelContainer());
Expand Down Expand Up @@ -689,17 +678,21 @@ public void detach() {
};
}

private boolean isAlreadyAssigned(PrismObject<AbstractRoleType> obj){
private boolean isAlreadyAssigned(PrismObject<AbstractRoleType> obj, AssignmentEditorDto assignmentDto){
PrismObject<UserType> user = getTargetUser();
if (user == null || user.asObjectable().getAssignment() == null){
return false;
}
boolean isAssigned = false;
List<RelationTypes> assignedRelationsList = new ArrayList<>();
for (AssignmentType assignment : user.asObjectable().getAssignment()){
if (assignment.getTargetRef() != null && assignment.getTargetRef().getOid().equals(obj.getOid())){
return true;
isAssigned = true;
assignedRelationsList.add(RelationTypes.getRelationType(assignment.getTargetRef().getRelation()));
}
}
return false;
assignmentDto.setAssignedRelationsList(assignedRelationsList);
return isAssigned;
}

private PrismObject<UserType> getTargetUser(){
Expand All @@ -710,5 +703,20 @@ private PrismObject<UserType> getTargetUser(){
return pageBase.loadUserSelf(pageBase);
}

private AssignmentConstraintsType getAssignmentConstraints() {
OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNMENT_CONSTRAINTS);
SystemConfigurationType systemConfig = null;
try {
systemConfig = pageBase.getModelInteractionService().getSystemConfiguration(result);
} catch (ObjectNotFoundException | SchemaException e) {
LOGGER.error("Error getting system configuration: {}", e.getMessage(), e);
return null;
}
if (systemConfig != null && systemConfig.getRoleManagement() != null) {
return systemConfig.getRoleManagement().getDefaultAssignmentConstraints();
}
return null;
}

}

Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.web.component.assignment;

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

Expand Down Expand Up @@ -95,7 +96,9 @@ public class AssignmentEditorDto extends SelectableBean implements Comparable<As
private boolean editable = true;
private boolean simpleView = false;

private boolean isAlreadyAssigned = false;
private boolean isAlreadyAssigned = false; //used only for role request functionality
private AssignmentConstraintsType defualtAssignmentConstraints; //used only for role request functionality
private List<RelationTypes> assignedRelationsList = new ArrayList<>(); //used only for role request functionalityp

private Boolean isOrgUnitManager = Boolean.FALSE;
private AssignmentType newAssignment;
Expand Down Expand Up @@ -674,6 +677,22 @@ public void setAlreadyAssigned(boolean alreadyAssigned) {
isAlreadyAssigned = alreadyAssigned;
}

public AssignmentConstraintsType getDefualtAssignmentConstraints() {
return defualtAssignmentConstraints;
}

public void setDefualtAssignmentConstraints(AssignmentConstraintsType defualtAssignmentConstraints) {
this.defualtAssignmentConstraints = defualtAssignmentConstraints;
}

public List<RelationTypes> getAssignedRelationsList() {
return assignedRelationsList;
}

public void setAssignedRelationsList(List<RelationTypes> assignedRelationsList) {
this.assignedRelationsList = assignedRelationsList;
}

public List<AssignmentsPreviewDto> getPrivilegeLimitationList() {
return privilegeLimitationList;
}
Expand Down Expand Up @@ -705,6 +724,76 @@ public void setDelegationOwner(UserType delegationOwner) {
this.delegationOwner = delegationOwner;
}

public List<RelationTypes> getNotAssignedRelationsList(){
List<RelationTypes> relations = new ArrayList<>(Arrays.asList(RelationTypes.values()));
if (getAssignedRelationsList() == null || getAssignedRelationsList().size() == 0){
return relations;
}
for (RelationTypes relation : getAssignedRelationsList()){
if (relations.contains(relation)){
relations.remove(relation);
}
}
return relations;
}

public boolean isAssignable() {
if (!isAlreadyAssigned){
return true;
}
if (defualtAssignmentConstraints == null) {
return true;
}
if (defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation()){
return true;
}
if (defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation()
&& getAssignedRelationsList().size() < RelationTypes.values().length){
return true;
}
if (!defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation()
&& getAssignedRelationsList().size() < RelationTypes.values().length){
return true;
}
if (!defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation()){
return false;
}
return false;
}

public boolean isMultyAssignable(){
if (defualtAssignmentConstraints == null) {
return true;
}
if (defualtAssignmentConstraints.isAllowSameTarget() && defualtAssignmentConstraints.isAllowSameRelation()){
return true;
}
return false;
}

public boolean isSingleAssignable(){
if (defualtAssignmentConstraints == null) {
return false;
}
if (!defualtAssignmentConstraints.isAllowSameTarget() && !defualtAssignmentConstraints.isAllowSameRelation()){
return true;
}
return false;
}

public void setDefaultRelation(){
if (getTargetRef() == null){
return;
}
if (!getAssignedRelationsList().contains(RelationTypes.MEMBER)){
getTargetRef().setRelation(SchemaConstants.ORG_DEFAULT);
}
List<RelationTypes> availableRelations = getNotAssignedRelationsList();
if (availableRelations.size() > 0){
getTargetRef().setRelation(availableRelations.get(0).getRelation());
}
}

@Override
public boolean equals(Object o) {
if (this == o)
Expand Down

0 comments on commit 4d4bb3a

Please sign in to comment.