Java tutorial
/** * This program and the accompanying materials * are made available under the terms of the License * which accompanies this distribution in the file LICENSE.txt */ package com.archimatetool.editor.propertysections; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IFilter; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; import com.archimatetool.editor.diagram.IArchimateDiagramEditor; import com.archimatetool.editor.diagram.IDiagramModelEditor; import com.archimatetool.editor.diagram.editparts.IArchimateEditPart; import com.archimatetool.editor.diagram.editparts.connections.IArchimateConnectionEditPart; import com.archimatetool.editor.model.DiagramModelUtils; import com.archimatetool.editor.ui.IArchimateImages; import com.archimatetool.editor.ui.services.EditorManager; import com.archimatetool.model.IArchimateElement; import com.archimatetool.model.IDiagramModel; /** * Property Section for "Used in Views" * * @author Phillip Beauvoir */ public class UsedInViewsSection extends AbstractArchimatePropertySection { private static final String HELP_ID = "com.archimatetool.help.usedInViewsSection"; //$NON-NLS-1$ /** * Filter to show or reject this section depending on input value */ public static class Filter implements IFilter { @Override public boolean select(Object object) { return object instanceof IArchimateElement || object instanceof IArchimateEditPart || object instanceof IArchimateConnectionEditPart; } } private IArchimateElement fArchimateElement; private TableViewer fTableViewer; private UpdatingTableColumnLayout fTableLayout; @Override protected void createControls(Composite parent) { createTableControl(parent); } private void createTableControl(Composite parent) { createLabel(parent, Messages.UsedInViewsSection_0, ITabbedLayoutConstants.STANDARD_LABEL_WIDTH, SWT.NONE); // Table Composite tableComp = createTableComposite(parent, SWT.NONE); fTableLayout = (UpdatingTableColumnLayout) tableComp.getLayout(); fTableViewer = new TableViewer(tableComp, SWT.BORDER | SWT.FULL_SELECTION); // Column TableViewerColumn column = new TableViewerColumn(fTableViewer, SWT.NONE, 0); fTableLayout.setColumnData(column.getColumn(), new ColumnWeightData(100, false)); // On Mac shows alternate table row colours fTableViewer.getTable().setLinesVisible(true); // Help ID PlatformUI.getWorkbench().getHelpSystem().setHelp(fTableViewer.getTable(), HELP_ID); fTableViewer.setContentProvider(new IStructuredContentProvider() { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object inputElement) { return DiagramModelUtils.findReferencedDiagramsForElement((IArchimateElement) inputElement) .toArray(); } }); fTableViewer.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((IDiagramModel) element).getName(); } @Override public Image getImage(Object element) { return IArchimateImages.ImageFactory.getImage(IArchimateImages.ICON_DIAGRAM_16); } }); fTableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { if (!isAlive()) { return; } Object o = ((IStructuredSelection) event.getSelection()).getFirstElement(); if (o instanceof IDiagramModel) { IDiagramModel diagramModel = (IDiagramModel) o; IDiagramModelEditor editor = EditorManager.openDiagramEditor(diagramModel); if (editor instanceof IArchimateDiagramEditor) { ((IArchimateDiagramEditor) editor) .selectElements(new IArchimateElement[] { fArchimateElement }); } } } }); fTableViewer.setSorter(new ViewerSorter()); } @Override protected void setElement(Object element) { if (element instanceof IArchimateElement) { fArchimateElement = (IArchimateElement) element; } else if (element instanceof IAdaptable) { fArchimateElement = (IArchimateElement) ((IAdaptable) element).getAdapter(IArchimateElement.class); } else { System.err.println("UsedInViewsSection wants to display for " + element); //$NON-NLS-1$ } refreshControls(); } protected void refreshControls() { fTableViewer.setInput(fArchimateElement); fTableLayout.doRelayout(); } @Override protected Adapter getECoreAdapter() { return null; } @Override protected EObject getEObject() { return fArchimateElement; } @Override public boolean shouldUseExtraSpace() { return true; } }