Package org.locationtech.udig.project.ui.internal.wizard

Source Code of org.locationtech.udig.project.ui.internal.wizard.NewProjectWizardPage

/*
*    uDig - User Friendly Desktop Internet GIS client
*    http://udig.refractions.net
*    (C) 2004-2012, Refractions Research Inc.
*
* 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), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*
*/
package org.locationtech.udig.project.ui.internal.wizard;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import org.locationtech.udig.project.ui.internal.ISharedImages;
import org.locationtech.udig.project.ui.internal.Messages;
import org.locationtech.udig.project.ui.internal.ProjectUIPlugin;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

/**
* A wizard page to create a new project.
*
* @author vitalus
*
* @since 0.3
*/
public class NewProjectWizardPage extends WizardPage {

    DirectoryFieldEditor projectDirectoryEditor;

    StringFieldEditor projectNameEditor;

    /**
     * Construct <code>NewProjectWizardPage</code>.
     */
    public NewProjectWizardPage() {
        super(Messages.NewProjectWizardPage_newProject, Messages.NewProjectWizardPage_newProject,
                ProjectUIPlugin.getDefault().getImageDescriptor(ISharedImages.NEWPROJECT_WIZBAN));
        setDescription(Messages.NewProjectWizardPage_newProject_description);
    }

    /**
     * Set up this page for use.
     *
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
     * @param parent
     */
    public void createControl(Composite parent) {

        Composite composite = new Composite(parent, SWT.NONE);

        projectNameEditor = new StringFieldEditor("newproject.name",
                Messages.NewProjectWizardPage_label_projectName, composite) {
            protected boolean doCheckState() {
                return validate();
            }
        };
        projectNameEditor.setPage(this);
        projectNameEditor.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
        Text textControl = projectNameEditor.getTextControl(composite);
        GridData gd = new GridData(SWT.LEFT, SWT.NONE, false, false);
        gd.widthHint = 100;
        gd.horizontalSpan = 2;
        textControl.setLayoutData(gd);

        projectDirectoryEditor = new DirectoryFieldEditor("newproject.directory",
                Messages.NewProjectWizardPage_label_projectDir, composite) {
            protected boolean doCheckState() {
                return validate();
            }
        };
        projectDirectoryEditor.setPage(this);
        projectDirectoryEditor.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
        projectDirectoryEditor.fillIntoGrid(composite, 3);

        String defaultProjectName = Messages.NewProjectWizardPage_default_name;

        final IPath homepath = Platform.getLocation();
        String projectPath = new File(homepath.toString()).getAbsolutePath();

        projectNameEditor.setStringValue(defaultProjectName);
        projectDirectoryEditor.setStringValue(projectPath);

        composite.pack();

        setControl(composite);
        setPageComplete(true);
    }

    /**
     * Returns specified project name.
     *
     * @return
     */
    public String getProjectName() {
        return projectNameEditor.getStringValue();
    }

    /**
     * Returns specified project path.
     *
     * @return
     */
    public String getProjectPath() {
        return projectDirectoryEditor.getStringValue();
    }

    /**
     * Validates the form with project name and path.
     *
     * @return <code>true</code> if valid
     */
    public boolean validate() {

        final String projectPath = getProjectPath();
        final String projectName = getProjectName();

        if (projectPath == null || projectPath.length() == 0) {
            setErrorMessage(Messages.NewProjectWizardPage_err_project_dir_valid);
            setPageComplete(false);
            return false;
        }

        File f = new File(projectPath + File.separator + projectName + ".udig");
        if (f.exists()) {
            setErrorMessage(Messages.NewProjectWizardPage_err_project_exists);
            setPageComplete(false);
            return false;
        }

        File projectPathFolder = null;
        try {
            URL projectURL = new URL("file:///" + projectPath); //$NON-NLS-1$
            projectPathFolder = new File(projectURL.getFile());

            String absolutePath = projectPathFolder.getAbsolutePath();
            if (!projectPath.equals(absolutePath)) {
                setErrorMessage(Messages.NewProjectWizardPage_err_project_dir_absolute);
                setPageComplete(false);
                return false;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
            setPageComplete(false);
            return false;
        }

        if (projectPathFolder.exists()) {
            String projectFileAbsolutePath = projectPathFolder.getAbsolutePath()
                    + File.separatorChar + "project.uprj"; //$NON-NLS-1$;
            File projectFile = new File(projectFileAbsolutePath);
            if (projectFile.exists()) {
                setErrorMessage(Messages.NewProjectWizardPage_err_project_exists);
                setPageComplete(false);
                return false;
            }
        } else {
            setErrorMessage(Messages.NewProjectWizardPage_err_project_dir_valid);
            setPageComplete(false);
            return false;
        }

        if (projectName == null || projectName.length() == 0) {
            setErrorMessage(Messages.NewProjectWizardPage_err_project_name);
            setPageComplete(false);
            return false;
        }
        setPageComplete(true);
        return true;
    }

}
TOP

Related Classes of org.locationtech.udig.project.ui.internal.wizard.NewProjectWizardPage

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.