Skip to content

Commit

Permalink
role catalog: added view types drop down
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Oct 5, 2016
1 parent 6d660f9 commit e0285b8
Show file tree
Hide file tree
Showing 9 changed files with 268 additions and 79 deletions.
Expand Up @@ -30,6 +30,7 @@
import com.evolveum.midpoint.common.SystemConfigurationHolder;
import com.evolveum.midpoint.web.component.menu.*;
import com.evolveum.midpoint.web.page.admin.configuration.*;
import com.evolveum.midpoint.web.page.self.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.wicket.AttributeModifier;
Expand Down Expand Up @@ -152,10 +153,6 @@
import com.evolveum.midpoint.web.page.admin.workflow.PageWorkItemsAllocatedToMe;
import com.evolveum.midpoint.web.page.admin.workflow.PageWorkItemsClaimable;
import com.evolveum.midpoint.web.page.login.PageLogin;
import com.evolveum.midpoint.web.page.self.PageRequestRole;
import com.evolveum.midpoint.web.page.self.PageSelfCredentials;
import com.evolveum.midpoint.web.page.self.PageSelfDashboard;
import com.evolveum.midpoint.web.page.self.PageSelfProfile;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.security.MidPointAuthWebSession;
import com.evolveum.midpoint.web.security.SecurityUtils;
Expand Down Expand Up @@ -1281,7 +1278,7 @@ private void createSelfServiceMenu(SideBarMenuItem menu) {
PageSelfCredentials.class);
menu.getItems().add(item);
item = new MainMenuItem("fa fa-pencil-square-o", createStringResource("PageAdmin.menu.request"),
PageRequestRole.class);
PageAssignmentShoppingKart.class);
menu.getItems().add(item);
}

Expand Down
Expand Up @@ -20,10 +20,10 @@
<body>
<wicket:panel>

<div class="col-md-3">
<div>
<div wicket:id="treePanel"/>
</div>
<div class="col-md-9">
<div>
<div wicket:id="catalogItemsPanel"/>
</div>
</wicket:panel>
Expand Down
Expand Up @@ -10,16 +10,20 @@
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;

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

/**
* Created by honchar.
*/
public class AssignmentCatalogPanel<F extends AbstractRoleType> extends BasePanel<String> {
public class AssignmentCatalogPanel<F extends AbstractRoleType> extends BasePanel {
private static String ID_TREE_PANEL = "treePanel";
private static String ID_CATALOG_ITEMS_PANEL = "catalogItemsPanel";

Expand All @@ -29,61 +33,81 @@ public AssignmentCatalogPanel(String id) {
super(id);
}

public AssignmentCatalogPanel(String id, IModel<String> rootOidModel, PageBase pageBase) {
super(id, rootOidModel);
public AssignmentCatalogPanel(String id, String rootOid, PageBase pageBase) {
super(id);
this.pageBase = pageBase;
initLayout();
initLayout(null, rootOid);
}

private void initLayout() {
setOutputMarkupId(true);


OrgTreePanel treePanel = new OrgTreePanel(ID_TREE_PANEL, getModel(), false, "AssignmentShoppingCartPanel.treeTitle") {
private static final long serialVersionUID = 1L;

@Override
protected void selectTreeItemPerformed(SelectableBean<OrgType> selected,
AjaxRequestTarget target) {
AssignmentCatalogPanel.this.selectTreeItemPerformed(selected, target);
}

protected List<InlineMenuItem> createTreeMenu() {
return new ArrayList<>();
}

@Override
protected List<InlineMenuItem> createTreeChildrenMenu() {
return new ArrayList<>();
}

};
treePanel.setOutputMarkupId(true);
add(treePanel);
public AssignmentCatalogPanel(String id, QName viewTypeClass, PageBase pageBase) {
super(id);
this.pageBase = pageBase;
initLayout(viewTypeClass, null);
}

CatalogItemsPanel catalogItemsPanel = new CatalogItemsPanel(ID_CATALOG_ITEMS_PANEL, getModel(), getModelObject(), pageBase);
private void initLayout(QName viewTypeClass, final String rootOid) {
setOutputMarkupId(true);
if (rootOid != null) {
OrgTreePanel treePanel = new OrgTreePanel(ID_TREE_PANEL, new IModel<String>() {
@Override
public String getObject() {
return rootOid;
}

@Override
public void setObject(String s) {

}

@Override
public void detach() {

}
}, false, "AssignmentShoppingCartPanel.treeTitle") {
private static final long serialVersionUID = 1L;

@Override
protected void selectTreeItemPerformed(SelectableBean<OrgType> selected,
AjaxRequestTarget target) {
AssignmentCatalogPanel.this.selectTreeItemPerformed(selected, target);
}

protected List<InlineMenuItem> createTreeMenu() {
return new ArrayList<>();
}

@Override
protected List<InlineMenuItem> createTreeChildrenMenu() {
return new ArrayList<>();
}

};
treePanel.setOutputMarkupId(true);
treePanel.add(new AttributeAppender("class", "col-md-3"));
add(treePanel);

} else {
WebMarkupContainer treePanel = new WebMarkupContainer(ID_TREE_PANEL);
treePanel.setVisible(false);
treePanel.setOutputMarkupId(true);
add(treePanel);
}

CatalogItemsPanel catalogItemsPanel;
if (rootOid != null) {
catalogItemsPanel = new CatalogItemsPanel(ID_CATALOG_ITEMS_PANEL, rootOid, pageBase);
catalogItemsPanel.add(new AttributeAppender("class", "col-md-9"));
} else {
catalogItemsPanel = new CatalogItemsPanel(ID_CATALOG_ITEMS_PANEL, viewTypeClass, pageBase);
catalogItemsPanel.add(new AttributeAppender("class", "col-md-12"));
}
catalogItemsPanel.setOutputMarkupId(true);
add(catalogItemsPanel);
}

private void selectTreeItemPerformed(SelectableBean<OrgType> selected, AjaxRequestTarget target) {
final OrgType selectedOgr = selected.getValue();
CatalogItemsPanel catalogItemsPanel = new CatalogItemsPanel(ID_CATALOG_ITEMS_PANEL, new IModel<String>() {
@Override
public String getObject() {
return selectedOgr.getOid();
}

@Override
public void setObject(String s) {

}

@Override
public void detach() {

}
}, selectedOgr.getOid(), pageBase);
CatalogItemsPanel catalogItemsPanel = new CatalogItemsPanel(ID_CATALOG_ITEMS_PANEL, selectedOgr.getOid(), pageBase);
catalogItemsPanel.setOutputMarkupId(true);
addOrReplace(catalogItemsPanel);
target.add(catalogItemsPanel);
Expand Down
Expand Up @@ -3,18 +3,23 @@
import com.evolveum.midpoint.gui.api.component.BasePanel;
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.model.api.ModelInteractionService;
import com.evolveum.midpoint.model.api.RoleSelectionSpecification;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.*;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.data.*;
import com.evolveum.midpoint.web.component.search.Search;
import com.evolveum.midpoint.web.component.search.SearchFactory;
import com.evolveum.midpoint.web.component.search.SearchPanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.security.SecurityUtils;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -29,13 +34,14 @@
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;

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

/**
* Created by honchar
*/
public class CatalogItemsPanel extends BasePanel<String> implements IPageableItems {
public class CatalogItemsPanel extends BasePanel implements IPageableItems {
private static String ID_MULTI_BUTTON_TABLE = "multiButtonTable";
private static final String ID_SEARCH_FORM = "searchForm";
private static final String ID_SEARCH = "search";
Expand All @@ -50,24 +56,42 @@ public class CatalogItemsPanel extends BasePanel<String> implements IPageableIte
private static String ID_CART_ITEMS_COUNT = "itemsCount";
private static final String ID_HEADER_PANEL = "headerPanel";

private static final String DOT_CLASS = CatalogItemsPanel.class.getName();
private static final Trace LOGGER = TraceManager.getTrace(CatalogItemsPanel.class);
private static final String OPERATION_LOAD_ASSIGNABLE_ROLES = DOT_CLASS + "loadAssignableRoles";

private IModel<Search> searchModel;
private ObjectDataProvider<AssignmentEditorDto, AbstractRoleType> provider;
private IModel<List<AssignmentEditorDto>> itemsListModel;

private static final long ITEMS_PER_ROW = 3;
private static final long DEFAULT_ROWS_COUNT = 5;
private PageBase pageBase;
private boolean providerSizeSet = false;
private QName focusTypeClass;
private String catalogOid;
private long currentPage = 0;

public CatalogItemsPanel(String id) {
super(id);
}

public CatalogItemsPanel(String id, IModel<String> oidModel, String oid, PageBase pageBase) {
super(id, oidModel);
public CatalogItemsPanel(String id, QName focusTypeClass, PageBase pageBase) {
super(id);
this.pageBase = pageBase;
this.focusTypeClass = focusTypeClass;
this.catalogOid = null;
initProvider();
initSearchModel();
initItemListModel();
initLayout();
}

public CatalogItemsPanel(String id, String catalogOid, PageBase pageBase) {
super(id);
this.pageBase = pageBase;
initProvider(oid);
this.catalogOid = catalogOid;
this.focusTypeClass = null;
initProvider();
initSearchModel();
initItemListModel();
initLayout();
Expand All @@ -91,7 +115,7 @@ private void initLayout() {

}

protected void initProvider(final String oid) {
protected void initProvider() {

provider = new ObjectDataProvider<AssignmentEditorDto, AbstractRoleType>(pageBase, AbstractRoleType.class) {
private static final long serialVersionUID = 1L;
Expand All @@ -110,7 +134,7 @@ public void setQuery(ObjectQuery query) {
@Override
public ObjectQuery getQuery() {

return createContentQuery(oid, null);
return createContentQuery(null);
}
};
setCurrentPage(0);
Expand Down Expand Up @@ -179,13 +203,18 @@ private void searchPerformed(ObjectQuery query, AjaxRequestTarget target) {
// panel.setCurrentPage(null);
// provider.setQuery(query);
setCurrentPage(0);
provider.setQuery(createContentQuery(getModelObject(), query));
provider.setQuery(createContentQuery(query));
refreshItemsPanel();
target.add(CatalogItemsPanel.this);
}

protected ObjectQuery createContentQuery(String oid, ObjectQuery searchQuery) {
ObjectQuery memberQuery = createMemberQuery(oid);
protected ObjectQuery createContentQuery(ObjectQuery searchQuery) {
ObjectQuery memberQuery;
if (catalogOid != null){
memberQuery = createMemberQuery(catalogOid);
} else {
memberQuery = createMemberQuery(focusTypeClass);
}
if (memberQuery == null) {
memberQuery = new ObjectQuery();
}
Expand All @@ -201,6 +230,32 @@ protected ObjectQuery createContentQuery(String oid, ObjectQuery searchQuery) {
return memberQuery;
}

private ObjectQuery createMemberQuery(QName focusTypeClass) {
ObjectQuery query = new ObjectQuery();
ObjectFilter filter = null;
if (focusTypeClass.equals(RoleType.COMPLEX_TYPE)) {
LOGGER.debug("Loading roles which the current user has right to assign");
OperationResult result = new OperationResult(OPERATION_LOAD_ASSIGNABLE_ROLES);
try {
ModelInteractionService mis = pageBase.getModelInteractionService();
RoleSelectionSpecification roleSpec =
mis.getAssignableRoleSpecification(SecurityUtils.getPrincipalUser().getUser().asPrismObject(), result);
filter = roleSpec.getFilter();
} catch (Exception ex) {
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't load available roles", ex);
result.recordFatalError("Couldn't load available roles", ex);
} finally {
result.recomputeStatus();
}
if (!result.isSuccess() && !result.isHandledError()) {
pageBase.showResult(result);
}
}
query.addFilter(TypeFilter.createType(focusTypeClass, filter));
return query;

}

private ObjectQuery createMemberQuery(String oid) {
ObjectFilter filter = OrgFilter.createOrg(oid, OrgFilter.Scope.ONE_LEVEL);

Expand Down
Expand Up @@ -20,6 +20,9 @@
<body>
<wicket:extend>
<form wicket:id="mainForm" class="form-horizontal">
<div class="form-inline" wicket:id="buttonPanel" style="margin: 15px;">
<select class="form-control input-sm" wicket:id="type"/>
</div>
<div class="main-form-panel">
<div wicket:id="mainPanel"/>
</div>
Expand Down

0 comments on commit e0285b8

Please sign in to comment.