com.archimatetool.editor.propertysections.UsedInViewsSection.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.editor.propertysections.UsedInViewsSection.java

Source

/**
 * 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;
    }
}