gov.redhawk.sca.ui.ScaComponentFactory.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.sca.ui.ScaComponentFactory.java

Source

/** 
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 * 
 * This file is part of REDHAWK IDE.
 * 
 * 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.
 *
 */
package gov.redhawk.sca.ui;

import gov.redhawk.model.sca.ScaSimpleProperty;
import gov.redhawk.model.sca.ScaStructSequenceProperty;
import gov.redhawk.model.sca.provider.ScaSimplePropertyItemProvider;
import gov.redhawk.sca.internal.ui.properties.StructFieldPropertyColumnLabelProvider;
import gov.redhawk.sca.internal.ui.properties.StructFieldPropertyEditingSupport;
import gov.redhawk.sca.ui.compatibility.ColumnViewerToolTipSupport;
import gov.redhawk.sca.ui.compatibility.CompatibilityUtil;
import gov.redhawk.sca.ui.properties.ScaPropertiesContentProvider;

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

import mil.jpeojtrs.sca.prf.Enumeration;
import mil.jpeojtrs.sca.prf.Simple;
import mil.jpeojtrs.sca.util.AnyUtils;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;

/**
 * @since 8.0
 */
public final class ScaComponentFactory {

    private static class PropertyViewerComparator extends ViewerComparator {

        @Override
        public int compare(final Viewer viewer, final Object e1, final Object e2) {
            final Tree tree = ((Tree) viewer.getControl());

            if (tree.getSortDirection() == SWT.UP) {
                return super.compare(viewer, e1, e2);
            } else {
                return -1 * super.compare(viewer, e1, e2);
            }
        }
    }

    private ScaComponentFactory() {

    }

    /**
     * @since 9.0
     */
    public static TreeViewer createPropertyTable(final Composite parent, final int style,
            final AdapterFactory adapterFactory) {
        if (parent.getLayout() == null) {
            parent.setLayout(new FillLayout());
        }
        return new ScaPropertiesViewer(parent, SWT.None,
                style | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE, adapterFactory).getViewer();
    }

    /**
     * @since 9.0
     */
    public static TreeViewer createPropertyTable(final TabbedPropertySheetWidgetFactory widgetFactory,
            final Composite parent, final int style, final AdapterFactory adapterFactory) {
        ScaPropertiesViewer viewer = new ScaPropertiesViewer(parent, SWT.None,
                style | widgetFactory.getOrientation() | widgetFactory.getBorderStyle() | SWT.H_SCROLL
                        | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.SINGLE,
                adapterFactory);
        widgetFactory.adapt(viewer);
        widgetFactory.adapt(viewer.getViewer().getControl(), false, false);
        return viewer.getViewer();
    }

    /**
     * @since 9.0
     */
    public static TableViewer createStructSequenceTable(final Composite parent, final int style,
            final AdapterFactory adapterFactory, final ScaStructSequenceProperty property) {
        final TableViewer viewer = new TableViewer(parent, style | SWT.FULL_SELECTION);
        ColumnViewerToolTipSupport.enableFor(viewer);
        final TableColumnLayout layout = new TableColumnLayout();
        parent.setLayout(layout);
        final ScaPropertiesContentProvider contentProvider = new ScaPropertiesContentProvider(adapterFactory);

        if (property.getDefinition() != null) {
            for (final Simple propDef : property.getDefinition().getStruct().getSimple()) {
                final TableViewerColumn columnViewer = new TableViewerColumn(viewer, SWT.CENTER);
                columnViewer.setEditingSupport(
                        new StructFieldPropertyEditingSupport(viewer, contentProvider, propDef.getId()));
                columnViewer.setLabelProvider(
                        new StructFieldPropertyColumnLabelProvider(contentProvider, propDef.getId()));
                String label;
                if (propDef.getName() != null) {
                    label = propDef.getName();
                } else {
                    label = propDef.getId();
                }
                layout.setColumnData(columnViewer.getColumn(),
                        new ColumnPixelData(Math.min(300, 8 * label.length() + 10), true));
                columnViewer.getColumn().setText(label);
            }
        }

        viewer.getTable().setHeaderVisible(true);
        viewer.getTable().setLinesVisible(true);

        viewer.setContentProvider(contentProvider);
        viewer.setInput(property);

        return viewer;
    }

    /**
     * @since 9.0
     */
    public static Viewer createEnumPropertyViewer(final Composite parent, final int style,
            final ScaSimpleProperty prop) {
        if (prop.getDefinition() != null && prop.getDefinition().getEnumerations() != null) {
            final ComboViewer viewer = new ComboViewer(parent, style);
            CompatibilityUtil.disableComboWheelScrollSelect(viewer);
            viewer.setLabelProvider(new LabelProvider() {
                @Override
                public String getText(final Object element) {
                    return ScaSimplePropertyItemProvider.getValueText(prop, element);
                }
            });
            viewer.setContentProvider(new ArrayContentProvider());
            final List<Object> values = new ArrayList<Object>();
            for (final Enumeration e : prop.getDefinition().getEnumerations().getEnumeration()) {
                values.add(AnyUtils.convertString(e.getValue(), prop.getDefinition().getType().getLiteral(),
                        prop.getDefinition().isComplex()));
            }
            viewer.setInput(values);
            return viewer;
        }
        return null;
    }
}