com.rcpcompany.uibindings.debug.internals.views.CurrentSelectionView.java Source code

Java tutorial

Introduction

Here is the source code for com.rcpcompany.uibindings.debug.internals.views.CurrentSelectionView.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2013 The RCP Company and others.
 * 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:
 *     The RCP Company - initial API and implementation
 *******************************************************************************/
package com.rcpcompany.uibindings.debug.internals.views;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.ViewPart;

import com.rcpcompany.uibindings.Constants;
import com.rcpcompany.uibindings.utils.IBindingSpec.BaseType;
import com.rcpcompany.uibindings.utils.IFormCreator;
import com.rcpcompany.uibindings.utils.ITableCreator;
import com.rcpcompany.utils.basic.ClassUtils;

public class CurrentSelectionView extends ViewPart {

    private final IObservableValue myViewValue = WritableValue.withValueType(EcorePackage.Literals.EJAVA_OBJECT);

    private final IObservableValue myCurrentPartValue = WritableValue.withValueType(EcorePackage.Literals.ESTRING);

    /**
     * List with the {@link EObject} of the current selection.
     */
    private final IObservableList myEObjectList = WritableList.withElementType(EcorePackage.Literals.EOBJECT);

    /**
     * List with the {@link Object} of the current selection.
     */
    private final List<Object> myObjectList = new ArrayList<Object>();

    private IFormCreator myForm;
    private IFormCreator myEObjectSection;
    private ITableCreator myEObjectTable;

    private IFormCreator myObjectSection;

    private TableViewer myObjectViewer;
    private TableViewerColumn myObjectViewerColumn;

    @Override
    public void createPartControl(Composite parent) {
        myForm = IFormCreator.Factory.createScrolledForm(myViewValue, parent, "Selected Objects");
        myForm.setReadOnly(true);

        myForm.addField(myCurrentPartValue, SWT.READ_ONLY).label("Current Part").arg(Constants.ARG_WIDTH, 500);

        myEObjectSection = myForm.addSection("EObjects");
        myEObjectTable = ITableCreator.Factory.create(myForm.getContext(), myEObjectSection.addComposite(),
                SWT.BORDER, myEObjectList);
        myEObjectTable.addColumn(BaseType.ROW_NO + "(w=100)");
        myEObjectTable
                .addColumn(BaseType.ROW_ELEMENT + "(label='Object',w=400,type=" + Constants.TYPE_LONG_NAME + ")");

        myObjectSection = myForm.addSection("Other Objects");
        myObjectViewer = new TableViewer(myObjectSection.addComposite(), SWT.FULL_SELECTION | SWT.READ_ONLY);
        myObjectViewer.getTable().setHeaderVisible(true);
        myObjectViewer.getTable().setLinesVisible(true);
        myObjectViewerColumn = new TableViewerColumn(myObjectViewer, SWT.NONE);
        myObjectViewerColumn.getColumn().setText("toString()");
        myObjectViewerColumn.getColumn().setWidth(400);
        myObjectViewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                return ClassUtils.getLastClassName(element) + ": " + element;
            }
        });
        myObjectViewer.setContentProvider(ArrayContentProvider.getInstance());
        myObjectViewer.setInput(myObjectList);

        myForm.finish();

        final ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
        ss.addPostSelectionListener(mySelectionListener);
        mySelectionListener.selectionChanged(this, ss.getSelection());
    }

    @Override
    public void dispose() {
        final ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
        ss.removePostSelectionListener(mySelectionListener);

        super.dispose();
    }

    private final ISelectionListener mySelectionListener = new ISelectionListener() {
        @Override
        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            updateSelection(part, selection);
        }
    };

    @Override
    public void setFocus() {
    }

    protected void updateSelection(IWorkbenchPart part, ISelection selection) {
        // LogUtils.debug(this, "part=" + part + "\n" + selection);
        if (part == this)
            return;
        myCurrentPartValue.setValue(part.toString());

        try {
            myEObjectList.clear();
            myObjectList.clear();

            if (!(selection instanceof IStructuredSelection))
                return;

            final IStructuredSelection ss = (IStructuredSelection) selection;
            for (final Object o : ss.toArray()) {
                if (o instanceof EObject) {
                    myEObjectList.add(o);
                } else {
                    myObjectList.add(o);
                }
            }
        } finally {
            myObjectViewer.refresh();
        }
    }
}