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

Java tutorial

Introduction

Here is the source code for com.googlecode.osde.internal.ui.wizards.newjsprj.WizardNewViewPage.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 java.util.EnumMap;
import java.util.Set;

import com.googlecode.osde.internal.gadgets.ViewName;
import com.googlecode.osde.internal.gadgets.ViewType;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Listener;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
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 WizardNewViewPage extends WizardPage {

    private EnumMap<ViewName, ViewSettingPart> partMap;

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

    public WizardNewViewPage(String pageName) {
        super(pageName);
        setPageComplete(false);
        partMap = new EnumMap<ViewName, ViewSettingPart>(ViewName.class);
    }

    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));
        //
        TabFolder tabFolder = new TabFolder(composite, SWT.NULL);
        tabFolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        createViewControls(composite, ViewName.canvas, tabFolder);
        createViewControls(composite, ViewName.profile, tabFolder);
        createViewControls(composite, ViewName.preview, tabFolder);
        createViewControls(composite, ViewName.home, tabFolder);
        //
        setPageComplete(validatePage());
        setErrorMessage(null);
        setMessage(null);
        setControl(composite);
        Dialog.applyDialogFont(composite);
    }

    private boolean validatePage() {
        ViewSettingPart canvas = partMap.get(ViewName.canvas);
        ViewSettingPart profile = partMap.get(ViewName.profile);
        ViewSettingPart preview = partMap.get(ViewName.preview);
        ViewSettingPart home = partMap.get(ViewName.home);
        if (canvas.getNotSupportButton().getSelection() && profile.getNotSupportButton().getSelection()
                && preview.getNotSupportButton().getSelection() && home.getNotSupportButton().getSelection()) {
            setMessage(null);
            setErrorMessage("It is necessary to support at least one view.");
            return false;
        }
        Set<ViewName> keySet = partMap.keySet();
        for (ViewName viewName : keySet) {
            ViewSettingPart part = partMap.get(viewName);
            if (part.getUrlButton().getSelection()) {
                String text = part.getHrefText().getText().trim();
                if (text.length() == 0) {
                    setMessage(null);
                    setErrorMessage("Location URL for " + viewName.getDisplayName() + " view is empty.");
                    return false;
                }
            } else if (part.getHtmlButton().getSelection()) {
                if (part.getSampleButton().getSelection() && !part.getPeopleButton().getSelection()
                        && !part.getActivityButton().getSelection() && !part.getAppDataButton().getSelection()) {
                    setMessage(null);
                    setErrorMessage("It is necessary to select at least one type for generating sample code in "
                            + viewName.getDisplayName() + " view.");
                    return false;
                }
                if (part.getCreateJavaScriptFileButton().getSelection()
                        && (part.getFilenameText().getText().trim().length() == 0)) {
                    setMessage(null);
                    setErrorMessage(
                            "The JavaScript file name for " + viewName.getDisplayName() + " view is empty.");
                    return false;
                }
            }
        }
        setErrorMessage(null);
        setMessage(null);
        return true;
    }

    private void createViewControls(Composite composite, ViewName viewName, TabFolder folder) {
        TabItem item = new TabItem(folder, SWT.BORDER);
        item.setText(viewName.getDisplayName());
        ViewSettingPart part = new ViewSettingPart(folder, viewName);
        item.setControl(part.getComposite());
        partMap.put(viewName, part);
    }

    public EnumMap<ViewName, GadgetViewData> getInputedData() {
        EnumMap<ViewName, GadgetViewData> resultMap = new EnumMap<ViewName, GadgetViewData>(ViewName.class);
        Set<ViewName> keySet = partMap.keySet();
        for (ViewName viewName : keySet) {
            ViewSettingPart part = partMap.get(viewName);
            if (!part.getNotSupportButton().getSelection()) {
                GadgetViewData data = new GadgetViewData();
                data.setViewName(viewName);
                if (part.htmlButton.getSelection()) {
                    data.setType(ViewType.html);
                    data.setCreateExternalJavaScript(part.getCreateJavaScriptFileButton().getSelection());
                    data.setCreateSampleCodeSet(part.getSampleButton().getSelection());
                    data.setCreatePeople(part.getPeopleButton().getSelection());
                    data.setCreateActivity(part.getActivityButton().getSelection());
                    data.setCreateAppData(part.getAppDataButton().getSelection());
                    data.setFilename(part.getFilenameText().getText().trim());
                } else if (part.urlButton.getSelection()) {
                    data.setType(ViewType.url);
                    data.setHref(part.getHrefText().getText().trim());
                } else {
                    throw new IllegalStateException("Unknown ViewType is selected.");
                }
                resultMap.put(viewName, data);
            }
        }
        return resultMap;
    }

    private class ViewSettingPart {

        private Composite composite;
        private Button htmlButton;
        private Button createJavaScriptFileButton;
        private Button urlButton;
        private Text hrefText;
        private Button notSupportButton;
        private Button sampleButton;
        private Button peopleButton;
        private Button activityButton;
        private Button appDataButton;
        private Text filenameText;
        private ViewName viewName;

        ViewSettingPart(Composite parent, ViewName viewName) {
            super();
            this.viewName = viewName;
            createViewControls(parent);
        }

        public Composite getComposite() {
            return composite;
        }

        public Button getHtmlButton() {
            return htmlButton;
        }

        public Button getCreateJavaScriptFileButton() {
            return createJavaScriptFileButton;
        }

        public Button getUrlButton() {
            return urlButton;
        }

        public Text getHrefText() {
            return hrefText;
        }

        public Button getNotSupportButton() {
            return notSupportButton;
        }

        public Button getSampleButton() {
            return sampleButton;
        }

        public Button getPeopleButton() {
            return peopleButton;
        }

        public Button getActivityButton() {
            return activityButton;
        }

        public Button getAppDataButton() {
            return appDataButton;
        }

        public Text getFilenameText() {
            return filenameText;
        }

        private void setEnabledForGenerateFiles() {
            sampleButton.setEnabled(true);
            if (sampleButton.getSelection()) {
                createJavaScriptFileButton.setEnabled(false);
                peopleButton.setEnabled(true);
                activityButton.setEnabled(true);
                appDataButton.setEnabled(true);
                filenameText.setEnabled(false);
            } else {
                createJavaScriptFileButton.setEnabled(true);
                boolean selection = createJavaScriptFileButton.getSelection();
                peopleButton.setEnabled(false);
                activityButton.setEnabled(false);
                appDataButton.setEnabled(false);
                filenameText.setEnabled(selection);
            }
        }

        private void setEnabledForType() {
            if (htmlButton.getSelection()) {
                setEnabledForGenerateFiles();
            } else {
                createJavaScriptFileButton.setEnabled(false);
                sampleButton.setEnabled(false);
                peopleButton.setEnabled(false);
                activityButton.setEnabled(false);
                appDataButton.setEnabled(false);
                filenameText.setEnabled(false);
            }
            hrefText.setEnabled(urlButton.getSelection());
        }

        private void createViewControls(Composite parent) {
            composite = new Composite(parent, SWT.NONE);
            GridLayout layout = new GridLayout();
            layout.numColumns = 1;
            composite.setLayout(layout);
            composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            htmlButton = createRadio(composite, "Type: HTML");
            htmlButton.addListener(SWT.Selection, modifyListener);
            Group htmlGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
            htmlGroup.setFont(parent.getFont());
            htmlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            layout = new GridLayout();
            layout.numColumns = 2;
            htmlGroup.setLayout(layout);
            htmlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            createJavaScriptFileButton = createCheckbox(htmlGroup,
                    "Create the external JavaScript file for this view.");
            GridData layoutData = new GridData();
            layoutData.horizontalSpan = 2;
            createJavaScriptFileButton.setLayoutData(layoutData);
            filenameText = createText(htmlGroup);
            layoutData = new GridData(GridData.FILL_HORIZONTAL);
            layoutData.horizontalIndent = 20;
            filenameText.setLayoutData(layoutData);
            filenameText.setText(viewName.name() + ".js");
            filenameText.addListener(SWT.Modify, modifyListener);
            createJavaScriptFileButton.addListener(SWT.Selection, modifyListener);
            createJavaScriptFileButton.addSelectionListener(new SelectionListener() {
                public void widgetDefaultSelected(SelectionEvent e) {
                }

                public void widgetSelected(SelectionEvent e) {
                    setEnabledForGenerateFiles();
                }
            });
            sampleButton = createCheckbox(htmlGroup, "Generate a set of sample code.");
            layoutData = new GridData();
            layoutData.horizontalSpan = 2;
            sampleButton.setLayoutData(layoutData);
            Group sampleGroup = new Group(htmlGroup, SWT.SHADOW_ETCHED_IN);
            sampleGroup.setFont(parent.getFont());
            layoutData = new GridData(GridData.FILL_HORIZONTAL);
            sampleGroup.setLayoutData(layoutData);
            layoutData.horizontalSpan = 2;
            sampleGroup.setLayout(new GridLayout());
            peopleButton = createCheckbox(sampleGroup, "Fetching a user's list of friends.");
            peopleButton.setSelection(true);
            activityButton = createCheckbox(sampleGroup, "Posting an activity.");
            appDataButton = createCheckbox(sampleGroup, "Sharing with friends.");
            sampleButton.addSelectionListener(new SelectionListener() {
                public void widgetDefaultSelected(SelectionEvent e) {
                }

                public void widgetSelected(SelectionEvent e) {
                    setEnabledForGenerateFiles();
                }

            });
            sampleButton.addListener(SWT.Selection, modifyListener);
            peopleButton.addListener(SWT.Selection, modifyListener);
            activityButton.addListener(SWT.Selection, modifyListener);
            appDataButton.addListener(SWT.Selection, modifyListener);

            urlButton = createRadio(composite, "Type: URL");
            urlButton.addListener(SWT.Selection, modifyListener);
            Group urlGroup = new Group(composite, SWT.SHADOW_ETCHED_IN);
            urlGroup.setFont(parent.getFont());
            urlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            layout = new GridLayout();
            layout.numColumns = 2;
            urlGroup.setLayout(layout);
            urlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
            createLabel(urlGroup, "Location URL:");
            hrefText = createText(urlGroup);
            hrefText.addListener(SWT.Modify, modifyListener);
            hrefText.setEnabled(false);
            notSupportButton = createRadio(composite, "Not supported");
            notSupportButton.addListener(SWT.Selection, modifyListener);
            SelectionListener selectionListener = new SelectionListener() {
                public void widgetDefaultSelected(SelectionEvent e) {
                }

                public void widgetSelected(SelectionEvent e) {
                    setEnabledForType();
                }
            };
            htmlButton.addSelectionListener(selectionListener);
            urlButton.addSelectionListener(selectionListener);
            notSupportButton.addSelectionListener(selectionListener);
            notSupportButton.setSelection(true);
            setEnabledForType();
        }

    }

}