/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.hadoop.eclipse.dfs; import org.apache.hadoop.eclipse.ImageLibrary; import org.apache.hadoop.eclipse.actions.DFSActionImpl; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IActionBars; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.navigator.CommonActionProvider; import org.eclipse.ui.navigator.ICommonActionConstants; import org.eclipse.ui.navigator.ICommonActionExtensionSite; import org.eclipse.ui.navigator.ICommonMenuConstants; /** * Allows the user to delete and refresh items in the DFS tree */ public class ActionProvider extends CommonActionProvider { private static ICommonActionExtensionSite site; public ActionProvider() { } /* @inheritDoc */ @Override public void init(ICommonActionExtensionSite site) { if (ActionProvider.site != null) { System.err.printf("%s: Multiple init()\n", this.getClass() .getCanonicalName()); return; } super.init(site); ActionProvider.site = site; } /* @inheritDoc */ @Override public void fillActionBars(IActionBars actionBars) { actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), new DFSAction(DFSActions.DELETE)); actionBars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), new DFSAction(DFSActions.REFRESH)); if (site == null) return; if ((site.getStructuredViewer().getSelection() instanceof IStructuredSelection) && (((IStructuredSelection) site.getStructuredViewer() .getSelection()).size() == 1) && (((IStructuredSelection) site.getStructuredViewer() .getSelection()).getFirstElement() instanceof DFSFile)) { actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, new DFSAction(DFSActions.OPEN)); } actionBars.updateActionBars(); } /* @inheritDoc */ @Override public void fillContextMenu(IMenuManager menu) { /* * Actions on multiple selections */ menu.appendToGroup(ICommonMenuConstants.GROUP_EDIT, new DFSAction( DFSActions.DELETE)); menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, new DFSAction( DFSActions.REFRESH)); menu.appendToGroup(ICommonMenuConstants.GROUP_NEW, new DFSAction( DFSActions.DOWNLOAD)); if (site == null) return; ISelection isel = site.getStructuredViewer().getSelection(); if (!(isel instanceof IStructuredSelection)) return; /* * Actions on single selections only */ IStructuredSelection issel = (IStructuredSelection) isel; if (issel.size() != 1) return; Object element = issel.getFirstElement(); if (element instanceof DFSFile) { menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, new DFSAction( DFSActions.OPEN)); } else if (element instanceof DFSFolder) { menu.appendToGroup(ICommonMenuConstants.GROUP_NEW, new DFSAction( DFSActions.MKDIR)); menu.appendToGroup(ICommonMenuConstants.GROUP_NEW, new DFSAction( DFSActions.UPLOAD_FILES)); menu.appendToGroup(ICommonMenuConstants.GROUP_NEW, new DFSAction( DFSActions.UPLOAD_DIR)); } else if (element instanceof DFSLocation) { menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, new DFSAction( DFSActions.RECONNECT)); } else if (element instanceof DFSLocationsRoot) { menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, new DFSAction( DFSActions.DISCONNECT)); } } /** * Representation of an action on a DFS entry in the browser */ public static class DFSAction extends Action { private final String id; private final String title; private DFSActions action; public DFSAction(String id, String title) { this.id = id; this.title = title; } public DFSAction(DFSActions action) { this.id = action.id; this.title = action.title; } /* @inheritDoc */ @Override public String getText() { return this.title; } /* @inheritDoc */ @Override public ImageDescriptor getImageDescriptor() { return ImageLibrary.get(getActionDefinitionId()); } /* @inheritDoc */ @Override public String getActionDefinitionId() { return id; } /* @inheritDoc */ @Override public void run() { DFSActionImpl action = new DFSActionImpl(); action.setActivePart(this, PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage().getActivePart()); action.selectionChanged(this, site.getStructuredViewer() .getSelection()); action.run(this); } /* @inheritDoc */ @Override public boolean isEnabled() { return true; } } }