package kr.co.apexsoft.stella.modeler.explorer.actionprovider; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.papyrus.infra.onefile.utils.OneFileUtils; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.RenameResourceAction; import org.eclipse.ui.navigator.CommonActionProvider; import org.eclipse.ui.navigator.ICommonActionExtensionSite; import org.eclipse.ui.navigator.ICommonMenuConstants; import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; public class ResourceActionProvider extends CommonActionProvider { private boolean fInViewPart = false; private ICommonViewerWorkbenchSite workbenchSite; private Action renameAction; public ResourceActionProvider() { } @Override public void fillActionBars(IActionBars actionBars) { if(fInViewPart) { if (renameAction.isEnabled()) { actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction); } } super.fillActionBars(actionBars); } @Override public void fillContextMenu(IMenuManager menu) { super.fillContextMenu(menu); // appendToGroup(menu, renameAction, ICommonMenuConstants.GROUP_EDIT); } private void appendToGroup(IMenuManager menu, IAction action, String id) { if(action != null && action.isEnabled()) { menu.appendToGroup(id, action); } } @Override public void init(ICommonActionExtensionSite site) { if(site.getViewSite() instanceof ICommonViewerWorkbenchSite) { workbenchSite = (ICommonViewerWorkbenchSite)site.getViewSite(); } if(workbenchSite != null) { if(workbenchSite.getPart() != null && workbenchSite.getPart() instanceof IViewPart) { fInViewPart = true; } makeActions(); } } private void makeActions() { final IWorkbenchPartSite provider = workbenchSite.getSite(); final ActionHelper helper = new ActionHelper(); renameAction = new RenameResourceAction(provider) { @Override public IStructuredSelection getStructuredSelection() { IStructuredSelection selec = helper.getOneStructuredSelection(getContext()); return selec != null ? selec : super.getStructuredSelection(); } @Override protected List getSelectedResources() { return helper.getOneSelectedResources(getContext()); } @Override public boolean isEnabled() { return super.isEnabled() && getSelectedResources().size() > 0; } }; } protected void makeAction(Action action, String id, String imgTool, String imgToolDisabled) { if(action != null) { ISharedImages images = PlatformUI.getWorkbench().getSharedImages(); if(id != null) { action.setId(id); action.setActionDefinitionId(id); } if(imgTool != null) { action.setImageDescriptor(images.getImageDescriptor(imgTool)); } if(imgToolDisabled != null) { action.setDisabledImageDescriptor(images.getImageDescriptor(imgToolDisabled)); } } } public static class ActionHelper { public IStructuredSelection getStructuredSelection(ActionContext context) { return new StructuredSelection(getSelectedResources(context)); } public List getOneSelectedResources(ActionContext context) { List selectedResources = getSelectedResources(context); if(selectedResources.size() > 0) { for(Iterator<?> i = selectedResources.iterator(); i.hasNext();) { Object o = i.next(); if(o instanceof IFile) { IFile file = (IFile)o; if(!OneFileUtils.isDi(file)) { i.remove(); } } } return selectedResources; } return Collections.EMPTY_LIST; } public IStructuredSelection getOneStructuredSelection(ActionContext context) { List selectedResources = getOneSelectedResources(context); if(selectedResources.size() > 0) { return new StructuredSelection(selectedResources); } return null; } protected List getSelectedResources(ActionContext context) { ISelection selec = context.getSelection(); List<IResource> resources = new ArrayList<IResource>(); if(selec instanceof IStructuredSelection) { IStructuredSelection struc = (IStructuredSelection)selec; for(Iterator<Object> i = struc.iterator(); i.hasNext();) { Object o = i.next(); if(o instanceof IWorkspaceRoot == false && o instanceof IResource == true) { IResource res = (IResource)o; resources.add(res); } } } return resources; } public IFile getIFile(ActionContext context) { ISelection selec = context.getSelection(); if(selec instanceof IStructuredSelection) { IStructuredSelection struc = (IStructuredSelection)selec; Object firstElement = struc.getFirstElement(); if(firstElement instanceof IFile) { IFile file = (IFile)firstElement; return file; } } return null; } } }