2012-06-17 20:34:50 +02:00
|
|
|
/*******************************************************************************
|
2015-10-22 00:25:12 +02:00
|
|
|
* Copyright (c) 2015 MINRES Technologies GmbH and others.
|
2012-06-17 20:34:50 +02:00
|
|
|
* 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:
|
2015-01-21 21:58:35 +01:00
|
|
|
* MINRES Technologies GmbH - initial API and implementation
|
2012-06-17 20:34:50 +02:00
|
|
|
*******************************************************************************/
|
2015-01-03 16:34:32 +01:00
|
|
|
package com.minres.scviewer.ui.views.sections;
|
2012-06-17 19:53:05 +02:00
|
|
|
|
2015-01-01 23:17:32 +01:00
|
|
|
import java.util.Collection;
|
2012-06-17 19:53:05 +02:00
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.TreeMap;
|
|
|
|
|
|
|
|
import org.eclipse.core.runtime.Assert;
|
|
|
|
import org.eclipse.core.runtime.ListenerList;
|
2015-01-01 23:17:32 +01:00
|
|
|
import org.eclipse.jface.action.Action;
|
2012-06-17 19:53:05 +02:00
|
|
|
import org.eclipse.jface.action.IMenuListener;
|
|
|
|
import org.eclipse.jface.action.IMenuManager;
|
|
|
|
import org.eclipse.jface.action.MenuManager;
|
|
|
|
import org.eclipse.jface.viewers.ILabelProviderListener;
|
|
|
|
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.ITableLabelProvider;
|
|
|
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
|
|
|
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
2015-01-01 23:17:32 +01:00
|
|
|
import org.eclipse.jface.viewers.StructuredSelection;
|
2012-06-17 19:53:05 +02:00
|
|
|
import org.eclipse.jface.viewers.TreeViewer;
|
|
|
|
import org.eclipse.jface.viewers.Viewer;
|
|
|
|
import org.eclipse.swt.SWT;
|
|
|
|
import org.eclipse.swt.graphics.Image;
|
|
|
|
import org.eclipse.swt.layout.FormAttachment;
|
|
|
|
import org.eclipse.swt.layout.FormData;
|
|
|
|
import org.eclipse.swt.layout.GridData;
|
|
|
|
import org.eclipse.swt.widgets.Composite;
|
|
|
|
import org.eclipse.swt.widgets.Menu;
|
|
|
|
import org.eclipse.swt.widgets.Tree;
|
|
|
|
import org.eclipse.swt.widgets.TreeColumn;
|
2015-01-01 23:17:32 +01:00
|
|
|
import org.eclipse.ui.IEditorReference;
|
|
|
|
import org.eclipse.ui.ISharedImages;
|
|
|
|
import org.eclipse.ui.IWorkbenchPage;
|
2012-06-17 19:53:05 +02:00
|
|
|
import org.eclipse.ui.IWorkbenchPart;
|
2015-01-01 23:17:32 +01:00
|
|
|
import org.eclipse.ui.PlatformUI;
|
2012-06-17 19:53:05 +02:00
|
|
|
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
|
|
|
|
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
|
|
|
|
|
2015-01-06 17:14:16 +01:00
|
|
|
import com.minres.scviewer.database.ITx;
|
2015-01-10 00:23:46 +01:00
|
|
|
import com.minres.scviewer.database.ITxRelation;
|
2012-06-17 19:53:05 +02:00
|
|
|
|
|
|
|
public class RelatedProperty extends AbstractPropertySection implements ISelectionProvider, ISelectionChangedListener {
|
|
|
|
|
2015-01-01 23:17:32 +01:00
|
|
|
private final String[] titles = { "Relation type", "Relation Name", "Tx Id" };
|
2012-06-17 19:53:05 +02:00
|
|
|
|
2017-01-23 23:25:28 +01:00
|
|
|
private ListenerList<ISelectionChangedListener> listeners = new ListenerList<ISelectionChangedListener>();
|
2012-06-17 19:53:05 +02:00
|
|
|
|
2015-01-06 17:14:16 +01:00
|
|
|
private ITx iTr;
|
2012-06-17 19:53:05 +02:00
|
|
|
|
|
|
|
private ISelection currentSelection;
|
|
|
|
|
|
|
|
private TreeViewer treeViewer;
|
|
|
|
|
|
|
|
public RelatedProperty() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
|
|
|
|
super.createControls(parent, aTabbedPropertySheetPage);
|
|
|
|
Composite composite = getWidgetFactory().createFlatFormComposite(parent);
|
|
|
|
Tree tree = new Tree(composite, SWT.BORDER | SWT.FULL_SELECTION);
|
|
|
|
tree.setHeaderVisible(true);
|
|
|
|
treeViewer = new TreeViewer(tree);
|
|
|
|
|
|
|
|
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
|
|
|
|
tree.setLinesVisible(true);
|
|
|
|
column1.setAlignment(SWT.LEFT);
|
|
|
|
column1.setText(titles[0]);
|
|
|
|
column1.setWidth(150);
|
2015-01-01 23:17:32 +01:00
|
|
|
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
|
2012-06-17 19:53:05 +02:00
|
|
|
column2.setAlignment(SWT.LEFT);
|
|
|
|
column2.setText(titles[1]);
|
|
|
|
column2.setWidth(150);
|
2015-01-01 23:17:32 +01:00
|
|
|
TreeColumn column3 = new TreeColumn(tree, SWT.RIGHT);
|
|
|
|
column3.setAlignment(SWT.LEFT);
|
|
|
|
column3.setText(titles[2]);
|
|
|
|
column3.setWidth(150);
|
2012-06-17 19:53:05 +02:00
|
|
|
|
|
|
|
Object layoutData = parent.getLayoutData();
|
|
|
|
if (layoutData instanceof GridData) {
|
|
|
|
GridData gridData = (GridData) layoutData;
|
|
|
|
gridData.grabExcessVerticalSpace = true;
|
|
|
|
gridData.verticalAlignment = SWT.FILL;
|
|
|
|
}
|
|
|
|
|
|
|
|
FormData formData = new FormData();
|
|
|
|
formData.left = new FormAttachment(0);
|
|
|
|
formData.top = new FormAttachment(0);
|
|
|
|
formData.right = new FormAttachment(100);
|
|
|
|
formData.bottom = new FormAttachment(100);
|
|
|
|
tree.setLayoutData(formData);
|
|
|
|
|
|
|
|
treeViewer.setAutoExpandLevel(2);
|
|
|
|
treeViewer.setContentProvider(new ITreeContentProvider() {
|
2015-01-06 17:14:16 +01:00
|
|
|
TreeMap<String, Collection<ITxRelation>> hier = new TreeMap<String, Collection<ITxRelation>>();
|
|
|
|
HashMap<ITxRelation, String> parents = new HashMap<ITxRelation, String>();
|
2012-06-17 19:53:05 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
2015-01-06 17:14:16 +01:00
|
|
|
if (newInput instanceof ITx) {
|
2012-06-17 19:53:05 +02:00
|
|
|
hier.clear();
|
|
|
|
parents.clear();
|
2015-01-01 23:17:32 +01:00
|
|
|
String relName = "incoming";
|
2015-01-06 17:14:16 +01:00
|
|
|
Collection<ITxRelation> relSet = ((ITx)newInput).getIncomingRelations();
|
2015-01-01 23:17:32 +01:00
|
|
|
if (relSet != null && relSet.size() > 0) {
|
|
|
|
hier.put(relName, relSet);
|
2015-01-06 17:14:16 +01:00
|
|
|
for (ITxRelation rel : relSet)
|
2015-01-01 23:17:32 +01:00
|
|
|
parents.put(rel, relName);
|
|
|
|
}
|
|
|
|
relName = "outgoing";
|
2015-01-06 17:14:16 +01:00
|
|
|
relSet = ((ITx)newInput).getOutgoingRelations();
|
2015-01-01 23:17:32 +01:00
|
|
|
if (relSet != null && relSet.size() > 0) {
|
|
|
|
hier.put(relName, relSet);
|
2015-01-06 17:14:16 +01:00
|
|
|
for (ITxRelation rel : relSet)
|
2015-01-01 23:17:32 +01:00
|
|
|
parents.put(rel, relName);
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void dispose() { }
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean hasChildren(Object element) {
|
|
|
|
Object[] childs = getChildren(element);
|
|
|
|
return childs != null && childs.length > 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getParent(Object element) {
|
2015-01-06 17:14:16 +01:00
|
|
|
if (element instanceof ITx)
|
2012-06-17 19:53:05 +02:00
|
|
|
return parents.get(element);
|
|
|
|
else
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object[] getElements(Object inputElement) {
|
|
|
|
return hier.keySet().toArray();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object[] getChildren(Object parentElement) {
|
2015-01-01 23:17:32 +01:00
|
|
|
if (parentElement instanceof String)
|
|
|
|
return hier.get((String) parentElement).toArray();
|
2012-06-17 19:53:05 +02:00
|
|
|
else
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
treeViewer.setLabelProvider(new ITableLabelProvider() {
|
|
|
|
@Override
|
|
|
|
public void removeListener(ILabelProviderListener listener) { }
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isLabelProperty(Object element, String property) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void dispose() { }
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addListener(ILabelProviderListener listener) { }
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getColumnText(Object element, int columnIndex) {
|
2015-01-01 23:17:32 +01:00
|
|
|
if (columnIndex == 0 && element instanceof String)
|
2012-06-17 19:53:05 +02:00
|
|
|
return element.toString();
|
2015-01-06 17:14:16 +01:00
|
|
|
else if (columnIndex == 1 && element instanceof ITxRelation)
|
|
|
|
return ((ITxRelation) element).getRelationType().getName();
|
|
|
|
else if (columnIndex == 2 && element instanceof ITxRelation){
|
|
|
|
ITxRelation rel = (ITxRelation) element;
|
2015-01-01 23:17:32 +01:00
|
|
|
if(rel.getTarget()==iTr)
|
2015-01-06 17:14:16 +01:00
|
|
|
return ((ITxRelation) element).getSource().getId().toString();
|
2015-01-01 23:17:32 +01:00
|
|
|
else
|
2015-01-06 17:14:16 +01:00
|
|
|
return ((ITxRelation) element).getTarget().getId().toString();
|
2015-01-01 23:17:32 +01:00
|
|
|
}
|
2012-06-17 19:53:05 +02:00
|
|
|
else
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Image getColumnImage(Object element, int columnIndex) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
treeViewer.addSelectionChangedListener(this);
|
|
|
|
MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
|
|
|
|
menuMgr.setRemoveAllWhenShown(true);
|
|
|
|
menuMgr.addMenuListener(new IMenuListener() {
|
|
|
|
public void menuAboutToShow(IMenuManager mgr) {
|
2015-01-01 23:17:32 +01:00
|
|
|
ISelection selection = treeViewer.getSelection();
|
|
|
|
if (selection instanceof IStructuredSelection) {
|
|
|
|
Object obj = ((IStructuredSelection) selection).getFirstElement();
|
|
|
|
mgr.add(makeTransactionAction(obj, iTr));
|
|
|
|
}
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
|
|
|
|
treeViewer.getControl().setMenu(menu);
|
2015-01-01 23:17:32 +01:00
|
|
|
// aTabbedPropertySheetPage.getSite().setSelectionProvider(this);
|
|
|
|
// if(getPart()!=null){
|
|
|
|
// getPart().getSite().setSelectionProvider(this);
|
|
|
|
// }
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
|
2015-01-06 17:14:16 +01:00
|
|
|
private Action makeTransactionAction(final Object obj, final ITx transaction) {
|
2015-01-01 23:17:32 +01:00
|
|
|
Action action = new Action() {
|
|
|
|
public void run() {
|
2015-01-06 17:14:16 +01:00
|
|
|
if(obj instanceof ITxRelation){
|
2015-01-01 23:17:32 +01:00
|
|
|
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
2015-01-06 17:14:16 +01:00
|
|
|
ITx targetTransaction = ((ITxRelation)obj).getSource()==transaction?
|
|
|
|
((ITxRelation)obj).getTarget():((ITxRelation)obj).getSource();
|
2015-01-01 23:17:32 +01:00
|
|
|
for(IEditorReference editorRef: page.getEditorReferences()){
|
|
|
|
IWorkbenchPart part =editorRef.getPart(false);
|
|
|
|
if(editorRef.getPage().isPartVisible(part)){
|
|
|
|
part.getSite().getSelectionProvider().setSelection(new StructuredSelection(targetTransaction));
|
|
|
|
part.setFocus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
action.setText("Jump to Transaction");
|
|
|
|
action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_ADD));
|
|
|
|
action.setEnabled(true);
|
|
|
|
return action;
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void setInput(IWorkbenchPart part, ISelection selection) {
|
|
|
|
super.setInput(part, selection);
|
|
|
|
currentSelection = null;
|
|
|
|
Assert.isTrue(selection instanceof IStructuredSelection);
|
|
|
|
Object input = ((IStructuredSelection) selection).getFirstElement();
|
2015-01-06 17:14:16 +01:00
|
|
|
Assert.isTrue(input instanceof ITx);
|
|
|
|
iTr = (ITx) input;
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void refresh() {
|
2015-01-01 23:17:32 +01:00
|
|
|
treeViewer.setInput(iTr);
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void aboutToBeShown() {
|
|
|
|
treeViewer.expandAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addSelectionChangedListener(ISelectionChangedListener listener) {
|
|
|
|
listeners.add(listener);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void removeSelectionChangedListener(ISelectionChangedListener listener) {
|
|
|
|
listeners.remove(listener);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ISelection getSelection() {
|
|
|
|
return currentSelection != null ? currentSelection : super.getSelection();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setSelection(ISelection selection) {
|
|
|
|
currentSelection = selection;
|
|
|
|
Object[] list = listeners.getListeners();
|
|
|
|
for (int i = 0; i < list.length; i++) {
|
|
|
|
((ISelectionChangedListener) list[i]).selectionChanged(new SelectionChangedEvent(this, selection));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void selectionChanged(SelectionChangedEvent event) {
|
2015-01-01 23:17:32 +01:00
|
|
|
// ISelection selection = event.getSelection();
|
|
|
|
// if(selection instanceof IStructuredSelection){
|
|
|
|
// IStructuredSelection treeSelection =(IStructuredSelection)selection;
|
|
|
|
// Object elem = treeSelection.getFirstElement();
|
|
|
|
// if(elem instanceof ITransaction){
|
|
|
|
// currentSelection = new StructuredSelection(elem);
|
|
|
|
// }
|
|
|
|
// }
|
2012-06-17 19:53:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|