com.skratchdot.electribe.model.esx.editor.wizards.pattern.ImportPatternWizardPageSetSamples.java Source code

Java tutorial

Introduction

Here is the source code for com.skratchdot.electribe.model.esx.editor.wizards.pattern.ImportPatternWizardPageSetSamples.java

Source

/*******************************************************************************
 * Copyright (c) 2009-2013 SKRATCHDOT.COM
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * http://www.eclipse.org/legal/epl-v10.html
 *  
 * Contributors:
 *     JEFF |:at:| SKRATCHDOT |:dot:| COM
 *******************************************************************************/
package com.skratchdot.electribe.model.esx.editor.wizards.pattern;

import java.util.ArrayList;
import java.util.Arrays;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

import com.skratchdot.electribe.model.esx.Sample;
import com.skratchdot.electribe.model.esx.util.EsxUtil;

public class ImportPatternWizardPageSetSamples extends WizardPage {
    private Table table;
    private TableViewer tableViewer;
    private SampleMap[] sampleMaps;
    private Object[] sampleNumbers;

    /**
     * Create the wizard.
     */
    public ImportPatternWizardPageSetSamples() {
        super("wizardPage");
        setTitle("Select New Sample Numbers");
        setDescription(
                "Choose which sample numbers you want to import the new sample into.  You will overwrite the samples that currently exist in the those selected positions.");
    }

    /**
     * Create contents of the wizard.
     * @param parent
     */
    public void createControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NULL);
        setControl(container);
        container.setLayout(new GridLayout(2, false));

        tableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
        table = tableViewer.getTable();
        table.setLinesVisible(true);
        table.setHeaderVisible(true);
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));

        TableColumn tableColumnSource = new TableColumn(table, SWT.NONE);
        tableColumnSource.setWidth(200);
        tableColumnSource.setText("Source Samples");

        TableColumn tableColumnDestination = new TableColumn(table, SWT.NONE);
        tableColumnDestination.setWidth(200);
        tableColumnDestination.setText("Desination Samples");

        tableViewer.setLabelProvider(new ITableLabelProvider() {

            @Override
            public void removeListener(ILabelProviderListener listener) {
            }

            @Override
            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            @Override
            public void dispose() {
            }

            @Override
            public void addListener(ILabelProviderListener listener) {
            }

            @Override
            public String getColumnText(Object element, int columnIndex) {
                if (columnIndex == 0) {
                    return ((ImportPatternWizard) getWizard()).getSrcEsxFile().getSamples()
                            .get(((SampleMap) element).source).getLabel();
                } else {
                    return ((ImportPatternWizard) getWizard()).getDestEsxFile().getSamples()
                            .get(((SampleMap) element).destination).getLabel();
                }
            }

            @Override
            public Image getColumnImage(Object element, int columnIndex) {
                return null;
            }
        });

        tableViewer.setContentProvider(new IStructuredContentProvider() {

            @Override
            public void dispose() {
            }

            @Override
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            @Override
            public Object[] getElements(Object inputElement) {
                return (SampleMap[]) inputElement;
            }

        });

        this.tableViewer.setCellModifier(new SampleMapCellModifier(this.tableViewer));
        this.tableViewer.setColumnProperties(new String[] { "source", "destination" });

        Button btnRecalculateDestinations = new Button(container, SWT.NONE);
        btnRecalculateDestinations.setText("Recalculate Destinations");
        btnRecalculateDestinations.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                recalculateDestinations();
            }
        });

        Button btnResetDestinations = new Button(container, SWT.NONE);
        btnResetDestinations.setText("Reset Destinations");
        btnResetDestinations.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                resetDestinations();
            }
        });
    }

    @Override
    public boolean canFlipToNextPage() {
        return false;
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            sampleNumbers = ((ImportPatternWizard) getWizard()).getPageSelectPatterns().uniqueSamples.toArray();
            Arrays.sort(sampleNumbers);

            // Set sampleMaps
            sampleMaps = new SampleMap[sampleNumbers.length];
            for (int i = 0; i < sampleNumbers.length; i++) {
                sampleMaps[i] = new SampleMap((Short) sampleNumbers[i], (Short) sampleNumbers[i]);
            }

            // Create sample labels
            final String[] sampleLabels = new String[EsxUtil.NUM_SAMPLES];
            for (int i = 0; i < EsxUtil.NUM_SAMPLES; i++) {
                sampleLabels[i] = ((ImportPatternWizard) getWizard()).getDestEsxFile().getSamples().get(i)
                        .getLabel();
            }
            this.tableViewer.setCellEditors(new CellEditor[] { null,
                    new ComboBoxCellEditor(this.tableViewer.getTable(), sampleLabels, SWT.READ_ONLY) });

            // Set our input
            this.recalculateDestinations();

            // Make sure next/finish buttons are enabled/disabled
            ((ImportPatternWizard) getWizard()).setAbleToFinish(true);
            getWizard().getContainer().updateButtons();
        }
    }

    private void recalculateDestinations() {
        // Keep track of empty samples, and samples in use
        ArrayList<Integer> samplesEmpty = new ArrayList<Integer>();
        ArrayList<Integer> samplesInUse = new ArrayList<Integer>();
        for (int i = 0; i < EsxUtil.NUM_SAMPLES; i++) {
            Sample sample = ((ImportPatternWizard) getWizard()).getDestEsxFile().getSamples().get(i);
            if (sample.isEmpty()) {
                samplesEmpty.add(i);
            } else {
                samplesInUse.add(i);
            }
        }

        // Set sampleMaps
        sampleMaps = new SampleMap[sampleNumbers.length];
        for (int i = 0; i < sampleNumbers.length; i++) {
            int index = -1;
            int existingSampleIndex = EsxUtil.getExistingSampleIndex(
                    ((ImportPatternWizard) getWizard()).getDestEsxFile(), ((ImportPatternWizard) getWizard())
                            .getSrcEsxFile().getSamples().get(Integer.parseInt(sampleNumbers[i].toString(), 10)));
            if (EsxUtil.isValidSampleNumber(existingSampleIndex)) {
                index = existingSampleIndex;
            } else if (samplesEmpty.size() > 0) {
                index = samplesEmpty.remove(0);
            } else if (samplesInUse.size() > 0) {
                index = samplesInUse.remove(0);
            }
            sampleMaps[i] = new SampleMap((Short) sampleNumbers[i], (short) index);
        }

        this.tableViewer.setInput(sampleMaps);
    }

    private void resetDestinations() {
        // Set sampleMaps
        sampleMaps = new SampleMap[sampleNumbers.length];
        for (int i = 0; i < sampleNumbers.length; i++) {
            sampleMaps[i] = new SampleMap((Short) sampleNumbers[i], (Short) sampleNumbers[i]);
        }

        this.tableViewer.setInput(sampleMaps);
    }

    public SampleMap[] getSampleMaps() {
        return sampleMaps;
    }

}