eu.esdihumboldt.hale.ui.io.project.SaveProjectDetailsPage.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.ui.io.project.SaveProjectDetailsPage.java

Source

/*
 * Copyright (c) 2012 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     HUMBOLDT EU Integrated Project #030962
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.ui.io.project;

import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import eu.esdihumboldt.hale.common.core.io.IOProvider;
import eu.esdihumboldt.hale.common.core.io.extension.IOProviderDescriptor;
import eu.esdihumboldt.hale.common.core.io.project.ProjectInfo;
import eu.esdihumboldt.hale.common.core.io.project.ProjectWriter;
import eu.esdihumboldt.hale.common.core.io.project.model.Project;
import eu.esdihumboldt.hale.ui.HaleWizardPage;
import eu.esdihumboldt.hale.ui.io.IOWizardListener;
import eu.esdihumboldt.hale.ui.io.IOWizardPage;

/**
 * Wizard page that allows changing project name and author.
 * 
 * @author Simon Templer
 * @partner 01 / Fraunhofer Institute for Computer Graphics Research
 */
public class SaveProjectDetailsPage extends IOWizardPage<ProjectWriter, SaveProjectWizard> {

    private StringFieldEditor name;
    private StringFieldEditor author;
    private Text description;

    /**
     * Default constructor
     */
    public SaveProjectDetailsPage() {
        super("project.save.details");
        setTitle("Project details");
        setDescription("Please specify project name and author.");
    }

    /**
     * @see HaleWizardPage#createContent(Composite)
     */
    @Override
    protected void createContent(Composite page) {
        page.setLayout(new GridLayout(2, false));

        // name
        name = new StringFieldEditor("name", "Project name:", page);
        name.setEmptyStringAllowed(false);
        name.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
        name.setErrorMessage("The project name must be specified.");
        name.setPage(this);

        // author
        author = new StringFieldEditor("author", "Project author:", page);
        author.setEmptyStringAllowed(false);
        author.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
        author.setPage(this);

        // description
        Label descLabel = new Label(page, SWT.NONE);
        descLabel.setText("Description:");
        descLabel.setLayoutData(GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).create());

        description = new Text(page, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.BORDER);
        description.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).hint(500, SWT.DEFAULT).create());

        // listen for state changes on field editors
        IPropertyChangeListener stateListener = new IPropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent event) {
                if (event.getProperty().equals(StringFieldEditor.IS_VALID)) {
                    updateState();
                }
            }
        };
        name.setPropertyChangeListener(stateListener);
        author.setPropertyChangeListener(stateListener);

        // listen for provider changes
        getWizard().addIOWizardListener(new IOWizardListener<ProjectWriter, SaveProjectWizard>() {

            @Override
            public void providerDescriptorChanged(IOProviderDescriptor providerFactory) {
                // update fields as the provider will have changed
                updateFields();
            }

            @Override
            public void contentTypeChanged(IContentType contentType) {
                // ignore
            }
        });

        updateState();
        updateFields();
    }

    /**
     * @see DialogPage#setVisible(boolean)
     */
    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);

        name.setFocus();
        if (!name.isValid()) {
            name.showErrorMessage();
        }
    }

    private void updateFields() {
        ProjectWriter writer = getWizard().getProvider();
        if (writer != null && writer.getProject() != null) {
            ProjectInfo p = writer.getProject();
            name.setStringValue(p.getName());
            author.setStringValue(p.getAuthor());
            description.setText((p.getDescription() == null) ? ("") : (p.getDescription()));
        } else {
            name.setStringValue("");
            author.setStringValue("");
            description.setText("");
        }
    }

    private void updateState() {
        setPageComplete(name.isValid() && author.isValid());
    }

    /**
     * @see IOWizardPage#updateConfiguration(IOProvider)
     */
    @Override
    public boolean updateConfiguration(ProjectWriter provider) {
        Project p = provider.getProject();

        if (p != null) {
            p.setName(name.getStringValue());
            p.setAuthor(author.getStringValue());
            p.setDescription((description.getText().isEmpty()) ? (null) : (description.getText()));

            return true;
        }

        return false;
    }

}