Package name.abuchen.portfolio.ui.wizards.splits

Source Code of name.abuchen.portfolio.ui.wizards.splits.SelectSplitPage

package name.abuchen.portfolio.ui.wizards.splits;

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

import name.abuchen.portfolio.model.Security;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.util.BindingHelper;
import name.abuchen.portfolio.ui.util.SimpleDateTimeSelectionProperty;
import name.abuchen.portfolio.ui.wizards.AbstractWizardPage;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.validation.MultiValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.databinding.swt.ISWTObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.viewers.ViewersObservables;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DateTime;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;

public class SelectSplitPage extends AbstractWizardPage
{
    private StockSplitModel model;
    private BindingHelper bindings;

    public SelectSplitPage(StockSplitModel model)
    {
        super("select-stock-split"); //$NON-NLS-1$

        setTitle(Messages.SplitWizardDefinitionTitle);
        setDescription(Messages.SplitWizardDefinitionDescription);

        this.model = model;

        bindings = new BindingHelper(model)
        {
            @Override
            public void onValidationStatusChanged(IStatus status)
            {
                boolean isOK = status.getSeverity() == IStatus.OK;
                setErrorMessage(isOK ? null : status.getMessage());
                setPageComplete(isOK);
            }
        };
    }

    @Override
    public void createControl(Composite parent)
    {
        Composite container = new Composite(parent, SWT.NONE);
        setControl(container);
        container.setLayout(new FormLayout());

        Label labelSecurity = new Label(container, SWT.NONE);
        labelSecurity.setText(Messages.ColumnSecurity);

        List<Security> securities = new ArrayList<Security>();
        for (Security s : model.getClient().getSecurities())
            if (!s.isRetired())
                securities.add(s);
        Collections.sort(securities, new Security.ByName());

        ComboViewer comboSecurity = new ComboViewer(container, SWT.READ_ONLY);
        comboSecurity.setContentProvider(ArrayContentProvider.getInstance());
        comboSecurity.setLabelProvider(new LabelProvider()
        {
            @Override
            public String getText(Object element)
            {
                return ((Security) element).getName();
            }
        });
        comboSecurity.setInput(securities);

        Label labelExDate = new Label(container, SWT.NONE);
        labelExDate.setText(Messages.ColumnExDate);

        DateTime boxExDate = new DateTime(container, SWT.DATE | SWT.DROP_DOWN | SWT.BORDER);

        Label labelSplit = new Label(container, SWT.NONE);
        labelSplit.setText(Messages.SplitWizardLabelSplit);

        Spinner spinnerNewShares = new Spinner(container, SWT.BORDER);
        spinnerNewShares.setMinimum(1);
        spinnerNewShares.setMaximum(100);
        spinnerNewShares.setSelection(1);
        spinnerNewShares.setIncrement(1);
        spinnerNewShares.setFocus();

        Label labelColon = new Label(container, SWT.NONE);
        labelColon.setText(Messages.SplitWizardLabelNewForOld);

        Spinner spinnerOldShares = new Spinner(container, SWT.BORDER);
        spinnerOldShares.setMinimum(1);
        spinnerOldShares.setMaximum(100);
        spinnerOldShares.setSelection(1);
        spinnerOldShares.setIncrement(1);

        // form layout data

        FormData data = new FormData();
        data.top = new FormAttachment(comboSecurity.getControl(), 0, SWT.CENTER);
        labelSecurity.setLayoutData(data);

        data = new FormData();
        data.left = new FormAttachment(labelSecurity, 5);
        data.right = new FormAttachment(100);
        comboSecurity.getControl().setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(boxExDate, 0, SWT.CENTER);
        labelExDate.setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(comboSecurity.getControl(), 5);
        data.left = new FormAttachment(comboSecurity.getControl(), 2, SWT.LEFT);
        boxExDate.setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(spinnerNewShares, 0, SWT.CENTER);
        labelSplit.setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(boxExDate, 5);
        data.left = new FormAttachment(boxExDate, 0, SWT.LEFT);
        spinnerNewShares.setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(spinnerNewShares, 0, SWT.CENTER);
        data.left = new FormAttachment(spinnerNewShares, 5);
        labelColon.setLayoutData(data);

        data = new FormData();
        data.top = new FormAttachment(boxExDate, 5);
        data.left = new FormAttachment(labelColon, 5);
        spinnerOldShares.setLayoutData(data);

        // model binding

        DataBindingContext context = bindings.getBindingContext();
        context.bindValue(ViewersObservables.observeSingleSelection(comboSecurity),
                        BeansObservables.observeValue(model, "security"), null, null); //$NON-NLS-1$

        context.bindValue(new SimpleDateTimeSelectionProperty().observe(boxExDate),
                        BeansObservables.observeValue(model, "exDate")); //$NON-NLS-1$

        final ISWTObservableValue observeNewShares = SWTObservables.observeSelection(spinnerNewShares);
        context.bindValue(observeNewShares, BeansObservables.observeValue(model, "newShares")); //$NON-NLS-1$

        final ISWTObservableValue observeOldShares = SWTObservables.observeSelection(spinnerOldShares);
        context.bindValue(observeOldShares, BeansObservables.observeValue(model, "oldShares")); //$NON-NLS-1$

        MultiValidator validator = new MultiValidator()
        {

            @Override
            protected IStatus validate()
            {
                Object newShares = observeNewShares.getValue();
                Object oldShares = observeOldShares.getValue();

                return newShares.equals(oldShares) ? ValidationStatus
                                .error(Messages.SplitWizardErrorNewAndOldMustNotBeEqual) : ValidationStatus.ok();
            }

        };
        context.addValidationStatusProvider(validator);
    }

}
TOP

Related Classes of name.abuchen.portfolio.ui.wizards.splits.SelectSplitPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.