blob: 50e529cea414be8e2ce234469347f0cb1ad71da6 [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 org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigFactory;
import org.eclipse.jst.jsf.facesconfig.emf.LifecycleType;
import org.eclipse.jst.jsf.facesconfig.ui.dialog.DialogUtil;
import org.eclipse.jst.jsf.facesconfig.ui.page.IFacesConfigPage;
import org.eclipse.jst.jsf.facesconfig.ui.page.OthersPage;
import org.eclipse.jst.jsf.facesconfig.ui.util.ModelUtil;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* @author Zhi-peng Zhang
* @version
*/
public class LifecycleSection extends OthersPageBaseSection {
/**
* The Eclass object this Section operated. Since lifecycle only has one
* type child: phase-listener, so this object should always equals
* <code>FacesConfigPackage.eINSTANCE
.getPhaseListenerType()</code>.
*/
private EClass lifecycleChildClass;
/**
*
* @param lifecycleChildClass
* @param parent
* @param managedForm
* @param page
* @param toolkit
* @param helpContextId
* @param helpTooltip
*/
public LifecycleSection(EClass lifecycleChildClass, Composite parent,
IManagedForm managedForm, IFacesConfigPage page,
FormToolkit toolkit, String helpContextId, String helpTooltip) {
super(parent, managedForm, page, toolkit, helpContextId, helpTooltip);
this.lifecycleChildClass = lifecycleChildClass;
}
/**
*
* @param lifecycleChildClass
* @param parent
* @param managedForm
* @param page
* @param toolkit
*/
public LifecycleSection(EClass lifecycleChildClass, Composite parent,
IManagedForm managedForm, IFacesConfigPage page, FormToolkit toolkit) {
this(lifecycleChildClass, parent, managedForm, page, toolkit, null,
null);
}
/**
* @return the lifecycle child
*/
public EObject createLifecycleChildObject() {
String superType = ModelUtil.getSuperType(lifecycleChildClass);
IProject project = (IProject) this.getPage().getEditor().getAdapter(
IProject.class);
String result = DialogUtil.openClassDialog(getSection().getShell(),
project, superType,
IJavaElementSearchConstants.CONSIDER_ALL_TYPES);
if (result != null) {
EObject component = FacesConfigFactory.eINSTANCE
.create(lifecycleChildClass);
EStructuralFeature feature = lifecycleChildClass
.getEStructuralFeatures().get(0);
component.eSet(feature, result);
return component;
}
return null;
}
/**
* Set the <lifecycle> element as the structuredViewer's input.
*
* @param input
*/
protected void setViewerInput(Object input) {
if (input instanceof LifecycleType) {
tableViewer.setInput(input);
} else
tableViewer.setInput(null);
}
/**
* Add a filter on the table viewer. Only the elements that is a instance of
* <code>lifecycleChildClass</code> could be selected.
*/
protected void configTableViewer(TableViewer tableViewer1) {
tableViewer1.addFilter(new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement,
Object element) {
return lifecycleChildClass.isInstance(element);
}
});
}
/**
* Perform some actions to create new child object and append it to the
* <lifecycle> element.
*/
void addButtonSelected(SelectionEvent e) {
EObject obj = createLifecycleChildObject();
if (obj != null) {
boolean needRefreshAll = false;
Command command = null;
if (getInput() instanceof LifecycleType) {
LifecycleType lifeCycle = (LifecycleType) getInput();
command = AddCommand.create(getEditingDomain(), lifeCycle,
null, obj);
} else {
needRefreshAll = true;
LifecycleType lifeCycle = FacesConfigFactory.eINSTANCE
.createLifecycleType();
lifeCycle.getPhaseListener().add(obj);
command = AddCommand.create(getEditingDomain(), this.getPage()
.getInput(), null, lifeCycle);
}
if (command.canExecute()) {
getEditingDomain().getCommandStack().execute(command);
if (needRefreshAll)
((OthersPage) this.getPage()).resetLifecycleInput();
}
}
}
}