Skip to content

Commit

Permalink
users view implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jun 27, 2018
1 parent 8c2625f commit 1f65263
Show file tree
Hide file tree
Showing 8 changed files with 182 additions and 17 deletions.
Expand Up @@ -633,7 +633,8 @@ private List<GuiObjectColumnType> getGuiObjectColumnTypeList(){
}

private boolean isCustomColumnsListConfigured(){
return getGuiObjectColumnTypeList() != null;
List<GuiObjectColumnType> columnList = getGuiObjectColumnTypeList();
return columnList != null && !columnList.isEmpty();
}

private String getItemDisplayName(GuiObjectColumnType column){
Expand Down
Expand Up @@ -105,10 +105,7 @@
import com.evolveum.midpoint.web.page.admin.server.PageTasksCertScheduling;
import com.evolveum.midpoint.web.page.admin.services.PageService;
import com.evolveum.midpoint.web.page.admin.services.PageServices;
import com.evolveum.midpoint.web.page.admin.users.PageOrgTree;
import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit;
import com.evolveum.midpoint.web.page.admin.users.PageUser;
import com.evolveum.midpoint.web.page.admin.users.PageUsers;
import com.evolveum.midpoint.web.page.admin.users.*;
import com.evolveum.midpoint.web.page.admin.valuePolicy.PageValuePolicies;
import com.evolveum.midpoint.web.page.admin.valuePolicy.PageValuePolicy;
import com.evolveum.midpoint.web.page.admin.workflow.*;
Expand Down Expand Up @@ -177,6 +174,7 @@ public abstract class PageBase extends WebPage implements ModelServiceLocator {

private static final String DOT_CLASS = PageBase.class.getName() + ".";
private static final String OPERATION_LOAD_USER = DOT_CLASS + "loadUser";
private static final String OPERATION_LOAD_USERS_VIEW_COLLECTION_REF = DOT_CLASS + "loadUsersViewCollectionRef";
private static final String OPERATION_LOAD_WORK_ITEM_COUNT = DOT_CLASS + "loadWorkItemCount";
private static final String OPERATION_LOAD_CERT_WORK_ITEM_COUNT = DOT_CLASS + "loadCertificationWorkItemCount";

Expand Down Expand Up @@ -1732,6 +1730,8 @@ private MainMenuItem createUsersItems() {
createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.users.new",
"PageAdmin.menu.top.users.edit", PageUser.class, true);

addUsersViewMenuItems(item.getItems());

return item;
}

Expand Down Expand Up @@ -1875,6 +1875,51 @@ private MainMenuItem createServicesItems() {
return item;
}

private void addUsersViewMenuItems(List<MenuItem> menu){
List<GuiObjectListViewType> objectListViews = getObjectViewsList();
if (objectListViews == null){
return;
}
objectListViews.forEach(objectListView -> {
if (objectListView.getType() != null && !objectListView.getType().equals(UserType.COMPLEX_TYPE)){
return;
}
ObjectReferenceType collectionRef = objectListView.getCollectionRef();
if (collectionRef == null){
return;
}
OperationResult result = new OperationResult(OPERATION_LOAD_USERS_VIEW_COLLECTION_REF);
Task task = createSimpleTask(OPERATION_LOAD_USERS_VIEW_COLLECTION_REF);
PrismObject<? extends ObjectType> collectionObject = WebModelServiceUtils.resolveReferenceNoFetch(collectionRef, this, task, result);
if (collectionObject == null){
return;
}
if (collectionObject.getValue().asObjectable() instanceof ObjectCollectionType) {
ObjectCollectionType collectionValue = (ObjectCollectionType) collectionObject.getValue().asObjectable();
if (!collectionValue.getType().equals(UserType.COMPLEX_TYPE)) {
return;
}
DisplayType viewDisplayType = objectListView.getDisplay();

PageParameters pageParameters = new PageParameters();
pageParameters.add(PageUsersView.PARAMETER_OBJECT_COLLECTION_TYPE_OID, collectionValue.getOid());

MenuItem userViewMenu = new MenuItem(viewDisplayType != null && StringUtils.isNotEmpty(viewDisplayType.getLabel()) ?
createStringResource(viewDisplayType.getLabel()) : createStringResource("MenuItem.noName"), PageUsersView.class,
pageParameters, null);
menu.add(userViewMenu);
}
});
}

private List<GuiObjectListViewType> getObjectViewsList(){
GuiObjectListViewsType objectListViews = getAdminGuiConfiguration().getObjectLists();
if (objectListViews == null){
return null;
}
return objectListViews.getObjectList();
}

public PrismObject<UserType> loadUserSelf() {
Task task = createSimpleTask(OPERATION_LOAD_USER);
OperationResult result = task.getResult();
Expand Down
Expand Up @@ -25,6 +25,7 @@
import com.evolveum.midpoint.prism.query.InOidFilter;
import com.evolveum.midpoint.prism.query.NotFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.application.Url;
import com.evolveum.midpoint.web.component.data.column.*;
import com.evolveum.midpoint.web.component.search.SearchFactory;
Expand Down Expand Up @@ -69,7 +70,6 @@
import com.evolveum.midpoint.web.component.search.Search;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.users.component.ExecuteChangeOptionsDto;
import com.evolveum.midpoint.web.page.admin.users.dto.UsersDto;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;

Expand Down Expand Up @@ -115,14 +115,10 @@ public class PageUsers extends PageAdminUsers {
private LoadableModel<ExecuteChangeOptionsDto> executeOptionsModel;

public PageUsers() {
this(true, null, null);
this(null);
}

public PageUsers(boolean clearPagingInSession) {
this(clearPagingInSession, null, null);
}

public PageUsers(boolean clearPagingInSession, final UsersDto.SearchType type, final String text) {
public PageUsers(final String text) {

executeOptionsModel = new LoadableModel<ExecuteChangeOptionsDto>(false) {

Expand All @@ -135,11 +131,12 @@ protected ExecuteChangeOptionsDto load() {
if (StringUtils.isNotEmpty(text)){
initSearch(text);
}
initLayout();
}

public PageUsers(UsersDto.SearchType type, String text) {
this(true, type, text);
@Override
protected void onInitialize(){
super.onInitialize();
initLayout();
}

private void initSearch(String text){
Expand Down Expand Up @@ -215,6 +212,19 @@ protected void objectDetailsPerformed(AjaxRequestTarget target, UserType object)
protected void newObjectPerformed(AjaxRequestTarget target) {
navigateToNext(PageUser.class);
}

@Override
protected ObjectQuery createContentQuery() {
ObjectQuery contentQuery = super.createContentQuery();
ObjectFilter usersViewFilter = getUsersViewFilter();
if (usersViewFilter != null){
if (contentQuery == null){
contentQuery = new ObjectQuery();
}
contentQuery.addFilter(usersViewFilter);
}
return contentQuery;
}
};

userListPanel.setAdditionalBoxCssClasses(GuiStyleConstants.CLASS_OBJECT_USER_BOX_CSS_CLASSES);
Expand Down Expand Up @@ -678,4 +688,8 @@ private boolean isShowConfirmationDialog(ColumnMenuAction action){
return action.getRowModel() != null ||
getTable().getSelectedObjectsCount() > 0;
}

protected ObjectFilter getUsersViewFilter(){
return null;
}
}
@@ -0,0 +1,100 @@
/*
* Copyright (c) 2010-2017 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.web.page.admin.users;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.marshaller.QueryConvertor;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
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;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.application.Url;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
import org.apache.catalina.User;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;

/**
* @author honchar
*/
@PageDescriptor(
urls = {
@Url(mountUrl = "/admin/usersView", matchUrlForSecurity = "/admin/usersView")
},
action = {
@AuthorizationAction(actionUri = PageAdminUsers.AUTH_USERS_ALL,
label = PageAdminUsers.AUTH_USERS_ALL_LABEL,
description = PageAdminUsers.AUTH_USERS_ALL_DESCRIPTION),
@AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_USERS_VIEW_URL,
label = "PageUsers.auth.users.label",
description = "PageUsers.auth.users.description")
})
public class PageUsersView extends PageUsers {
private static final long serialVersionUID = 1L;

public static final String PARAMETER_OBJECT_COLLECTION_TYPE_OID = "collectionOid";

private static final Trace LOGGER = TraceManager.getTrace(PageUsersView.class);

private static final String DOT_CLASS = PageUsersView.class.getName() + ".";
private static final String OPERATION_LOAD_USERS_VIEW_COLLECTION_REF = DOT_CLASS + "loadUsersViewCollectionRef";

private ObjectFilter viewFilter;

public PageUsersView(){
super();
}

@Override
protected ObjectFilter getUsersViewFilter(){
PageParameters parameters = getPageParameters();
StringValue collectionOidValue = parameters.get(PARAMETER_OBJECT_COLLECTION_TYPE_OID);
if (collectionOidValue == null || collectionOidValue.isEmpty()){
return null;
}
OperationResult result = new OperationResult(OPERATION_LOAD_USERS_VIEW_COLLECTION_REF);
Task task = createSimpleTask(OPERATION_LOAD_USERS_VIEW_COLLECTION_REF);
PrismObject<ObjectCollectionType> collectionObject = WebModelServiceUtils.loadObject(ObjectCollectionType.class, collectionOidValue.toString(),
this, task, result);
if (collectionObject == null){
return null;
}
ObjectCollectionType collectionValue = collectionObject.getValue().asObjectable();
if (!collectionValue.getType().equals(UserType.COMPLEX_TYPE)){
return null;
}
ObjectFilter filter = null;
try {
filter = QueryConvertor.parseFilter(collectionValue.getFilter(), UserType.class, getPrismContext());
} catch (SchemaException ex){
result.recomputeStatus();
result.recordFatalError("Couldn't parse filter. Filter: " + collectionValue.getFilter(), ex);
LoggingUtils.logUnexpectedException(LOGGER, "Couldn't parse filter. Filter: " + collectionValue.getFilter(), ex);
}
return filter;
}
}
Expand Up @@ -155,7 +155,7 @@ protected void onComponentTag(final ComponentTag tag) {

private void performSearch(String searchType, String text) {
if (SEARCH_TYPES.indexOf(searchType) == USER_INDEX) {
setResponsePage(new PageUsers(UsersDto.SearchType.NAME, text));
setResponsePage(new PageUsers(text));
} else if (SEARCH_TYPES.indexOf(searchType) == RESOURCE_INDEX) {
setResponsePage(new PageResources(text));
} else if (SEARCH_TYPES.indexOf(searchType) == TASK_INDEX) {
Expand Down
Expand Up @@ -3938,6 +3938,7 @@ AbstractAssignmentDetailsPanel.properties=Properties
AssignmentPanel.doneButton=Done
AssignmentPanel.cancelButton=Cancel
AssignmentPanel.noName=n/a
MenuItem.noName=n/a
ObjectPolicyConfigurationEditor.conflictResolution=(conflict resolution)
PageSelfConsents.title=Consents
SelfConsentPanel.button.revoke=Revoke
Expand Down Expand Up @@ -4034,6 +4035,7 @@ CertCampaignStateFilter.REVIEW_STAGE_DONE=Review stage done
CertCampaignStateFilter.IN_REMEDIATION=In remediation
CertCampaignStateFilter.CLOSED=Closed
DisplayNamePanel.kindIntentLabel=Kind: {0}, Intent: {1}
PageUsersView.title=Users view
pageAdminFocus.dataProtection=Data protection
PageInternals.title.cache=Caches
PageInternals.tab.cache=Cache management
Expand Down
Expand Up @@ -3241,7 +3241,7 @@ SystemInfoPanel.starttime=Дата и время запуска
SystemInfoPanel.uptime=Время непрерывной работы
CountToolbar.label.unknownCount=Отображение {0,number,integer} до{1,number,integer}, неизвестное число подходящих результатов.
TableConfigurationPanel.pageSize=Размер страницы
TableConfigurationPanel.tableColumns=Таблица columnsCountToolbar.label.unknownCount=Отображение {0,number,integer} до{1,number,integer}, неизвестное число подходящих результатов.
TableConfigurationPanel.tableColumns=Колонки таблицы
MyRequestsPanel.started=Начато выполнение
MyRequestsPanel.rejected=Отклонено
MyRequestsPanel.skipped=Skipped
Expand Down
Expand Up @@ -96,6 +96,9 @@ public class AuthorizationConstants {
public static final QName AUTZ_UI_USERS_QNAME = new QName(NS_AUTHORIZATION_UI, "users");
public static final String AUTZ_UI_USERS_URL = NS_AUTHORIZATION_UI + "#users";

public static final QName AUTZ_UI_USERS_VIEW_QNAME = new QName(NS_AUTHORIZATION_UI, "usersView");
public static final String AUTZ_UI_USERS_VIEW_URL = NS_AUTHORIZATION_UI + "usersView";

public static final QName AUTZ_UI_FIND_USERS_QNAME = new QName(NS_AUTHORIZATION_UI, "findUsers");
public static final String AUTZ_UI_FIND_USERS_URL = NS_AUTHORIZATION_UI + "#findUsers";

Expand Down

0 comments on commit 1f65263

Please sign in to comment.