Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java')
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java3130
1 files changed, 1564 insertions, 1566 deletions
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
index e28cec23c1a..f5ed7cda888 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
@@ -1,1566 +1,1564 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Boeing.
- * 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:
- * Boeing - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.osee.framework.ui.skynet;
-
-import static org.eclipse.osee.framework.core.enums.CoreArtifactTypes.RootArtifact;
-import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.viewers.AbstractTreeViewer;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osee.framework.access.AccessControlManager;
-import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.core.exception.OseeStateException;
-import org.eclipse.osee.framework.core.model.Branch;
-import org.eclipse.osee.framework.core.model.type.ArtifactType;
-import org.eclipse.osee.framework.core.operation.AbstractOperation;
-import org.eclipse.osee.framework.core.operation.IOperation;
-import org.eclipse.osee.framework.core.operation.Operations;
-import org.eclipse.osee.framework.core.util.Conditions;
-import org.eclipse.osee.framework.jdk.core.type.HashCollection;
-import org.eclipse.osee.framework.jdk.core.util.GUID;
-import org.eclipse.osee.framework.logging.OseeLevel;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.plugin.core.IActionable;
-import org.eclipse.osee.framework.plugin.core.util.Jobs;
-import org.eclipse.osee.framework.skynet.core.OseeSystemArtifacts;
-import org.eclipse.osee.framework.skynet.core.UserManager;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
-import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
-import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
-import org.eclipse.osee.framework.skynet.core.artifact.IBranchProvider;
-import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
-import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
-import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
-import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData.ChangeType;
-import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
-import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
-import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
-import org.eclipse.osee.framework.skynet.core.event.Sender;
-import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent;
-import org.eclipse.osee.framework.skynet.core.event2.BranchEvent;
-import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
-import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
-import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
-import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
-import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
-import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
-import org.eclipse.osee.framework.ui.skynet.access.PolicyDialog;
-import org.eclipse.osee.framework.ui.skynet.action.OpenAssociatedArtifactFromBranchProvider;
-import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactNameConflictHandler;
-import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPasteOperation;
-import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
-import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
-import org.eclipse.osee.framework.ui.skynet.change.ChangeUiUtil;
-import org.eclipse.osee.framework.ui.skynet.dialogs.ArtifactPasteSpecialDialog;
-import org.eclipse.osee.framework.ui.skynet.listener.IRebuildMenuListener;
-import org.eclipse.osee.framework.ui.skynet.menu.ArtifactTreeViewerGlobalMenuHelper;
-import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu;
-import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenuPermissions;
-import org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper;
-import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
-import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
-import org.eclipse.osee.framework.ui.skynet.search.QuickSearchView;
-import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView;
-import org.eclipse.osee.framework.ui.skynet.util.ArtifactClipboard;
-import org.eclipse.osee.framework.ui.skynet.util.ArtifactPasteConfiguration;
-import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
-import org.eclipse.osee.framework.ui.skynet.util.SkynetViews;
-import org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidget;
-import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactTypeFilteredTreeEntryDialog;
-import org.eclipse.osee.framework.ui.skynet.widgets.xHistory.HistoryView;
-import org.eclipse.osee.framework.ui.swt.Displays;
-import org.eclipse.osee.framework.ui.swt.ImageManager;
-import org.eclipse.osee.framework.ui.swt.MenuItems;
-import org.eclipse.osee.framework.ui.swt.TreeViewerUtility;
-import org.eclipse.osee.framework.ui.swt.Widgets;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.custom.TreeEditor;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MenuListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IViewReference;
-import org.eclipse.ui.IViewSite;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ExportResourcesAction;
-import org.eclipse.ui.actions.ImportResourcesAction;
-import org.eclipse.ui.part.ViewPart;
-import org.eclipse.ui.progress.UIJob;
-
-/**
- * <REM2>
- *
- * @author Ryan D. Brooks
- */
-public class ArtifactExplorer extends ViewPart implements IArtifactExplorerEventHandler, IRebuildMenuListener, IAccessControlEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener, IActionable, ISelectionProvider, IBranchProvider {
- public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.ArtifactExplorer";
- private static final String ROOT_GUID = "artifact.explorer.last.root_guid";
- private static final String ROOT_BRANCH = "artifact.explorer.last.root_branch";
- private static final ArtifactClipboard artifactClipboard = new ArtifactClipboard(VIEW_ID);
- private static final LinkedList<Tree> trees = new LinkedList<Tree>();
-
- private TreeViewer treeViewer;
- private Action upAction;
- private Artifact explorerRoot;
- private MenuItem openMenuItem;
- private MenuItem massEditMenuItem;
- private MenuItem skywalkerMenuItem;
- private MenuItem createMenuItem;
- private MenuItem openWithMenuItem;
- private MenuItem accessControlMenuItem;
- private MenuItem lockMenuItem;
- private MenuItem goIntoMenuItem;
- private MenuItem copyMenuItem;
- private MenuItem pasteMenuItem;
- private MenuItem pasteSpecialMenuItem;
- private MenuItem renameArtifactMenuItem;
- private MenuItem refreshMenuItem;
- private MenuItem findOnAnotherBranch;
- private NeedArtifactMenuListener needArtifactListener;
- private NeedProjectMenuListener needProjectListener;
- private Tree myTree;
- private TreeEditor myTreeEditor;
- private Text myTextBeingRenamed;
- private Action newArtifactExplorer;
- private Action collapseAllAction;
- private Action showChangeReport;
- private XBranchSelectWidget branchSelect;
- private Branch branch;
- private IGlobalMenuHelper globalMenuHelper;
-
- private Composite stackComposite;
- private Control branchUnreadableWarning;
- private StackLayout stackLayout;
- private final ArtifactDecorator artifactDecorator = new ArtifactDecorator(
- SkynetGuiPlugin.ARTIFACT_EXPLORER_ATTRIBUTES_PREF);
-
- public static void explore(Collection<Artifact> artifacts) {
- explore(artifacts, AWorkbench.getActivePage());
- }
-
- public static void explore(Collection<Artifact> artifacts, IWorkbenchPage page) {
- Artifact sampleArtifact = null;
- Branch inputBranch = null;
- if (artifacts != null && !artifacts.isEmpty()) {
- sampleArtifact = artifacts.iterator().next();
- inputBranch = sampleArtifact.getBranch();
- }
- ArtifactExplorer artifactExplorer = findView(inputBranch, page);
-
- artifactExplorer.setPartName("Artifacts");
- artifactExplorer.setContentDescription("These artifacts could not be handled");
- artifactExplorer.treeViewer.setInput(artifacts);
- artifactExplorer.initializeSelectionBox();
- }
-
- private static ArtifactExplorer findView(Branch inputBranch, IWorkbenchPage page) {
- for (IViewReference view : page.getViewReferences()) {
- if (view.getId().equals(ArtifactExplorer.VIEW_ID)) {
- if (view.getView(false) != null && inputBranch.equals(((ArtifactExplorer) view.getView(false)).branch)) {
- try {
- return (ArtifactExplorer) page.showView(view.getId(), view.getSecondaryId(),
- IWorkbenchPage.VIEW_ACTIVATE);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
- }
- }
- try {
- ArtifactExplorer explorer =
- (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, GUID.create(), IWorkbenchPage.VIEW_ACTIVATE);
- explorer.explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(inputBranch));
- return explorer;
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
-
- private Control createDefaultWarning(Composite parent) {
- Composite composite = new Composite(parent, SWT.BORDER);
- composite.setLayout(new GridLayout(2, false));
- composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- composite.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-
- Label image = new Label(composite, SWT.NONE);
- image.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
- image.setImage(ImageManager.getImage(FrameworkImage.LOCKED_KEY));
- image.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-
- Label label = new Label(composite, SWT.NONE);
- Font font = new Font(PlatformUI.getWorkbench().getDisplay(), "Courier New", 10, SWT.BOLD);
- label.setFont(font);
- label.setForeground(Displays.getSystemColor(SWT.COLOR_DARK_RED));
- label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
- label.setText("Branch Read Access Denied.\nContact your administrator.");
- label.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-
- return composite;
- }
-
- private void checkBranchReadable() throws OseeCoreException {
- if (treeViewer == null) {
- return;
- }
- Control control = branchUnreadableWarning;
- if (branch == null || new GlobalMenuPermissions(globalMenuHelper).isBranchReadable(branch)) {
- control = treeViewer.getTree();
- }
- stackLayout.topControl = control;
- stackComposite.layout();
- stackComposite.getParent().layout();
- }
-
- @Override
- public void createPartControl(Composite parent) {
- try {
- if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
- return;
- }
-
- GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
- gridData.heightHint = 1000;
- gridData.widthHint = 1000;
-
- parent.setLayout(new GridLayout(1, false));
- parent.setLayoutData(gridData);
-
- branchSelect = new XBranchSelectWidget("");
- branchSelect.setDisplayLabel(false);
- branchSelect.setSelection(branch);
- branchSelect.createWidgets(parent, 1);
-
- branchSelect.addListener(new Listener() {
- @Override
- public void handleEvent(Event event) {
- try {
- Branch selectedBranch = branchSelect.getData();
- if (selectedBranch != null) {
- branch = selectedBranch;
- explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(branch));
- }
- } catch (Exception ex) {
- OseeLog.log(getClass(), Level.SEVERE, ex);
- }
- }
-
- });
-
- stackComposite = new Composite(parent, SWT.NONE);
- stackLayout = new StackLayout();
- stackComposite.setLayout(stackLayout);
- stackComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- branchUnreadableWarning = createDefaultWarning(stackComposite);
-
- treeViewer = new TreeViewer(stackComposite);
- myTree = treeViewer.getTree();
- Tree tree = treeViewer.getTree();
- final ArtifactExplorer fArtExplorere = this;
- tree.addDisposeListener(new DisposeListener() {
-
- @Override
- public void widgetDisposed(DisposeEvent e) {
- ArtifactExplorerEventManager.remove(fArtExplorere);
- }
- });
- treeViewer.setContentProvider(new ArtifactContentProvider());
-
- treeViewer.setLabelProvider(new ArtifactLabelProvider(artifactDecorator));
- treeViewer.addDoubleClickListener(new ArtifactDoubleClick());
- treeViewer.getControl().setLayoutData(gridData);
-
- // We can not use the hash lookup because an artifact may not have a
- // good equals.
- // This can be added back once the content provider is converted over to
- // use job node.
- treeViewer.setUseHashlookup(false);
-
- treeViewer.addSelectionChangedListener(new SelectionCountChangeListener(getViewSite()));
- globalMenuHelper = new ArtifactTreeViewerGlobalMenuHelper(treeViewer);
-
- IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
- createCollapseAllAction(toolbarManager);
- createUpAction(toolbarManager);
- createNewArtifactExplorerAction(toolbarManager);
- createShowChangeReportAction(toolbarManager);
- addOpenQuickSearchAction(toolbarManager);
- toolbarManager.add(new OpenAssociatedArtifactFromBranchProvider(this));
-
- artifactDecorator.setViewer(treeViewer);
- artifactDecorator.addActions(getViewSite().getActionBars().getMenuManager(), this);
-
- getSite().setSelectionProvider(treeViewer);
- addExploreSelection();
-
- setupPopupMenu();
-
- myTreeEditor = new TreeEditor(myTree);
- myTreeEditor.horizontalAlignment = SWT.LEFT;
- myTreeEditor.grabHorizontal = true;
- myTreeEditor.minimumWidth = 50;
-
- new ArtifactExplorerDragAndDrop(treeViewer, VIEW_ID, this);
-
- OseeUiActions.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Artifact Explorer");
-
- OseeContributionItem.addTo(this, false);
-
- updateEnablementsEtAl();
- trees.add(tree);
- setHelpContexts();
-
- checkBranchReadable();
- getViewSite().getActionBars().updateActionBars();
-
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- OseeEventManager.addListener(this);
- ArtifactExplorerEventManager.add(this);
- }
-
- /**
- * Reveal an artifact in the viewer and select it.
- *
- * @param artifact
- */
- public static void exploreBranch(Branch branch) {
- if (branch != null) {
- IWorkbenchPage page = AWorkbench.getActivePage();
- findView(branch, page);
- }
- }
-
- public void setupPopupMenu() {
-
- Menu popupMenu = new Menu(treeViewer.getTree().getParent());
- needArtifactListener = new NeedArtifactMenuListener();
- needProjectListener = new NeedProjectMenuListener();
- popupMenu.addMenuListener(needArtifactListener);
- popupMenu.addMenuListener(needProjectListener);
-
- createOpenMenuItem(popupMenu);
- createOpenWithMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createFindOnDifferentBranchItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createNewChildMenuItem(popupMenu);
- createGoIntoMenuItem(popupMenu);
- createMassEditMenuItem(popupMenu);
- createSkywalkerMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- new GlobalMenu(popupMenu, globalMenuHelper);
- createRenameArtifactMenuItem(popupMenu);
- createRefreshMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createHistoryMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createImportExportMenuItems(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createLockMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createCopyMenuItem(popupMenu);
- createPasteMenuItem(popupMenu);
- createPasteSpecialMenuItem(popupMenu);
- createExpandAllMenuItem(popupMenu);
- createSelectAllMenuItem(popupMenu);
- new MenuItem(popupMenu, SWT.SEPARATOR);
- createAccessControlMenuItem(popupMenu);
- treeViewer.getTree().setMenu(popupMenu);
- }
-
- private void addOpenQuickSearchAction(IToolBarManager toolbarManager) {
- Action openQuickSearch =
- new Action("Quick Search", ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_SEARCH)) {
- @Override
- public void run() {
- Job job = new UIJob("Open Quick Search") {
-
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- IStatus status = Status.OK_STATUS;
- try {
- IViewPart viewPart =
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(
- QuickSearchView.VIEW_ID);
- if (viewPart != null) {
- Branch branch = getBranch(monitor);
- if (branch != null) {
- ((QuickSearchView) viewPart).setBranch(branch);
- }
- }
- } catch (Exception ex) {
- status = new Status(IStatus.ERROR, SkynetGuiPlugin.PLUGIN_ID, "Error opening quick search", ex);
- }
- return status;
- }
- };
- Jobs.startJob(job);
- }
- };
- openQuickSearch.setToolTipText("Open Quick Search View");
- toolbarManager.add(openQuickSearch);
- }
-
- protected void createUpAction(IToolBarManager toolbarManager) {
- upAction = new Action("View Parent") {
- @Override
- public void run() {
- try {
- Artifact parent = explorerRoot.getParent();
-
- if (parent == null) {
- return;
- }
-
- Object[] expanded = treeViewer.getExpandedElements();
- Object[] expandedPlus = new Object[expanded.length + 1];
- for (int i = 0; i < expanded.length; i++) {
- expandedPlus[i] = expanded[i];
- }
- expandedPlus[expandedPlus.length - 1] = explorerRoot;
-
- explore(parent);
-
- treeViewer.setExpandedElements(expandedPlus);
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- };
-
- upAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.ARROW_UP_YELLOW));
- upAction.setToolTipText("View Parent");
- updateEnablementsEtAl();
- toolbarManager.add(upAction);
- }
-
- private void createNewArtifactExplorerAction(IToolBarManager toolbarManager) {
-
- newArtifactExplorer = new Action("New Artifact Explorer") {
- @Override
- public void run() {
- IWorkbenchPage page = AWorkbench.getActivePage();
- ArtifactExplorer artifactExplorer;
- try {
- artifactExplorer =
- (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, GUID.create(),
- IWorkbenchPage.VIEW_ACTIVATE);
- artifactExplorer.explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(branch));
- artifactExplorer.setExpandedArtifacts(treeViewer.getExpandedElements());
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- }
- };
-
- newArtifactExplorer.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_EXPLORER));
- toolbarManager.add(newArtifactExplorer);
- }
-
- private void createShowChangeReportAction(IToolBarManager toolbarManager) {
- showChangeReport = new Action("Show Change Report") {
- @Override
- public void run() {
- try {
- ChangeUiUtil.open(branch);
- } catch (OseeCoreException ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- };
-
- showChangeReport.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.BRANCH_CHANGE));
- toolbarManager.add(showChangeReport);
- }
-
- private void createCollapseAllAction(IToolBarManager toolbarManager) {
- collapseAllAction = new Action("Collapse All") {
- @Override
- public void run() {
- if (treeViewer != null) {
- treeViewer.collapseAll();
- }
- }
- };
-
- collapseAllAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.COLLAPSE_ALL));
- toolbarManager.add(collapseAllAction);
- }
-
- private void createOpenWithMenuItem(Menu parentMenu) {
- openWithMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
- openWithMenuItem.setText("&Open With");
- final Menu submenu = new Menu(openWithMenuItem);
- openWithMenuItem.setMenu(submenu);
- parentMenu.addMenuListener(new OpenWithMenuListener(submenu, treeViewer, this));
- }
-
- private void createNewChildMenuItem(Menu parentMenu) {
- createMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- needProjectListener.add(createMenuItem);
- createMenuItem.setText("&New Child");
- createMenuItem.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- super.widgetSelected(e);
- try {
- ArtifactTypeFilteredTreeEntryDialog dialog = getDialog();
- Artifact parent = getParent();
-
- if (dialog.open() == Window.OK) {
- ArtifactType type = dialog.getSelection();
- String name = dialog.getEntryValue();
-
- SkynetTransaction transaction =
- new SkynetTransaction(branch, String.format("Created new %s \"%s\" in artifact explorer",
- type.getName(), name));
- parent.addNewChild(null, type, name);
- parent.persist(transaction);
- transaction.execute();
-
- treeViewer.refresh();
- treeViewer.refresh(false);
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- private ArtifactTypeFilteredTreeEntryDialog getDialog() throws OseeCoreException {
- Collection<ArtifactType> artifactTypes =
- ArtifactTypeManager.getConcreteArtifactTypes(branchSelect.getData());
-
- // IAccessPolicyHandlerService policyHandlerService = SkynetGuiPlugin.getInstance().getPolicyHandlerService();
- // policyHandlerService.
-
- ArtifactType rootArtifactType = ArtifactTypeManager.getType(RootArtifact);
- artifactTypes.remove(rootArtifactType);
-
- ArtifactTypeFilteredTreeEntryDialog dialog =
- new ArtifactTypeFilteredTreeEntryDialog("New Child", "Enter name and select Artifact type to create",
- "Artifact Name");
- dialog.setInput(artifactTypes);
- return dialog;
- }
-
- private Artifact getParent() throws OseeCoreException {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
-
- if (selection.size() > 1) {
- throw new OseeCoreException("Please select a single artifact to create a new child.");
- }
-
- Iterator<?> itemsIter = selection.iterator();
- Artifact parent;
- if (!itemsIter.hasNext()) {
- parent = explorerRoot;
- } else {
- parent = (Artifact) itemsIter.next();
- }
-
- return parent;
- }
- });
- }
-
- private void createGoIntoMenuItem(Menu parentMenu) {
- goIntoMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- goIntoMenuItem.setText("&Go Into");
- needArtifactListener.add(goIntoMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- goIntoMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent ev) {
-
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- Iterator<?> itemsIter = selection.iterator();
- if (itemsIter.hasNext()) {
- try {
- Object[] expanded = treeViewer.getExpandedElements();
- explore((Artifact) itemsIter.next());
- treeViewer.setExpandedElements(expanded);
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- }
- });
- }
-
- private void createOpenMenuItem(Menu parentMenu) {
- openMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- openMenuItem.setText("&Open");
- needArtifactListener.add(openMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- openMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent ev) {
- LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
- TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
- RendererManager.openInJob(selectedItems, PresentationType.DEFAULT_OPEN);
- }
- });
- }
-
- private void createFindOnDifferentBranchItem(Menu parentMenu) {
- findOnAnotherBranch = new MenuItem(parentMenu, SWT.PUSH);
- findOnAnotherBranch.setText("Reveal On Another Branch");
- needArtifactListener.add(findOnAnotherBranch);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- findOnAnotherBranch.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent ev) {
- LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
- TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
- Branch branch = BranchSelectionDialog.getBranchFromUser();
- if (branch != null) {
- for (Artifact artifact : selectedItems) {
- try {
- ArtifactExplorer.revealArtifact(ArtifactQuery.getArtifactFromId(artifact.getArtId(), branch));
- } catch (OseeCoreException ex) {
- OseeLog.log(
- SkynetGuiPlugin.class,
- OseeLevel.SEVERE_POPUP,
- String.format("Could not find Artifact \'%s\' on Branch \'%s\'", artifact.getName(),
- branch.getName()));
- }
- }
-
- }
- }
- });
- }
-
- private void createMassEditMenuItem(Menu parentMenu) {
- massEditMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- massEditMenuItem.setText("Mass Edit");
- needArtifactListener.add(massEditMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- massEditMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent ev) {
- LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
- TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
- MassArtifactEditor.editArtifacts("", selectedItems);
- }
- });
- }
-
- private void createRefreshMenuItem(Menu parentMenu) {
- refreshMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- refreshMenuItem.setText("Refresh");
- needArtifactListener.add(refreshMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- refreshMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent mySelectionEvent) {
- LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
- TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
- for (Artifact artifact : selectedItems) {
- treeViewer.refresh(artifact);
- }
- }
- });
- }
-
- private void createRenameArtifactMenuItem(Menu parentMenu) {
- renameArtifactMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- renameArtifactMenuItem.setText("Rename Artifact");
- needArtifactListener.add(renameArtifactMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- renameArtifactMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent mySelectionEvent) {
- handleRenameArtifactSelectionEvent(mySelectionEvent);
- }
- });
- }
-
- private void handleRenameArtifactSelectionEvent(SelectionEvent mySelectionEvent) {
- // Clean up any previous editor control
- Control oldEditor = myTreeEditor.getEditor();
-
- if (oldEditor != null) {
- oldEditor.dispose();
- }
-
- // Identify the selected row, only allow input if there is a single
- // selected row
- TreeItem[] selection = myTree.getSelection();
-
- if (selection.length != 1) {
- return;
- }
-
- final TreeItem myTreeItem = selection[0];
-
- if (myTreeItem == null) {
- return;
- }
- myTextBeingRenamed = new Text(myTree, SWT.BORDER);
- Object myTreeItemObject = myTreeItem.getData();
- myTextBeingRenamed.setText(((Artifact) myTreeItemObject).getName());
- myTextBeingRenamed.addFocusListener(new FocusAdapter() {
- @Override
- public void focusLost(FocusEvent e) {
- updateText(myTextBeingRenamed.getText(), myTreeItem);
- myTextBeingRenamed.dispose();
-
- }
-
- @Override
- public void focusGained(FocusEvent e) {
- // do nothing
- }
- });
-
- myTextBeingRenamed.addKeyListener(new KeyAdapter() {
- @Override
- public void keyReleased(KeyEvent e) {
- if (e.character == SWT.CR) {
- updateText(myTextBeingRenamed.getText(), myTreeItem);
- myTextBeingRenamed.dispose();
- } else if (e.keyCode == SWT.ESC) {
- myTextBeingRenamed.dispose();
- }
- }
- });
- myTextBeingRenamed.selectAll();
- myTextBeingRenamed.setFocus();
- myTreeEditor.setEditor(myTextBeingRenamed, myTreeItem);
- }
-
- private void updateText(String newLabel, TreeItem item) {
- myTreeEditor.getItem().setText(newLabel);
- Object myTreeItemObject = item.getData();
- if (myTreeItemObject instanceof Artifact) {
- Artifact myArtifact = (Artifact) myTreeItemObject;
- try {
- myArtifact.setName(newLabel);
- myArtifact.persist();
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- treeViewer.refresh();
- }
-
- private void createSkywalkerMenuItem(Menu parentMenu) {
- skywalkerMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- skywalkerMenuItem.setText("Sky Walker");
- needArtifactListener.add(skywalkerMenuItem);
-
- ArtifactMenuListener listener = new ArtifactMenuListener();
- parentMenu.addMenuListener(listener);
- skywalkerMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent ev) {
- LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
- TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
- SkyWalkerView.exploreArtifact(selectedItems.getFirst());
- }
- });
- }
-
- private void createSelectAllMenuItem(Menu parentMenu) {
- MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
- menuItem.setText("&Select All\tCtrl+A");
- menuItem.addListener(SWT.Selection, new Listener() {
- @Override
- public void handleEvent(org.eclipse.swt.widgets.Event event) {
- treeViewer.getTree().selectAll();
- }
- });
- }
-
- private void createHistoryMenuItem(Menu parentMenu) {
- MenuItem revisionMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- revisionMenuItem.setText("&Show Resource History ");
- revisionMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- Artifact selectedArtifact = (Artifact) selection.getFirstElement();
-
- try {
- HistoryView.open(selectedArtifact);
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- }
-
- private void createImportExportMenuItems(Menu parentMenu) {
- MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ImportResourcesAction(getViewSite().getWorkbenchWindow()));
- MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ExportResourcesAction(getViewSite().getWorkbenchWindow()));
- }
-
- private void createAccessControlMenuItem(Menu parentMenu) {
- accessControlMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- accessControlMenuItem.setImage(ImageManager.getImage(FrameworkImage.AUTHENTICATED));
- accessControlMenuItem.setText("&Access Control ");
- // accessControlMenuItem.setEnabled(false);
- accessControlMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- Artifact selectedArtifact = (Artifact) selection.getFirstElement();
- try {
- if (selectedArtifact != null) {
- PolicyDialog pd = new PolicyDialog(Displays.getActiveShell(), selectedArtifact);
- pd.open();
- checkBranchReadable();
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- }
-
- private void createLockMenuItem(Menu parentMenu) {
- lockMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- lockMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- Iterator<?> iterator = selection.iterator();
- Set<Artifact> lockArtifacts = new HashSet<Artifact>();
- Set<Artifact> unlockArtifacts = new HashSet<Artifact>();
- while (iterator.hasNext()) {
- try {
- Artifact object = (Artifact) iterator.next();
- if (new GlobalMenuPermissions(object).isLocked()) {
- unlockArtifacts.add(object);
- } else {
- lockArtifacts.add(object);
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- try {
- AccessControlManager.unLockObjects(unlockArtifacts, UserManager.getUser());
- AccessControlManager.lockObjects(lockArtifacts, UserManager.getUser());
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
-
- });
- }
-
- private void createCopyMenuItem(Menu parentMenu) {
- copyMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- copyMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_COPY));
- copyMenuItem.setText("Copy \tCtrl+C");
- copyMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- performCopy();
- }
- });
- }
-
- private void performCopy() {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- ArrayList<Artifact> artifactTransferData = new ArrayList<Artifact>();
- ArrayList<String> textTransferData = new ArrayList<String>();
- Artifact artifact;
-
- if (selection != null && !selection.isEmpty()) {
- for (Object object : selection.toArray()) {
- if (object instanceof Artifact) {
- artifact = (Artifact) object;
-
- artifactTransferData.add(artifact);
- textTransferData.add(artifact.getName());
- }
- }
- artifactClipboard.setArtifactsToClipboard(artifactTransferData, textTransferData);
- }
- }
-
- private void createPasteMenuItem(Menu parentMenu) {
- pasteMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- pasteMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE));
- pasteMenuItem.setText("Paste \tCtrl+V");
- pasteMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- performPasteOperation(false);
- }
- });
- }
-
- private void createPasteSpecialMenuItem(Menu parentMenu) {
- pasteSpecialMenuItem = new MenuItem(parentMenu, SWT.PUSH);
- pasteSpecialMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE));
- pasteSpecialMenuItem.setText("Paste Special... \tCtrl+S");
- pasteSpecialMenuItem.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent e) {
- performPasteOperation(true);
- }
-
- });
- }
-
- private void performPasteOperation(boolean isPasteSpecial) {
- boolean performPaste = true;
- Artifact destinationArtifact = null;
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
- if (selection != null && !selection.isEmpty()) {
- Object object = selection.getFirstElement();
-
- if (object instanceof Artifact) {
- destinationArtifact = (Artifact) object;
- }
- }
-
- ArtifactPasteConfiguration config = new ArtifactPasteConfiguration();
-
- if (isPasteSpecial) {
- Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- List<Artifact> copiedArtifacts = artifactClipboard.getCopiedContents();
- ArtifactPasteSpecialDialog dialog =
- new ArtifactPasteSpecialDialog(shell, config, destinationArtifact, copiedArtifacts);
- performPaste = dialog.open() == Window.OK;
- }
-
- if (performPaste) {
- Operations.executeAsJob(
- new ArtifactPasteOperation(config, destinationArtifact, artifactClipboard.getCopiedContents(),
- new ArtifactNameConflictHandler()), true);
- }
- }
-
- private void createExpandAllMenuItem(Menu parentMenu) {
- MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
- menuItem.setImage(ImageManager.getImage(FrameworkImage.EXPAND_ALL));
- menuItem.setText("Expand All\tCtrl++");
- menuItem.addSelectionListener(new ExpandListener());
- }
-
- public class ExpandListener extends SelectionAdapter {
- @Override
- public void widgetSelected(SelectionEvent event) {
- expandAll((IStructuredSelection) treeViewer.getSelection());
- }
- }
-
- private void expandAll(IStructuredSelection selection) {
- Iterator<?> iter = selection.iterator();
- while (iter.hasNext()) {
- treeViewer.expandToLevel(iter.next(), AbstractTreeViewer.ALL_LEVELS);
- }
- }
-
- @Override
- public void setFocus() {
- if (treeViewer != null) {
- treeViewer.getControl().setFocus();
- }
- }
-
- public void explore(Artifact artifact) {
- if (artifact == null) {
- throw new IllegalArgumentException("Can not explore a null artifact.");
- }
-
- setPartName("Artifact Explorer: " + artifact.getBranch().getShortName());
- if (branch != null && branch != artifact.getBranch()) {
- explore(Arrays.asList(artifact));
- return;
- }
- try {
- checkBranchReadable();
- } catch (OseeCoreException ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- explorerRoot = artifact;
- branch = artifact.getBranch();
-
- initializeSelectionBox();
-
- if (treeViewer != null) {
- Object objects[] = treeViewer.getExpandedElements();
- treeViewer.setInput(explorerRoot);
- setupPopupMenu();
- updateEnablementsEtAl();
- // Attempt to re-expand what was expanded
- treeViewer.setExpandedElements(objects);
- }
- }
-
- public void setExpandedArtifacts(Object... artifacts) {
- if (treeViewer != null) {
- treeViewer.setExpandedElements(artifacts);
- }
- }
-
- private void updateEnablementsEtAl() {
- // The upAction may be null if this viewpart has not been layed out yet
- if (upAction != null) {
- try {
- upAction.setEnabled(explorerRoot != null && explorerRoot.hasParent());
- } catch (OseeCoreException ex) {
- upAction.setEnabled(false);
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
- }
- }
-
- private class NeedArtifactMenuListener implements MenuListener {
- private final HashCollection<Class<? extends Artifact>, MenuItem> menuItemMap;
-
- public NeedArtifactMenuListener() {
- this.menuItemMap = new HashCollection<Class<? extends Artifact>, MenuItem>();
- }
-
- public void add(MenuItem item) {
- menuItemMap.put(Artifact.class, item);
- }
-
- @Override
- public void menuHidden(MenuEvent e) {
- // do nothing
- }
-
- @Override
- public void menuShown(MenuEvent e) {
- IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
-
- Object obj = selection.getFirstElement();
- if (obj != null) {
- Class<? extends Artifact> selectedClass = obj.getClass().asSubclass(Artifact.class);
-
- for (Class<? extends Artifact> artifactClass : menuItemMap.keySet()) {
- boolean valid = artifactClass.isAssignableFrom(selectedClass);
-
- for (MenuItem item : menuItemMap.getValues(artifactClass)) {
- if (!(item.getData() instanceof Exception)) {
- // Only modify enabling if no error is associated
- item.setEnabled(valid);
- }
- }
- }
- }
- }
- }
-
- private class NeedProjectMenuListener implements MenuListener {
- Collection<MenuItem> items;
-
- public NeedProjectMenuListener() {
- this.items = new LinkedList<MenuItem>();
- }
-
- public void add(MenuItem item) {
- items.add(item);
- }
-
- @Override
- public void menuHidden(MenuEvent e) {
- // do nothing
- }
-
- @Override
- public void menuShown(MenuEvent e) {
- boolean valid = treeViewer.getInput() != null;
- for (MenuItem item : items) {
- if (!(item.getData() instanceof Exception)) {
- // Only modify
- // enabling if no
- // error is
- // associated
- item.setEnabled(valid);
- }
- }
- }
- }
-
- /**
- * Add the selection from the define explorer
- */
- private void addExploreSelection() {
- if (explorerRoot != null) {
- try {
- treeViewer.setInput(explorerRoot);
- initializeSelectionBox();
- } catch (IllegalArgumentException ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- }
-
- /**
- * @author Jeff C. Phillips
- */
- public class ArtifactMenuListener implements MenuListener {
-
- @Override
- public void menuHidden(MenuEvent e) {
- // do nothing
- }
-
- @Override
- public void menuShown(MenuEvent e) {
- // Use this menu listener until all menu items can be moved to
- // GlobaMenu
- try {
- GlobalMenuPermissions permiss = new GlobalMenuPermissions(globalMenuHelper);
-
- lockMenuItem.setText((permiss.isLocked() ? "Unlock: (" + permiss.getSubjectFromLockedObjectName() + ")" : "Lock"));
-
- lockMenuItem.setEnabled(permiss.isWritePermission() && (!permiss.isLocked() || permiss.isAccessToRemoveLock()));
- openMenuItem.setEnabled(permiss.isReadPermission());
- createMenuItem.setEnabled(permiss.isWritePermission());
- openWithMenuItem.setEnabled(permiss.isReadPermission());
- goIntoMenuItem.setEnabled(permiss.isReadPermission());
- copyMenuItem.setEnabled(permiss.isReadPermission());
- pasteMenuItem.setEnabled(permiss.isWritePermission());
- renameArtifactMenuItem.setEnabled(permiss.isWritePermission());
-
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
- }
-
- }
- }
-
- @Override
- public void init(IViewSite site, IMemento memento) throws PartInitException {
- super.init(site, memento);
-
- if (OseeUiActivator.areOSEEServicesAvailable().isFalse()) {
- return;
- }
-
- try {
- if (memento != null && memento.getString(ROOT_GUID) != null && memento.getString(ROOT_BRANCH) != null) {
- Branch branch = BranchManager.getBranch(Integer.parseInt(memento.getString(ROOT_BRANCH)));
-
- if (!branch.getArchiveState().isArchived() || AccessControlManager.isOseeAdmin()) {
- Artifact previousArtifact = ArtifactQuery.checkArtifactFromId(memento.getString(ROOT_GUID), branch);
- if (previousArtifact != null) {
- explore(previousArtifact);
- } else {
- /*
- * simply means that the previous artifact that was used as the root for the artiactExplorer does not
- * exist because it was deleted or this workspace was last used with a different branch or database,
- * so let the logic below get the default hierarchy root artifact
- */
- }
- return;
- }
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public void saveState(IMemento memento) {
- super.saveState(memento);
- if (explorerRoot != null) {
- memento.putString(ROOT_GUID, explorerRoot.getGuid());
- memento.putString(ROOT_BRANCH, String.valueOf(explorerRoot.getBranch().getId()));
- }
- }
-
- @Override
- public void dispose() {
- OseeEventManager.removeListener(this);
- ArtifactExplorerEventManager.remove(this);
- super.dispose();
- }
-
- @Override
- public String getActionDescription() {
- return "";
- }
-
- @Override
- public void addSelectionChangedListener(ISelectionChangedListener listener) {
- treeViewer.addSelectionChangedListener(listener);
- }
-
- @Override
- public ISelection getSelection() {
- return treeViewer.getSelection();
- }
-
- @Override
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {
- treeViewer.removeSelectionChangedListener(listener);
- }
-
- @Override
- public void setSelection(ISelection selection) {
- treeViewer.setSelection(selection);
- }
-
- private void setHelpContexts() {
- SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "artifact_explorer_tree_viewer",
- "org.eclipse.osee.framework.help.ui");
- }
-
- @Override
- public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
- try {
- if (loadedArtifacts.isNotForBranch(branch)) {
- return;
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- treeViewer.refresh();
- }
- });
- }
-
- @Override
- public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) {
- try {
- if (loadedArtifacts.isNotForBranch(branch)) {
- return;
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- try {
- Set<Artifact> parents = new HashSet<Artifact>();
- for (Artifact art : loadedArtifacts.getLoadedArtifacts()) {
- if (art.getParent() != null) {
- parents.add(art.getParent());
- }
- }
- for (Artifact art : parents) {
- treeViewer.refresh(art);
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- });
- }
-
- @Override
- public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) {
- if (branch == null || transData.branchId != branch.getId()) {
- return;
- }
-
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- if (treeViewer != null && Widgets.isAccessible(treeViewer.getTree())) {
- for (Artifact art : transData.cacheDeletedArtifacts) {
- treeViewer.remove(art);
- }
- try {
- if (!transData.cacheDeletedArtifacts.isEmpty()) {
- getTreeViewer().remove(
- transData.cacheDeletedArtifacts.toArray(new Object[transData.cacheDeletedArtifacts.size()]));
- }
- for (Artifact artifact : transData.cacheChangedArtifacts) {
- // Don't refresh deleted artifacts
- if (artifact.isDeleted()) {
- continue;
- }
- getTreeViewer().update(artifact, null);
- }
-
- treeViewer.update(
- transData.getArtifactsInRelations(ChangeType.Changed,
- CoreRelationTypes.Default_Hierarchical__Child).toArray(), null);
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- try {
- for (Artifact art : transData.getArtifactsInRelations(ChangeType.Added,
- CoreRelationTypes.Default_Hierarchical__Child)) {
- if (!art.isDeleted() && art.getParent() != null) {
- treeViewer.refresh(art.getParent());
- }
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- }
- });
- }
-
- @Override
- public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, final int branchId) {
- if (branchModType == BranchEventType.Committed && branch != null && branch.getId() == branchId) {
- SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
- }
- }
-
- @Override
- public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) {
- try {
- if (!accessControlEvent.isForBranch(branch)) {
- return;
- }
- if (accessControlEvent.getEventType() == AccessControlEventType.UserAuthenticated ||
- //
- accessControlEvent.getEventType() == AccessControlEventType.ArtifactsUnlocked ||
- //
- accessControlEvent.getEventType() == AccessControlEventType.ArtifactsLocked) {
- Displays.ensureInDisplayThread(new Runnable() {
- @Override
- public void run() {
- treeViewer.refresh();
- }
- });
- }
- } catch (Exception ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
-
- @Override
- public void rebuildMenu() {
- setupPopupMenu();
- }
-
- public void setBranch(Branch branch) {
- this.branch = branch;
- }
-
- public void initializeSelectionBox() {
- if (branch != null && branchSelect != null && !branch.equals(branchSelect.getData())) {
- branchSelect.setSelection(branch);
- try {
- checkBranchReadable();
- } catch (OseeCoreException ex) {
- OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
- }
- }
- }
-
- @Override
- public Branch getBranch(IProgressMonitor monitor) {
- return branch;
- }
-
- /**
- * Reveal an artifact in the viewer and select it.
- *
- * @param artifact
- */
- public static void revealArtifact(Artifact artifact) {
- final ArtifactData data = new ArtifactData(artifact);
- IOperation operation = new CheckArtifactBeforeReveal(data);
- Operations.executeAsJob(operation, true, Job.SHORT, new JobChangeAdapter() {
-
- @Override
- public void done(IJobChangeEvent event) {
- IStatus status = event.getResult();
- if (status.isOK()) {
- Job uiJob = new UIJob("Reveal in Artifact Explorer") {
-
- @Override
- public IStatus runInUIThread(IProgressMonitor monitor) {
- Artifact artifact = data.getArtifact();
- IWorkbenchPage page = AWorkbench.getActivePage();
- ArtifactExplorer artifactExplorer = findView(artifact.getBranch(), page);
- artifactExplorer.treeViewer.setSelection(new StructuredSelection(artifact), true);
- return Status.OK_STATUS;
- }
- };
- Jobs.startJob(uiJob);
- }
- }
- });
- }
-
- private static final class ArtifactData {
- private Artifact artifact;
-
- ArtifactData(Artifact artifact) {
- this.artifact = artifact;
- }
-
- Artifact getArtifact() {
- return artifact;
- }
-
- void setArtifact(Artifact artifact) {
- this.artifact = artifact;
- }
- }
-
- private static final class CheckArtifactBeforeReveal extends AbstractOperation {
-
- private final ArtifactData artifactData;
-
- public CheckArtifactBeforeReveal(ArtifactData artifactData) {
- super("Check Artifact Before Reveal", SkynetGuiPlugin.PLUGIN_ID);
- this.artifactData = artifactData;
- }
-
- @Override
- protected void doWork(IProgressMonitor monitor) throws Exception {
- Conditions.checkNotNull(artifactData, "artifact data");
-
- Artifact artifact = artifactData.getArtifact();
- Conditions.checkNotNull(artifactData, "artifact");
- if (artifact.isDeleted()) {
- throw new OseeStateException("The artifact " + artifact.getName() + " has been deleted.");
- } else {
- if (artifact.isHistorical()) {
- artifactData.setArtifact(ArtifactQuery.getArtifactFromId(artifact.getArtId(), artifact.getBranch(),
- EXCLUDE_DELETED));
- }
-
- Artifact root = OseeSystemArtifacts.getDefaultHierarchyRootArtifact(artifact.getBranch());
- Artifact artifactRoot = artifact.getArtifactRoot();
-
- if (!root.equals(artifactRoot)) {
- String artifactRootName = artifactRoot != null ? artifactRoot.getName() : artifact.getName();
- throw new OseeStateException(
- "The artifact " + artifact.getName() + " is rooted on an orphan tree at " + artifactRootName);
- }
- }
- }
- }
-
- @Override
- public void handleBranchEvent(Sender sender, final BranchEvent branchEvent) {
- if (branchEvent.getEventType() == BranchEventType.Committed && branch != null && branch.getGuid().equals(
- branchEvent.getBranchGuid())) {
- SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
- }
- }
-
- public TreeViewer getTreeViewer() {
- return treeViewer;
- }
-
- public void setTreeViewer(TreeViewer treeViewer) {
- this.treeViewer = treeViewer;
- }
-
- @Override
- public ArtifactExplorer getArtifactExplorer() {
- return this;
- }
-
- @Override
- public boolean isDisposed() {
- return treeViewer.getTree() == null || treeViewer.getTree().isDisposed();
- }
-
- @Override
- public List<? extends IEventFilter> getEventFilters() {
- if (branch != null) {
- return OseeEventManager.getEventFiltersForBranch(branch);
- }
- return null;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.framework.ui.skynet;
+
+import static org.eclipse.osee.framework.core.enums.CoreArtifactTypes.RootArtifact;
+import static org.eclipse.osee.framework.skynet.core.artifact.DeletionFlag.EXCLUDE_DELETED;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.access.AccessControlManager;
+import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeStateException;
+import org.eclipse.osee.framework.core.model.Branch;
+import org.eclipse.osee.framework.core.model.type.ArtifactType;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.operation.IOperation;
+import org.eclipse.osee.framework.core.operation.Operations;
+import org.eclipse.osee.framework.core.util.Conditions;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.util.GUID;
+import org.eclipse.osee.framework.logging.OseeLevel;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.plugin.core.IActionable;
+import org.eclipse.osee.framework.plugin.core.util.Jobs;
+import org.eclipse.osee.framework.skynet.core.OseeSystemArtifacts;
+import org.eclipse.osee.framework.skynet.core.UserManager;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.IBranchProvider;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.event.AccessControlEventType;
+import org.eclipse.osee.framework.skynet.core.event.BranchEventType;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData;
+import org.eclipse.osee.framework.skynet.core.event.FrameworkTransactionData.ChangeType;
+import org.eclipse.osee.framework.skynet.core.event.IAccessControlEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsChangeTypeEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IArtifactsPurgedEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IBranchEventListener;
+import org.eclipse.osee.framework.skynet.core.event.IFrameworkTransactionEventListener;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.event.Sender;
+import org.eclipse.osee.framework.skynet.core.event2.AccessControlEvent;
+import org.eclipse.osee.framework.skynet.core.event2.BranchEvent;
+import org.eclipse.osee.framework.skynet.core.event2.filter.IEventFilter;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActions;
+import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
+import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
+import org.eclipse.osee.framework.ui.plugin.util.SelectionCountChangeListener;
+import org.eclipse.osee.framework.ui.skynet.access.PolicyDialog;
+import org.eclipse.osee.framework.ui.skynet.action.OpenAssociatedArtifactFromBranchProvider;
+import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactNameConflictHandler;
+import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactPasteOperation;
+import org.eclipse.osee.framework.ui.skynet.artifact.massEditor.MassArtifactEditor;
+import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
+import org.eclipse.osee.framework.ui.skynet.change.ChangeUiUtil;
+import org.eclipse.osee.framework.ui.skynet.dialogs.ArtifactPasteSpecialDialog;
+import org.eclipse.osee.framework.ui.skynet.listener.IRebuildMenuListener;
+import org.eclipse.osee.framework.ui.skynet.menu.ArtifactTreeViewerGlobalMenuHelper;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenu;
+import org.eclipse.osee.framework.ui.skynet.menu.GlobalMenuPermissions;
+import org.eclipse.osee.framework.ui.skynet.menu.IGlobalMenuHelper;
+import org.eclipse.osee.framework.ui.skynet.render.PresentationType;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.search.QuickSearchView;
+import org.eclipse.osee.framework.ui.skynet.skywalker.SkyWalkerView;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactClipboard;
+import org.eclipse.osee.framework.ui.skynet.util.ArtifactPasteConfiguration;
+import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
+import org.eclipse.osee.framework.ui.skynet.util.SkynetViews;
+import org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidget;
+import org.eclipse.osee.framework.ui.skynet.widgets.dialog.ArtifactTypeFilteredTreeEntryDialog;
+import org.eclipse.osee.framework.ui.skynet.widgets.xHistory.HistoryView;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.osee.framework.ui.swt.ImageManager;
+import org.eclipse.osee.framework.ui.swt.MenuItems;
+import org.eclipse.osee.framework.ui.swt.TreeViewerUtility;
+import org.eclipse.osee.framework.ui.swt.Widgets;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.custom.TreeEditor;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ExportResourcesAction;
+import org.eclipse.ui.actions.ImportResourcesAction;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.progress.UIJob;
+
+/**
+ * <REM2>
+ *
+ * @author Ryan D. Brooks
+ */
+public class ArtifactExplorer extends ViewPart implements IArtifactExplorerEventHandler, IRebuildMenuListener, IAccessControlEventListener, IFrameworkTransactionEventListener, IBranchEventListener, IArtifactsPurgedEventListener, IArtifactsChangeTypeEventListener, IActionable, ISelectionProvider, IBranchProvider {
+ public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.ArtifactExplorer";
+ private static final String ROOT_GUID = "artifact.explorer.last.root_guid";
+ private static final String ROOT_BRANCH = "artifact.explorer.last.root_branch";
+ private static final ArtifactClipboard artifactClipboard = new ArtifactClipboard(VIEW_ID);
+ private static final LinkedList<Tree> trees = new LinkedList<Tree>();
+
+ private TreeViewer treeViewer;
+ private Action upAction;
+ private Artifact explorerRoot;
+ private MenuItem openMenuItem;
+ private MenuItem massEditMenuItem;
+ private MenuItem skywalkerMenuItem;
+ private MenuItem createMenuItem;
+ private MenuItem openWithMenuItem;
+ private MenuItem accessControlMenuItem;
+ private MenuItem lockMenuItem;
+ private MenuItem goIntoMenuItem;
+ private MenuItem copyMenuItem;
+ private MenuItem pasteMenuItem;
+ private MenuItem pasteSpecialMenuItem;
+ private MenuItem renameArtifactMenuItem;
+ private MenuItem refreshMenuItem;
+ private MenuItem findOnAnotherBranch;
+ private NeedArtifactMenuListener needArtifactListener;
+ private NeedProjectMenuListener needProjectListener;
+ private Tree myTree;
+ private TreeEditor myTreeEditor;
+ private Text myTextBeingRenamed;
+ private Action newArtifactExplorer;
+ private Action collapseAllAction;
+ private Action showChangeReport;
+ private XBranchSelectWidget branchSelect;
+ private Branch branch;
+ private IGlobalMenuHelper globalMenuHelper;
+
+ private Composite stackComposite;
+ private Control branchUnreadableWarning;
+ private StackLayout stackLayout;
+ private final ArtifactDecorator artifactDecorator = new ArtifactDecorator(
+ SkynetGuiPlugin.ARTIFACT_EXPLORER_ATTRIBUTES_PREF);
+
+ public static void explore(Collection<Artifact> artifacts) {
+ explore(artifacts, AWorkbench.getActivePage());
+ }
+
+ public static void explore(Collection<Artifact> artifacts, IWorkbenchPage page) {
+ Artifact sampleArtifact = null;
+ Branch inputBranch = null;
+ if (artifacts != null && !artifacts.isEmpty()) {
+ sampleArtifact = artifacts.iterator().next();
+ inputBranch = sampleArtifact.getBranch();
+ }
+ ArtifactExplorer artifactExplorer = findView(inputBranch, page);
+
+ artifactExplorer.setPartName("Artifacts");
+ artifactExplorer.setContentDescription("These artifacts could not be handled");
+ artifactExplorer.treeViewer.setInput(artifacts);
+ artifactExplorer.initializeSelectionBox();
+ }
+
+ private static ArtifactExplorer findView(Branch inputBranch, IWorkbenchPage page) {
+ for (IViewReference view : page.getViewReferences()) {
+ if (view.getId().equals(ArtifactExplorer.VIEW_ID)) {
+ if (view.getView(false) != null && inputBranch.equals(((ArtifactExplorer) view.getView(false)).branch)) {
+ try {
+ return (ArtifactExplorer) page.showView(view.getId(), view.getSecondaryId(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ }
+ }
+ try {
+ ArtifactExplorer explorer =
+ (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, GUID.create(), IWorkbenchPage.VIEW_ACTIVATE);
+ explorer.explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(inputBranch));
+ return explorer;
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private Control createDefaultWarning(Composite parent) {
+ Composite composite = new Composite(parent, SWT.BORDER);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ composite.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ Label image = new Label(composite, SWT.NONE);
+ image.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+ image.setImage(ImageManager.getImage(FrameworkImage.LOCKED_KEY));
+ image.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ Label label = new Label(composite, SWT.NONE);
+ Font font = new Font(PlatformUI.getWorkbench().getDisplay(), "Courier New", 10, SWT.BOLD);
+ label.setFont(font);
+ label.setForeground(Displays.getSystemColor(SWT.COLOR_DARK_RED));
+ label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+ label.setText("Branch Read Access Denied.\nContact your administrator.");
+ label.setBackground(Displays.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
+
+ return composite;
+ }
+
+ private void checkBranchReadable() throws OseeCoreException {
+ if (treeViewer == null) {
+ return;
+ }
+ Control control = branchUnreadableWarning;
+ if (branch == null || new GlobalMenuPermissions(globalMenuHelper).isBranchReadable(branch)) {
+ control = treeViewer.getTree();
+ }
+ stackLayout.topControl = control;
+ stackComposite.layout();
+ stackComposite.getParent().layout();
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ try {
+ if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
+ return;
+ }
+
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.heightHint = 1000;
+ gridData.widthHint = 1000;
+
+ parent.setLayout(new GridLayout(1, false));
+ parent.setLayoutData(gridData);
+
+ branchSelect = new XBranchSelectWidget("");
+ branchSelect.setDisplayLabel(false);
+ branchSelect.setSelection(branch);
+ branchSelect.createWidgets(parent, 1);
+
+ branchSelect.addListener(new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ try {
+ Branch selectedBranch = branchSelect.getData();
+ if (selectedBranch != null) {
+ branch = selectedBranch;
+ explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(branch));
+ }
+ } catch (Exception ex) {
+ OseeLog.log(getClass(), Level.SEVERE, ex);
+ }
+ }
+
+ });
+
+ stackComposite = new Composite(parent, SWT.NONE);
+ stackLayout = new StackLayout();
+ stackComposite.setLayout(stackLayout);
+ stackComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ branchUnreadableWarning = createDefaultWarning(stackComposite);
+
+ treeViewer = new TreeViewer(stackComposite);
+ myTree = treeViewer.getTree();
+ Tree tree = treeViewer.getTree();
+ final ArtifactExplorer fArtExplorere = this;
+ tree.addDisposeListener(new DisposeListener() {
+
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ ArtifactExplorerEventManager.remove(fArtExplorere);
+ }
+ });
+ treeViewer.setContentProvider(new ArtifactContentProvider());
+
+ treeViewer.setLabelProvider(new ArtifactLabelProvider(artifactDecorator));
+ treeViewer.addDoubleClickListener(new ArtifactDoubleClick());
+ treeViewer.getControl().setLayoutData(gridData);
+
+ // We can not use the hash lookup because an artifact may not have a
+ // good equals.
+ // This can be added back once the content provider is converted over to
+ // use job node.
+ treeViewer.setUseHashlookup(false);
+
+ treeViewer.addSelectionChangedListener(new SelectionCountChangeListener(getViewSite()));
+ globalMenuHelper = new ArtifactTreeViewerGlobalMenuHelper(treeViewer);
+
+ IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+ createCollapseAllAction(toolbarManager);
+ createUpAction(toolbarManager);
+ createNewArtifactExplorerAction(toolbarManager);
+ createShowChangeReportAction(toolbarManager);
+ addOpenQuickSearchAction(toolbarManager);
+ toolbarManager.add(new OpenAssociatedArtifactFromBranchProvider(this));
+
+ artifactDecorator.setViewer(treeViewer);
+ artifactDecorator.addActions(getViewSite().getActionBars().getMenuManager(), this);
+
+ getSite().setSelectionProvider(treeViewer);
+ addExploreSelection();
+
+ setupPopupMenu();
+
+ myTreeEditor = new TreeEditor(myTree);
+ myTreeEditor.horizontalAlignment = SWT.LEFT;
+ myTreeEditor.grabHorizontal = true;
+ myTreeEditor.minimumWidth = 50;
+
+ new ArtifactExplorerDragAndDrop(treeViewer, VIEW_ID, this);
+
+ OseeUiActions.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Artifact Explorer");
+
+ OseeContributionItem.addTo(this, false);
+
+ updateEnablementsEtAl();
+ trees.add(tree);
+ setHelpContexts();
+
+ checkBranchReadable();
+ getViewSite().getActionBars().updateActionBars();
+
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+
+ OseeEventManager.addListener(this);
+ ArtifactExplorerEventManager.add(this);
+ }
+
+ /**
+ * Reveal an artifact in the viewer and select it.
+ *
+ */
+ public static void exploreBranch(Branch branch) {
+ if (branch != null) {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ findView(branch, page);
+ }
+ }
+
+ public void setupPopupMenu() {
+
+ Menu popupMenu = new Menu(treeViewer.getTree().getParent());
+ needArtifactListener = new NeedArtifactMenuListener();
+ needProjectListener = new NeedProjectMenuListener();
+ popupMenu.addMenuListener(needArtifactListener);
+ popupMenu.addMenuListener(needProjectListener);
+
+ createOpenMenuItem(popupMenu);
+ createOpenWithMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createFindOnDifferentBranchItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createNewChildMenuItem(popupMenu);
+ createGoIntoMenuItem(popupMenu);
+ createMassEditMenuItem(popupMenu);
+ createSkywalkerMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ new GlobalMenu(popupMenu, globalMenuHelper);
+ createRenameArtifactMenuItem(popupMenu);
+ createRefreshMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createHistoryMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createImportExportMenuItems(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createLockMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createCopyMenuItem(popupMenu);
+ createPasteMenuItem(popupMenu);
+ createPasteSpecialMenuItem(popupMenu);
+ createExpandAllMenuItem(popupMenu);
+ createSelectAllMenuItem(popupMenu);
+ new MenuItem(popupMenu, SWT.SEPARATOR);
+ createAccessControlMenuItem(popupMenu);
+ treeViewer.getTree().setMenu(popupMenu);
+ }
+
+ private void addOpenQuickSearchAction(IToolBarManager toolbarManager) {
+ Action openQuickSearch =
+ new Action("Quick Search", ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_SEARCH)) {
+ @Override
+ public void run() {
+ Job job = new UIJob("Open Quick Search") {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ IStatus status = Status.OK_STATUS;
+ try {
+ IViewPart viewPart =
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(
+ QuickSearchView.VIEW_ID);
+ if (viewPart != null) {
+ Branch branch = getBranch(monitor);
+ if (branch != null) {
+ ((QuickSearchView) viewPart).setBranch(branch);
+ }
+ }
+ } catch (Exception ex) {
+ status = new Status(IStatus.ERROR, SkynetGuiPlugin.PLUGIN_ID, "Error opening quick search", ex);
+ }
+ return status;
+ }
+ };
+ Jobs.startJob(job);
+ }
+ };
+ openQuickSearch.setToolTipText("Open Quick Search View");
+ toolbarManager.add(openQuickSearch);
+ }
+
+ protected void createUpAction(IToolBarManager toolbarManager) {
+ upAction = new Action("View Parent") {
+ @Override
+ public void run() {
+ try {
+ Artifact parent = explorerRoot.getParent();
+
+ if (parent == null) {
+ return;
+ }
+
+ Object[] expanded = treeViewer.getExpandedElements();
+ Object[] expandedPlus = new Object[expanded.length + 1];
+ for (int i = 0; i < expanded.length; i++) {
+ expandedPlus[i] = expanded[i];
+ }
+ expandedPlus[expandedPlus.length - 1] = explorerRoot;
+
+ explore(parent);
+
+ treeViewer.setExpandedElements(expandedPlus);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ };
+
+ upAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.ARROW_UP_YELLOW));
+ upAction.setToolTipText("View Parent");
+ updateEnablementsEtAl();
+ toolbarManager.add(upAction);
+ }
+
+ private void createNewArtifactExplorerAction(IToolBarManager toolbarManager) {
+
+ newArtifactExplorer = new Action("New Artifact Explorer") {
+ @Override
+ public void run() {
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ArtifactExplorer artifactExplorer;
+ try {
+ artifactExplorer =
+ (ArtifactExplorer) page.showView(ArtifactExplorer.VIEW_ID, GUID.create(),
+ IWorkbenchPage.VIEW_ACTIVATE);
+ artifactExplorer.explore(OseeSystemArtifacts.getDefaultHierarchyRootArtifact(branch));
+ artifactExplorer.setExpandedArtifacts(treeViewer.getExpandedElements());
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ };
+
+ newArtifactExplorer.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_EXPLORER));
+ toolbarManager.add(newArtifactExplorer);
+ }
+
+ private void createShowChangeReportAction(IToolBarManager toolbarManager) {
+ showChangeReport = new Action("Show Change Report") {
+ @Override
+ public void run() {
+ try {
+ ChangeUiUtil.open(branch);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ };
+
+ showChangeReport.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.BRANCH_CHANGE));
+ toolbarManager.add(showChangeReport);
+ }
+
+ private void createCollapseAllAction(IToolBarManager toolbarManager) {
+ collapseAllAction = new Action("Collapse All") {
+ @Override
+ public void run() {
+ if (treeViewer != null) {
+ treeViewer.collapseAll();
+ }
+ }
+ };
+
+ collapseAllAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.COLLAPSE_ALL));
+ toolbarManager.add(collapseAllAction);
+ }
+
+ private void createOpenWithMenuItem(Menu parentMenu) {
+ openWithMenuItem = new MenuItem(parentMenu, SWT.CASCADE);
+ openWithMenuItem.setText("&Open With");
+ final Menu submenu = new Menu(openWithMenuItem);
+ openWithMenuItem.setMenu(submenu);
+ parentMenu.addMenuListener(new OpenWithMenuListener(submenu, treeViewer, this));
+ }
+
+ private void createNewChildMenuItem(Menu parentMenu) {
+ createMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ needProjectListener.add(createMenuItem);
+ createMenuItem.setText("&New Child");
+ createMenuItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ super.widgetSelected(e);
+ try {
+ ArtifactTypeFilteredTreeEntryDialog dialog = getDialog();
+ Artifact parent = getParent();
+
+ if (dialog.open() == Window.OK) {
+ ArtifactType type = dialog.getSelection();
+ String name = dialog.getEntryValue();
+
+ SkynetTransaction transaction =
+ new SkynetTransaction(branch, String.format("Created new %s \"%s\" in artifact explorer",
+ type.getName(), name));
+ parent.addNewChild(null, type, name);
+ parent.persist(transaction);
+ transaction.execute();
+
+ treeViewer.refresh();
+ treeViewer.refresh(false);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ private ArtifactTypeFilteredTreeEntryDialog getDialog() throws OseeCoreException {
+ Collection<ArtifactType> artifactTypes =
+ ArtifactTypeManager.getConcreteArtifactTypes(branchSelect.getData());
+
+ // IAccessPolicyHandlerService policyHandlerService = SkynetGuiPlugin.getInstance().getPolicyHandlerService();
+ // policyHandlerService.
+
+ ArtifactType rootArtifactType = ArtifactTypeManager.getType(RootArtifact);
+ artifactTypes.remove(rootArtifactType);
+
+ ArtifactTypeFilteredTreeEntryDialog dialog =
+ new ArtifactTypeFilteredTreeEntryDialog("New Child", "Enter name and select Artifact type to create",
+ "Artifact Name");
+ dialog.setInput(artifactTypes);
+ return dialog;
+ }
+
+ private Artifact getParent() throws OseeCoreException {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ if (selection.size() > 1) {
+ throw new OseeCoreException("Please select a single artifact to create a new child.");
+ }
+
+ Iterator<?> itemsIter = selection.iterator();
+ Artifact parent;
+ if (!itemsIter.hasNext()) {
+ parent = explorerRoot;
+ } else {
+ parent = (Artifact) itemsIter.next();
+ }
+
+ return parent;
+ }
+ });
+ }
+
+ private void createGoIntoMenuItem(Menu parentMenu) {
+ goIntoMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ goIntoMenuItem.setText("&Go Into");
+ needArtifactListener.add(goIntoMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ goIntoMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> itemsIter = selection.iterator();
+ if (itemsIter.hasNext()) {
+ try {
+ Object[] expanded = treeViewer.getExpandedElements();
+ explore((Artifact) itemsIter.next());
+ treeViewer.setExpandedElements(expanded);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ });
+ }
+
+ private void createOpenMenuItem(Menu parentMenu) {
+ openMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ openMenuItem.setText("&Open");
+ needArtifactListener.add(openMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ openMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ RendererManager.openInJob(selectedItems, PresentationType.DEFAULT_OPEN);
+ }
+ });
+ }
+
+ private void createFindOnDifferentBranchItem(Menu parentMenu) {
+ findOnAnotherBranch = new MenuItem(parentMenu, SWT.PUSH);
+ findOnAnotherBranch.setText("Reveal On Another Branch");
+ needArtifactListener.add(findOnAnotherBranch);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ findOnAnotherBranch.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ Branch branch = BranchSelectionDialog.getBranchFromUser();
+ if (branch != null) {
+ for (Artifact artifact : selectedItems) {
+ try {
+ ArtifactExplorer.revealArtifact(ArtifactQuery.getArtifactFromId(artifact.getArtId(), branch));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(
+ SkynetGuiPlugin.class,
+ OseeLevel.SEVERE_POPUP,
+ String.format("Could not find Artifact \'%s\' on Branch \'%s\'", artifact.getName(),
+ branch.getName()));
+ }
+ }
+
+ }
+ }
+ });
+ }
+
+ private void createMassEditMenuItem(Menu parentMenu) {
+ massEditMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ massEditMenuItem.setText("Mass Edit");
+ needArtifactListener.add(massEditMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ massEditMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ MassArtifactEditor.editArtifacts("", selectedItems);
+ }
+ });
+ }
+
+ private void createRefreshMenuItem(Menu parentMenu) {
+ refreshMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ refreshMenuItem.setText("Refresh");
+ needArtifactListener.add(refreshMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ refreshMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent mySelectionEvent) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ for (Artifact artifact : selectedItems) {
+ treeViewer.refresh(artifact);
+ }
+ }
+ });
+ }
+
+ private void createRenameArtifactMenuItem(Menu parentMenu) {
+ renameArtifactMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ renameArtifactMenuItem.setText("Rename Artifact");
+ needArtifactListener.add(renameArtifactMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ renameArtifactMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent mySelectionEvent) {
+ handleRenameArtifactSelectionEvent(mySelectionEvent);
+ }
+ });
+ }
+
+ private void handleRenameArtifactSelectionEvent(SelectionEvent mySelectionEvent) {
+ // Clean up any previous editor control
+ Control oldEditor = myTreeEditor.getEditor();
+
+ if (oldEditor != null) {
+ oldEditor.dispose();
+ }
+
+ // Identify the selected row, only allow input if there is a single
+ // selected row
+ TreeItem[] selection = myTree.getSelection();
+
+ if (selection.length != 1) {
+ return;
+ }
+
+ final TreeItem myTreeItem = selection[0];
+
+ if (myTreeItem == null) {
+ return;
+ }
+ myTextBeingRenamed = new Text(myTree, SWT.BORDER);
+ Object myTreeItemObject = myTreeItem.getData();
+ myTextBeingRenamed.setText(((Artifact) myTreeItemObject).getName());
+ myTextBeingRenamed.addFocusListener(new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ updateText(myTextBeingRenamed.getText(), myTreeItem);
+ myTextBeingRenamed.dispose();
+
+ }
+
+ @Override
+ public void focusGained(FocusEvent e) {
+ // do nothing
+ }
+ });
+
+ myTextBeingRenamed.addKeyListener(new KeyAdapter() {
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if (e.character == SWT.CR) {
+ updateText(myTextBeingRenamed.getText(), myTreeItem);
+ myTextBeingRenamed.dispose();
+ } else if (e.keyCode == SWT.ESC) {
+ myTextBeingRenamed.dispose();
+ }
+ }
+ });
+ myTextBeingRenamed.selectAll();
+ myTextBeingRenamed.setFocus();
+ myTreeEditor.setEditor(myTextBeingRenamed, myTreeItem);
+ }
+
+ private void updateText(String newLabel, TreeItem item) {
+ myTreeEditor.getItem().setText(newLabel);
+ Object myTreeItemObject = item.getData();
+ if (myTreeItemObject instanceof Artifact) {
+ Artifact myArtifact = (Artifact) myTreeItemObject;
+ try {
+ myArtifact.setName(newLabel);
+ myArtifact.persist();
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ treeViewer.refresh();
+ }
+
+ private void createSkywalkerMenuItem(Menu parentMenu) {
+ skywalkerMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ skywalkerMenuItem.setText("Sky Walker");
+ needArtifactListener.add(skywalkerMenuItem);
+
+ ArtifactMenuListener listener = new ArtifactMenuListener();
+ parentMenu.addMenuListener(listener);
+ skywalkerMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent ev) {
+ LinkedList<Artifact> selectedItems = new LinkedList<Artifact>();
+ TreeViewerUtility.getPreorderSelection(treeViewer, selectedItems);
+ SkyWalkerView.exploreArtifact(selectedItems.getFirst());
+ }
+ });
+ }
+
+ private void createSelectAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setText("&Select All\tCtrl+A");
+ menuItem.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(org.eclipse.swt.widgets.Event event) {
+ treeViewer.getTree().selectAll();
+ }
+ });
+ }
+
+ private void createHistoryMenuItem(Menu parentMenu) {
+ MenuItem revisionMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ revisionMenuItem.setText("&Show Resource History ");
+ revisionMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Artifact selectedArtifact = (Artifact) selection.getFirstElement();
+
+ try {
+ HistoryView.open(selectedArtifact);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ private void createImportExportMenuItems(Menu parentMenu) {
+ MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ImportResourcesAction(getViewSite().getWorkbenchWindow()));
+ MenuItems.createMenuItem(parentMenu, SWT.PUSH, new ExportResourcesAction(getViewSite().getWorkbenchWindow()));
+ }
+
+ private void createAccessControlMenuItem(Menu parentMenu) {
+ accessControlMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ accessControlMenuItem.setImage(ImageManager.getImage(FrameworkImage.AUTHENTICATED));
+ accessControlMenuItem.setText("&Access Control ");
+ // accessControlMenuItem.setEnabled(false);
+ accessControlMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Artifact selectedArtifact = (Artifact) selection.getFirstElement();
+ try {
+ if (selectedArtifact != null) {
+ PolicyDialog pd = new PolicyDialog(Displays.getActiveShell(), selectedArtifact);
+ pd.open();
+ checkBranchReadable();
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ private void createLockMenuItem(Menu parentMenu) {
+ lockMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ lockMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ Iterator<?> iterator = selection.iterator();
+ Set<Artifact> lockArtifacts = new HashSet<Artifact>();
+ Set<Artifact> unlockArtifacts = new HashSet<Artifact>();
+ while (iterator.hasNext()) {
+ try {
+ Artifact object = (Artifact) iterator.next();
+ if (new GlobalMenuPermissions(object).isLocked()) {
+ unlockArtifacts.add(object);
+ } else {
+ lockArtifacts.add(object);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ try {
+ AccessControlManager.unLockObjects(unlockArtifacts, UserManager.getUser());
+ AccessControlManager.lockObjects(lockArtifacts, UserManager.getUser());
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+
+ });
+ }
+
+ private void createCopyMenuItem(Menu parentMenu) {
+ copyMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ copyMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_COPY));
+ copyMenuItem.setText("Copy \tCtrl+C");
+ copyMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ performCopy();
+ }
+ });
+ }
+
+ private void performCopy() {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ ArrayList<Artifact> artifactTransferData = new ArrayList<Artifact>();
+ ArrayList<String> textTransferData = new ArrayList<String>();
+ Artifact artifact;
+
+ if (selection != null && !selection.isEmpty()) {
+ for (Object object : selection.toArray()) {
+ if (object instanceof Artifact) {
+ artifact = (Artifact) object;
+
+ artifactTransferData.add(artifact);
+ textTransferData.add(artifact.getName());
+ }
+ }
+ artifactClipboard.setArtifactsToClipboard(artifactTransferData, textTransferData);
+ }
+ }
+
+ private void createPasteMenuItem(Menu parentMenu) {
+ pasteMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ pasteMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE));
+ pasteMenuItem.setText("Paste \tCtrl+V");
+ pasteMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ performPasteOperation(false);
+ }
+ });
+ }
+
+ private void createPasteSpecialMenuItem(Menu parentMenu) {
+ pasteSpecialMenuItem = new MenuItem(parentMenu, SWT.PUSH);
+ pasteSpecialMenuItem.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_PASTE));
+ pasteSpecialMenuItem.setText("Paste Special... \tCtrl+S");
+ pasteSpecialMenuItem.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ performPasteOperation(true);
+ }
+
+ });
+ }
+
+ private void performPasteOperation(boolean isPasteSpecial) {
+ boolean performPaste = true;
+ Artifact destinationArtifact = null;
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+ if (selection != null && !selection.isEmpty()) {
+ Object object = selection.getFirstElement();
+
+ if (object instanceof Artifact) {
+ destinationArtifact = (Artifact) object;
+ }
+ }
+
+ ArtifactPasteConfiguration config = new ArtifactPasteConfiguration();
+
+ if (isPasteSpecial) {
+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ List<Artifact> copiedArtifacts = artifactClipboard.getCopiedContents();
+ ArtifactPasteSpecialDialog dialog =
+ new ArtifactPasteSpecialDialog(shell, config, destinationArtifact, copiedArtifacts);
+ performPaste = dialog.open() == Window.OK;
+ }
+
+ if (performPaste) {
+ Operations.executeAsJob(
+ new ArtifactPasteOperation(config, destinationArtifact, artifactClipboard.getCopiedContents(),
+ new ArtifactNameConflictHandler()), true);
+ }
+ }
+
+ private void createExpandAllMenuItem(Menu parentMenu) {
+ MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
+ menuItem.setImage(ImageManager.getImage(FrameworkImage.EXPAND_ALL));
+ menuItem.setText("Expand All\tCtrl++");
+ menuItem.addSelectionListener(new ExpandListener());
+ }
+
+ public class ExpandListener extends SelectionAdapter {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ expandAll((IStructuredSelection) treeViewer.getSelection());
+ }
+ }
+
+ private void expandAll(IStructuredSelection selection) {
+ Iterator<?> iter = selection.iterator();
+ while (iter.hasNext()) {
+ treeViewer.expandToLevel(iter.next(), AbstractTreeViewer.ALL_LEVELS);
+ }
+ }
+
+ @Override
+ public void setFocus() {
+ if (treeViewer != null) {
+ treeViewer.getControl().setFocus();
+ }
+ }
+
+ public void explore(Artifact artifact) {
+ if (artifact == null) {
+ throw new IllegalArgumentException("Can not explore a null artifact.");
+ }
+
+ setPartName("Artifact Explorer: " + artifact.getBranch().getShortName());
+ if (branch != null && branch != artifact.getBranch()) {
+ explore(Arrays.asList(artifact));
+ return;
+ }
+ try {
+ checkBranchReadable();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ explorerRoot = artifact;
+ branch = artifact.getBranch();
+
+ initializeSelectionBox();
+
+ if (treeViewer != null) {
+ Object objects[] = treeViewer.getExpandedElements();
+ treeViewer.setInput(explorerRoot);
+ setupPopupMenu();
+ updateEnablementsEtAl();
+ // Attempt to re-expand what was expanded
+ treeViewer.setExpandedElements(objects);
+ }
+ }
+
+ public void setExpandedArtifacts(Object... artifacts) {
+ if (treeViewer != null) {
+ treeViewer.setExpandedElements(artifacts);
+ }
+ }
+
+ private void updateEnablementsEtAl() {
+ // The upAction may be null if this viewpart has not been layed out yet
+ if (upAction != null) {
+ try {
+ upAction.setEnabled(explorerRoot != null && explorerRoot.hasParent());
+ } catch (OseeCoreException ex) {
+ upAction.setEnabled(false);
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ }
+ }
+
+ private class NeedArtifactMenuListener implements MenuListener {
+ private final HashCollection<Class<? extends Artifact>, MenuItem> menuItemMap;
+
+ public NeedArtifactMenuListener() {
+ this.menuItemMap = new HashCollection<Class<? extends Artifact>, MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ menuItemMap.put(Artifact.class, item);
+ }
+
+ @Override
+ public void menuHidden(MenuEvent e) {
+ // do nothing
+ }
+
+ @Override
+ public void menuShown(MenuEvent e) {
+ IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
+
+ Object obj = selection.getFirstElement();
+ if (obj != null) {
+ Class<? extends Artifact> selectedClass = obj.getClass().asSubclass(Artifact.class);
+
+ for (Class<? extends Artifact> artifactClass : menuItemMap.keySet()) {
+ boolean valid = artifactClass.isAssignableFrom(selectedClass);
+
+ for (MenuItem item : menuItemMap.getValues(artifactClass)) {
+ if (!(item.getData() instanceof Exception)) {
+ // Only modify enabling if no error is associated
+ item.setEnabled(valid);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private class NeedProjectMenuListener implements MenuListener {
+ Collection<MenuItem> items;
+
+ public NeedProjectMenuListener() {
+ this.items = new LinkedList<MenuItem>();
+ }
+
+ public void add(MenuItem item) {
+ items.add(item);
+ }
+
+ @Override
+ public void menuHidden(MenuEvent e) {
+ // do nothing
+ }
+
+ @Override
+ public void menuShown(MenuEvent e) {
+ boolean valid = treeViewer.getInput() != null;
+ for (MenuItem item : items) {
+ if (!(item.getData() instanceof Exception)) {
+ // Only modify
+ // enabling if no
+ // error is
+ // associated
+ item.setEnabled(valid);
+ }
+ }
+ }
+ }
+
+ /**
+ * Add the selection from the define explorer
+ */
+ private void addExploreSelection() {
+ if (explorerRoot != null) {
+ try {
+ treeViewer.setInput(explorerRoot);
+ initializeSelectionBox();
+ } catch (IllegalArgumentException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ /**
+ * @author Jeff C. Phillips
+ */
+ public class ArtifactMenuListener implements MenuListener {
+
+ @Override
+ public void menuHidden(MenuEvent e) {
+ // do nothing
+ }
+
+ @Override
+ public void menuShown(MenuEvent e) {
+ // Use this menu listener until all menu items can be moved to
+ // GlobaMenu
+ try {
+ GlobalMenuPermissions permiss = new GlobalMenuPermissions(globalMenuHelper);
+
+ lockMenuItem.setText((permiss.isLocked() ? "Unlock: (" + permiss.getSubjectFromLockedObjectName() + ")" : "Lock"));
+
+ lockMenuItem.setEnabled(permiss.isWritePermission() && (!permiss.isLocked() || permiss.isAccessToRemoveLock()));
+ openMenuItem.setEnabled(permiss.isReadPermission());
+ createMenuItem.setEnabled(permiss.isWritePermission());
+ openWithMenuItem.setEnabled(permiss.isReadPermission());
+ goIntoMenuItem.setEnabled(permiss.isReadPermission());
+ copyMenuItem.setEnabled(permiss.isReadPermission());
+ pasteMenuItem.setEnabled(permiss.isWritePermission());
+ renameArtifactMenuItem.setEnabled(permiss.isWritePermission());
+
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+
+ }
+ }
+
+ @Override
+ public void init(IViewSite site, IMemento memento) throws PartInitException {
+ super.init(site, memento);
+
+ if (OseeUiActivator.areOSEEServicesAvailable().isFalse()) {
+ return;
+ }
+
+ try {
+ if (memento != null && memento.getString(ROOT_GUID) != null && memento.getString(ROOT_BRANCH) != null) {
+ Branch branch = BranchManager.getBranch(Integer.parseInt(memento.getString(ROOT_BRANCH)));
+
+ if (!branch.getArchiveState().isArchived() || AccessControlManager.isOseeAdmin()) {
+ Artifact previousArtifact = ArtifactQuery.checkArtifactFromId(memento.getString(ROOT_GUID), branch);
+ if (previousArtifact != null) {
+ explore(previousArtifact);
+ } else {
+ /*
+ * simply means that the previous artifact that was used as the root for the artiactExplorer does not
+ * exist because it was deleted or this workspace was last used with a different branch or database,
+ * so let the logic below get the default hierarchy root artifact
+ */
+ }
+ return;
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public void saveState(IMemento memento) {
+ super.saveState(memento);
+ if (explorerRoot != null) {
+ memento.putString(ROOT_GUID, explorerRoot.getGuid());
+ memento.putString(ROOT_BRANCH, String.valueOf(explorerRoot.getBranch().getId()));
+ }
+ }
+
+ @Override
+ public void dispose() {
+ OseeEventManager.removeListener(this);
+ ArtifactExplorerEventManager.remove(this);
+ super.dispose();
+ }
+
+ @Override
+ public String getActionDescription() {
+ return "";
+ }
+
+ @Override
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ treeViewer.addSelectionChangedListener(listener);
+ }
+
+ @Override
+ public ISelection getSelection() {
+ return treeViewer.getSelection();
+ }
+
+ @Override
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ treeViewer.removeSelectionChangedListener(listener);
+ }
+
+ @Override
+ public void setSelection(ISelection selection) {
+ treeViewer.setSelection(selection);
+ }
+
+ private void setHelpContexts() {
+ SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "artifact_explorer_tree_viewer",
+ "org.eclipse.osee.framework.help.ui");
+ }
+
+ @Override
+ public void handleArtifactsPurgedEvent(Sender sender, LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.isNotForBranch(branch)) {
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+
+ @Override
+ public void handleArtifactsChangeTypeEvent(Sender sender, int toArtifactTypeId, final LoadedArtifacts loadedArtifacts) {
+ try {
+ if (loadedArtifacts.isNotForBranch(branch)) {
+ return;
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ Set<Artifact> parents = new HashSet<Artifact>();
+ for (Artifact art : loadedArtifacts.getLoadedArtifacts()) {
+ if (art.getParent() != null) {
+ parents.add(art.getParent());
+ }
+ }
+ for (Artifact art : parents) {
+ treeViewer.refresh(art);
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) {
+ if (branch == null || transData.branchId != branch.getId()) {
+ return;
+ }
+
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ if (treeViewer != null && Widgets.isAccessible(treeViewer.getTree())) {
+ for (Artifact art : transData.cacheDeletedArtifacts) {
+ treeViewer.remove(art);
+ }
+ try {
+ if (!transData.cacheDeletedArtifacts.isEmpty()) {
+ getTreeViewer().remove(
+ transData.cacheDeletedArtifacts.toArray(new Object[transData.cacheDeletedArtifacts.size()]));
+ }
+ for (Artifact artifact : transData.cacheChangedArtifacts) {
+ // Don't refresh deleted artifacts
+ if (artifact.isDeleted()) {
+ continue;
+ }
+ getTreeViewer().update(artifact, null);
+ }
+
+ treeViewer.update(
+ transData.getArtifactsInRelations(ChangeType.Changed,
+ CoreRelationTypes.Default_Hierarchical__Child).toArray(), null);
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ try {
+ for (Artifact art : transData.getArtifactsInRelations(ChangeType.Added,
+ CoreRelationTypes.Default_Hierarchical__Child)) {
+ if (!art.isDeleted() && art.getParent() != null) {
+ treeViewer.refresh(art.getParent());
+ }
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+ });
+ }
+
+ @Override
+ public void handleBranchEventREM1(Sender sender, BranchEventType branchModType, final int branchId) {
+ if (branchModType == BranchEventType.Committed && branch != null && branch.getId() == branchId) {
+ SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
+ }
+ }
+
+ @Override
+ public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEvent accessControlEvent) {
+ try {
+ if (!accessControlEvent.isForBranch(branch)) {
+ return;
+ }
+ if (accessControlEvent.getEventType() == AccessControlEventType.UserAuthenticated ||
+ //
+ accessControlEvent.getEventType() == AccessControlEventType.ArtifactsUnlocked ||
+ //
+ accessControlEvent.getEventType() == AccessControlEventType.ArtifactsLocked) {
+ Displays.ensureInDisplayThread(new Runnable() {
+ @Override
+ public void run() {
+ treeViewer.refresh();
+ }
+ });
+ }
+ } catch (Exception ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public void rebuildMenu() {
+ setupPopupMenu();
+ }
+
+ public void setBranch(Branch branch) {
+ this.branch = branch;
+ }
+
+ public void initializeSelectionBox() {
+ if (branch != null && branchSelect != null && !branch.equals(branchSelect.getData())) {
+ branchSelect.setSelection(branch);
+ try {
+ checkBranchReadable();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
+ }
+ }
+ }
+
+ @Override
+ public Branch getBranch(IProgressMonitor monitor) {
+ return branch;
+ }
+
+ /**
+ * Reveal an artifact in the viewer and select it.
+ *
+ */
+ public static void revealArtifact(Artifact artifact) {
+ final ArtifactData data = new ArtifactData(artifact);
+ IOperation operation = new CheckArtifactBeforeReveal(data);
+ Operations.executeAsJob(operation, true, Job.SHORT, new JobChangeAdapter() {
+
+ @Override
+ public void done(IJobChangeEvent event) {
+ IStatus status = event.getResult();
+ if (status.isOK()) {
+ Job uiJob = new UIJob("Reveal in Artifact Explorer") {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ Artifact artifact = data.getArtifact();
+ IWorkbenchPage page = AWorkbench.getActivePage();
+ ArtifactExplorer artifactExplorer = findView(artifact.getBranch(), page);
+ artifactExplorer.treeViewer.setSelection(new StructuredSelection(artifact), true);
+ return Status.OK_STATUS;
+ }
+ };
+ Jobs.startJob(uiJob);
+ }
+ }
+ });
+ }
+
+ private static final class ArtifactData {
+ private Artifact artifact;
+
+ ArtifactData(Artifact artifact) {
+ this.artifact = artifact;
+ }
+
+ Artifact getArtifact() {
+ return artifact;
+ }
+
+ void setArtifact(Artifact artifact) {
+ this.artifact = artifact;
+ }
+ }
+
+ private static final class CheckArtifactBeforeReveal extends AbstractOperation {
+
+ private final ArtifactData artifactData;
+
+ public CheckArtifactBeforeReveal(ArtifactData artifactData) {
+ super("Check Artifact Before Reveal", SkynetGuiPlugin.PLUGIN_ID);
+ this.artifactData = artifactData;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ Conditions.checkNotNull(artifactData, "artifact data");
+
+ Artifact artifact = artifactData.getArtifact();
+ Conditions.checkNotNull(artifactData, "artifact");
+ if (artifact.isDeleted()) {
+ throw new OseeStateException("The artifact " + artifact.getName() + " has been deleted.");
+ } else {
+ if (artifact.isHistorical()) {
+ artifactData.setArtifact(ArtifactQuery.getArtifactFromId(artifact.getArtId(), artifact.getBranch(),
+ EXCLUDE_DELETED));
+ }
+
+ Artifact root = OseeSystemArtifacts.getDefaultHierarchyRootArtifact(artifact.getBranch());
+ Artifact artifactRoot = artifact.getArtifactRoot();
+
+ if (!root.equals(artifactRoot)) {
+ String artifactRootName = artifactRoot != null ? artifactRoot.getName() : artifact.getName();
+ throw new OseeStateException(
+ "The artifact " + artifact.getName() + " is rooted on an orphan tree at " + artifactRootName);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void handleBranchEvent(Sender sender, final BranchEvent branchEvent) {
+ if (branchEvent.getEventType() == BranchEventType.Committed && branch != null && branch.getGuid().equals(
+ branchEvent.getBranchGuid())) {
+ SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
+ }
+ }
+
+ public TreeViewer getTreeViewer() {
+ return treeViewer;
+ }
+
+ public void setTreeViewer(TreeViewer treeViewer) {
+ this.treeViewer = treeViewer;
+ }
+
+ @Override
+ public ArtifactExplorer getArtifactExplorer() {
+ return this;
+ }
+
+ @Override
+ public boolean isDisposed() {
+ return treeViewer.getTree() == null || treeViewer.getTree().isDisposed();
+ }
+
+ @Override
+ public List<? extends IEventFilter> getEventFilters() {
+ if (branch != null) {
+ return OseeEventManager.getEventFiltersForBranch(branch);
+ }
+ return null;
+ }
+
+}

Back to the top