/*******************************************************************************
* Copyright (c) 2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.editors.smooks;
import java.util.Collection;
import java.util.List;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.command.CommandParameter;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.jboss.tools.smooks.configuration.editors.AttributeFieldEditPart;
import org.jboss.tools.smooks.configuration.editors.ContainerChildrenTablePanelCreator;
import org.jboss.tools.smooks.configuration.editors.MultiContainerChildrenAddtionTablePanel;
import org.jboss.tools.smooks.configuration.editors.PropertyUICreator;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
import org.jboss.tools.smooks.model.smooks.ReaderType;
import org.jboss.tools.smooks.model.smooks.SmooksFactory;
import org.jboss.tools.smooks.model.smooks.SmooksPackage;
/**
* @author Dart Peng (dpeng@redhat.com) Date Apr 10, 2009
*/
public class ReaderTypeUICreator extends PropertyUICreator {
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.configuration.editors.IPropertyUICreator#
* createPropertyUI(org.eclipse.ui.forms.widgets.FormToolkit,
* org.eclipse.swt.widgets.Composite,
* org.eclipse.emf.edit.provider.IItemPropertyDescriptor, java.lang.Object,
* org.eclipse.emf.ecore.EAttribute)
*/
public AttributeFieldEditPart createPropertyUI(FormToolkit toolkit, Composite parent,
IItemPropertyDescriptor propertyDescriptor, Object model, EAttribute feature,
ISmooksModelProvider formEditor, IEditorPart part) {
return super.createPropertyUI(toolkit, parent, propertyDescriptor, model, feature, formEditor, part);
}
@Override
public boolean isJavaTypeFeature(EAttribute attribute) {
if (attribute == SmooksPackage.eINSTANCE.getReaderType_Class()) {
return true;
}
return super.isJavaTypeFeature(attribute);
}
@Override
public List<AttributeFieldEditPart> createExtendUIOnBottom(AdapterFactoryEditingDomain editingdomain,
FormToolkit toolkit, Composite parent, Object model, ISmooksModelProvider formEditor, IEditorPart editorPart) {
if (model instanceof ReaderType) {
createHandlerGroup(parent, (ReaderType) model, toolkit, formEditor, editorPart);
createFeaturesGroup(parent, (ReaderType) model, toolkit, formEditor, editorPart);
createParametersGroup(parent, (ReaderType) model, toolkit, formEditor, editorPart);
}
return super.createExtendUIOnBottom(editingdomain, toolkit, parent, model, formEditor, editorPart);
}
private void createParametersGroup(Composite parent, ReaderType reader, FormToolkit toolkit,
ISmooksModelProvider modelProvider, IEditorPart editorPart) {
Group group = new Group(parent, SWT.NONE);
group.setText(Messages.ReaderTypeUICreator_ParameterGroupLabel);
group.setBackground(ColorConstants.white);
FillLayout fl = new FillLayout();
group.setLayout(fl);
ContainerChildrenTablePanelCreator creator = new ContainerChildrenTablePanelCreator(modelProvider, reader,
toolkit, editorPart) {
@Override
protected EObject newContainerModel() {
return SmooksFactory.eINSTANCE.createParamsType();
}
@Override
protected EStructuralFeature getChildrenFeature() {
return SmooksPackage.Literals.PARAMS_TYPE__PARAM;
}
@Override
protected EObject newChildModel() {
return SmooksFactory.eINSTANCE.createParamType();
}
};
creator.setParentModel(reader.getParams());
creator.setContainerFeature(SmooksPackage.Literals.READER_TYPE__PARAMS);
creator.createChildrenTablePanel(group);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 180;
gd.horizontalSpan = 2;
group.setLayoutData(gd);
}
private void createFeaturesGroup(Composite parent, ReaderType reader, FormToolkit toolkit,
ISmooksModelProvider modelProvider, IEditorPart editorPart) {
Group group = new Group(parent, SWT.NONE);
group.setText(Messages.ReaderTypeUICreator_FeaturesGroupLabel);
group.setBackground(ColorConstants.white);
FillLayout fl = new FillLayout();
group.setLayout(fl);
final AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) modelProvider
.getEditingDomain();
final Shell shell = parent.getShell();
Object temp = SmooksFactory.eINSTANCE.createFeaturesType();
IEditingDomainItemProvider p = (IEditingDomainItemProvider) editingDomain.getAdapterFactory().adapt(temp,
IEditingDomainItemProvider.class);
final Collection<?> children = p.getNewChildDescriptors(temp, editingDomain, null);
MultiContainerChildrenAddtionTablePanel creator = new MultiContainerChildrenAddtionTablePanel(shell, children,
editingDomain, modelProvider, reader, toolkit, editorPart) {
@Override
protected EStructuralFeature getChildFeature(CommandParameter cp) {
return cp.getEStructuralFeature();
}
@Override
protected EObject getNewChildInstance(CommandParameter cp) {
Object feature = cp.getEStructuralFeature();
if (feature.equals(SmooksPackage.Literals.FEATURES_TYPE__SET_ON))
return SmooksFactory.eINSTANCE.createSetOnType();
if (feature.equals(SmooksPackage.Literals.FEATURES_TYPE__SET_OFF))
return SmooksFactory.eINSTANCE.createSetOffType();
return null;
}
@Override
protected EObject newContainerModel() {
return SmooksFactory.eINSTANCE.createFeaturesType();
}
};
creator.setParentModel(reader.getFeatures());
creator.setContainerFeature(SmooksPackage.Literals.READER_TYPE__FEATURES);
creator.createChildrenTablePanel(group);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 180;
gd.horizontalSpan = 2;
group.setLayoutData(gd);
}
private void createHandlerGroup(Composite parent, ReaderType reader, FormToolkit toolkit,
ISmooksModelProvider modelProvider, IEditorPart editorPart) {
Group group = new Group(parent, SWT.NONE);
group.setText(Messages.ReaderTypeUICreator_HandlersGroupLabel);
group.setBackground(ColorConstants.white);
FillLayout fl = new FillLayout();
group.setLayout(fl);
ContainerChildrenTablePanelCreator creator = new ContainerChildrenTablePanelCreator(modelProvider, reader,
toolkit, editorPart) {
@Override
protected EObject newContainerModel() {
return SmooksFactory.eINSTANCE.createHandlersType();
}
@Override
protected EStructuralFeature getChildrenFeature() {
return SmooksPackage.Literals.HANDLERS_TYPE__HANDLER;
}
@Override
protected EObject newChildModel() {
return SmooksFactory.eINSTANCE.createHandlerType();
}
};
creator.setParentModel(reader.getHandlers());
creator.setContainerFeature(SmooksPackage.Literals.READER_TYPE__HANDLERS);
creator.createChildrenTablePanel(group);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 180;
gd.horizontalSpan = 2;
group.setLayoutData(gd);
}
}