de.uniluebeck.itm.spyglass.plugin.springembedderpositioner.SpringEmbedderPositionerOptionsComposite.java Source code

Java tutorial

Introduction

Here is the source code for de.uniluebeck.itm.spyglass.plugin.springembedderpositioner.SpringEmbedderPositionerOptionsComposite.java

Source

/*
 * --------------------------------------------------------------------------------
 * This file is part of the WSN visualization framework SpyGlass. Copyright (C)
 * 2004-2007 by the SwarmNet (www.swarmnet.de) project SpyGlass is free
 * software; you can redistribute it and/or modify it under the terms of the BSD
 * License. Refer to spyglass-licence.txt file in the root of the SpyGlass
 * source tree for further details.
 * --------------------------------------------------------------------------------
 */
package de.uniluebeck.itm.spyglass.plugin.springembedderpositioner;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import de.uniluebeck.itm.spyglass.gui.databinding.converter.IntListToStringConverter;
import de.uniluebeck.itm.spyglass.gui.databinding.converter.StringToIntListConverter;
import de.uniluebeck.itm.spyglass.gui.databinding.validator.DoubleRangeValidator;
import de.uniluebeck.itm.spyglass.gui.databinding.validator.IntegerRangeValidator;
import de.uniluebeck.itm.spyglass.gui.databinding.validator.StringToIntListValidator;
import de.uniluebeck.itm.spyglass.xmlconfig.PluginXMLConfig;

// --------------------------------------------------------------------------------
/**
 * @author Oliver Kleine
 * 
 */
public class SpringEmbedderPositionerOptionsComposite extends Composite {

    private Text timeout;
    private Text semType;
    private Text optimumSpringLength;
    private Text springStiffness;
    private Text repulsionFactor;
    private Text efficiencyFactor;

    private DataBindingContext dbc;
    private SpringEmbedderPositionerXMLConfig config;

    public SpringEmbedderPositionerOptionsComposite(final Composite parent, final DataBindingContext dbc,
            final SpringEmbedderPositionerXMLConfig config) {
        super(parent, SWT.NONE);
        initGui();
        this.dbc = dbc;
        this.config = config;

        IObservableValue obsModel;
        ISWTObservableValue obsWidget;

        {
            obsWidget = SWTObservables.observeText(timeout, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    PluginXMLConfig.PROPERTYNAME_TIMEOUT);
            dbc.bindValue(
                    obsWidget, obsModel, new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)
                            .setAfterConvertValidator(new IntegerRangeValidator("Timeout", 0, Integer.MAX_VALUE)),
                    null);
        }

        {
            obsWidget = SWTObservables.observeText(optimumSpringLength, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    SpringEmbedderPositionerXMLConfig.PROPERTYNAME_OPTIMUM_SPRING_LENGTH);
            dbc.bindValue(obsWidget, obsModel,
                    new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT).setAfterConvertValidator(
                            new IntegerRangeValidator("Optimum spring length", 0, Integer.MAX_VALUE)),
                    null);

        }

        {
            obsWidget = SWTObservables.observeText(springStiffness, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    SpringEmbedderPositionerXMLConfig.PROPERTYNAME_SPRING_STIFFNESS);
            dbc.bindValue(obsWidget, obsModel, new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)
                    .setAfterConvertValidator(new DoubleRangeValidator("Spring's stiffness", 0, 1)), null);
        }

        {
            obsWidget = SWTObservables.observeText(repulsionFactor, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    SpringEmbedderPositionerXMLConfig.PROPERTYNAME_REPULSION_FACTOR);
            dbc.bindValue(obsWidget, obsModel, new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)
                    .setAfterConvertValidator(new IntegerRangeValidator("Repulsion factor", 0, Integer.MAX_VALUE)),
                    null);
        }

        {
            obsWidget = SWTObservables.observeText(efficiencyFactor, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    SpringEmbedderPositionerXMLConfig.PROPERTYNAME_EFFICIENCY_FACTOR);
            dbc.bindValue(
                    obsWidget, obsModel, new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT)
                            .setAfterConvertValidator(new DoubleRangeValidator("Efficiency of forces", 0, 1)),
                    null);
        }

        {
            obsWidget = SWTObservables.observeText(semType, SWT.Modify);
            obsModel = BeansObservables.observeValue(dbc.getValidationRealm(), config,
                    SpringEmbedderPositionerXMLConfig.PROPERTYNAME_EDGE_SEMANTIC_TYPES);

            final UpdateValueStrategy strToModel = new UpdateValueStrategy(UpdateValueStrategy.POLICY_CONVERT);
            strToModel.setConverter(new StringToIntListConverter());
            strToModel.setAfterConvertValidator(
                    new IntegerRangeValidator("Semantic type(s) for neighbourhood", -1, 255));
            strToModel.setAfterGetValidator(new StringToIntListValidator("Semantic type(s) for neighbourhood"));

            final UpdateValueStrategy strFromModel = new UpdateValueStrategy();
            strFromModel.setConverter(new IntListToStringConverter());

            dbc.bindValue(obsWidget, obsModel, strToModel, strFromModel);
        }

    }

    // --------------------------------------------------------------------------------
    /**
     */
    private void initGui() {

        this.setLayout(new GridLayout());

        final GridData data1 = new GridData();
        data1.horizontalAlignment = GridData.FILL;
        data1.verticalAlignment = GridData.FILL;
        data1.grabExcessHorizontalSpace = true;
        // data1.grabExcessVerticalSpace = true;
        this.setLayoutData(data1);

        final GridData groupData = new GridData(SWT.TOP, SWT.LEFT, true, true);
        groupData.horizontalAlignment = GridData.FILL;
        groupData.verticalAlignment = GridData.FILL;
        // groupData.verticalIndent = 10;

        // create the group "options"
        {
            final Group group1 = new Group(this, SWT.NONE);
            group1.setLayoutData(groupData);
            group1.setLayout(new GridLayout(4, false));
            group1.setText("Global options");

            // create fields of the group
            {
                // 1st row
                final Label label1 = new Label(group1, SWT.NONE);
                label1.setText("Timeout: ");

                final GridData data2 = new GridData();
                // data2.grabExcessHorizontalSpace = true;
                // data2.horizontalAlignment = GridData.FILL;
                data2.widthHint = 70;
                // data2.horizontalSpan = 2;

                timeout = new Text(group1, SWT.BORDER);
                timeout.setLayoutData(data2);

                final GridData data = new GridData();
                data.horizontalSpan = 2;
                final Label label1a = new Label(group1, SWT.NONE);
                label1a.setText("seconds");
                label1a.setLayoutData(data);

                // 2nd row
                final GridData data3 = new GridData();
                data3.horizontalAlignment = GridData.FILL;
                data3.grabExcessHorizontalSpace = true;
                data3.horizontalSpan = 4;
                // data3.verticalSpan = 5;
                data3.verticalAlignment = SWT.TOP;

                final Label label2 = new Label(group1, SWT.NONE);
                label2.setLayoutData(data3);
                label2.setText("(0 means no timeout.)");

                // 3rd row
                final GridData data4 = new GridData();
                data4.horizontalSpan = 3;

                final Label label3 = new Label(group1, SWT.NONE);
                label3.setText("Semantic type(s) for neighbourhood:");
                label3.setLayoutData(data4);

                final GridData data5 = new GridData();
                data5.grabExcessHorizontalSpace = true;
                data5.minimumWidth = 80;
                data5.horizontalAlignment = SWT.FILL;

                semType = new Text(group1, SWT.BORDER);
                semType.setLayoutData(data5);
            }
        }

        // create the group "Algorithm specific options"
        {
            final Group group = new Group(this, SWT.NONE);
            group.setLayoutData(groupData);
            group.setLayout(new GridLayout(5, false));
            group.setText("Spring-Embedder algorithm options");

            // create fields of the group
            {
                GridData data = new GridData();
                data.widthHint = 150;
                final Label label1 = new Label(group, SWT.NONE);
                label1.setText("Optimum spring length:");
                // label1.setLayoutData(data);

                data = new GridData();
                data.widthHint = 100;
                optimumSpringLength = new Text(group, SWT.BORDER);
                optimumSpringLength.setLayoutData(data);

                data = new GridData();
                data.widthHint = 30;
                final Label dummy1 = new Label(group, SWT.NONE);
                dummy1.setLayoutData(data);
                dummy1.setText("");

                data = new GridData();
                data.widthHint = 150;
                final Label label2 = new Label(group, SWT.NONE);
                label2.setText("Spring's stiffness:");
                // label2.setLayoutData(data);

                data = new GridData();
                data.widthHint = 100;
                springStiffness = new Text(group, SWT.BORDER);
                springStiffness.setLayoutData(data);

                data = new GridData();
                data.widthHint = 150;
                final Label label3 = new Label(group, SWT.NONE);
                label3.setText("Repulsion factor:");
                // label3.setLayoutData(data);

                data = new GridData();
                data.widthHint = 100;
                repulsionFactor = new Text(group, SWT.BORDER);
                repulsionFactor.setLayoutData(data);

                data = new GridData();
                data.widthHint = 30;
                final Label dummy2 = new Label(group, SWT.NONE);
                dummy2.setLayoutData(data);
                dummy2.setText("");

                data = new GridData();
                data.widthHint = 150;
                final Label label4 = new Label(group, SWT.NONE);
                label4.setText("Efficiency of forces:");
                // label4.setLayoutData(data);

                data = new GridData();
                data.widthHint = 100;
                efficiencyFactor = new Text(group, SWT.BORDER);
                efficiencyFactor.setLayoutData(data);

            }
        }
    }
}