Skip to content

Commit

Permalink
MID-2856 fixing request for Request a role page
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed May 30, 2016
1 parent 84a96e0 commit c48564b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 23 deletions.
Expand Up @@ -20,11 +20,16 @@
import java.util.Iterator;
import java.util.List;

import com.evolveum.midpoint.gui.api.page.PageBase;
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.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.path.ItemPath;
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.logging.LoggingUtils;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
Expand All @@ -51,7 +56,6 @@
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
Expand Down Expand Up @@ -79,10 +83,8 @@ public class MultipleAssignmentSelector<F extends FocusType, H extends FocusType

private static final Trace LOGGER = TraceManager.getTrace(MultipleAssignmentSelector.class);
private static final String DOT_CLASS = MultipleAssignmentSelector.class.getName() + ".";
private static final String OPERATION_LOAD_AVAILABLE_ROLES = DOT_CLASS + "loadAvailableRoles";
private static final String OPERATION_LOAD_FILTER_OBJECT = DOT_CLASS + "loadFilterObject";

private static final String ID_USER_CHOOSER_DIALOG = "userChooserDialog";
private static final String ID_TABLE = "table";
private static final String ID_FILTER_BUTTON_CONTAINER = "filterButtonContainer";
private static final String ID_SEARCH_FORM = "searchForm";
Expand Down Expand Up @@ -388,8 +390,9 @@ private <T extends FocusType> List<AssignmentEditorDto> getAvailableAssignmentsD
}
List<AssignmentEditorDto> currentAssignments = getAssignmentsByType(assignmentsList);

if (filterModel != null && filterModel.getObject() != null) {
query.addFilter(filterModel.getObject());
if ((provider.getQuery() == null || provider.getQuery().getFilter() == null)
&& filterModel != null && filterModel.getObject() != null) {
query.setFilter(filterModel.getObject());
}
return applyQueryToListProvider(query, currentAssignments);
}
Expand Down Expand Up @@ -453,9 +456,9 @@ public void setQuery(ObjectQuery query) {
public ObjectQuery getQuery() {
if (searchQuery == null){
searchQuery = new ObjectQuery();
}
if (filterModel != null && filterModel.getObject() != null){
searchQuery.addFilter(filterModel.getObject());
if (filterModel != null && filterModel.getObject() != null) {
searchQuery.addFilter(filterModel.getObject());
}
}
return searchQuery;
}
Expand Down
Expand Up @@ -78,23 +78,20 @@ public class MultipleAssignmentSelectorPanel<F extends FocusType, H extends Focu


private static final String DOT_CLASS = MultipleAssignmentSelectorPanel.class.getName();
private static final String OPERATION_LOAD_AVAILABLE_ROLES = DOT_CLASS + "loadAvailableRoles";
private Class<G> type;

private List<OrgType> tenantEditorObject = new ArrayList<>();
private List<OrgType> orgEditorObject = new ArrayList<>();
private PrismObject<F> focus;
private ObjectFilter authorizedRolesFilter = null;
// private IModel<ObjectFilter> filterModel = null;
private static final Trace LOGGER = TraceManager.getTrace(MultipleAssignmentSelectorPanel.class);
private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles";

public MultipleAssignmentSelectorPanel(String id, LoadableModel<List<AssignmentEditorDto>> assignmentsModel,
PrismObject<F> focus, Class<H> targetFocusClass, Class<G> type) {
super(id, assignmentsModel);
this.assignmentsModel = assignmentsModel;
this.type = type;
this.focus = focus;
// filterModel = getFilterModel();
tenantEditorObject.add(new OrgType());
orgEditorObject.add(new OrgType());
initLayout(targetFocusClass);
Expand Down Expand Up @@ -232,16 +229,23 @@ private IModel<ObjectFilter> getFilterModel(final boolean isRequestableFilter){
return new IModel<ObjectFilter>() {
@Override
public ObjectFilter getObject() {
if (isRequestableFilter && authorizedRolesFilter == null){
initRolesFilter();
}
ItemPath path = new ItemPath(FocusType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS);
ObjectFilter archivedRolesFilter = EqualFilter.createEqual(path, RoleType.class,
getPageBase().getPrismContext(), null, ActivationStatusType.ARCHIVED);
ObjectFilter filter = isRequestableFilter && authorizedRolesFilter != null ?
AndFilter.createAnd(authorizedRolesFilter, new NotFilter(archivedRolesFilter)) :
new NotFilter(archivedRolesFilter);
return filter;
ObjectFilter filter = null;
if (isRequestableFilter) {
ObjectFilter assignableRolesFilter = getAssignableRolesFilter();
if (assignableRolesFilter instanceof NotFilter) {
return null;
} else if (assignableRolesFilter != null) {
filter = AndFilter.createAnd(assignableRolesFilter, new NotFilter(archivedRolesFilter));
} else {
filter = new NotFilter(archivedRolesFilter);
}
return filter;
} else {
return new NotFilter(archivedRolesFilter);
}
}

@Override
Expand All @@ -256,14 +260,15 @@ public void detach() {
};
}

private void initRolesFilter (){
private ObjectFilter getAssignableRolesFilter() {
LOGGER.debug("Loading roles which the current user has right to assign");
OperationResult result = new OperationResult(OPERATION_LOAD_AVAILABLE_ROLES);
OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNABLE_ROLES);
ObjectFilter filter = null;
try {
PageBase pb = getPageBase();
ModelInteractionService mis = pb.getModelInteractionService();
RoleSelectionSpecification roleSpec = mis.getAssignableRoleSpecification(focus, result);
authorizedRolesFilter = roleSpec.getFilter();
filter = roleSpec.getFilter();
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't load available roles", ex);
result.recordFatalError("Couldn't load available roles", ex);
Expand All @@ -273,6 +278,7 @@ private void initRolesFilter (){
if (!result.isSuccess() && !result.isHandledError()) {
getPageBase().showResult(result);
}
return filter;
}

private GenericMultiValueLabelEditPanel createTenantContainer(){
Expand Down

0 comments on commit c48564b

Please sign in to comment.