package org.sigmah.shared.dto.referential; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import org.sigmah.client.i18n.I18N; import org.sigmah.shared.command.result.Result; import com.google.gwt.core.client.GWT; import java.util.ArrayList; import java.util.List; /** * List of the global permissions. * * @author Tom Miette (tmiette@ideia.fr) * @author Denis Colliot (dcolliot@ideia.fr) * @author Renato Almeida (renatoaf.ufcg@gmail.com) * @author Raphaƫl Calabro (rcalabro@ideia.fr) */ public enum GlobalPermissionEnum implements Result { /* * Project-related permissions. */ /** * View all projects for which the user is a member of the project team. */ VIEW_MY_PROJECTS(GlobalPermissionCategory.PROJECT), /** * Edit and save the project details, the project phases, the project funding, the log frame and the calendar of * projects for which the user is a member of the project team. */ EDIT_PROJECT(VIEW_MY_PROJECTS), /** * View all the projects list and the project page. */ VIEW_ALL_PROJECTS(VIEW_MY_PROJECTS), /** * Edit and save the project details, the project phases, the project funding, the log frame and the calendar. */ EDIT_ALL_PROJECTS(VIEW_ALL_PROJECTS), /** * Create a new project or a new funding. */ CREATE_PROJECT(GlobalPermissionCategory.PROJECT), /** * Create a new test project. */ CREATE_TEST_PROJECT(CREATE_PROJECT), /** * Delete a project. */ DELETE_PROJECT(VIEW_MY_PROJECTS), /** * Lock or unlock a project. */ LOCK_PROJECT(VIEW_MY_PROJECTS), /** * Modify locked content. (i. e. content of closed phases and content of closed projects). */ MODIFY_LOCKED_CONTENT(EDIT_PROJECT), /** * Remove a file (in the files list flexible element of projects). */ REMOVE_PROJECT_FILE(EDIT_PROJECT), /** * Close or activate a phase. */ CHANGE_PHASE(EDIT_PROJECT), /** * For relating projects. */ RELATE_PROJECT(EDIT_PROJECT), /** * Validate the amendement. */ VALID_AMENDEMENT(EDIT_PROJECT), /** * for viewing the logframe sub-tab. */ VIEW_LOGFRAME(VIEW_MY_PROJECTS), /** * for creating/modifying/deleting objectives, expected results, activities, * hypothesis or linking/unlinking indicators to the logframe. */ EDIT_LOGFRAME(VIEW_LOGFRAME), /** * for viewing the agenda sub-tab. */ VIEW_PROJECT_AGENDA(VIEW_MY_PROJECTS), /** * for creating/deleting/modifying events in the agenda. */ EDIT_PROJECT_AGENDA(VIEW_PROJECT_AGENDA), /** * for creating/deleting/modifying/closing reminders created by the user. */ EDIT_OWN_REMINDERS(VIEW_MY_PROJECTS), /** * for displaying the import button. */ IMPORT_BUTTON(GlobalPermissionCategory.OTHER), /** * for creating/deleting/modifying/closing reminders created by the user or * by other users. */ EDIT_ALL_REMINDERS(EDIT_OWN_REMINDERS), /** * for viewing the two indicator sub-tabs. */ VIEW_INDICATOR(VIEW_MY_PROJECTS), /** * for creating/deleting/modifying indicator definitions. */ MANAGE_INDICATOR(VIEW_INDICATOR), /** * for editing values of existing indicators. */ EDIT_INDICATOR(VIEW_INDICATOR), /** * For viewing Project > Map. */ VIEW_MAPTAB(VIEW_INDICATOR), /** * For setting/editing the main location(site). */ MANAGE_MAIN_SITE(VIEW_MAPTAB), /** * For creating/editing sites. */ MANAGE_SITES(VIEW_MAPTAB), /** * */ VIEW_PROJECT_TEAM_MEMBERS(VIEW_MY_PROJECTS), EDIT_PROJECT_TEAM_MEMBERS(VIEW_PROJECT_TEAM_MEMBERS), /* * Org unit-related permissions. */ /** * Edit and save the org. unit content. */ EDIT_ORG_UNIT(GlobalPermissionCategory.ORG_UNIT), /** * Remove a file (in the files list flexible element of org. units). */ REMOVE_ORG_UNIT_FILE(EDIT_ORG_UNIT), /** * For viewing the agenda sub-tab of org. units. */ VIEW_ORG_UNIT_AGENDA(GlobalPermissionCategory.ORG_UNIT), /** * For creating/deleting/modifying events in the agenda of org. units. */ EDIT_ORG_UNIT_AGENDA(VIEW_ORG_UNIT_AGENDA), /* * Contact related permissions. */ /** * For viewing contacts related to available org units. */ VIEW_VISIBLE_CONTACTS(GlobalPermissionCategory.CONTACT), /** * For exporting all contacts */ EXPORT_ALL_CONTACTS(VIEW_VISIBLE_CONTACTS), /** * For creating/deleting/modifying visible contacts */ EDIT_VISIBLE_CONTACTS(VIEW_VISIBLE_CONTACTS), /** * For importing or creating contacts */ IMPORT_CONTACTS(VIEW_VISIBLE_CONTACTS), /** * For deleting contacts */ DELETE_VISIBLE_CONTACTS(VIEW_VISIBLE_CONTACTS), /* * Administration-related permissions. */ /** * View the admin link. */ VIEW_ADMIN(GlobalPermissionCategory.ADMINISTRATION), /** * View the admin page to manage users. */ MANAGE_USERS(VIEW_ADMIN), /** * View the admin page to manage the org units. */ MANAGE_ORG_UNITS(VIEW_ADMIN), /** * View the admin page to manage project models. */ MANAGE_PROJECT_MODELS(VIEW_ADMIN), /** * View the admin page to manage org unit models. */ MANAGE_ORG_UNIT_MODELS(VIEW_ADMIN), /** * View the admin page to manage contact models. */ MANAGE_CONTACT_MODELS(VIEW_ADMIN), /** * View the admin page to manage report models. */ MANAGE_REPORT_MODELS(VIEW_ADMIN), /** * View the admin page to manage categories. */ MANAGE_CATEGORIES(VIEW_ADMIN), /** * View the admin page to manage importation schemes. */ MANAGE_IMPORTATION_SCHEMES(VIEW_ADMIN), /** * View the admin page to manage system settings. */ MANAGE_SETTINGS(VIEW_ADMIN), /** * Show global export button in projects list. */ GLOBAL_EXPORT(GlobalPermissionCategory.OTHER), /** * For exporting HXL data. */ EXPORT_HXL(GlobalPermissionCategory.OTHER), /** * Create a new layout group iteration */ CREATE_ITERATIONS(GlobalPermissionCategory.OTHER), /** * For changing own password. */ CHANGE_PASSWORD(GlobalPermissionCategory.OTHER), /** * For management measure performances. */ PROBES_MANAGEMENT(GlobalPermissionCategory.OTHER); /** * The global permission category (never {@code null}). */ private final GlobalPermissionCategory category; /** * The parent permission. * {@code null} if a category is defined. */ private final GlobalPermissionEnum parent; /** * Initializes the global permission with its category. * * @param category * The category, or {@code null} if not categorized. */ private GlobalPermissionEnum(final GlobalPermissionCategory category) { this.category = category == null ? GlobalPermissionCategory._NONE : category; this.parent = null; } /** * * @param parent */ private GlobalPermissionEnum(final GlobalPermissionEnum parent) { this.category = parent.getCategory(); this.parent = parent; } /** * Returns the global permission related category. * * @return The global permission related category (never {@code null}). */ public GlobalPermissionCategory getCategory() { return category; } /** * Returns the parent permission. * * @return The parent permission or <code>null</code>. */ public GlobalPermissionEnum getParent() { return parent; } public boolean hasDependency() { return getParent() != null; } public List<GlobalPermissionEnum> getChildren() { final ArrayList<GlobalPermissionEnum> children = new ArrayList<GlobalPermissionEnum>(); for (GlobalPermissionEnum permission : values()) { if (permission != this && permission.getParent() == this) { children.add(permission); } } return children; } public boolean isRoot() { return parent == null; } public boolean isLeaf() { return getChildren().isEmpty(); } /** * Global permissions category. * * @author Denis Colliot (dcolliot@ideia.fr) */ public static enum GlobalPermissionCategory { // WARNING: Categories ordinal order is used in profiles administration. PROJECT, INDICATOR, ORG_UNIT, CONTACT, ADMINISTRATION, OTHER, /** * Uncategorized. */ // Should be the last category. _NONE; /** * <p> * Returns the given {@code globalPermissionCategory} corresponding name.<br> * If the given {@code globalPermissionCategory} is {@code null}, the method returns an <em>unmapped</em> name. * </p> * <p> * If this method is executed from server-side, it returns the given {@code globalPermissionCategory} constant name. * </p> * * @param globalPermissionCategory * The global permission category. * @return the given {@code globalPermissionCategory} corresponding name. */ public static String getName(GlobalPermissionCategory globalPermissionCategory) { if (globalPermissionCategory == null) { globalPermissionCategory = GlobalPermissionCategory._NONE; } if (!GWT.isClient()) { return globalPermissionCategory.name(); } switch (globalPermissionCategory) { case PROJECT: return I18N.CONSTANTS.categoryProject(); case INDICATOR: return I18N.CONSTANTS.categoryIndicator(); case ORG_UNIT: return I18N.CONSTANTS.categoryOrgUnit(); case CONTACT: return I18N.CONSTANTS.categoryContact(); case ADMINISTRATION: return I18N.CONSTANTS.categoryAdministration(); case OTHER: return I18N.CONSTANTS.categoryOthers(); default: return I18N.CONSTANTS.categoryNotMapped(); } } public List<GlobalPermissionEnum> getChildren() { final ArrayList<GlobalPermissionEnum> permissions = new ArrayList<GlobalPermissionEnum>(); for (GlobalPermissionEnum permission : GlobalPermissionEnum.values()) { if (permission.getCategory() == this && permission.getParent() == null) { permissions.add(permission); } } return permissions; } public boolean isEmpty() { return getChildren().isEmpty(); } } /** * <p> * Returns the given {@code globalPermission} corresponding name. * </p> * <p> * If this method is executed from server-side, it returns the given {@code globalPermission} constant name. * </p> * * @param globalPermission * The global permission. * @return the given {@code globalPermission} corresponding name, or {@code null}. */ public static String getName(final GlobalPermissionEnum globalPermission) { if (globalPermission == null) { return null; } if (!GWT.isClient()) { return globalPermission.name(); } switch (globalPermission) { case VIEW_MY_PROJECTS: return I18N.CONSTANTS.VIEW_MY_PROJECTS(); case EDIT_PROJECT: return I18N.CONSTANTS.EDIT_PROJECT(); case VIEW_ALL_PROJECTS: return I18N.CONSTANTS.VIEW_ALL_PROJECTS(); case EDIT_ALL_PROJECTS: return I18N.CONSTANTS.EDIT_ALL_PROJECTS(); case CREATE_PROJECT: return I18N.CONSTANTS.CREATE_PROJECT(); case CREATE_TEST_PROJECT: return I18N.CONSTANTS.CREATE_TEST_PROJECT(); case DELETE_PROJECT: return I18N.CONSTANTS.DELETE_PROJECT(); case LOCK_PROJECT: return I18N.CONSTANTS.LOCK_PROJECT(); case MODIFY_LOCKED_CONTENT: return I18N.CONSTANTS.MODIFY_LOCKED_CONTENT(); case REMOVE_PROJECT_FILE: return I18N.CONSTANTS.REMOVE_PROJECT_FILE(); case CHANGE_PHASE: return I18N.CONSTANTS.CHANGE_PHASE(); case RELATE_PROJECT: return I18N.CONSTANTS.RELATE_PROJECT(); case VALID_AMENDEMENT: return I18N.CONSTANTS.VALID_AMENDEMENT(); case VIEW_LOGFRAME: return I18N.CONSTANTS.VIEW_LOGFRAME(); case EDIT_LOGFRAME: return I18N.CONSTANTS.EDIT_LOGFRAME(); case VIEW_PROJECT_AGENDA: return I18N.CONSTANTS.VIEW_AGENDA(); case EDIT_PROJECT_AGENDA: return I18N.CONSTANTS.EDIT_AGENDA(); case EDIT_ALL_REMINDERS: return I18N.CONSTANTS.EDIT_ALL_REMINDERS(); case EDIT_OWN_REMINDERS: return I18N.CONSTANTS.EDIT_OWN_REMINDERS(); case VIEW_INDICATOR: return I18N.CONSTANTS.VIEW_INDICATOR(); case MANAGE_INDICATOR: return I18N.CONSTANTS.MANAGE_INDICATOR(); case EDIT_INDICATOR: return I18N.CONSTANTS.EDIT_INDICATOR(); case VIEW_MAPTAB: return I18N.CONSTANTS.VIEW_MAPTAB(); case MANAGE_MAIN_SITE: return I18N.CONSTANTS.MANAGE_MAIN_SITE(); case MANAGE_SITES: return I18N.CONSTANTS.MANAGE_SITES(); case VIEW_PROJECT_TEAM_MEMBERS: return I18N.CONSTANTS.VIEW_PROJECT_TEAM_MEMBERS(); case EDIT_PROJECT_TEAM_MEMBERS: return I18N.CONSTANTS.EDIT_PROJECT_TEAM_MEMBERS(); case GLOBAL_EXPORT: return I18N.CONSTANTS.GLOBAL_EXPORT(); case CREATE_ITERATIONS: return I18N.CONSTANTS.CREATE_ITERATIONS(); case EDIT_ORG_UNIT: return I18N.CONSTANTS.EDIT_ORG_UNIT(); case REMOVE_ORG_UNIT_FILE: return I18N.CONSTANTS.REMOVE_ORG_UNIT_FILE(); case VIEW_ORG_UNIT_AGENDA: return I18N.CONSTANTS.VIEW_ORG_UNIT_AGENDA(); case EDIT_ORG_UNIT_AGENDA: return I18N.CONSTANTS.EDIT_ORG_UNIT_AGENDA(); case VIEW_VISIBLE_CONTACTS: return I18N.CONSTANTS.contactPermissionViewVisibleContacts(); case EXPORT_ALL_CONTACTS: return I18N.CONSTANTS.contactPermissionExportAllContacts(); case EDIT_VISIBLE_CONTACTS: return I18N.CONSTANTS.contactPermissionEditVisibleContacts(); case IMPORT_CONTACTS: return I18N.CONSTANTS.contactPermissionImportContacts(); case DELETE_VISIBLE_CONTACTS: return I18N.CONSTANTS.contactPermissionDeleteVisibleContacts(); case VIEW_ADMIN: return I18N.CONSTANTS.VIEW_ADMIN(); case MANAGE_USERS: return I18N.CONSTANTS.MANAGE_USERS(); case MANAGE_ORG_UNITS: return I18N.CONSTANTS.MANAGE_ORG_UNITS(); case MANAGE_PROJECT_MODELS: return I18N.CONSTANTS.MANAGE_PROJECT_MODELS(); case MANAGE_ORG_UNIT_MODELS: return I18N.CONSTANTS.MANAGE_ORG_UNIT_MODELS(); case MANAGE_CONTACT_MODELS: return I18N.CONSTANTS.MANAGE_CONTACT_MODELS(); case MANAGE_REPORT_MODELS: return I18N.CONSTANTS.MANAGE_REPORT_MODELS(); case MANAGE_CATEGORIES: return I18N.CONSTANTS.MANAGE_CATEGORIES(); case MANAGE_IMPORTATION_SCHEMES: return I18N.CONSTANTS.MANAGE_IMPORTATION_SCHEMES(); case MANAGE_SETTINGS: return I18N.CONSTANTS.MANAGE_SETTINGS(); case EXPORT_HXL: return I18N.CONSTANTS.EXPORT_HXL(); case PROBES_MANAGEMENT: return I18N.CONSTANTS.PROBES_MANAGEMENT(); default: return globalPermission.name(); } } }