/******************************************************************************* * Copyright (c) 2004, 2005 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.detail; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jst.jsf.facesconfig.ui.page.FacesConfigMasterDetailPage; import org.eclipse.jst.jsf.facesconfig.ui.section.IFacesConfigSection; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.AbstractFormPart; import org.eclipse.ui.forms.IDetailsPage; import org.eclipse.ui.forms.IFormPart; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.widgets.FormToolkit; /** * The detail part of a page. It contains several IFacesConfigSection instances. * * @author sfshi * */ public abstract class FacesConfigDetailsPage extends AbstractFormPart implements IDetailsPage, ISelectionProvider, ISelectionChangedListener { private FacesConfigMasterDetailPage page; private IFacesConfigSection[] detailSections; private List selectionChangedListeners = new ArrayList(); /** * @param page */ public FacesConfigDetailsPage(FacesConfigMasterDetailPage page) { super(); this.page = page; } public void createContents(Composite parent) { GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; parent.setLayout(layout); parent.setLayoutData(new GridData(GridData.FILL_BOTH)); FormToolkit toolkit = getManagedForm().getToolkit(); Composite detailsContainer = toolkit.createComposite(parent); toolkit.paintBordersFor(detailsContainer); detailsContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout gl = new GridLayout(); gl.verticalSpacing = 0; gl.marginHeight = 0; detailsContainer.setLayout(gl); detailSections = createDetailSections(detailsContainer, getManagedForm(), toolkit, page); if (detailSections != null) { for (int i = 0, n = detailSections.length; i < n; i++) { detailSections[i].initialize(); if (detailSections[i] instanceof ISelectionProvider) { ((ISelectionProvider) detailSections[i]) .addSelectionChangedListener(this); } } } } /** * create the sub detail sections and set layout data for them. * * @param composite * @param managedForm * @param toolkit * @param page_ * @return the detail sections */ abstract protected IFacesConfigSection[] createDetailSections( Composite composite, IManagedForm managedForm, FormToolkit toolkit, FacesConfigMasterDetailPage page_); /** * */ public void selectionChanged(IFormPart part, ISelection selection) { Object selectedItem = ((StructuredSelection) selection) .getFirstElement(); if (detailSections != null) { for (int i = 0, n = detailSections.length; i < n; i++) { IFacesConfigSection aSection = detailSections[i]; aSection.setInput(selectedItem); } } } /** * @return the master/detail page for this page */ public FacesConfigMasterDetailPage getPage() { return page; } public void refresh() { super.refresh(); if (detailSections != null) { for (int i = 0, n = detailSections.length; i < n; i++) { detailSections[i].refresh(); } } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { for (Iterator listeners = selectionChangedListeners.iterator(); listeners .hasNext();) { ISelectionChangedListener listener = (ISelectionChangedListener) listeners .next(); listener.selectionChanged(new SelectionChangedEvent(this, event .getSelection())); } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) */ public void addSelectionChangedListener(ISelectionChangedListener listener) { selectionChangedListeners.add(listener); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection() */ public ISelection getSelection() { return StructuredSelection.EMPTY; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener) */ public void removeSelectionChangedListener( ISelectionChangedListener listener) { selectionChangedListeners.remove(listener); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection) */ public void setSelection(ISelection selection) { // no selection allowed } }