blob: a1179bc79a90f8e4dae64bb2344ade6b45eb01b6 [file] [log] [blame]
/*******************************************************************************
* 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.section;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jst.jsf.facesconfig.emf.ApplicationType;
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType;
import org.eclipse.jst.jsf.facesconfig.emf.FactoryType;
import org.eclipse.jst.jsf.facesconfig.emf.LifecycleType;
import org.eclipse.jst.jsf.facesconfig.ui.EditorMessages;
import org.eclipse.jst.jsf.facesconfig.ui.page.IFacesConfigPage;
import org.eclipse.jst.jsf.facesconfig.ui.page.OthersPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* @author sfshi
*
*/
public class OverviewOthersSection extends AbstractOverviewSection {
private static final int COLUMN_WITH = 100;
private OverviewOthersSectionAdapter overviewOthersSectionAdapter;
/**
*
* @param parent
* @param managedForm
* @param page
* @param toolkit
*/
public OverviewOthersSection(Composite parent, IManagedForm managedForm,
IFacesConfigPage page, FormToolkit toolkit) {
super(parent, managedForm, page, toolkit, OthersPage.PAGE_ID,
EditorMessages.OverviewPage_OthersSection_name,
EditorMessages.OverviewPage_OthersSection_description,
null, null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.section.AbstractOverviewSection#configTableViewer(org.eclipse.jface.viewers.TableViewer)
*/
protected void configTableViewer(TableViewer tableViewer1) {
tableViewer1.setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
List othersNodesList = (List) inputElement;
return othersNodesList.toArray();
}
public void dispose() {
// do nothing
}
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
// do nothing
}
});
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.section.AbstractOverviewSection#createTable(org.eclipse.swt.widgets.Composite)
*/
protected Table createTable(Composite container) {
Table table = new Table(container, SWT.H_SCROLL | SWT.V_SCROLL
| SWT.FULL_SELECTION | SWT.BORDER);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 1;
gd.heightHint = 100;
table.setLayoutData(gd);
table.setLinesVisible(true);
table.setHeaderVisible(true);
TableLayout tablelayout = new TableLayout();
table.setLayout(tablelayout);
TableColumn valuecol = new TableColumn(table, SWT.NONE);
tablelayout.addColumnData(new ColumnWeightData(1, COLUMN_WITH, true));
valuecol
.setText(EditorMessages.OverviewPage_OthersSection_table_valuecol);
valuecol.setResizable(true);
TableColumn typecol = new TableColumn(table, SWT.NONE);
tablelayout.addColumnData(new ColumnWeightData(1, COLUMN_WITH, true));
typecol
.setText(EditorMessages.OverviewPage_OthersSection_table_typecol);
typecol.setResizable(true);
return table;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.section.AbstractOverviewSection#refreshAll()
*/
public void refreshAll() {
if(getSection() == null || getSection().isDisposed()) {
return;
}
List othersNodesList = new ArrayList();
if (getInput() instanceof FacesConfigType) {
Object[] applicationNodes = null;
Object[] factoryNodes = null;
Object[] lifecycleNodes = null;
FacesConfigType facesConfig = (FacesConfigType) getInput();
IStructuredContentProvider contentProvider = new AdapterFactoryContentProvider(
getAdapterFactory());
if (facesConfig.getApplication().size() > 0) {
ApplicationType application = (ApplicationType) facesConfig
.getApplication().get(0);
applicationNodes = contentProvider.getElements(application);
}
if (facesConfig.getFactory().size() > 0) {
FactoryType factory = (FactoryType) facesConfig.getFactory()
.get(0);
factoryNodes = contentProvider.getElements(factory);
}
if (facesConfig.getLifecycle().size() > 0) {
LifecycleType lifecycle = (LifecycleType) facesConfig
.getLifecycle().get(0);
lifecycleNodes = contentProvider.getElements(lifecycle);
}
if (applicationNodes != null) {
for (int i = 0, n = applicationNodes.length; i < n; i++) {
othersNodesList.add(applicationNodes[i]);
}
}
if (factoryNodes != null) {
for (int i = 0, n = factoryNodes.length; i < n; i++) {
othersNodesList.add(factoryNodes[i]);
}
}
if (lifecycleNodes != null) {
for (int i = 0, n = lifecycleNodes.length; i < n; i++) {
othersNodesList.add(lifecycleNodes[i]);
}
}
}
tableViewer.setInput(othersNodesList);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.section.AbstractFacesConfigSection#addAdaptersOntoInput(java.lang.Object)
*/
protected void addAdaptersOntoInput(Object newInput) {
FacesConfigType facesConfig = (FacesConfigType) newInput;
addOverviewOthersSectionAdapter(facesConfig);
IStructuredContentProvider contentProvider = new AdapterFactoryContentProvider(
getAdapterFactory());
if (facesConfig.getApplication().size() > 0) {
ApplicationType application = (ApplicationType) facesConfig
.getApplication().get(0);
addOverviewOthersSectionAdapter(application);
Object[] applicationNodes = contentProvider
.getElements(application);
for (int i = 0, n = applicationNodes.length; i < n; i++) {
addOverviewOthersSectionAdapter((EObject) applicationNodes[i]);
}
}
if (facesConfig.getFactory().size() > 0) {
FactoryType factory = (FactoryType) facesConfig.getFactory().get(0);
addOverviewOthersSectionAdapter(factory);
Object[] factoryNodes = contentProvider.getElements(factory);
for (int i = 0, n = factoryNodes.length; i < n; i++) {
addOverviewOthersSectionAdapter((EObject) factoryNodes[i]);
}
}
if (facesConfig.getLifecycle().size() > 0) {
LifecycleType lifecycle = (LifecycleType) facesConfig
.getLifecycle().get(0);
addOverviewOthersSectionAdapter(lifecycle);
Object[] lifecycleNodes = contentProvider.getElements(lifecycle);
for (int i = 0, n = lifecycleNodes.length; i < n; i++) {
addOverviewOthersSectionAdapter((EObject) lifecycleNodes[i]);
}
}
}
private void addOverviewOthersSectionAdapter(EObject object) {
if (EcoreUtil.getExistingAdapter(object, OverviewOthersSection.class) == null) {
object.eAdapters().add(getOverviewOthersSectionAdapter());
}
}
private void removeOverviewOthersSectionAdapter(EObject object) {
if (EcoreUtil.getExistingAdapter(object, OverviewOthersSection.class) != null) {
object.eAdapters().remove(getOverviewOthersSectionAdapter());
}
}
private OverviewOthersSectionAdapter getOverviewOthersSectionAdapter() {
if (overviewOthersSectionAdapter == null) {
overviewOthersSectionAdapter = new OverviewOthersSectionAdapter();
}
return overviewOthersSectionAdapter;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.jsf.facesconfig.ui.section.AbstractFacesConfigSection#removeAdaptersFromInput(java.lang.Object)
*/
protected void removeAdaptersFromInput(Object oldInput) {
FacesConfigType facesConfig = (FacesConfigType) oldInput;
removeOverviewOthersSectionAdapter(facesConfig);
IStructuredContentProvider contentProvider = new AdapterFactoryContentProvider(
getAdapterFactory());
if (facesConfig.getApplication().size() > 0) {
ApplicationType application = (ApplicationType) facesConfig
.getApplication().get(0);
removeOverviewOthersSectionAdapter(application);
Object[] applicationNodes = contentProvider
.getElements(application);
for (int i = 0, n = applicationNodes.length; i < n; i++) {
removeOverviewOthersSectionAdapter((EObject) applicationNodes[i]);
}
}
if (facesConfig.getFactory().size() > 0) {
FactoryType factory = (FactoryType) facesConfig.getFactory().get(0);
removeOverviewOthersSectionAdapter(factory);
Object[] factoryNodes = contentProvider.getElements(factory);
for (int i = 0, n = factoryNodes.length; i < n; i++) {
removeOverviewOthersSectionAdapter((EObject) factoryNodes[i]);
}
}
if (facesConfig.getLifecycle().size() > 0) {
LifecycleType lifecycle = (LifecycleType) facesConfig
.getLifecycle().get(0);
removeOverviewOthersSectionAdapter(lifecycle);
Object[] lifecycleNodes = contentProvider.getElements(lifecycle);
for (int i = 0, n = lifecycleNodes.length; i < n; i++) {
removeOverviewOthersSectionAdapter((EObject) lifecycleNodes[i]);
}
}
}
class OverviewOthersSectionAdapter extends AdapterImpl {
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
*/
public boolean isAdapterForType(Object type) {
if (type == OverviewOthersSection.class)
return true;
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification)
*/
public void notifyChanged(Notification msg) {
if (msg.getFeature() == FacesConfigPackage.eINSTANCE
.getFacesConfigType_Application()
|| msg.getFeature() == FacesConfigPackage.eINSTANCE
.getFacesConfigType_Factory()
|| msg.getFeature() == FacesConfigPackage.eINSTANCE
.getFacesConfigType_Lifecycle()
|| msg.getNotifier() instanceof ApplicationType
|| msg.getNotifier() instanceof FactoryType
|| msg.getNotifier() instanceof LifecycleType) {
if (msg.getEventType() == Notification.ADD) {
EObject newObject = (EObject) msg.getNewValue();
if (newObject != null) {
addOverviewOthersSectionAdapter(newObject);
}
}
if (msg.getEventType() == Notification.ADD
|| msg.getEventType() == Notification.REMOVE
|| msg.getEventType() == Notification.SET) {
if (Thread.currentThread() == PlatformUI.getWorkbench().getDisplay().getThread()) {
refreshAll();
} else {
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
refreshAll();
}
});
}
}
}
}
}
}