/* * 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.db.core.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.jface.viewers.IStructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import com.motorola.studio.android.common.log.StudioLogger; import com.motorolamobility.studio.android.db.core.command.BrowseTableContentsHandler; import com.motorolamobility.studio.android.db.core.command.CreateDatabaseManagementClassesHandler; import com.motorolamobility.studio.android.db.core.command.DbConnectHandler; import com.motorolamobility.studio.android.db.core.command.DbCreateHandler; import com.motorolamobility.studio.android.db.core.command.DbDisconnectHandler; import com.motorolamobility.studio.android.db.core.command.DeleteDatabaseHandler; import com.motorolamobility.studio.android.db.core.command.DeleteTableHandler; import com.motorolamobility.studio.android.db.core.command.ExtractDataHandler; import com.motorolamobility.studio.android.db.core.command.LoadDataHandler; import com.motorolamobility.studio.android.db.core.command.MapDatabaseHandler; import com.motorolamobility.studio.android.db.core.command.RefreshNodeHandler; import com.motorolamobility.studio.android.db.core.command.SampleContentsHandler; import com.motorolamobility.studio.android.db.core.command.TableCreateHandler; import com.motorolamobility.studio.android.db.core.command.UnmapDatabaseHandler; import com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode; import com.motorolamobility.studio.android.db.core.ui.IDataSampler; import com.motorolamobility.studio.android.db.core.ui.IDbMapperNode; import com.motorolamobility.studio.android.db.core.ui.IDbNode; import com.motorolamobility.studio.android.db.core.ui.ITableNode; import com.motorolamobility.studio.android.db.core.ui.ITreeNode; import com.motorolamobility.studio.android.db.core.ui.TableNode; 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 { CREATE_DB("com.motorolamobility.studio.android.db.core.ui.action.createDbAction") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new DbCreateHandler((IDbCreatorNode) node); } }, CREATE_TABLE("com.motorolamobility.studio.android.db.core.ui.action.createTableAction") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new TableCreateHandler((ITableCreatorNode) node); } }, CONNECT("com.motorolamobility.studio.android.db.core.ui.action.connect") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new DbConnectHandler((IDbNode) node); } }, DISCONNECT("com.motorolamobility.studio.android.db.core.ui.action.disconnect") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new DbDisconnectHandler((IDbNode) node); } }, REFRESH_PROJECT("com.motorolamobility.studio.android.db.core.ui.action.refreshProjectNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, REFRESH_WORKSPACE( "com.motorolamobility.studio.android.db.core.ui.action.refreshWorkspaceNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, REFRESH_FILESYSTEM( "com.motorolamobility.studio.android.db.core.ui.action.refreshFileSystemNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, REFRESH_DB("com.motorolamobility.studio.android.db.core.ui.action.refreshDbNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, REFRESH_TABLE("com.motorolamobility.studio.android.db.core.ui.action.refreshTableNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, REFRESH_DB_MAPPER_NODE( "com.motorolamobility.studio.android.db.core.ui.action.refreshDbMapperNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new RefreshNodeHandler(node); } }, DELETE_TABLE("com.motorolamobility.studio.android.db.core.ui.action.deleteTable") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new DeleteTableHandler(node); } }, DELETE_DATABASE("com.motorolamobility.studio.android.db.core.ui.action.deleteDatabase") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new DeleteDatabaseHandler(node); } }, BROWSE_TABLE_CONTENTS( "com.motorolamobility.studio.android.db.core.ui.action.browseTableContents") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new BrowseTableContentsHandler((TableNode) node); } }, CREATE_DB_MANAGEMENT_CLASSES( "com.motorolamobility.studio.android.db.core.ui.action.createDatabaseManagementClasses") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new CreateDatabaseManagementClassesHandler((IDbNode) node); } }, MAP_DATABASE("com.motorolamobility.studio.android.db.core.ui.action.mapDbNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new MapDatabaseHandler((IDbMapperNode) node); } }, UNMAP_DATABASE("com.motorolamobility.studio.android.db.core.ui.action.unmapDbNode") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new UnmapDatabaseHandler((IDbMapperNode) node); } }, SAMPLE_CONTENTS("com.motorolamobility.studio.android.db.core.ui.action.sampleContents") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new SampleContentsHandler((IDataSampler) node); } }, EXTRACT_DATA("com.motorolamobility.studio.android.db.core.ui.action.extractData") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new ExtractDataHandler((ITableNode) node); } }, LOAD_DATA("com.motorolamobility.studio.android.db.core.ui.action.loadData") //$NON-NLS-1$ { @Override public IHandler getHandler(ITreeNode node) { return new LoadDataHandler((ITableNode) node); } }; private final String actionId; private ActionHandlers(String actionId) { this.actionId = actionId; } public abstract IHandler getHandler(ITreeNode node); 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; } } private ITreeNode currentNode; public void run(IAction action) { ActionHandlers type = ActionHandlers.getActionHandlerbyId(action.getId()); IHandler handler = null; if (type != null) { handler = type.getHandler(currentNode); } if (handler != null) { ExecutionEvent event = new ExecutionEvent(); try { handler.execute(event); } catch (ExecutionException e) { StudioLogger.debug("Could not execute popupHandler"); } } } public void selectionChanged(IAction action, ISelection selection) { if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; Object selectedObject = structuredSelection.getFirstElement(); if (selectedObject instanceof AbstractTreeNode) { currentNode = (ITreeNode) selectedObject; } } } public void setActivePart(IAction action, IWorkbenchPart targetPart) { //Do nothing. } }