/* * Copyright (C) 2012 The Android Open Source Project * * 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.motorolamobility.studio.android.certmanager.ui.action; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import com.motorola.studio.android.common.log.StudioLogger; import com.motorola.studio.android.common.utilities.EclipseUtils; import com.motorolamobility.studio.android.certmanager.command.BackupHandler; import com.motorolamobility.studio.android.certmanager.command.CertificatePropertiesHandler; import com.motorolamobility.studio.android.certmanager.command.ChangeKeyStoreTypeHandler; import com.motorolamobility.studio.android.certmanager.command.ChangePasswordKeyHandler; import com.motorolamobility.studio.android.certmanager.command.ChangePasswordKeystoreHandler; import com.motorolamobility.studio.android.certmanager.command.CreateKeyHandler; import com.motorolamobility.studio.android.certmanager.command.DeleteKeyHandler; import com.motorolamobility.studio.android.certmanager.command.DeleteKeystoreHandler; import com.motorolamobility.studio.android.certmanager.command.ImportKeyStoreEntriesHandler; import com.motorolamobility.studio.android.certmanager.command.RefreshHandler; import com.motorolamobility.studio.android.certmanager.command.SignExternalPackagesHandler; public class PopupMenuActionDelegate implements IObjectActionDelegate { /** * Enum type for ActionHandlers. If you need to add a new ActionHandler, just include * a new type to this enum with the action id that you defined on your action extension point */ enum ActionHandlers { SIGN_PACKAGE("com.motorolamobility.studio.android.certmanager.core.ui.action.addSignature") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new SignExternalPackagesHandler(); } }, BACKUP_KEYSTORE( "com.motorolamobility.studio.android.certmanager.core.ui.action.backupKeystore") //$NON-NLS-1$ { @Override public IHandler getHandler() { //this handler will delegate the operation to another action that, in turn, //will retrieve the current selection //therefore, the parameter treeNode is not used here. return new BackupHandler(); } }, DELETE_KEYSTORE( "com.motorolamobility.studio.android.certmanager.core.ui.action.deleteKeystore") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new DeleteKeystoreHandler(); } }, PROPERTIES_KEYSTORE( "com.motorolamobility.studio.android.certmanager.core.ui.action.certificateProperties") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new CertificatePropertiesHandler(); } }, CHANGE_KEYSTORE_PASSWORD( "com.motorolamobility.studio.android.certmanager.core.ui.action.changeKeystorePassword") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new ChangePasswordKeystoreHandler(); } }, CHANGE_KEY_PASSWORD( "com.motorolamobility.studio.android.certmanager.core.ui.action.changeKeyPassword") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new ChangePasswordKeyHandler(); } }, CREATE_KEY("com.motorolamobility.studio.android.certmanager.core.ui.action.createKey") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new CreateKeyHandler(); } }, DELETE_KEY("com.motorolamobility.studio.android.certmanager.core.ui.action.deleteEntry") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new DeleteKeyHandler(); } }, REFRESH("com.motorolamobility.studio.android.certmanager.core.ui.action.refresh") //$NON-NLS-1$ { @Override public IHandler getHandler() { return new RefreshHandler(); } }, CHANGE_KEYSTORE_TYPE( "com.motorolamobility.studio.android.certmanager.core.ui.action.changeKeystoreType") { @Override public IHandler getHandler() { return new ChangeKeyStoreTypeHandler(); } }, IMPORT_KEYSTORE_ENTRIES( "com.motorolamobility.studio.android.certmanager.core.ui.action.importKeystoreEntries") { @Override public IHandler getHandler() { return new ImportKeyStoreEntriesHandler(); } }; private final String actionId; private ActionHandlers(String actionId) { this.actionId = actionId; } public abstract IHandler getHandler(); public static ActionHandlers getActionHandlerbyId(String id) { Object ret = null; for (ActionHandlers h : ActionHandlers.values()) { if (h.actionId.equals(id)) { ret = h; break; } } return (ActionHandlers) ret; } } @Override public void run(IAction action) { ActionHandlers type = ActionHandlers.getActionHandlerbyId(action.getId()); IHandler handler = null; if (type != null) { handler = type.getHandler(); } if (handler != null) { ExecutionEvent event = new ExecutionEvent(); try { handler.execute(event); } catch (ExecutionException e) { StudioLogger.error(PopupMenuActionDelegate.class, e.getMessage(), e); EclipseUtils.showErrorDialog("Execution error", e.getMessage()); } } } @Override public void selectionChanged(IAction action, ISelection selection) { //selection is retrieved by the handlers } @Override public void setActivePart(IAction action, IWorkbenchPart targetPart) { //do nothing } }