com.googlecode.osde.internal.ui.wizards.newjsprj.WizardNewGadgetXmlPage.java Source code

Java tutorial

Introduction

Here is the source code for com.googlecode.osde.internal.ui.wizards.newjsprj.WizardNewGadgetXmlPage.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.googlecode.osde.internal.ui.wizards.newjsprj;

import org.apache.commons.validator.EmailValidator;
import org.eclipse.jface.dialogs.Dialog;
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.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;

import static com.googlecode.osde.internal.ui.wizards.ComponentUtils.createCheckbox;
import static com.googlecode.osde.internal.ui.wizards.ComponentUtils.createLabel;
import static com.googlecode.osde.internal.ui.wizards.ComponentUtils.createRadio;
import static com.googlecode.osde.internal.ui.wizards.ComponentUtils.createText;

public class WizardNewGadgetXmlPage extends WizardPage {

    private Text titleText;
    private Text descriptionText;
    private Text authorEmailText;
    private Text specFilenameText;
    private Button opensocialButton;
    private Button opensocial09Button;
    private Button opensocial08Button;
    private Button opensocial07Button;
    private Button nonOpensocialButton;
    private Button pubsubButton;
    private Button viewsButton;
    private Button flashButton;
    private Button skinsButton;
    private Button dynamicHeightButton;
    private Button setTitleButton;
    private Button miniMessageButton;
    private Button tabsButton;

    private Listener modifyListener = new Listener() {
        public void handleEvent(Event event) {
            boolean valid = validatePage();
            setPageComplete(valid);
        }
    };

    public WizardNewGadgetXmlPage(String pageName) {
        super(pageName);
        setPageComplete(false);
    }

    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NULL);
        initializeDialogUnits(parent);
        composite.setLayout(new GridLayout());
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        //
        createFileNameControls(composite);
        createModulePrefsControls(composite);
        createFeaturesControls(composite);
        //
        setPageComplete(validatePage());
        setErrorMessage(null);
        setMessage(null);
        setControl(composite);
        Dialog.applyDialogFont(composite);
    }

    private void createFileNameControls(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Group filenameGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        filenameGroup.setText("File name");
        filenameGroup.setFont(parent.getFont());
        filenameGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        layout = new GridLayout();
        layout.numColumns = 2;
        filenameGroup.setLayout(layout);
        filenameGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        //
        createLabel(filenameGroup, "Gadget spec file(*):");
        specFilenameText = createText(filenameGroup);
        specFilenameText.setText("gadget.xml");
        specFilenameText.addListener(SWT.Modify, modifyListener);
    }

    private void createModulePrefsControls(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Group infoGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        infoGroup.setText("Application information");
        infoGroup.setFont(parent.getFont());
        infoGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        layout = new GridLayout();
        layout.numColumns = 4;
        infoGroup.setLayout(layout);
        infoGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        createLabel(infoGroup, "Title(*):");
        titleText = createText(infoGroup);
        titleText.addListener(SWT.Modify, modifyListener);
        createLabel(infoGroup, "Author Email(*):");
        authorEmailText = createText(infoGroup);
        authorEmailText.setText(System.getProperty("user.name") + "@your.domain");
        authorEmailText.addListener(SWT.Modify, modifyListener);
        createLabel(infoGroup, "Description:");
        descriptionText = new Text(infoGroup, SWT.MULTI | SWT.BORDER);
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 3;
        layoutData.heightHint = 50;
        descriptionText.setLayoutData(layoutData);
        descriptionText.setFont(parent.getFont());
        Label noticeLabel = createLabel(infoGroup, "The fields marked (*) are required.");
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.horizontalAlignment = GridData.END;
        layoutData.horizontalSpan = 4;
        noticeLabel.setLayoutData(layoutData);
    }

    private void createFeaturesControls(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.numColumns = 1;
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Group featuresGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
        featuresGroup.setText("Features");
        featuresGroup.setFont(parent.getFont());
        featuresGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        layout = new GridLayout();
        layout.numColumns = 4;
        featuresGroup.setLayout(layout);
        featuresGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        // Prepare OpenSocial version selection.
        // Each row in featureGroup has 4 columns (spans),
        opensocial09Button = createRadio(featuresGroup, "OpenSocial v0.9", 1); // 1 means span=1
        opensocial09Button.setSelection(true);
        opensocial08Button = createRadio(featuresGroup, "OpenSocial v0.8", 1);
        opensocial07Button = createRadio(featuresGroup, "OpenSocial v0.7", 2);
        opensocialButton = createRadio(featuresGroup, "OpenSocial (not fully supported yet)", 2);
        nonOpensocialButton = createRadio(featuresGroup, "Non-OpenSocial", 2);

        pubsubButton = createCheckbox(featuresGroup, "PubSub");
        viewsButton = createCheckbox(featuresGroup, "Views");
        flashButton = createCheckbox(featuresGroup, "Flash");
        skinsButton = createCheckbox(featuresGroup, "Skins");
        dynamicHeightButton = createCheckbox(featuresGroup, "Dynamic Height");
        setTitleButton = createCheckbox(featuresGroup, "Set Title");
        miniMessageButton = createCheckbox(featuresGroup, "Mini Message");
        tabsButton = createCheckbox(featuresGroup, "Tabs");
    }

    /**
     * Validates user input.
     *
     * @return true if the title and gadget spec file names are not empty, and the email is valid
     */
    private boolean validatePage() {
        String specFilename = specFilenameText.getText().trim();
        if (specFilename.length() == 0) {
            setErrorMessage("Gadget spec file name is empty. Please enter gadget spec file name.");
            setMessage(null);
            return false;
        }
        String title = titleText.getText().trim();
        if (title.length() == 0) {
            setErrorMessage("Title is empty. Please enter the title.");
            setMessage(null);
            return false;
        }
        String authorEmail = authorEmailText.getText().trim();
        EmailValidator emailValidator = EmailValidator.getInstance();
        if (!emailValidator.isValid(authorEmail)) {
            setErrorMessage("Invalid author email. Please enter a valid email.");
            setMessage(null);
            return false;
        }
        setErrorMessage(null);
        setMessage("Click Next to continue.");
        return true;
    }

    public GadgetXmlData getInputtedData() {
        GadgetXmlData data = new GadgetXmlData();
        data.setAuthorEmail(authorEmailText.getText().trim());
        data.setDescription(descriptionText.getText().trim());
        data.setDynamicHeight(dynamicHeightButton.getSelection());
        data.setFlash(flashButton.getSelection());
        data.setMiniMessage(miniMessageButton.getSelection());
        data.setOpensocial(opensocialButton.getSelection());
        data.setOpensocial07(opensocial07Button.getSelection());
        data.setOpensocial08(opensocial08Button.getSelection());
        data.setOpensocial09(opensocial09Button.getSelection());
        data.setNonOpensocial(nonOpensocialButton.getSelection());
        data.setPubsub(pubsubButton.getSelection());
        data.setSetTitle(setTitleButton.getSelection());
        data.setSkins(skinsButton.getSelection());
        data.setTabs(tabsButton.getSelection());
        data.setTitle(titleText.getText().trim());
        data.setViews(viewsButton.getSelection());
        data.setGadgetSpecFilename(specFilenameText.getText().trim());
        return data;
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            if (titleText.getText().length() == 0) {
                NewOpenSocialProjectResourceWizard wizard = (NewOpenSocialProjectResourceWizard) getWizard();
                titleText.setText(wizard.getProjectName());
            }
        }
    }

}