au.gov.ansto.bragg.kowari.exp.command.SinglePositionParameter.java Source code

Java tutorial

Introduction

Here is the source code for au.gov.ansto.bragg.kowari.exp.command.SinglePositionParameter.java

Source

/******************************************************************************* 
* Copyright (c) 2008 Australian Nuclear Science and Technology Organisation.
* 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: 
*    Norman Xiong (nxi@Bragg Institute) - initial API and implementation
*******************************************************************************/
package au.gov.ansto.bragg.kowari.exp.command;

import java.io.FileNotFoundException;

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.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.gumtree.gumnix.sics.batch.ui.util.SicsBatchUIUtils;
import org.slf4j.LoggerFactory;

import au.gov.ansto.bragg.kowari.exp.commandView.AbstractScanCommandView;

/**
 * @author nxi
 * Created on 05/08/2009
 */
public class SinglePositionParameter extends AbstractScanParameter {

    private String scanVariable;
    private float position;

    private HmmscanParameter parentParameter;

    //   private float currentPosition;
    /**
     * @return the scanVariable
     */
    public String getScanVariable() {
        return scanVariable;
    }

    /**
     * @param scanVariable the scanVariable to set
     */
    public void setScanVariable(String scanVariable) {
        String oldValue = this.scanVariable;
        this.scanVariable = scanVariable;
        firePropertyChange("scanVariable", oldValue, scanVariable);
    }

    /**
     * @return the startPosition
     */
    public float getPosition() {
        return position;
    }

    /**
     * @param startPosition the startPosition to set
     */
    public void setPosition(float position) {
        float oldValue = this.position;
        this.position = position;
        firePropertyChange("position", oldValue, position);

    }

    /**
     * 
     */
    public SinglePositionParameter(HmmscanParameter parentParameter) {
        super();
        this.parentParameter = parentParameter;
    }

    /* (non-Javadoc)
     * @see au.gov.ansto.bragg.kowari.exp.command.AbstractScanParameter#createParameterUI(org.eclipse.swt.widgets.Composite)
     */
    @Override
    public void createParameterUI(Composite parent, final AbstractScanCommandView commandView,
            final FormToolkit toolkit) {
        GridLayoutFactory.swtDefaults().margins(0, 0).spacing(6, 4).numColumns(4).applyTo(parent);
        //      GridLayoutFactory.swtDefaults().numColumns(6).applyTo(parent);
        final ComboViewer scanVariableCombo = new ComboViewer(parent, SWT.READ_ONLY);
        scanVariableCombo.setContentProvider(new ArrayContentProvider());
        scanVariableCombo.setLabelProvider(new LabelProvider());
        scanVariableCombo.setSorter(new ViewerSorter());
        scanVariableCombo.setInput(SicsBatchUIUtils.getSicsDrivableIds());
        GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.TOP).hint(WIDTH_COMBO, SWT.DEFAULT)
                .applyTo(scanVariableCombo.getCombo());
        //      GridDataFactory.fillDefaults().grab(true, false).applyTo(scanVariableCombo.getCombo());

        //      GridDataFactory.swtDefaults().hint(WIDTH_COMBO, SWT.DEFAULT).applyTo(scanVariableCombo.getCombo());

        final Text positionText = toolkit.createText(parent, "");
        //      GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.TOP).hint(WIDTH_PARAMETER, SWT.DEFAULT).applyTo(startPositionText);
        //      GridData data = new GridData();
        //      data.grabExcessHorizontalSpace = true;
        //      data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
        //      data.heightHint = SWT.DEFAULT;
        //      startPositionText.setLayoutData(data);
        GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.TOP).hint(WIDTH_PARAMETER_LONG, SWT.DEFAULT)
                .applyTo(positionText);
        addValidator(positionText, ParameterValidator.floatValidator);

        Realm.runWithDefault(SWTObservables.getRealm(Display.getDefault()), new Runnable() {
            public void run() {
                DataBindingContext bindingContext = new DataBindingContext();
                bindingContext.bindValue(ViewersObservables.observeSingleSelection(scanVariableCombo),
                        BeansObservables.observeValue(getInstance(), "scanVariable"), new UpdateValueStrategy(),
                        new UpdateValueStrategy());
                bindingContext.bindValue(SWTObservables.observeText(positionText, SWT.Modify),
                        BeansObservables.observeValue(getInstance(), "position"), new UpdateValueStrategy(),
                        new UpdateValueStrategy());
            }
        });

        final AbstractScanCommand command = commandView.getCommand();

        Button addButton = toolkit.createButton(parent, "", SWT.PUSH);
        GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.TOP).hint(18, 18).applyTo(addButton);
        try {
            addButton.setImage(SicsBatchUIUtils.getBatchEditorImage("ADD"));
        } catch (FileNotFoundException e2) {
            LoggerFactory.getLogger(this.getClass()).error("can not find ADD image", e2);
        }
        addButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                addNewParameter(command);
                commandView.refreshParameterComposite();
                //            notifyPropertyChanged(newCommand, null);
            }
        });

        Button removeButton = toolkit.createButton(parent, "", SWT.PUSH);
        GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.TOP).hint(18, 18).applyTo(removeButton);
        try {
            removeButton.setImage(SicsBatchUIUtils.getBatchEditorImage("REMOVE"));
        } catch (FileNotFoundException e1) {
            LoggerFactory.getLogger(this.getClass()).error("can not find REMOVE image", e1);
        }
        removeButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                removeParameter(command);
                commandView.refreshParameterComposite();
            }
        });
    }

    @Override
    protected void removeParameter(AbstractScanCommand command) {
        parentParameter.removeSigleParameter(this);
    }

    @Override
    protected void addNewParameter(AbstractScanCommand command) {
        SinglePositionParameter newParameter = new SinglePositionParameter(parentParameter);
        parentParameter.insertSiglePositionParameter(parentParameter.indexOfSinglePositionParameter(this) + 1,
                newParameter);
        //      newParameter.setScanVariable(scanVariable);
        //      newParameter.setStartPosition(startPosition);
        //      newParameter.setFinishPosition(finishPosition);
        //      newParameter.setNumberOfSteps(numberOfSteps);
        //      command.insertParameter(command.indexOfParameter(this) + 1, newParameter);
    }

    /* (non-Javadoc)
     * @see au.gov.ansto.bragg.kowari.exp.command.AbstractScanParameter#iterationGetNext()
     */
    @Override
    public String iterationGetNext() {
        return "";
    }

    /* (non-Javadoc)
     * @see au.gov.ansto.bragg.kowari.exp.command.AbstractScanParameter#iterationHasNext()
     */
    @Override
    public boolean iterationHasNext() {
        return false;
    }

    /* (non-Javadoc)
     * @see au.gov.ansto.bragg.kowari.exp.command.AbstractScanParameter#startIteration()
     */
    @Override
    public void startIteration() {
    }

    @Override
    public String toString() {
        return scanVariable + " " + position;
    }

    public String getSicsScript() {
        if (scanVariable != null && scanVariable.trim().length() > 0)
            return "drive " + scanVariable + " " + position;
        else
            return "";
    }

    @Override
    public int getNumberOfPoints() {
        return 1;
    }

    @Override
    public String getDriveScript(String indexName, String indent) {
        return indent + "drive " + scanVariable + " " + ((float) position) + "\n";
    }

    @Override
    public String getBroadcastScript(String indexName, String indent) {
        return indent + "broadcast " + scanVariable + " = " + ((float) position) + "\n";
    }

    @Override
    public String getPritable(boolean isFirstLine) {
        return scanVariable + "\t" + position;
    }
}