es.axios.udig.ui.editingtools.merge.internal.wizard.MergeFeaturesComposite.java Source code

Java tutorial

Introduction

Here is the source code for es.axios.udig.ui.editingtools.merge.internal.wizard.MergeFeaturesComposite.java

Source

/* uDig-Spatial Operations plugins
 * http://b5m.gipuzkoa.net
 * (C) 2006, Diputacin Foral de Gipuzkoa, Ordenacin Territorial.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation;
 * version 2.1 of the License.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 */
package es.axios.udig.ui.editingtools.merge.internal.wizard;

import java.text.MessageFormat;

import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

import com.vividsolutions.jts.geom.Geometry;

import es.axios.udig.ui.editingtools.internal.i18n.Messages;

/**
 * Merge Controls for composite
 * <p>
 * Presents the source features in treevew and result feature in table. The user can especify the
 * merge using this ui.
 * </p>
 * <p>
 * Implementation note:
 * <ul>
 * <li> The event management is handled by a {@link MergeUIController}.
 * <li> The building of the merged feature is handled by a {@link MergeFeatureBuilder}.
 * <li> This class only sets up the UI controls (does not populates the feature views) and registers
 * itself as a {@link MergeFeatureBuilder} change listener to update the wizzard page messages
 * </ul>
 * </p>
 * 
 * @author Mauricio Pazos (www.axios.es)
 * @author Gabriel Roldan (www.axios.es)
 * @since 1.1.0
 */
final class MergeFeaturesComposite extends Composite {

    private MergeUIController controller;

    private Table tableMergeFeature = null;

    private SashForm sashForm = null;
    private Tree treeFeatures = null;
    private Composite compositeMergeFeature = null;
    private Composite compositeMergeControls = null;
    private Composite compositeSourceFeatures = null;
    private CLabel cLabelSources = null;
    private CLabel cLabelTarget = null;

    private static final String UNION = "Union"; //$NON-NLS-1$
    private Label labelResultGeometry = null;

    /**
     * Label showing what the result type of the geometry merge will be
     */
    private Label labelResult = null;

    /**
     * This composite's parent wizard page
     */
    private WizardPage wizardPage = null;

    /**
     * New instance of MergeFeaturesComposite
     * 
     * @param parent parent containter
     * @param style SWT style
     * @param featureSet source features
     * @param featureType feature type
     */
    public MergeFeaturesComposite(WizardPage wizardPage, Composite parent, int style,
            final MergeFeatureBuilder mergeBuilder) {
        super(parent, style);
        this.wizardPage = wizardPage;

        createControls();
        controller = new MergeUIController(mergeBuilder, treeFeatures, tableMergeFeature);
        controller.initialize();

        mergeBuilder.addChangeListener(new MergeFeatureBuilder.ChangeListener() {

            public void attributeChanged(MergeFeatureBuilder builder, int attributeIndex, Object oldValue) {
                if (attributeIndex == builder.getDefaultGeometryIndex()) {
                    mergeGeometryChanged(builder);
                }
            }

        });
        //set up initial feedback
        mergeGeometryChanged(mergeBuilder);
    }

    /**
     * Callback function to report a change in the merged geometry attribute
     * 
     * @param builder
     */
    private void mergeGeometryChanged(MergeFeatureBuilder builder) {
        Geometry mergedGeometry = builder.getMergedGeometry();
        String geomName;
        if (builder.mergeGeomIsUnion()) {
            geomName = UNION;
        } else {
            geomName = mergedGeometry == null ? "null" : mergedGeometry.getClass().getSimpleName();
        }
        labelResultGeometry.setText(geomName);
        final String msg = MessageFormat.format(Messages.MergeFeaturesComposite_result_will_be, geomName);

        setMessage(msg, IMessageProvider.INFORMATION);
    }

    /**
     * Presents the message in the standard information area
     * 
     * @param usrMessage
     * @param type defined use the value defined in IMessageProvider (ERROR, WARNING, INFORMATION)
     */
    private void setMessage(String usrMessage, final int type) {

        this.wizardPage.setMessage(usrMessage, type);
        this.wizardPage.setTitle(Messages.MergeFeaturesComposite_merge_result_title);

    }

    /**
     * Creates controls
     */
    private void createControls() {

        this.setLayout(new FillLayout());

        createSashForm();
        setSize(new Point(560, 260));

    }

    /**
     * This method initializes sashForm
     */
    private void createSashForm() {
        sashForm = new SashForm(this, SWT.V_SCROLL);
        sashForm.setOrientation(SWT.HORIZONTAL);

        sashForm.setLayout(new FillLayout());

        createCompositeSourceFeatures();
        createCompositeMergeFeature();
    }

    /**
     * This method initializes composite
     */
    private void createCompositeMergeFeature() {
        GridData gridData = new GridData();
        gridData.horizontalAlignment = GridData.FILL;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        gridData.verticalAlignment = GridData.FILL;
        GridLayout gridLayout1 = new GridLayout();
        gridLayout1.numColumns = 1;
        gridLayout1.makeColumnsEqualWidth = true;
        compositeMergeFeature = new Composite(sashForm, SWT.BORDER);
        compositeMergeFeature.setLayout(gridLayout1);
        cLabelTarget = new CLabel(compositeMergeFeature, SWT.NONE);
        cLabelTarget.setText(Messages.MergeFeaturesComposite_merge_feature);
        tableMergeFeature = new Table(compositeMergeFeature, SWT.MULTI);
        tableMergeFeature.setHeaderVisible(true);
        tableMergeFeature.setLayoutData(gridData);
        tableMergeFeature.setLinesVisible(true);
        createCompositeMergeControls();
        TableColumn tableColumnName = new TableColumn(tableMergeFeature, SWT.NONE);
        tableColumnName.setWidth(150);
        tableColumnName.setText(Messages.MergeFeaturesComposite_property);
        TableColumn tableColumnValue = new TableColumn(tableMergeFeature, SWT.NONE);
        tableColumnValue.setWidth(60);
        tableColumnValue.setText(Messages.MergeFeaturesComposite_value);
    }

    /**
     * This method initializes compositeMergeControls
     */
    private void createCompositeMergeControls() {
        GridData gridData3 = new GridData();
        gridData3.horizontalAlignment = GridData.FILL;
        gridData3.grabExcessHorizontalSpace = true;
        gridData3.verticalAlignment = GridData.CENTER;
        GridData gridData2 = new GridData();
        gridData2.horizontalAlignment = GridData.FILL;
        gridData2.grabExcessHorizontalSpace = true;
        gridData2.verticalAlignment = GridData.CENTER;
        GridData gridData1 = new GridData();
        gridData1.horizontalAlignment = GridData.FILL;
        gridData1.grabExcessHorizontalSpace = true;
        gridData1.verticalAlignment = GridData.CENTER;
        GridLayout gridLayout = new GridLayout();
        gridLayout.numColumns = 2;
        gridLayout.makeColumnsEqualWidth = true;
        compositeMergeControls = new Composite(compositeMergeFeature, SWT.NONE);
        compositeMergeControls.setLayout(gridLayout);
        compositeMergeControls.setLayoutData(gridData1);
        labelResult = new Label(compositeMergeControls, SWT.NONE);
        labelResult.setText(Messages.MergeFeaturesComposite_result_geometry);
        labelResult.setLayoutData(gridData2);
        labelResultGeometry = new Label(compositeMergeControls, SWT.NONE);
        labelResultGeometry.setText(Messages.MergeFeaturesComposite_result);
        labelResultGeometry.setLayoutData(gridData3);
    }

    /**
     * This method initializes composite1
     */
    private void createCompositeSourceFeatures() {
        GridData gridData4 = new GridData();
        gridData4.horizontalAlignment = GridData.FILL;
        gridData4.grabExcessHorizontalSpace = true;
        gridData4.grabExcessVerticalSpace = true;
        gridData4.verticalAlignment = GridData.FILL;
        GridLayout gridLayout2 = new GridLayout();
        gridLayout2.makeColumnsEqualWidth = true;
        compositeSourceFeatures = new Composite(sashForm, SWT.BORDER);
        compositeSourceFeatures.setLayout(gridLayout2);
        cLabelSources = new CLabel(compositeSourceFeatures, SWT.NONE);
        cLabelSources.setText(Messages.MergeFeaturesComposite_source);
        treeFeatures = new Tree(compositeSourceFeatures, SWT.SINGLE | SWT.CHECK);
        sashForm.setLayout(new FillLayout());
        treeFeatures.setHeaderVisible(true);
        treeFeatures.setLayoutData(gridData4);
        treeFeatures.setLinesVisible(true);
        TreeColumn treeColumnFeature = new TreeColumn(treeFeatures, SWT.NONE);
        treeColumnFeature.setWidth(150);
        treeColumnFeature.setText(Messages.MergeFeaturesComposite_feature);
        TreeColumn treeColumnValue = new TreeColumn(treeFeatures, SWT.NONE);
        treeColumnValue.setWidth(60);
        treeColumnValue.setText(Messages.MergeFeaturesComposite_value);
    }

} // @jve:decl-index=0:visual-constraint="10,10"