/******************************************************************************* * Copyright (c) 2008 Pierre-Antoine Grégoire. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pierre-Antoine Grégoire - initial API and implementation *******************************************************************************/ package org.org.eclipse.dws.ui.internal.views; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.part.ViewPart; import org.org.eclipse.core.ui.dialogs.ErrorDialog; import org.org.eclipse.core.utils.platform.actions.IActionHost; import org.org.eclipse.core.utils.platform.actions.IActionResolver; import org.org.eclipse.dws.core.internal.PomInteractionHelper; import org.org.eclipse.dws.core.internal.bridges.LibraryPackModelPersistence; import org.org.eclipse.dws.core.internal.model.librarypack.LibraryPack; import org.org.eclipse.dws.core.internal.model.librarypack.LibraryPackArtifactVersion; import org.org.eclipse.dws.core.internal.model.librarypack.LibraryPackArtifactVersion.Target; import org.org.eclipse.dws.ui.DWSUIPlugin; import org.org.eclipse.dws.ui.internal.images.PluginImages; import org.org.eclipse.dws.ui.internal.views.actions.AddTargetToLibraryPackArtifactVersionAction; import org.org.eclipse.dws.ui.internal.views.actions.CopyDependencyInfoAction; import org.org.eclipse.dws.ui.internal.views.actions.DownloadAndAddToClasspathAction; import org.org.eclipse.dws.ui.internal.views.actions.DownloadAndAddToFolderAction; import org.org.eclipse.dws.ui.internal.views.actions.DownloadAndAddToWebAppAction; import org.org.eclipse.dws.ui.internal.views.actions.DownloadToLocalFileSystemAction; import org.org.eclipse.dws.ui.internal.views.actions.RemoveFromLibraryPackAction; import org.org.eclipse.dws.ui.internal.views.actions.RemoveLibraryPackAction; import org.org.eclipse.dws.ui.internal.views.actions.RemoveTargetToLibraryPackArtifactVersionAction; import org.org.model.IModelItem; import org.org.repository.crawler.maven2.model.Artifact; import org.org.repository.crawler.maven2.model.ArtifactVersion; import org.org.repository.crawler.maven2.model.Group; /** * This view shows data obtained from the model. The sample creates a dummy model on the fly, but a real implementation would connect to the model available either in this or another plug-in (e.g. the workspace). The view is connected to the model using a content provider. * <p> * The view uses a label provider to define how model objects should be presented in the view. Each view can present the same model objects using different labels and icons, if needed. Alternatively, a single label provider can be shared between views in order to ensure that objects of the same type are presented in the same way everywhere. * <p> */ public class LibraryPacksView extends ViewPart implements IActionHost { private static LibraryPacksView view = null; private TreeViewer viewer; private final static String CONTEXT_MENU_ID = LibraryPacksView.class.getName() + "#contextmenu"; private static final String VIEW_ID = LibraryPacksView.class.getName(); private DownloadAndAddToClasspathAction downloadAndAddToClasspathAction; private DownloadAndAddToFolderAction downloadAndAddToFolderAction; private DownloadAndAddToWebAppAction downloadAndAddToWebAppAction; private DownloadToLocalFileSystemAction downloadToLocalFileSystemAction; private IToolBarManager toolBarManager; private Label filterLabel; private Text filterField; private LibraryPacksViewFilter filter; private CopyDependencyInfoAction copyDependencyInfoAction; private Clipboard clipboard; private ToolTip tooltip; private RemoveLibraryPackAction removeLibraryPackAction; private RemoveFromLibraryPackAction removeFromLibraryPackAction; private List<AddTargetToLibraryPackArtifactVersionAction> addTargetActions = new ArrayList<AddTargetToLibraryPackArtifactVersionAction>(); private List<RemoveTargetToLibraryPackArtifactVersionAction> removeTargetActions = new ArrayList<RemoveTargetToLibraryPackArtifactVersionAction>(); public TreeViewer getViewer() { return viewer; } static class NameSorter extends ViewerSorter { @Override public int compare(Viewer viewer, Object e1, Object e2) { int result = 0; if (e1 instanceof LibraryPack && e2 instanceof LibraryPack) { result = ((LibraryPack) e1).getLabel().compareTo(((LibraryPack) e2).getLabel()); } else if (e1 instanceof Group && e2 instanceof Group) { result = ((Group) e1).getName().compareTo(((Group) e2).getName()); } else if (e1 instanceof Artifact && e2 instanceof Artifact) { result = ((Artifact) e1).getId().compareTo(((Artifact) e2).getId()); } else if (e1 instanceof ArtifactVersion && e2 instanceof ArtifactVersion) { result = -((ArtifactVersion) e1).getVersion().compareTo(((ArtifactVersion) e2).getVersion()); } else { result = super.compare(viewer, e1, e2); } return result; } } static class LibraryTransferListener implements DragSourceListener { private ArtifactVersion[] data; private TreeViewer viewer; public LibraryTransferListener(TreeViewer viewer) { this.viewer = viewer; } public void dragFinished(DragSourceEvent event) { if (!event.doit) return; } public void dragSetData(DragSourceEvent event) { StringBuilder builder = new StringBuilder(); for (ArtifactVersion artifactVersion : data) { builder.append(PomInteractionHelper.toDependencyXML(artifactVersion)); } event.data = builder.toString(); } @SuppressWarnings("unchecked") public void dragStart(DragSourceEvent event) { IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); boolean allArtifactVersions = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { if (!(it.next() instanceof ArtifactVersion)) { allArtifactVersions = false; break; } } event.doit = !viewer.getSelection().isEmpty() && allArtifactVersions; data = (ArtifactVersion[]) selection.toList().toArray(new ArtifactVersion[selection.size()]); } } /** * The constructor. */ public LibraryPacksView() { } /** * This is a callback that will allow us to create the viewer and initialize it. */ @Override public void createPartControl(Composite parent) { GridLayout layout = new GridLayout(1, true); layout.marginWidth = 0; parent.setLayout(layout); parent.setBackground(JFaceColors.getBannerBackground(parent.getDisplay())); Composite filterZone = new Composite(parent, SWT.FLAT); filterZone.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); filterZone.setLayout(new GridLayout(2, false)); filterZone.setBackground(JFaceColors.getBannerBackground(parent.getDisplay())); filterLabel = new Label(filterZone, SWT.FLAT); filterLabel.setText("Artifact Filter :"); filterLabel.setBackground(JFaceColors.getBannerBackground(parent.getDisplay())); filterLabel.setLayoutData(new GridData(GridData.BEGINNING)); filterField = new Text(filterZone, SWT.BORDER); filterField.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { touchFilter(); } }); filterField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new LibraryPacksViewContentProvider(getViewSite())); viewer.setLabelProvider(new DecoratingLabelProvider(new LibraryPacksViewLabelProvider(), new LibraryPacksViewLabelDecorator())); viewer.setSorter(new NameSorter()); filter = new LibraryPacksViewFilter(); viewer.addFilter(filter); int ops = DND.DROP_COPY; Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() }; viewer.addDragSupport(ops, transfers, new LibraryTransferListener(viewer)); viewer.setInput(getViewSite()); viewer.getControl().addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { handleKeyPressed(e); } }); viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); view = this; clipboard = new Clipboard(getSite().getShell().getDisplay()); initializeActions(); createContextMenu(); createToolBar(); getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.COPY.getId(), copyDependencyInfoAction); getViewSite().getActionBars().updateActionBars(); getViewSite().setSelectionProvider(viewer); tooltip = new LibraryPacksViewToolTip(viewer.getTree()); tooltip.setPopupDelay(1000); } protected void touchFilter() { filter.setUserFilter(filterField.getText()); refreshViewersKeepStatus(); } private void handleKeyPressed(KeyEvent event) { } private void initializeActions() { downloadAndAddToClasspathAction = new DownloadAndAddToClasspathAction(this); downloadAndAddToClasspathAction.setText("Add to Build Path"); downloadAndAddToClasspathAction.setToolTipText("Download this artifact and add it to the Build Path."); downloadAndAddToClasspathAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToClasspathAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToClasspathAction.setResolver(new DownloadAndAddToClasspathActionResolver(this)); downloadAndAddToFolderAction = new DownloadAndAddToFolderAction(this); downloadAndAddToFolderAction.setText("Add to a project folder"); downloadAndAddToFolderAction.setToolTipText("Download this artifact and add it to a project folder."); downloadAndAddToFolderAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToFolderAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToFolderAction.setResolver(new DownloadAndAddToFolderActionResolver(this)); downloadAndAddToWebAppAction = new DownloadAndAddToWebAppAction(this); downloadAndAddToWebAppAction.setText("Add to WEB-INF/lib"); downloadAndAddToWebAppAction.setToolTipText("Download this artifact and add it to the WEB-INF/lib folder."); downloadAndAddToWebAppAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToWebAppAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_16)); downloadAndAddToWebAppAction.setResolver(new DownloadAndAddToWebAppActionResolver(this)); downloadToLocalFileSystemAction = new DownloadToLocalFileSystemAction(this); downloadToLocalFileSystemAction.setText("Add to local File system"); downloadToLocalFileSystemAction.setToolTipText("Download libraries and add them to the local repositories."); downloadToLocalFileSystemAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_TO_LOCAL_16)); downloadToLocalFileSystemAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_DOWNLOAD_TO_LOCAL_16)); downloadToLocalFileSystemAction.setResolver(new DownloadToLocalFileSystemResolver(this)); copyDependencyInfoAction = new CopyDependencyInfoAction(this, clipboard); copyDependencyInfoAction.setText("Copy dependency Info"); copyDependencyInfoAction.setToolTipText("Copy XML Dependency format to the clipboard."); copyDependencyInfoAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_ARTIFACTVERSION_16)); copyDependencyInfoAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_ARTIFACTVERSION_16)); copyDependencyInfoAction.setResolver(new CopyDependencyInfoActionResolver(this)); removeLibraryPackAction = new RemoveLibraryPackAction(this); removeLibraryPackAction.setText("Remove Library Pack"); removeLibraryPackAction.setToolTipText("Removes the library pack. If it is contributed through an extension point, it will be back on next startup."); removeLibraryPackAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_REMOVE_16)); removeLibraryPackAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_REMOVE_16)); removeLibraryPackAction.setResolver(new RemoveLibraryPackActionResolver(this)); removeFromLibraryPackAction = new RemoveFromLibraryPackAction(this); removeFromLibraryPackAction.setText("Remove from Library Pack"); removeFromLibraryPackAction.setToolTipText("Removes artifacts from the library pack. If the library pack is contributed through an extension point, it will be back on next startup."); removeFromLibraryPackAction.setImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_REMOVE_16)); removeFromLibraryPackAction.setDisabledImageDescriptor(DWSUIPlugin.getDefault().getImages().getImageDescriptor(PluginImages.LOGO_MAVEN_REMOVE_16)); removeFromLibraryPackAction.setResolver(new RemoveFromLibraryPackActionResolver(this)); for (Target target : Target.values()) { AddTargetToLibraryPackArtifactVersionAction addTargetAction = new AddTargetToLibraryPackArtifactVersionAction(target, this); addTargetAction.setText(target.name()); addTargetAction.setToolTipText("Adds the " + target.name() + " target to this library."); addTargetAction.setResolver(new AddTargetToLibraryPackArtifactVersionActionResolver(target, this)); addTargetActions.add(addTargetAction); RemoveTargetToLibraryPackArtifactVersionAction removeTargetAction = new RemoveTargetToLibraryPackArtifactVersionAction(target, this); removeTargetAction.setText(target.name()); removeTargetAction.setToolTipText("Removes the " + target.name() + " target to this library."); removeTargetAction.setResolver(new RemoveTargetToLibraryPackArtifactVersionActionResolver(target, this)); removeTargetActions.add(removeTargetAction); } } private void createContextMenu() { MenuManager menuMgr = new MenuManager(); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager mgr) { fillContextMenu(mgr); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); // Register the context menu such that other plugins may contribute getSite().registerContextMenu(CONTEXT_MENU_ID, menuMgr, viewer); } private void createToolBar() { toolBarManager = getViewSite().getActionBars().getToolBarManager(); toolBarManager.update(true); } private void refreshToolBar() { toolBarManager = getViewSite().getActionBars().getToolBarManager(); toolBarManager.removeAll(); toolBarManager.update(true); } private void fillContextMenu(IMenuManager menuMgr) { if (removeLibraryPackAction.isEnabled()) { menuMgr.add(removeLibraryPackAction); } if (removeFromLibraryPackAction.isEnabled()) { menuMgr.add(removeFromLibraryPackAction); } fillAddToContextMenu(menuMgr); fillInfoContextMenu(menuMgr); fillTargetAdditionContextMenu(menuMgr); fillTargetRemovalContextMenu(menuMgr); menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } private void fillTargetRemovalContextMenu(IMenuManager menuMgr) { List<RemoveTargetToLibraryPackArtifactVersionAction> chosenRemoveActions = new ArrayList<RemoveTargetToLibraryPackArtifactVersionAction>(); for (RemoveTargetToLibraryPackArtifactVersionAction removeTargetAction : removeTargetActions) { if (removeTargetAction.isEnabled()) { chosenRemoveActions.add(removeTargetAction); } } if (chosenRemoveActions.size() > 0) { MenuManager subMenuManager = new MenuManager("Remove target..."); for (RemoveTargetToLibraryPackArtifactVersionAction removeTargetAction : chosenRemoveActions) { subMenuManager.add(removeTargetAction); } menuMgr.add(subMenuManager); } } private void fillTargetAdditionContextMenu(IMenuManager menuMgr) { List<AddTargetToLibraryPackArtifactVersionAction> chosenAddActions = new ArrayList<AddTargetToLibraryPackArtifactVersionAction>(); for (AddTargetToLibraryPackArtifactVersionAction addTargetAction : addTargetActions) { if (addTargetAction.isEnabled()) { chosenAddActions.add(addTargetAction); } } if (chosenAddActions.size() > 0) { MenuManager subMenuManager = new MenuManager("Add target..."); for (AddTargetToLibraryPackArtifactVersionAction addTargetAction : chosenAddActions) { subMenuManager.add(addTargetAction); } menuMgr.add(subMenuManager); } } private void fillInfoContextMenu(IMenuManager menuMgr) { MenuManager subMenuManager = new MenuManager("Info..."); if (copyDependencyInfoAction.isEnabled()) { subMenuManager.add(copyDependencyInfoAction); } menuMgr.add(subMenuManager); } private void fillAddToContextMenu(IMenuManager menuMgr) { MenuManager subMenuManager = new MenuManager("Add to..."); if (downloadAndAddToClasspathAction.isEnabled()) { subMenuManager.add(downloadAndAddToClasspathAction); } if (downloadAndAddToFolderAction.isEnabled()) { subMenuManager.add(downloadAndAddToFolderAction); } if (downloadAndAddToWebAppAction.isEnabled()) { subMenuManager.add(downloadAndAddToWebAppAction); } if (downloadToLocalFileSystemAction.isEnabled()) { subMenuManager.add(downloadToLocalFileSystemAction); } menuMgr.add(subMenuManager); } /** * Passing the focus request to the viewer's control. */ @Override public void setFocus() { viewer.getControl().setFocus(); } public static void refreshViewer() { if (view != null) { view.getViewer().getTree().getDisplay().asyncExec(new Runnable() { public void run() { LibraryPackModelPersistence.checkStatus(); try { view.getViewer().refresh(true); } catch (Exception e) { System.err.println(e); } view.refreshToolBar(); } }); } } public static void refreshViewersKeepStatus() { if (view != null) { view.getViewer().getTree().getDisplay().asyncExec(new Runnable() { public void run() { LibraryPackModelPersistence.checkStatus(); view.getViewer().refresh(true); Object[] expandedElements = view.getViewer().getExpandedElements(); // WORK AROUND for Bug 103747 of SWT's TreeViewer view.getViewer().collapseAll(); // END OF WORK AROUND view.getViewer().setExpandedElements(expandedElements); view.refreshToolBar(); } }); } } @Override public void dispose() { super.dispose(); viewer.getTree().dispose(); view = null; clipboard.dispose(); } public Object getActionTrigger() { return getViewer().getSelection(); } public Shell getShell() { return viewer.getControl().getShell(); } public IToolBarManager getToolBarManager() { return toolBarManager; } private static class DownloadAndAddToClasspathActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public DownloadAndAddToClasspathActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (!(modelItem instanceof IModelItem)) { result = false; break; } } return result; } } private static class DownloadAndAddToFolderActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public DownloadAndAddToFolderActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (!(modelItem instanceof IModelItem)) { result = false; break; } } return result; } } private static class DownloadAndAddToWebAppActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public DownloadAndAddToWebAppActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (!(modelItem instanceof IModelItem)) { result = false; break; } } return result; } } private static class DownloadToLocalFileSystemResolver implements IActionResolver { private IActionHost actionHost; /** * */ public DownloadToLocalFileSystemResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = false; for (Iterator<?> it = selection.iterator(); it.hasNext();) { if (!(it.next() instanceof IModelItem)) { result = false; break; } else { result = true; } } return result; } } @SuppressWarnings("unused") private static class ShowDetailsActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public ShowDetailsActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { return true; } } private static class CopyDependencyInfoActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public CopyDependencyInfoActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (!(modelItem instanceof IModelItem)) { result = false; break; } } return result; } } private static class RemoveLibraryPackActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public RemoveLibraryPackActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (!(modelItem instanceof LibraryPack)) { result = false; break; } } return result; } } private static class RemoveFromLibraryPackActionResolver implements IActionResolver { private IActionHost actionHost; /** * */ public RemoveFromLibraryPackActionResolver(IActionHost actionHost) { this.actionHost = actionHost; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = true; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (modelItem instanceof LibraryPack) { result = false; break; } } return result; } } private static class AddTargetToLibraryPackArtifactVersionActionResolver implements IActionResolver { private IActionHost actionHost; private final Target target; /** * */ public AddTargetToLibraryPackArtifactVersionActionResolver(Target target, IActionHost actionHost) { this.actionHost = actionHost; this.target = target; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = false; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (modelItem instanceof LibraryPackArtifactVersion) { LibraryPackArtifactVersion artifactVersion = (LibraryPackArtifactVersion) modelItem; if (!(artifactVersion.getTargets().contains(target))) { result = true; break; } } } return result; } } private static class RemoveTargetToLibraryPackArtifactVersionActionResolver implements IActionResolver { private IActionHost actionHost; private final Target target; /** * */ public RemoveTargetToLibraryPackArtifactVersionActionResolver(Target target, IActionHost actionHost) { this.actionHost = actionHost; this.target = target; } public boolean isEnabled() { IStructuredSelection selection = (IStructuredSelection) actionHost.getActionTrigger(); boolean result = false; for (Iterator<?> it = selection.iterator(); it.hasNext();) { Object modelItem = it.next(); if (modelItem instanceof LibraryPackArtifactVersion) { LibraryPackArtifactVersion artifactVersion = (LibraryPackArtifactVersion) modelItem; if (artifactVersion.getTargets().contains(target)) { result = true; break; } } } return result; } } public void setEnabled(boolean enabled) { this.viewer.getControl().setEnabled(enabled); } public static void showViewAndFocusOnElement(IModelItem<?, ?> item) { try { IWorkbenchPage activePage = DWSUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage(); activePage.showView(LibraryPacksView.VIEW_ID); } catch (PartInitException pie) { ErrorDialog errorDialog = new ErrorDialog("Impossible to open DWS Library Packs view", "Impossible to open DWS Library Packs view", pie); errorDialog.open(); } if (item != null && view != null) { final List<Object> list = new ArrayList<Object>(); list.add(item); view.getViewer().setSelection(new IStructuredSelection() { public boolean isEmpty() { return false; } public List<?> toList() { return list; } public Object[] toArray() { return list.toArray(); } public int size() { return list.size(); } public Iterator<?> iterator() { return list.iterator(); } public Object getFirstElement() { return list.get(0); } }, true); } } }