/*******************************************************************************
* 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.template;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.gef.EditPartFactory;
import org.jboss.tools.smooks.SmooksModelUtils;
import org.jboss.tools.smooks.editor.ISmooksModelProvider;
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection;
import org.jboss.tools.smooks.graphical.editors.Messages;
import org.jboss.tools.smooks.graphical.editors.autolayout.IAutoLayout;
import org.jboss.tools.smooks.graphical.editors.editparts.freemarker.FreemarkerAutoLayout;
import org.jboss.tools.smooks.graphical.editors.model.freemarker.FreemarkerActionCreator;
import org.jboss.tools.smooks.graphical.editors.process.TaskType;
import org.jboss.tools.smooks.model.freemarker.Freemarker;
import org.jboss.tools.smooks.model.smooks.ParamType;
/**
* @author Dart
*
*/
public class SmooksFreemarkerCSVTemplateGraphicalEditor extends SmooksFreemarkerTemplateGraphicalEditor {
public static final String ID = "__smooks_freemarker_csv_template_graphical_editpart"; //$NON-NLS-1$
private IAutoLayout autoLayout = null;
public SmooksFreemarkerCSVTemplateGraphicalEditor(ISmooksModelProvider provider) {
super(provider);
// TODO Auto-generated constructor stub
}
protected void autoLayoutWhenCommandChange(Command command) {
Collection<?> affectedObjects = command.getAffectedObjects();
for (Iterator<?> iterator2 = affectedObjects.iterator(); iterator2.hasNext();) {
Object object = (Object) iterator2.next();
if (object instanceof ParamType) {
Object parent = ((ParamType) object).eContainer();
if (SmooksModelUtils.KEY_CSV_FIELDS.equals(((ParamType) object).getName())) {
if (parent instanceof Freemarker) {
TaskType task = this.getTaskType();
if (task != null && task.inTheTask((Freemarker)parent)) {
autoLayout(true);
break;
}
}
}
}
}
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart#
* createEdtiPartFactory()
*/
@Override
protected EditPartFactory createEdtiPartFactory() {
return super.createEdtiPartFactory();
}
/* (non-Javadoc)
* @see org.jboss.tools.smooks.graphical.editors.SmooksFreemarkerTemplateGraphicalEditor#validateTemplate(java.lang.String, org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel)
*/
@Override
protected void validateTemplate(String type, AbstractSmooksGraphicalModel templateGraphModel) {
if (SmooksModelUtils.FREEMARKER_TEMPLATE_TYPE_CSV.equals(type)) {
validateCSVTemplate(templateGraphModel);
}
// super.validateTemplate(type, templateGraphModel);
}
protected void validateCSVTemplate(AbstractSmooksGraphicalModel templateGraphModel) {
int s = AbstractSmooksGraphicalModel.NONE;
Object data = templateGraphModel.getData();
data = AdapterFactoryEditingDomain.unwrap(data);
char seperator = SmooksModelUtils.getFreemarkerCSVSeperator((Freemarker) data);
if (seperator == 0) {
templateGraphModel.getMessage().add(Messages.SmooksFreemarkerTemplateGraphicalEditor_Warning_Separator_Empty);
s = AbstractSmooksGraphicalModel.WARNING;
}
char quote = SmooksModelUtils.getFreemarkerCSVQuote((Freemarker) data);
if (quote == 0) {
templateGraphModel.getMessage().add(Messages.SmooksFreemarkerTemplateGraphicalEditor_Warning_Quote_Empty);
s = AbstractSmooksGraphicalModel.WARNING;
}
String[] fields = SmooksModelUtils.getFreemarkerCSVFileds((Freemarker) data);
boolean missFields = false;
if (fields == null) {
missFields = true;
}
if (s != AbstractSmooksGraphicalModel.NONE) {
templateGraphModel.setSeverity(s);
}
List<AbstractSmooksGraphicalModel> csvRecordNode = templateGraphModel.getChildren();
for (Iterator<?> iterator = csvRecordNode.iterator(); iterator.hasNext();) {
AbstractSmooksGraphicalModel csvRecordGraphModel = (AbstractSmooksGraphicalModel) iterator.next();
if (missFields) {
csvRecordGraphModel.getMessage().add(Messages.SmooksFreemarkerTemplateGraphicalEditor_Warning_CSV_Fields_Empty);
csvRecordGraphModel.setSeverity(AbstractSmooksGraphicalModel.WARNING);
}
List<TreeNodeConnection> collectionConnections = csvRecordGraphModel.getTargetConnections();
if (collectionConnections.isEmpty()) {
csvRecordGraphModel.addMessage(Messages.SmooksFreemarkerTemplateGraphicalEditor_Warning_Must_Link_to_Collection);
csvRecordGraphModel.setSeverity(AbstractSmooksGraphicalModel.WARNING);
List<AbstractSmooksGraphicalModel> csvFields = csvRecordGraphModel.getChildren();
for (Iterator<?> iterator2 = csvFields.iterator(); iterator2.hasNext();) {
AbstractSmooksGraphicalModel csvFieldsGModel = (AbstractSmooksGraphicalModel) iterator2.next();
csvFieldsGModel
.addMessage(Messages.SmooksFreemarkerTemplateGraphicalEditor_Warning_Must_Link_CSV_Record);
csvFieldsGModel.setSeverity(AbstractSmooksGraphicalModel.ERROR);
}
}
}
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart#
* getAutoLayout()
*/
@Override
public IAutoLayout getAutoLayout() {
if (autoLayout == null) {
autoLayout = new FreemarkerAutoLayout();
}
return autoLayout;
}
/*
* (non-Javadoc)
*
* @seeorg.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart#
* createActions()
*/
@Override
protected void createActions() {
super.createActions();
FreemarkerActionCreator creator = new FreemarkerActionCreator();
creator.registActions(getActionRegistry(), getSelectionActions(), this, this.smooksModelProvider);
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.graphical.editors.SmooksGraphicalEditorPart#getID
* ()
*/
@Override
public String getID() {
return SmooksFreemarkerTemplateGraphicalEditor.ID;
}
}