/******************************************************************************* * Copyright (c) 2008 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.editor.propertySections; import java.util.Iterator; import java.util.List; import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.jboss.tools.smooks.SmooksModelUtils; import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel; import org.jboss.tools.smooks.graphical.editors.editparts.freemarker.FreemarkerCSVNodeEditPart; import org.jboss.tools.smooks.graphical.editors.model.freemarker.FreemarkerCSVNodeGraphicalModel; import org.jboss.tools.smooks.graphical.editors.model.freemarker.FreemarkerTemplateGraphicalModel; import org.jboss.tools.smooks.model.freemarker.Freemarker; import org.jboss.tools.smooks.model.smooks.ParamType; import org.jboss.tools.smooks.model.smooks.SmooksFactory; /** * @author Dart * */ public class CSVRecordSection extends AbstractSmooksPropertySection { private Text speratorText; private Text quoteText; private boolean fireEvent = true; /* * (non-Javadoc) * * @see * org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls * (org.eclipse.swt.widgets.Composite, * org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage) */ @Override public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) { super.createControls(parent, aTabbedPropertySheetPage); TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory(); Section section = createRootSection(factory, parent); section.setText(Messages.CSVRecordSection_Section_Title); Composite mainComposite = factory.createComposite(section); section.setClient(mainComposite); GridLayout gl = new GridLayout(); gl.numColumns = 2; mainComposite.setLayout(gl); factory.createLabel(mainComposite, Messages.CSVRecordSection_Label_Separator); speratorText = factory.createText(mainComposite, ""); //$NON-NLS-1$ speratorText.setTextLimit(1); GridData gd = new GridData(GridData.FILL_HORIZONTAL); speratorText.setLayoutData(gd); factory.createLabel(mainComposite, Messages.CSVRecordSection_Label_Quote); quoteText = factory.createText(mainComposite, ""); //$NON-NLS-1$ quoteText.setTextLimit(1); gd = new GridData(GridData.FILL_HORIZONTAL); quoteText.setLayoutData(gd); hookTextControls(); } private Freemarker getFreemarker() { Object graphModel = this.getPresentSelectedGraphModel(); if (graphModel instanceof AbstractSmooksGraphicalModel) { AbstractSmooksGraphicalModel templateGModel = (AbstractSmooksGraphicalModel) graphModel; while (templateGModel != null && !(templateGModel instanceof FreemarkerTemplateGraphicalModel)) { templateGModel = templateGModel.getParent(); } if (templateGModel != null) { Object freemarker = templateGModel.getData(); freemarker = AdapterFactoryEditingDomain.unwrap(freemarker); if (freemarker instanceof Freemarker) { return ((Freemarker) freemarker); } } } return null; } private FreemarkerCSVNodeEditPart getRecordCSVEditPart() { GraphicalEditPart editPart = getPresentSelectedEditPart(); List<?> children = editPart.getChildren(); for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) { Object childEditPart = (Object) iterator.next(); if (childEditPart instanceof FreemarkerCSVNodeEditPart) { return ((FreemarkerCSVNodeEditPart) childEditPart); } } return null; } private void generateNewTemplateContent() { FreemarkerCSVNodeEditPart editPart = getRecordCSVEditPart(); if (editPart != null) { Object data = editPart.getModel(); if (data instanceof FreemarkerCSVNodeGraphicalModel) { ((FreemarkerCSVNodeGraphicalModel) data).changeFreemarkerContents(); } } } private void hookTextControls() { speratorText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (fireEvent) { Freemarker freemarker = getFreemarker(); if (freemarker != null) { ParamType param = SmooksModelUtils.getParam(freemarker.getParam(), SmooksModelUtils.KEY_CSV_SEPERATOR); if (param == null){ param = SmooksFactory.eINSTANCE.createParamType(); param.setName(SmooksModelUtils.KEY_CSV_SEPERATOR); freemarker.getParam().add(param); } SmooksModelUtils.setTextToSmooksType(getSmooksModelProvider().getEditingDomain(), param, speratorText.getText()); generateNewTemplateContent(); } } } }); quoteText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (fireEvent) { Freemarker freemarker = getFreemarker(); if (freemarker != null) { ParamType param = SmooksModelUtils .getParam(freemarker.getParam(), SmooksModelUtils.KEY_CSV_QUOTE); if (param == null){ param = SmooksFactory.eINSTANCE.createParamType(); param.setName(SmooksModelUtils.KEY_CSV_QUOTE); freemarker.getParam().add(param); } SmooksModelUtils.setTextToSmooksType(getSmooksModelProvider().getEditingDomain(), param, quoteText.getText()); generateNewTemplateContent(); } } } }); } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.editor.propertySections.AbstractSmooksPropertySection * #refresh() */ @Override public void refresh() { fireEvent = false; super.refresh(); Freemarker freemarker = getFreemarker(); if (freemarker != null) { String quote = SmooksModelUtils.getParamValue(freemarker.getParam(), SmooksModelUtils.KEY_CSV_QUOTE); String sperator = SmooksModelUtils.getParamValue(freemarker.getParam(), SmooksModelUtils.KEY_CSV_SEPERATOR); if(quote == null) quote = ""; //$NON-NLS-1$ if(sperator == null) sperator = ""; //$NON-NLS-1$ speratorText.setText(sperator); quoteText.setText(quote); } fireEvent = true; } }