org.eclipse.jst.jsf.facesconfig.ui.page.ManagedBeanPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.facesconfig.ui.page.ManagedBeanPage.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2006 Sybase, Inc. and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.page;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
import org.eclipse.jst.jsf.facesconfig.emf.ManagedBeanType;
import org.eclipse.jst.jsf.facesconfig.emf.ManagedPropertyType;
import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor;
import org.eclipse.jst.jsf.facesconfig.ui.EditorMessages;
import org.eclipse.jst.jsf.facesconfig.ui.page.detail.ManagedBeanDetailsPage;
import org.eclipse.jst.jsf.facesconfig.ui.section.FacesConfigMasterSection;
import org.eclipse.jst.jsf.facesconfig.ui.section.ManagedBeanMasterSection;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IDetailsPage;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

/**
 * 
 * @author sfshi
 * 
 */
public class ManagedBeanPage extends FacesConfigMasterDetailPage {

    /**
     * The id of this page in the faces-config editor.
     */
    public static final String PAGE_ID = "org.eclipse.jst.jsf.facesconfig.ui.page.ManagedBeanPage"; //$NON-NLS-1$

    private IContentOutlinePage contentOutlinePage;

    /**
     * @param editor
     */
    public ManagedBeanPage(FacesConfigEditor editor) {
        super(editor, "ManagedBeanPage", //$NON-NLS-1$
                EditorMessages.FacesConfigEditor_ManagedBeans_TabName);
    }

    public void dispose() {
        if (contentOutlinePage != null) {
            contentOutlinePage.dispose();
            contentOutlinePage = null;
        }
        super.dispose();
    }

    protected FacesConfigMasterSection[] createMasterSections(Composite composite, IManagedForm managedForm,
            FormToolkit toolkit, FacesConfigMasterDetailPage page) {
        FacesConfigMasterSection managedBeanMaster = new ManagedBeanMasterSection(composite, managedForm, toolkit,
                page);
        managedBeanMaster.getSection().setExpanded(true);
        GridData gd = new GridData(GridData.FILL_BOTH);
        managedBeanMaster.getSection().setLayoutData(gd);
        return new FacesConfigMasterSection[] { managedBeanMaster };
    }

    public IDetailsPage getPage(Object key) {
        IDetailsPage detailsPage = null;
        if (key instanceof EClass) {
            EClass eClass = (EClass) key;
            if (eClass.getClassifierID() == FacesConfigPackage.MANAGED_BEAN_TYPE) {
                detailsPage = new ManagedBeanDetailsPage(this);
            }

            if (detailsPage instanceof ISelectionProvider) {
                ((ISelectionProvider) detailsPage).addSelectionChangedListener(this);
            }
        }
        return detailsPage;
    }

    public Object getAdapter(Class adapter) {

        if (adapter == IContentOutlinePage.class) {
            return getOutlinePage();
        }

        return super.getAdapter(adapter);
    }

    private IContentOutlinePage getOutlinePage() {

        if (contentOutlinePage == null) {
            // The content outline is just a tree.
            //
            class ManagedBeanContentOutlinePage extends ContentOutlinePage {
                public void createControl(Composite parent) {
                    super.createControl(parent);
                    TreeViewer contentOutlineViewer = getTreeViewer();
                    contentOutlineViewer.addSelectionChangedListener(this);

                    AdapterFactory adapterFactory = (AdapterFactory) getEditor().getAdapter(AdapterFactory.class);
                    // Set up the tree viewer.
                    contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
                    contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
                    contentOutlineViewer.addFilter(new ViewerFilter() {

                        public boolean select(Viewer viewer, Object parentElement, Object element) {
                            return FacesConfigPackage.eINSTANCE.getManagedBeanType().isInstance(element)
                                    || FacesConfigPackage.eINSTANCE.getManagedPropertyType().isInstance(element);
                        }
                    });

                    contentOutlineViewer.setSorter(new ViewerSorter());
                    contentOutlineViewer.setInput(getInput());
                }

            }

            contentOutlinePage = new ManagedBeanContentOutlinePage();

            // Listen to selection so that we can handle it is a special
            // way.
            //
            contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
                // This ensures that we handle selections correctly.
                public void selectionChanged(SelectionChangedEvent event) {
                    setSelection(event.getSelection());
                }
            });

            // this.addSelectionChangedListener((ContentOutlinePage)
            // contentOutlinePage);
        }

        return contentOutlinePage;

    }

    /**
     * handle the selection changed event from outline page.
     * 
     * @param selection
     */
    public void setSelection(ISelection selection) {

        if (selection instanceof IStructuredSelection) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            ManagedBeanType bean = null;
            if (ss.getFirstElement() instanceof ManagedBeanType) {
                bean = (ManagedBeanType) ss.getFirstElement();
            } else if (ss.getFirstElement() instanceof ManagedPropertyType) {
                bean = (ManagedBeanType) ((ManagedPropertyType) ss.getFirstElement()).eContainer();
            }

            if (bean != null) {
                if (!getManagedBeanMasterSection().getSection().isExpanded()) {
                    GridData gd = new GridData(GridData.FILL_BOTH);
                    getManagedBeanMasterSection().getSection().setLayoutData(gd);
                    getManagedBeanMasterSection().getSection().setExpanded(true);
                }
                IStructuredSelection newselection = new StructuredSelection(bean);
                getManagedBeanMasterSection().getStructuredViewer().setSelection(newselection);
            }
        }

    }

    private ManagedBeanMasterSection getManagedBeanMasterSection() {
        return (ManagedBeanMasterSection) getFacesConfigMasterSections()[0];
    }
}