/* * Copyright (C) 2005-2016 Alfresco Software Limited. * * This file is part of Alfresco Mobile for Android. * * 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 org.alfresco.mobile.android.application.configuration; import org.alfresco.mobile.android.api.model.Node; import org.alfresco.mobile.android.api.model.Permissions; import org.alfresco.mobile.android.api.model.config.ActionConfig; import org.alfresco.mobile.android.api.model.config.ActionGroupConfig; import org.alfresco.mobile.android.api.model.impl.DocumentImpl; import org.alfresco.mobile.android.api.services.ConfigService; import org.alfresco.mobile.android.api.session.AlfrescoSession; import org.alfresco.mobile.android.application.managers.ConfigManager; import org.alfresco.mobile.android.platform.accounts.AlfrescoAccount; import org.apache.chemistry.opencmis.commons.enums.Action; import android.content.Context; /** * Created by jpascal on 21/03/2016. */ public final class ConfigurableActionHelper { // public static final int ACTION_NODE_CREATE = 0; public static final int ACTION_NODE_DELETE = 1; public static final int ACTION_NODE_FAVORITE = 2; public static final int ACTION_NODE_LIKE = 3; public static final int ACTION_NODE_REVIEW = 4; public static final int ACTION_NODE_COMMENT = 5; public static final int ACTION_NODE_UPDATE = 6; public static final int ACTION_NODE_EDIT = 7; public static final int ACTION_NODE_RENAME = 8; public static final int ACTION_NODE_DOWNLOAD = 9; public static final int ACTION_NODE_SYNC = 10; public static final int ACTION_NODE_OPEN = 11; public static final int ACTION_NODE_SHARE = 12; public static final int ACTION_CREATE_FOLDER = 13; public static final int ACTION_CREATE_DOC = 14; public static final int ACTION_NODE_UPLOAD = 15; public static final int ACTION_NODE_EDIT_WITH_ALFRESCO = 16; public static final boolean isVisible(Context context, AlfrescoAccount account, int actionId) { return isVisible(context, account, null, null, actionId); } public static final boolean isVisible(Context context, AlfrescoAccount account, AlfrescoSession session, Node node, int actionId) { try { // First we check if configuration // No Config ==> Everything is ON boolean allowedByConfig = true; boolean permissionRequired = false; ConfigManager configManager = ConfigManager.getInstance(context); if (configManager != null && configManager.getConfig(account.getId()) != null && configManager.getConfig(account.getId()).hasActionConfig()) { ConfigService service = configManager.getConfig(account.getId()); if (service == null) { return true; } String profileId = configManager.getCurrentProfileId(); if (profileId == null) { profileId = service.getDefaultProfile().getIdentifier(); } String rootActionId = service.getProfile(profileId).getRootActionId(); if (rootActionId == null || service.getActionConfig(rootActionId) == null) { return true; } String actionNameId = null; // Config available Let's check switch (actionId) { case ACTION_CREATE_FOLDER: actionNameId = ConfigurationConstant.KEY_ACTION_CREATE_FOLDER; permissionRequired = true; break; case ACTION_CREATE_DOC: actionNameId = ConfigurationConstant.KEY_ACTION_CREATE_DOCUMENT; permissionRequired = true; break; case ACTION_NODE_UPLOAD: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_UPLOAD; permissionRequired = true; break; case ACTION_NODE_OPEN: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_OPEN; break; case ACTION_NODE_DOWNLOAD: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_DOWNLOAD; break; case ACTION_NODE_FAVORITE: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_FAVORITE; break; case ACTION_NODE_LIKE: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_LIKE; break; case ACTION_NODE_EDIT: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_EDIT; permissionRequired = true; break; case ACTION_NODE_UPDATE: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_UPDATE; permissionRequired = true; break; case ACTION_NODE_DELETE: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_DELETE; permissionRequired = true; break; case ACTION_NODE_COMMENT: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_COMMENT; permissionRequired = true; break; case ACTION_NODE_REVIEW: actionNameId = ConfigurationConstant.KEY_ACTION_WORKFLOW; break; case ACTION_NODE_SYNC: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_SYNC; break; case ACTION_NODE_SHARE: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_SHARE; break; case ACTION_NODE_EDIT_WITH_ALFRESCO: actionNameId = ConfigurationConstant.KEY_ACTION_NODE_EDIT_WITH_ALFRESCO; permissionRequired = true; break; } ActionConfig config = ((ActionGroupConfig) service.getActionConfig(rootActionId)) .getChildById(actionNameId); // Config disable the action if (config != null && !config.isEnable()) { return false; } // Config not present or is enable allowedByConfig = (config == null) || config.isEnable(); } // Configuration disable action if (!permissionRequired) { return allowedByConfig; } // If configuration doesn't disable we can check permission. boolean hasPermission = true; Permissions permission = session.getServiceRegistry().getDocumentFolderService().getPermissions(node); switch (actionId) { case ACTION_NODE_UPLOAD: case ACTION_CREATE_DOC: case ACTION_CREATE_FOLDER: hasPermission = permission.canAddChildren(); break; case ACTION_NODE_EDIT: case ACTION_NODE_EDIT_WITH_ALFRESCO: hasPermission = permission.canEdit(); break; case ACTION_NODE_UPDATE: hasPermission = ((DocumentImpl) node).hasAllowableAction(Action.CAN_SET_CONTENT_STREAM.value()); break; case ACTION_NODE_DELETE: hasPermission = permission.canDelete(); break; case ACTION_NODE_COMMENT: hasPermission = permission.canComment(); break; } return hasPermission; } catch (Exception e) { return true; } } }