blob: 5774f633c49ecb3fcbca52d17ade4a7510245841 [file] [log] [blame]
/*******************************************************************************
* 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 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.CoreException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
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.osee.framework.db.connection.exception.OseeArgumentException;
import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
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.skynet.core.UserManager;
import org.eclipse.osee.framework.skynet.core.access.AccessControlManager;
import org.eclipse.osee.framework.skynet.core.access.PermissionEnum;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactModType;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
import org.eclipse.osee.framework.skynet.core.artifact.Branch;
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.StaticIdManager;
import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
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.IAccessControlEventListener;
import org.eclipse.osee.framework.skynet.core.event.IArtifactModifiedEventListener;
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.IRelationModifiedEventListener;
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.event.FrameworkTransactionData.ChangeType;
import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
import org.eclipse.osee.framework.skynet.core.relation.RelationModType;
import org.eclipse.osee.framework.skynet.core.relation.RelationSide;
import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.plugin.util.Displays;
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.artifact.massEditor.MassArtifactEditor;
import org.eclipse.osee.framework.ui.skynet.ats.IActionable;
import org.eclipse.osee.framework.ui.skynet.ats.OseeAts;
import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectionDialog;
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.preferences.EditorsPreferencePage;
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.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.ArtifactTypeFilteredTreeDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.dialog.EntryDialog;
import org.eclipse.osee.framework.ui.skynet.widgets.xHistory.HistoryView;
import org.eclipse.osee.framework.ui.skynet.widgets.xchange.ChangeView;
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.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.events.SelectionListener;
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.Display;
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.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IMemento;
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;
/**
* @author Ryan D. Brooks
*/
public class ArtifactExplorer extends ViewPart implements IRebuildMenuListener, IAccessControlEventListener, IRelationModifiedEventListener, IArtifactModifiedEventListener, 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 exploreRoot;
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 renameArtifactMenuItem;
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;
IGlobalMenuHelper globalMenuHelper;
private Composite stackComposite;
private Control branchUnreadableWarning;
private StackLayout stackLayout;
public ArtifactExplorer() {
}
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, new GUID().toString(),
IWorkbenchPage.VIEW_ACTIVATE);
explorer.explore(ArtifactQuery.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(Display.getCurrent().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_NO_ACCESS));
image.setBackground(Display.getCurrent().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(Display.getCurrent().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(Display.getCurrent().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();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
@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.setBranch(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(ArtifactQuery.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();
treeViewer.setContentProvider(new ArtifactContentProvider());
ArtifactDecorator artifactDecorator =
new ArtifactDecorator(treeViewer, SkynetGuiPlugin.ARTIFACT_EXPLORER_ATTRIBUTES_PREF);
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);
createCollapseAllAction();
createUpAction();
createNewArtifactExplorerAction();
createShowChangeReportAction();
addOpenQuickSearchAction();
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);
parent.layout();
OseeAts.addBugToViewToolbar(this, this, SkynetGuiPlugin.getInstance(), VIEW_ID, "Artifact Explorer");
OseeContributionItem.addTo(this, false);
getViewSite().getActionBars().updateActionBars();
updateEnablementsEtAl();
trees.add(tree);
setHelpContexts();
checkBranchReadable();
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
OseeEventManager.addListener(this);
}
/**
* Reveal an artifact in the viewer and select it.
*
* @param artifact TODO
*/
public static void revealArtifact(Artifact artifact) {
try {
if (artifact.isDeleted()) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP,
"The artifact " + artifact.getDescriptiveName() + " has been deleted.");
} else {
if (artifact.isHistorical()) {
artifact = ArtifactQuery.getArtifactFromId(artifact.getArtId(), artifact.getBranch(), false);
}
if (artifact.isOrphan()) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP,
"The artifact " + artifact.getDescriptiveName() + " does not have a parent (orphan).");
} else {
IWorkbenchPage page = AWorkbench.getActivePage();
ArtifactExplorer artifactExplorer = findView(artifact.getBranch(), page);
artifactExplorer.treeViewer.setSelection(new StructuredSelection(artifact), true);
}
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
}
/**
* Reveal an artifact in the viewer and select it.
*
* @param artifact TODO
*/
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);
createNewItemMenuItem(popupMenu);
createGoIntoMenuItem(popupMenu);
createMassEditMenuItem(popupMenu);
createSkywalkerMenuItem(popupMenu);
new MenuItem(popupMenu, SWT.SEPARATOR);
new GlobalMenu(popupMenu, globalMenuHelper);
createRenameArtifactMenuItem(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);
createExpandAllMenuItem(popupMenu);
createSelectAllMenuItem(popupMenu);
new MenuItem(popupMenu, SWT.SEPARATOR);
createAccessControlMenuItem(popupMenu);
treeViewer.getTree().setMenu(popupMenu);
}
private void addOpenQuickSearchAction() {
Action openQuickSearch =
new Action("Quick Search", ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_SEARCH)) {
@Override
public void run() {
try {
IViewPart viewPart =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(
QuickSearchView.VIEW_ID);
if (viewPart != null) {
Branch branch = getBranch();
if (branch != null) {
((QuickSearchView) viewPart).setBranch(branch);
}
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
}
};
openQuickSearch.setToolTipText("Opens Quick Search View");
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
toolbarManager.add(openQuickSearch);
}
protected void createUpAction() {
upAction = new Action("View Parent") {
@Override
public void run() {
try {
Artifact parent = exploreRoot.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] = exploreRoot;
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();
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
toolbarManager.add(upAction);
}
private void createNewArtifactExplorerAction() {
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.generateGuidStr(),
IWorkbenchPage.VIEW_ACTIVATE);
artifactExplorer.explore(ArtifactQuery.getDefaultHierarchyRootArtifact(branch));
artifactExplorer.setExpandedArtifacts(treeViewer.getExpandedElements());
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
};
newArtifactExplorer.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.ARTIFACT_EXPLORER));
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
toolbarManager.add(newArtifactExplorer);
}
private void createShowChangeReportAction() {
showChangeReport = new Action("Show Change Report") {
@Override
public void run() {
try {
ChangeView.open(branch);
} catch (OseeArgumentException ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE, ex);
}
}
};
showChangeReport.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.BRANCH_CHANGE));
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
toolbarManager.add(showChangeReport);
}
private void createCollapseAllAction() {
collapseAllAction = new Action("Collapse All") {
@Override
public void run() {
if (treeViewer != null) {
treeViewer.collapseAll();
}
}
};
collapseAllAction.setImageDescriptor(ImageManager.getImageDescriptor(FrameworkImage.COLLAPSE_ALL));
IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
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 createNewItemMenuItem(Menu parentMenu) {
createMenuItem = new MenuItem(parentMenu, SWT.PUSH);
needProjectListener.add(createMenuItem);
createMenuItem.setText("&New Child");
createMenuItem.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
try {
Collection<ArtifactType> data = TypeValidityManager.getValidArtifactTypes(branchSelect.getData());
List<ArtifactType> descriptors = new ArrayList<ArtifactType>();
for (ArtifactType descriptor : new ArrayList<ArtifactType>(data)) {
if (!descriptor.getName().equals("Root Artifact")) {
descriptors.add(descriptor);
}
}
ArtifactTypeFilteredTreeDialog dialog =
new ArtifactTypeFilteredTreeDialog("New Child", "Select Artifact to Create", descriptors);
if (dialog.open() == 0) {
ArtifactType descriptor = dialog.getSelection();
EntryDialog ed =
new EntryDialog("New \"" + descriptor.getName() + "\" Artifact",
"Enter name for \"" + descriptor.getName() + "\" Artifact");
if (ed.open() != 0) return;
IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
Iterator<?> itemsIter = selection.iterator();
// If nothing was selected, then the child belongs at the root
if (!itemsIter.hasNext()) {
exploreRoot.addNewChild(descriptor, ed.getEntry()).persistAttributesAndRelations();
;
} else {
while (itemsIter.hasNext()) {
((Artifact) itemsIter.next()).addNewChild(descriptor, ed.getEntry()).persistAttributesAndRelations();
;
}
}
treeViewer.refresh();
treeViewer.refresh(false);
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
}
});
}
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);
try {
if (StaticIdManager.hasValue(UserManager.getUser(),
EditorsPreferencePage.PreviewOnDoubleClickForWordArtifacts)) {
RendererManager.previewInJob(selectedItems);
} else {
RendererManager.openInJob(selectedItems, PresentationType.GENERALIZED_EDIT);
}
} catch (OseeCoreException ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
}
});
}
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.getDescriptiveName(),
branch.getBranchName()));
}
}
}
}
});
}
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 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).getDescriptiveName());
myTextBeingRenamed.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
updateText(myTextBeingRenamed.getText(), myTreeItem);
myTextBeingRenamed.dispose();
}
@Override
public void focusGained(FocusEvent e) {
}
});
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.setSoleAttributeValue("Name", newLabel);
myArtifact.persistAttributes();
} 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() {
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.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(Display.getCurrent().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 SelectionListener() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
Iterator<?> iterator = selection.iterator();
while (iterator.hasNext()) {
try {
Artifact object = (Artifact) iterator.next();
if ((new GlobalMenuPermissions(object)).isLocked()) {
AccessControlManager.getInstance().unLockObject(object, UserManager.getUser());
} else {
AccessControlManager.getInstance().lockObject(object, UserManager.getUser());
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
}
}
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
}
private void createCopyMenuItem(Menu parentMenu) {
copyMenuItem = new MenuItem(parentMenu, SWT.PUSH);
copyMenuItem.setText("Copy \tCtrl+C");
copyMenuItem.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
performCopy();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
}
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.getDescriptiveName());
}
}
artifactClipboard.setArtifactsToClipboard(artifactTransferData, textTransferData);
}
}
private void createPasteMenuItem(Menu parentMenu) {
pasteMenuItem = new MenuItem(parentMenu, SWT.PUSH);
pasteMenuItem.setText("Paste \tCtrl+V");
pasteMenuItem.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
performPaste();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
}
/**
* This method must be called from the display thread
*/
private void performPaste() {
IStructuredSelection selection = (IStructuredSelection) treeViewer.getSelection();
if (selection != null && !selection.isEmpty()) {
Object object = selection.getFirstElement();
if (object instanceof Artifact) {
try {
artifactClipboard.pasteArtifactsFromClipboard((Artifact) object);
} catch (Exception ex) {
OseeLog.log(getClass(), OseeLevel.SEVERE_POPUP, ex);
}
}
}
}
private void createExpandAllMenuItem(Menu parentMenu) {
MenuItem menuItem = new MenuItem(parentMenu, SWT.PUSH);
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(), TreeViewer.ALL_LEVELS);
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchPart#setFocus()
*/
@Override
public void setFocus() {
if (treeViewer != null) treeViewer.getControl().setFocus();
}
public void explore(Artifact artifact) throws CoreException, IllegalArgumentException {
setPartName("Artifact Explorer: " + artifact.getBranch().getBranchShortName());
if (artifact == null) {
throw new IllegalArgumentException("Can not explore a null artifact.");
}
if (branch != null && branch != artifact.getBranch()) {
explore(Arrays.asList(artifact));
return;
}
try {
checkBranchReadable();
} catch (OseeCoreException ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE, ex);
}
exploreRoot = artifact;
branch = artifact.getBranch();
initializeSelectionBox();
if (treeViewer != null) {
Object objects[] = treeViewer.getExpandedElements();
treeViewer.setInput(exploreRoot);
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(exploreRoot != null && exploreRoot.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);
}
public void add(MenuItem item, Class<? extends Artifact> artifactClass) {
menuItemMap.put(artifactClass, item);
}
public void menuHidden(MenuEvent e) {
}
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);
}
public void menuHidden(MenuEvent e) {
}
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 (exploreRoot != null) {
try {
treeViewer.setInput(exploreRoot);
initializeSelectionBox();
} catch (IllegalArgumentException ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
}
}
/**
* @author Jeff C. Phillips
*/
public class ArtifactMenuListener implements MenuListener {
public void menuHidden(MenuEvent e) {
}
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());
} 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 (SkynetGuiPlugin.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.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 (exploreRoot != null) {
memento.putString(ROOT_GUID, exploreRoot.getGuid());
memento.putString(ROOT_BRANCH, String.valueOf(exploreRoot.getBranch().getBranchId()));
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
@Override
public void dispose() {
OseeEventManager.removeListener(this);
super.dispose();
if (treeViewer != null) {
trees.remove(treeViewer.getTree());
}
}
public String getActionDescription() {
return "";
}
public void addSelectionChangedListener(ISelectionChangedListener listener) {
treeViewer.addSelectionChangedListener(listener);
}
public ISelection getSelection() {
return treeViewer.getSelection();
}
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
treeViewer.removeSelectionChangedListener(listener);
}
public void setSelection(ISelection selection) {
treeViewer.setSelection(selection);
}
private void setHelpContexts() {
SkynetGuiPlugin.getInstance().setHelp(treeViewer.getControl(), "artifact_explorer_tree_viewer");
}
public class MenuEnablingListener implements MenuListener {
public void menuHidden(MenuEvent e) {
}
public void menuShown(MenuEvent e) {
TreeItem[] myTreeItems = myTree.getSelection();
if (myTreeItems.length != 1) {
renameArtifactMenuItem.setEnabled(false);
return;
}
Object myTreeItemObject = myTreeItems[0].getData();
if (myTreeItemObject instanceof Artifact) {
Artifact mySelectedArtifact = (Artifact) myTreeItemObject;
boolean writePermission;
try {
writePermission = AccessControlManager.checkObjectPermission(mySelectedArtifact, PermissionEnum.WRITE);
} catch (OseeCoreException ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
writePermission = false;
}
renameArtifactMenuItem.setEnabled(writePermission);
}
}
}
@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() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@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() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@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);
}
}
});
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IFrameworkTransactionEventListener#handleFrameworkTransactionEvent(org.eclipse.osee.framework.ui.plugin.event.Sender.Source, org.eclipse.osee.framework.skynet.core.eventx.FrameworkTransactionData)
*/
@Override
public void handleFrameworkTransactionEvent(Sender sender, final FrameworkTransactionData transData) throws OseeCoreException {
if (branch == null || transData.branchId != branch.getBranchId()) {
return;
}
Displays.ensureInDisplayThread(new Runnable() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
if (treeViewer != null && Widgets.isAccessible(treeViewer.getTree())) {
for (Artifact art : transData.cacheDeletedArtifacts) {
treeViewer.remove(art);
}
try {
treeViewer.update(transData.getArtifactsInRelations(ChangeType.Changed,
CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType()).toArray(), null);
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
try {
Set<Artifact> parents = new HashSet<Artifact>();
for (Artifact art : transData.getArtifactsInRelations(ChangeType.Added,
CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType())) {
if (!art.isDeleted() && art.getParent() != null) {
parents.add(art.getParent());
}
}
treeViewer.refresh(parents);
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
}
}
});
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IRelationModifiedEventListener#handleRelationModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.relation.RelationModifiedEvent.RelationModType, org.eclipse.osee.framework.skynet.core.relation.RelationLink, org.eclipse.osee.framework.skynet.core.artifact.Branch, java.lang.String, java.lang.String)
*/
@Override
public void handleRelationModifiedEvent(Sender sender, RelationModType relationModType, final RelationLink link, Branch branch, String relationType) {
try {
if (this.branch == null || !this.branch.equals(branch)) return;
if (link.getRelationType().equals(CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD.getRelationType())) {
Displays.ensureInDisplayThread(new Runnable() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
// Since this is always a local event, artifact will always be in cache
Artifact aArtifact = link.getArtifactIfLoaded(RelationSide.SIDE_A);
if (aArtifact != null) {
treeViewer.refresh(aArtifact);
}
Artifact bArtifact = link.getArtifactIfLoaded(RelationSide.SIDE_B);
if (bArtifact != null) {
treeViewer.refresh(bArtifact);
}
} catch (Exception ex) {
// do nothing
}
}
});
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IArtifactModifiedEventListener#handleArtifactModifiedEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.ArtifactModifiedEvent.ArtifactModType, org.eclipse.osee.framework.skynet.core.artifact.Artifact)
*/
@Override
public void handleArtifactModifiedEvent(Sender sender, final ArtifactModType artifactModType, final Artifact artifact) {
try {
if (branch == null || !artifact.getBranch().equals(branch)) {
return;
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
Displays.ensureInDisplayThread(new Runnable() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
try {
if (artifactModType == ArtifactModType.Deleted) {
treeViewer.remove(artifact);
} else if (artifactModType == ArtifactModType.Added) {
if (artifact.getParent() != null) {
treeViewer.refresh(artifact.getParent());
}
} else if (artifactModType == ArtifactModType.Changed) {
treeViewer.update(artifact, null);
} else if (artifactModType == ArtifactModType.Reverted) {
if (artifact.getParent() != null) {
treeViewer.refresh(artifact.getParent());
}
}
} catch (Exception ex) {
// do nothing
}
}
});
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleBranchEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.artifact.BranchModType, org.eclipse.osee.framework.skynet.core.artifact.Branch, int)
*/
@Override
public void handleBranchEvent(Sender sender, BranchEventType branchModType, final int branchId) {
if (branchModType == BranchEventType.Committed && branch != null && branch.getBranchId() == branchId) {
SkynetViews.closeView(VIEW_ID, getViewSite().getSecondaryId());
}
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IBranchEventListener#handleLocalBranchToArtifactCacheUpdateEvent(org.eclipse.osee.framework.ui.plugin.event.Sender)
*/
@Override
public void handleLocalBranchToArtifactCacheUpdateEvent(Sender sender) {
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.skynet.core.eventx.IAccessControlEventListener#handleAccessControlArtifactsEvent(org.eclipse.osee.framework.ui.plugin.event.Sender, org.eclipse.osee.framework.skynet.core.eventx.AccessControlModType, org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts)
*/
@Override
public void handleAccessControlArtifactsEvent(Sender sender, AccessControlEventType accessControlEventType, LoadedArtifacts loadedArtifacts) {
try {
if (loadedArtifacts.isNotForBranch(branch)) {
return;
}
if (accessControlEventType == AccessControlEventType.UserAuthenticated || accessControlEventType == AccessControlEventType.ArtifactsUnlocked || accessControlEventType == AccessControlEventType.ArtifactsLocked) {
Displays.ensureInDisplayThread(new Runnable() {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
treeViewer.refresh();
}
});
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex);
}
}
/* (non-Javadoc)
* @see org.eclipse.osee.framework.ui.skynet.listener.IRebuildMenuListener#rebuild()
*/
@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, OseeLevel.SEVERE, ex);
}
}
}
public void refreshWidgets() {
}
public Branch getBranch() {
return branch;
}
}