com.iw.plugins.spindle.wizards.migrate.DefinePagesComponentsPage.java Source code

Java tutorial

Introduction

Here is the source code for com.iw.plugins.spindle.wizards.migrate.DefinePagesComponentsPage.java

Source

/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Spindle, an Eclipse Plugin for Tapestry.
 *
 * The Initial Developer of the Original Code is
 * Intelligent Works Incorporated.
 * Portions created by the Initial Developer are Copyright (C) 2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 * 
 *  glongman@intelligentworks.com
 *
 * ***** END LICENSE BLOCK ***** */

package com.iw.plugins.spindle.wizards.migrate;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.resources.IStorage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
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.Control;
import org.eclipse.swt.widgets.Table;

import com.iw.plugins.spindle.TapestryImages;
import com.iw.plugins.spindle.model.TapestryComponentModel;
import com.iw.plugins.spindle.spec.XMLUtil;
import com.iw.plugins.spindle.ui.SectionWidget;
import com.iw.plugins.spindle.ui.TapestryStorageLabelProvider;
import com.iw.plugins.spindle.ui.migrate.MigrationContext;

/**
 * @author gwl
 * @version $Id$
 *
 * Copyright 2002, Intelligent Works Inc.
 * All Rights Reserved.
 */
public class DefinePagesComponentsPage extends WizardPage {

    MigrationContext context;
    TableViewer componentViewer;
    TableViewer pageViewer;
    Button toPageButton;
    Button fromPageButton;

    ArrayList componentList = new ArrayList();
    ArrayList pageList = new ArrayList();

    /**
     * Constructor for DefinePagesComponentsPage.
     * @param pageName
     */
    public DefinePagesComponentsPage(String pageName, MigrationContext context) {
        super(pageName);

        this.setImageDescriptor(ImageDescriptor.createFromURL(TapestryImages.getImageURL("applicationDialog.gif")));
        this.setDescription(
                "If listed, Spindle can't tell if those below are pages or components. You need to make the distinction.");

        this.context = context;

    }

    public boolean setUndefined(List possibles) {

        List actuals = new ArrayList();

        for (Iterator iter = possibles.iterator(); iter.hasNext();) {
            IStorage element = (IStorage) iter.next();

            if ("page".equals(element.getFullPath().getFileExtension())) {

                continue;
            }

            if (context.getMigratorFor(element) != null) {

                continue;
            }

            if (!context.isInScope(element)) {

                continue;

            }

            TapestryComponentModel model = (TapestryComponentModel) context.getModelManager()
                    .getReadOnlyModel(element);

            int DTDVersion = XMLUtil.getDTDVersion(model.getPublicId());

            if (DTDVersion < XMLUtil.DTD_1_3) {

                actuals.add(element);
            }
        }

        componentList.clear();
        componentList.addAll(actuals);
        pageList.clear();
        componentViewer.setInput(componentList);
        pageViewer.setInput(pageList);
        updateButtonsEnabled();

        return !actuals.isEmpty();

    }

    /**
     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite)
     */
    public void createControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.makeColumnsEqualWidth = true;
        container.setLayout(layout);
        GridData gd;
        Composite leftColumn = new Composite(container, SWT.NULL);
        gd = new GridData(GridData.FILL_BOTH);
        leftColumn.setLayoutData(gd);
        GridLayout leftLayout = new GridLayout();
        leftLayout.verticalSpacing = 10;
        leftLayout.marginWidth = 0;
        leftColumn.setLayout(leftLayout);
        Composite rightColumn = new Composite(container, SWT.NULL);
        gd = new GridData(GridData.FILL_BOTH);
        rightColumn.setLayoutData(gd);
        GridLayout rightLayout = new GridLayout();
        rightLayout.verticalSpacing = 10;
        rightLayout.marginWidth = 0;
        rightColumn.setLayout(rightLayout);
        ComponentSection allSection = new ComponentSection(".jwc Files");
        Control allSectionControl = allSection.createControl(leftColumn);
        gd = new GridData(GridData.FILL_BOTH);
        allSectionControl.setLayoutData(gd);
        PageSection pageSection = new PageSection("make into .page Files");
        Control pageSectionControl = pageSection.createControl(rightColumn);
        gd = new GridData(GridData.FILL_BOTH);
        pageSectionControl.setLayoutData(gd);
        toPageButton.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {

                handleChange(componentViewer, componentViewer.getSelection());
            }

            public void widgetDefaultSelected(SelectionEvent e) {
            }
        });
        fromPageButton.addSelectionListener(new SelectionListener() {

            public void widgetSelected(SelectionEvent e) {

                handleChange(pageViewer, pageViewer.getSelection());
            }

            public void widgetDefaultSelected(SelectionEvent e) {
            }
        });
        componentViewer.setContentProvider(new IStructuredContentProvider() {
            public Object[] getElements(Object inputElement) {
                return componentList.toArray();
            }

            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }
        });
        componentViewer.setLabelProvider(new TapestryStorageLabelProvider(true));
        componentViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateButtonsEnabled();
            }
        });
        componentViewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {

                IStructuredSelection selection = (IStructuredSelection) componentViewer.getSelection();
                if (!selection.isEmpty()) {
                    handleChange(componentViewer, selection.getFirstElement());
                }
            }
        });
        pageViewer.setContentProvider(new IStructuredContentProvider() {
            public Object[] getElements(Object inputElement) {
                return pageList.toArray();
            }

            public void dispose() {
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }
        });
        pageViewer.setLabelProvider(new TapestryStorageLabelProvider(true));
        pageViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateButtonsEnabled();
            }
        });
        pageViewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                IStructuredSelection selection = (IStructuredSelection) pageViewer.getSelection();
                if (!selection.isEmpty()) {
                    handleChange(pageViewer, selection.getFirstElement());
                }
            }
        });
        setControl(container);
    }

    private void updateButtonsEnabled() {

        toPageButton.setEnabled(!componentList.isEmpty() && !componentViewer.getSelection().isEmpty());
        fromPageButton.setEnabled(!pageList.isEmpty() && !pageViewer.getSelection().isEmpty());
    }

    private void handleChange(Viewer fromViewer, Object changeObject) {

        IStructuredSelection selection = null;
        if (changeObject instanceof ISelection) {

            selection = (IStructuredSelection) changeObject;
        } else {

            selection = new StructuredSelection(changeObject);
        }

        List fromList = null;
        List toList = null;
        TableViewer toViewer = null;
        if (fromViewer == componentViewer) {

            fromList = componentList;
            toList = pageList;
            toViewer = pageViewer;
        } else {

            fromList = pageList;
            toList = componentList;
            toViewer = componentViewer;
        }

        if (!selection.isEmpty()) {

            List selectedObjects = selection.toList();
            fromList.removeAll(selectedObjects);
            toList.addAll(selectedObjects);
            fromViewer.setInput(fromList);
            toViewer.setInput(toViewer);
            toViewer.getControl().setFocus();
            toViewer.setSelection(selection);
            updateButtonsEnabled();
        }
    }

    class ComponentSection extends SectionWidget {
        /**
        * Constructor for AllSection.
        */
        public ComponentSection(String headerText) {
            super();
            setDescriptionPainted(false);
            setHeaderText(headerText);
        }

        /**
               * @see com.iw.plugins.spindle.wizards.migrate.SectionWidget#createClient(Composite)
               */
        public Composite createClient(Composite parent) {
            Composite composite = new Composite(parent, SWT.NONE);
            GridData gd;
            GridLayout layout = new GridLayout();
            layout.marginHeight = 0;
            layout.marginWidth = 0;
            composite.setLayout(layout);
            gd = new GridData(GridData.FILL_BOTH);
            composite.setLayoutData(gd);
            Composite leftColumn = new Composite(composite, SWT.NULL);
            gd = new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_CENTER);
            leftColumn.setLayoutData(gd);
            GridLayout leftLayout = new GridLayout();
            leftLayout.verticalSpacing = 0;
            leftLayout.marginWidth = 0;
            leftColumn.setLayout(leftLayout);
            Table table = new Table(leftColumn, SWT.MULTI | SWT.BORDER);
            table.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
            componentViewer = new TableViewer(table);
            return composite;
        }

    }

    class PageSection extends SectionWidget {
        /**
        * Constructor for PageSection.
        */
        public PageSection(String headerText) {
            super();
            setDescriptionPainted(false);
            setHeaderText(headerText);
        }

        /**
               * @see com.iw.plugins.spindle.wizards.migrate.SectionWidget#createClient(Composite)
               */
        public Composite createClient(Composite parent) {
            Composite composite = new Composite(parent, SWT.NONE);
            GridData gd;
            GridLayout layout = new GridLayout();
            layout.marginHeight = 0;
            layout.marginWidth = 0;
            layout.numColumns = 2;
            composite.setLayout(layout);
            gd = new GridData(GridData.FILL_BOTH);
            composite.setLayoutData(gd);
            Composite leftColumn = new Composite(composite, SWT.NULL);
            gd = new GridData(GridData.FILL_VERTICAL | GridData.VERTICAL_ALIGN_CENTER);
            leftColumn.setLayoutData(gd);
            GridLayout leftLayout = new GridLayout();
            leftLayout.verticalSpacing = 0;
            leftLayout.marginWidth = 0;
            leftColumn.setLayout(leftLayout);
            Composite rightColumn = new Composite(composite, SWT.NULL);
            gd = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL);
            rightColumn.setLayoutData(gd);
            GridLayout rightLayout = new GridLayout();
            rightLayout.verticalSpacing = 0;
            rightLayout.marginWidth = 0;
            rightColumn.setLayout(rightLayout);
            Composite buttonContainer = new Composite(leftColumn, SWT.NULL);
            gd = new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_VERTICAL);
            buttonContainer.setLayoutData(gd);
            GridLayout buttonLayout = new GridLayout();
            buttonLayout.verticalSpacing = 5;
            buttonLayout.marginWidth = 0;
            buttonContainer.setLayout(buttonLayout);
            toPageButton = new Button(buttonContainer, SWT.BORDER);
            toPageButton.setText(">>");
            gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
            toPageButton.setLayoutData(gd);
            fromPageButton = new Button(buttonContainer, SWT.BORDER);
            fromPageButton.setText("<<");
            gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
            fromPageButton.setLayoutData(gd);
            Table table = new Table(rightColumn, SWT.MULTI | SWT.BORDER);
            table.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
            pageViewer = new TableViewer(table);
            return composite;
        }

    }

    public List getNewPages() {
        return pageList;
    }

}