/******************************************************************************* * 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.graphical.editors.model.freemarker; import java.util.Iterator; import java.util.List; import org.eclipse.emf.edit.domain.IEditingDomainProvider; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.jboss.tools.smooks.SmooksModelUtils; import org.jboss.tools.smooks.configuration.editors.IXMLStructuredObject; import org.jboss.tools.smooks.configuration.editors.xml.AbstractXMLObject; import org.jboss.tools.smooks.configuration.editors.xml.TagObject; import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel; import org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection; import org.jboss.tools.smooks.gef.tree.model.TreeNodeModel; import org.jboss.tools.smooks.graphical.editors.model.javamapping.JavaBeanGraphModel; import org.jboss.tools.smooks.model.freemarker.Freemarker; import org.jboss.tools.smooks.model.smooks.ParamType; import org.jboss.tools.smooks.model.smooks.SmooksFactory; import org.w3c.dom.Element; /** * @author Dart * */ public class FreemarkerCSVNodeGraphicalModel extends FreemarkerTemplateNodeGraphicalModel { public FreemarkerCSVNodeGraphicalModel(Object data, ITreeContentProvider contentProvider, ILabelProvider labelProvider, IEditingDomainProvider domainProvider) { super(data, contentProvider, labelProvider, domainProvider); // TODO Auto-generated constructor stub } /* * (non-Javadoc) * * @see org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#hasChildren() */ @Override public boolean hasChildren() { CSVNodeModel node = (CSVNodeModel) getData(); if (node.isRecord()) return true; return false; } protected void resetFieldsList() { AbstractSmooksGraphicalModel record = this; CSVNodeModel model = (CSVNodeModel) record.getData(); while (!model.isRecord()) { record = record.getParent(); model = (CSVNodeModel) record.getData(); } List<AbstractSmooksGraphicalModel> children = record.getChildrenWithoutDynamic(); String fieldsString = ""; //$NON-NLS-1$ for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) { AbstractSmooksGraphicalModel ixmlStructuredObject = (AbstractSmooksGraphicalModel) iterator.next(); fieldsString += ((IXMLStructuredObject) ixmlStructuredObject.getData()).getNodeName() + ","; //$NON-NLS-1$ } if (fieldsString.length() > 1) { fieldsString = fieldsString.substring(0, fieldsString.length() - 1); } AbstractSmooksGraphicalModel parent = this; while (parent != null && !(parent instanceof FreemarkerTemplateGraphicalModel)) { parent = parent.getParent(); } Freemarker freemarker = (Freemarker) parent.getData(); if (freemarker != null) { ParamType param = SmooksModelUtils.getParam(freemarker.getParam(), SmooksModelUtils.KEY_CSV_FIELDS); if (param == null) { param = SmooksFactory.eINSTANCE.createParamType(); param.setName(SmooksModelUtils.KEY_CSV_FIELDS); freemarker.getParam().add(param); } if (param != null) { SmooksModelUtils.setTextToSmooksType(this.domainProvider.getEditingDomain(), param, fieldsString); // changeFreemarkerContents(); } } } /** * * @param name */ public void setName(String name) { AbstractXMLObject node = (AbstractXMLObject) getData(); String oldName = node.getName(); if (!oldName.equals(name)) { node.setName(name); fireVisualChanged(); resetFieldsList(); } } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel#removeChild * (org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel) */ @Override public void removeChild(AbstractSmooksGraphicalModel node) { super.removeChild(node); Object data = this.getData(); if (data instanceof TagObject) { Object child = node.getData(); if (child instanceof TagObject) { ((TagObject) data).removeChildTag((TagObject) child); } } resetFieldsList(); } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel#addChild * (org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel) */ @Override public void addChild(AbstractSmooksGraphicalModel node) { super.addChild(node); Object data = this.getData(); if (data instanceof TagObject) { Object child = node.getData(); if (child instanceof TagObject) { Element element = ((TagObject) child).getReferenceElement(); Element parent = ((TagObject) data).getReferenceElement(); if (element == null) { element = parent.getOwnerDocument().createElement(((TagObject) child).getName()); ((TagObject) child).setReferenceElement(element); } ((TagObject) data).addChildTag((TagObject) child); } } resetFieldsList(); } protected JavaBeanGraphModel getCollectionRootBeanModel() { return null; } protected boolean isCollectionConnection(TreeNodeConnection connection) { Object data = this.getData(); if (data instanceof CSVNodeModel) { if (((CSVNodeModel) data).isRecord()) { return true; } } return false; } protected boolean isMappingValueConnection(TreeNodeConnection connection) { Object data = this.getData(); if (data instanceof CSVNodeModel) { if (!((CSVNodeModel) data).isRecord()) { return true; } } return false; } /* * (non-Javadoc) * * @see * org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#createChildModel( * java.lang.Object, org.eclipse.jface.viewers.ITreeContentProvider, * org.eclipse.jface.viewers.ILabelProvider) */ @Override protected TreeNodeModel createChildModel(Object model, ITreeContentProvider contentProvider, ILabelProvider labelProvider) { return new FreemarkerCSVNodeGraphicalModel(model, contentProvider, labelProvider, this.domainProvider); } }