com.nokia.tools.variant.compare.ui.wizards.ImportDataWizardPageOne.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.variant.compare.ui.wizards.ImportDataWizardPageOne.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 * 
 * Initial Contributors:
 * Nokia Corporation - Initial contribution
 * 
 * Contributors:
 * 
 * Description: This file is part of com.nokia.tools.variant.compare.ui component.
 */

package com.nokia.tools.variant.compare.ui.wizards;

import java.io.File;
import java.util.Observable;
import java.util.Observer;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.wizard.WizardPage;
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.Control;
import org.eclipse.swt.widgets.FileDialog;

import com.nokia.tools.variant.common.core.utils.FileUtils;
import com.nokia.tools.variant.common.ui.utils.PixelConverter;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.DialogField;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.IDialogFieldListener;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.IStringButtonAdapter;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.LayoutUtil;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.StringButtonDialogField;
import com.nokia.tools.variant.common.ui.wizards.dialogfields.StringDialogField;

public class ImportDataWizardPageOne extends WizardPage {

    public static final String PAGE_ID = "ImportDataWizardPageOne";

    /**
     * If CPF is opened, then is automatically set as target CPF
     */
    private boolean cpfOpened = false;

    public void setCpfOpened(boolean cpfOpened) {
        this.cpfOpened = cpfOpened;
    }

    private final class SelectionGroup extends Observable implements IDialogFieldListener, IStringButtonAdapter {

        protected final StringDialogField targetLocation;
        protected final StringButtonDialogField sourceLocationBtn;
        protected final StringButtonDialogField targetLocationBtn;

        public SelectionGroup() {
            targetLocation = new StringDialogField(SWT.READ_ONLY);
            targetLocation.setLabelText("Target File:");

            targetLocationBtn = new StringButtonDialogField(this);
            targetLocationBtn.setDialogFieldListener(this);
            targetLocationBtn.setLabelText("Target File:");
            targetLocationBtn.setButtonLabel("Browse...");

            sourceLocationBtn = new StringButtonDialogField(this);
            sourceLocationBtn.setDialogFieldListener(this);
            sourceLocationBtn.setLabelText("Source File:");
            sourceLocationBtn.setButtonLabel("Browse...");
        }

        public Control createControl(Composite composite) {
            final int numColumns = 3;

            Composite group = new Composite(composite, SWT.NONE);
            group.setLayout(initGridLayout(new GridLayout(numColumns, false), false));
            if (cpfOpened) {
                targetLocation.doFillIntoGrid(group, numColumns);
            } else {
                targetLocationBtn.doFillIntoGrid(group, numColumns);
            }
            sourceLocationBtn.doFillIntoGrid(group, numColumns);

            LayoutUtil.setHorizontalGrabbing(sourceLocationBtn.getTextControl(group));

            return group;
        }

        public void changeControlPressed(DialogField field) {
            if (field == sourceLocationBtn) {
                File f = new File(sourceLocationBtn.getText());
                if (!f.exists()) {
                    f = null;
                }
                File d = getFile(f,
                        new String[] { "All Supported Sources (*.cpf; *.confml)", "CPF File (*.cpf)",
                                "ConfML Data File (*.confml)" },
                        new String[] { "*.cpf;*.confml", "*.cpf", "*.confml" });
                if (d == null) {
                    // fileLocation.setText("");
                } else {
                    sourceLocationBtn.setText(d.getAbsolutePath());
                }
            }

            if (field == targetLocationBtn) {
                File f = new File(targetLocationBtn.getText());
                if (!f.exists()) {
                    f = null;
                }
                File d = getFile(f,
                        new String[] { "All Supported Sources (*.cpf; *.confml)", "CPF File (*.cpf)",
                                "ConfML Data File (*.confml)" },
                        new String[] { "*.cpf;*.confml", "*.cpf", "*.confml" });
                if (d != null) {
                    targetLocationBtn.setText(d.getAbsolutePath());
                }
            }
        }

        /**
         * Helper to open the file chooser dialog.
         * 
         * @param startingDirectory
         *            the directory to open the dialog on.
         * @return File The File the user selected or <code>null</code> if they
         *         do not.
         */
        private File getFile(File startingDirectory, String[] names, String[] ext) {

            FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
            if (startingDirectory != null) {
                dialog.setFileName(startingDirectory.getPath());
            }
            dialog.setFilterExtensions(ext);
            dialog.setFilterNames(names);
            String file = dialog.open();
            if (file != null) {
                file = file.trim();
                if (file.length() > 0) {
                    return new File(file);
                }
            }

            return null;
        }

        public void dialogFieldChanged(DialogField field) {

            fireEvent();
        }

        /*
         * (non-Javadoc)
         * 
         * @see java.util.Observer#update(java.util.Observable,
         * java.lang.Object)
         */
        public void update(Observable o, Object arg) {
            fireEvent();
        }

        protected void fireEvent() {
            setChanged();
            notifyObservers();
        }

    }

    public File getSelectedSourceFile() {
        return new File(selectionGroup.sourceLocationBtn.getText());
    }

    public File getSelectedTargetFile() {
        return new File(selectionGroup.targetLocationBtn.getText());
    }

    private class Validator implements Observer {
        public void update(Observable o, Object arg) {
            String sourcePath = selectionGroup.sourceLocationBtn.getText();
            String targetPath = selectionGroup.targetLocationBtn.getText();

            if (!cpfOpened) {
                // target file validation
                if (targetPath.length() == 0) {
                    setPageComplete(false);
                    setMessage("Specify the target file path");
                    selectionGroup.targetLocationBtn.setErrorMessage(null);
                    return;
                }

                File targetFile = new File(targetPath);
                if (!targetFile.exists()) {
                    setPageComplete(false);
                    setErrorMessage("The target file does not exist");
                    selectionGroup.targetLocationBtn.setErrorMessage("Specify valid file name");
                    return;
                }

                if (targetFile.isDirectory()) {
                    setPageComplete(false);
                    setErrorMessage("The specified name must point to a file");
                    selectionGroup.targetLocationBtn.setErrorMessage("Specify valid file name");
                    return;
                }

                String targetExt = FileUtils.getExtension(targetFile);
                if (!"cpf".equals(targetExt)) {
                    setPageComplete(false);
                    setErrorMessage("The file must have '.cpf' extension");
                    selectionGroup.sourceLocationBtn.setErrorMessage("Specify valid file name");
                    return;
                }
                selectionGroup.targetLocationBtn.setErrorMessage(null);
            }

            // source file validation
            if (sourcePath.length() == 0) {
                setPageComplete(false);
                setMessage("Specify the source file path");
                selectionGroup.sourceLocationBtn.setErrorMessage(null);
                return;
            }
            File sourceFile = new File(sourcePath);
            if (!sourceFile.exists()) {
                setPageComplete(false);
                setErrorMessage("The source file does not exist");
                selectionGroup.sourceLocationBtn.setErrorMessage("Specify valid file name");
                return;
            }
            if (sourceFile.isDirectory()) {
                setPageComplete(false);
                setErrorMessage("The specified name must point to a file");
                selectionGroup.sourceLocationBtn.setErrorMessage("Specify valid file name");
                return;
            }
            String sourceExt = FileUtils.getExtension(sourceFile);
            if (!"cpf".equals(sourceExt) && !"confml".equals(sourceExt)) {
                setPageComplete(false);
                setErrorMessage("The file must have '.cpf' or '.confml' extension");
                selectionGroup.sourceLocationBtn.setErrorMessage("Specify valid file name");
                return;
            }
            selectionGroup.sourceLocationBtn.setErrorMessage(null);

            setPageComplete(true);
            setErrorMessage(null);
            setMessage(null);
        }
    }

    SelectionGroup selectionGroup = new SelectionGroup();
    Validator validator = new Validator();

    public ImportDataWizardPageOne() {
        super(PAGE_ID);
        setPageComplete(false);

        if (cpfOpened) {
            setTitle("Select file to import from");
        } else {
            setTitle("Select file to import ");
        }

        setDescription("You can import data into opened CPF from another CPF file or ConfML data file");

        selectionGroup = new SelectionGroup();
        validator = new Validator();
        selectionGroup.addObserver(validator);
    }

    public void createControl(Composite parent) {
        pixelConverter = new PixelConverter(parent);
        Composite content = new Composite(parent, SWT.NONE);
        content.setLayout(initGridLayout(new GridLayout(3, false), true));
        Control control = selectionGroup.createControl(content);
        control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
        setControl(content);
    }

    private PixelConverter pixelConverter;

    private GridLayout initGridLayout(GridLayout layout, boolean margins) {
        layout.horizontalSpacing = pixelConverter
                .convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        layout.verticalSpacing = pixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        if (margins) {
            layout.marginWidth = pixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
            layout.marginHeight = pixelConverter.convertHorizontalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        } else {
            layout.marginWidth = 0;
            layout.marginHeight = 0;
        }
        return layout;
    }

    public void setTargetFile(String location) {
        selectionGroup.targetLocation.setText(location);
    }

}