/******************************************************************************* * 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.csv12; import java.util.Collection; import java.util.List; import org.eclipse.draw2d.ColorConstants; import org.eclipse.emf.ecore.EAttribute; 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.emf.edit.provider.IItemPropertySource; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.swt.widgets.Text; 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.IFieldMarker; import org.jboss.tools.smooks.configuration.editors.ModelMultiChildrenTabelPanelCreator; import org.jboss.tools.smooks.configuration.editors.PropertyUICreator; import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils; import org.jboss.tools.smooks.editor.ISmooksModelProvider; import org.jboss.tools.smooks.model.csv12.Binding; import org.jboss.tools.smooks.model.csv12.CSV12Reader; import org.jboss.tools.smooks.model.csv12.Csv12Package; import org.jboss.tools.smooks.model.csv12.MapBinding; import org.jboss.tools.smooks.model.smooks.SmooksPackage; /** * @author Dart Peng (dpeng@redhat.com) Date Apr 10, 2009 */ public class Csv12ReaderUICreator 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 List<AttributeFieldEditPart> createExtendUIOnTop(AdapterFactoryEditingDomain editingDomain, FormToolkit formToolkit, Composite detailsComposite, Object model, ISmooksModelProvider formEditor, IEditorPart editorPart) { createFiledsComposite(editingDomain, formToolkit, detailsComposite, model, formEditor); return super.createExtendUIOnTop(editingDomain, formToolkit, detailsComposite, model, formEditor, editorPart); } @Override public List<AttributeFieldEditPart> createExtendUIOnBottom(AdapterFactoryEditingDomain editingdomain, FormToolkit toolkit, Composite parent, Object model, ISmooksModelProvider formEditor, IEditorPart editorPart) { // createFiledsComposite(editingdomain, toolkit, parent, model, // formEditor); // createParametersGroup(parent, (CSV12Reader) model, toolkit, // formEditor, editorPart); return super.createExtendUIOnBottom(editingdomain, toolkit, parent, model, formEditor, editorPart); } @Override public boolean ignoreProperty(EAttribute feature) { if (feature.equals(Csv12Package.Literals.CSV12_READER__ENCODING)) { return true; } if (feature.equals(SmooksPackage.Literals.ABSTRACT_READER__TARGET_PROFILE)) { return true; } if (feature.equals(Csv12Package.Literals.CSV12_READER__FIELDS)) { return true; } if (feature.equals(Csv12Package.Literals.CSV12_READER__QUOTE)) { return true; } if (feature.equals(Csv12Package.Literals.CSV12_READER__SEPARATOR)) { return true; } if (feature.equals(Csv12Package.Literals.CSV12_READER__RECORD_ELEMENT_NAME)) { return true; } if (feature.equals(Csv12Package.Literals.CSV12_READER__ROOT_ELEMENT_NAME)) { return true; } return super.ignoreProperty(feature); } private void createParametersGroup(Composite parent, CSV12Reader reader, FormToolkit toolkit, ISmooksModelProvider modelProvider, IEditorPart editorPart) { Group group = new Group(parent, SWT.NONE); group.setText(org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_0); group.setBackground(ColorConstants.white); FillLayout fl = new FillLayout(); group.setLayout(fl); final AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) modelProvider .getEditingDomain(); final Shell shell = parent.getShell(); IEditingDomainItemProvider p = (IEditingDomainItemProvider) editingDomain.getAdapterFactory().adapt(reader, IEditingDomainItemProvider.class); final Collection<?> children = p.getNewChildDescriptors(reader, editingDomain, null); ModelMultiChildrenTabelPanelCreator creator = new ModelMultiChildrenTabelPanelCreator(shell, children, editingDomain, modelProvider, reader, toolkit, editorPart, new ReaderBindingLabelProvider()); creator.createChildrenTablePanel(group); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 180; gd.horizontalSpan = 2; group.setLayoutData(gd); } private void createFiledsComposite(AdapterFactoryEditingDomain editingdomain, FormToolkit toolkit, Composite parent, Object model, ISmooksModelProvider formEditor) { IItemPropertySource propertySource = (IItemPropertySource) editingdomain.getAdapterFactory().adapt(model, IItemPropertySource.class); final IItemPropertyDescriptor fieldsDescriptor = propertySource.getPropertyDescriptor(model, Csv12Package.Literals.CSV12_READER__FIELDS); String fields = (String) SmooksUIUtils.getEditValue(fieldsDescriptor, model); final AttributeFieldEditPart fieldsEditPart = SmooksUIUtils.createStringFieldEditor( org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_Fields, parent, editingdomain, toolkit, fieldsDescriptor, model, false, false, false, null, 0, null, SmooksUIUtils.VALUE_TYPE_VALUE, null, false); Text text = (Text) fieldsEditPart.getContentControl(); text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent arg0) { updateFieldsMessage(((Text) arg0.getSource()).getText(), fieldsEditPart); } }); updateFieldsMessage(fields, fieldsEditPart); final IItemPropertyDescriptor descriptor = propertySource.getPropertyDescriptor(model, Csv12Package.Literals.CSV12_READER__SEPARATOR); final AttributeFieldEditPart separatorEditPart = SmooksUIUtils.createStringFieldEditor( org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_Separator_Char, parent, editingdomain, toolkit, descriptor, model, false, false, false, null, 0, null, SmooksUIUtils.VALUE_TYPE_VALUE, null, false); Text separateText = (Text) separatorEditPart.getContentControl(); separateText.setTextLimit(1); final IItemPropertyDescriptor quotedescriptor = propertySource.getPropertyDescriptor(model, Csv12Package.Literals.CSV12_READER__QUOTE); final AttributeFieldEditPart quoteEditPart = SmooksUIUtils.createStringFieldEditor( org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_Quote_Char, parent, editingdomain, toolkit, quotedescriptor, model, false, false, false, null, 0, null, SmooksUIUtils.VALUE_TYPE_VALUE, null, false); Text quoteText = (Text) quoteEditPart.getContentControl(); quoteText.setTextLimit(1); final IItemPropertyDescriptor recorddescriptor = propertySource.getPropertyDescriptor(model, Csv12Package.Literals.CSV12_READER__RECORD_ELEMENT_NAME); final AttributeFieldEditPart recordEditPart = SmooksUIUtils.createStringFieldEditor( org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_Record_Name, parent, editingdomain, toolkit, recorddescriptor, model, false, false, false, null, 0, null, SmooksUIUtils.VALUE_TYPE_VALUE, null, false); final IItemPropertyDescriptor rootdescriptor = propertySource.getPropertyDescriptor(model, Csv12Package.Literals.CSV12_READER__ROOT_ELEMENT_NAME); final AttributeFieldEditPart rootEditPart = SmooksUIUtils.createStringFieldEditor( org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_Root_Name, parent, editingdomain, toolkit, rootdescriptor, model, false, false, false, null, 0, null, SmooksUIUtils.VALUE_TYPE_VALUE, null, false); } protected void updateFieldsMessage(String fields, AttributeFieldEditPart editPart) { editPart.getFieldMarker().clean(); String error = null; if (fields == null) { error = ""; //$NON-NLS-1$ } else { fields = fields.trim(); if ("".equals(fields)) { //$NON-NLS-1$ error = ""; //$NON-NLS-1$ } else { char[] chars = fields.toCharArray(); for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == ',') { continue; } if (Character.isLetterOrDigit(c)) { } else { error = "" + c //$NON-NLS-1$ + ""; //$NON-NLS-1$ break; } } String[] fieldsArray = fields.split(","); //$NON-NLS-1$ if (fieldsArray.length == 0) { error = ""; //$NON-NLS-1$ } for (int i = 0; i < fieldsArray.length; i++) { String f = fieldsArray[i]; if (f == null || "".equals(f.trim())) { //$NON-NLS-1$ error = ""; //$NON-NLS-1$ break; } } } } if (error != null) { editPart.getFieldMarker().setMarkerType(IFieldMarker.TYPE_ERROR); editPart.getFieldMarker().setMessage(error); } } /** * newChildDescriptors.add (createChildParameter * (Csv12Package.Literals.CSV12_READER__SINGLE_BINDING, * Csv12Factory.eINSTANCE.createBinding())); * * newChildDescriptors.add (createChildParameter * (Csv12Package.Literals.CSV12_READER__SINGLE_BINDING, * Csv12Factory.eINSTANCE.createMapBinding())); * * newChildDescriptors.add (createChildParameter * (Csv12Package.Literals.CSV12_READER__LIST_BINDING, * Csv12Factory.eINSTANCE.createBinding())); * * newChildDescriptors.add (createChildParameter * (Csv12Package.Literals.CSV12_READER__LIST_BINDING, * Csv12Factory.eINSTANCE.createMapBinding())); * * newChildDescriptors.add (createChildParameter * (Csv12Package.Literals.CSV12_READER__MAP_BINDING, * Csv12Factory.eINSTANCE.createMapBinding())); * * @author Dart * */ private class ReaderBindingLabelProvider extends LabelProvider { /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element instanceof CommandParameter) { Object v = ((CommandParameter) element).getValue(); v = AdapterFactoryEditingDomain.unwrap(v); EStructuralFeature feature = ((CommandParameter) element).getEStructuralFeature(); if (v instanceof MapBinding) { if (feature == Csv12Package.Literals.CSV12_READER__MAP_BINDING) { return org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_MapBinding; } if (feature == Csv12Package.Literals.CSV12_READER__SINGLE_BINDING) { return org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_SingleMapBinding; } if (feature == Csv12Package.Literals.CSV12_READER__LIST_BINDING) { return org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_ListMapBinding; } } if (v instanceof Binding) { if (feature == Csv12Package.Literals.CSV12_READER__SINGLE_BINDING) { return org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_SingleBinding; } if (feature == Csv12Package.Literals.CSV12_READER__LIST_BINDING) { return org.jboss.tools.smooks.configuration.editors.csv12.Messages.Csv12ReaderUICreator_ListBinding; } } } return super.getText(element); } } }