/******************************************************************************* * 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.process; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.jboss.tools.smooks.SmooksModelUtils; import org.jboss.tools.smooks.graphical.editors.ProcessAnalyzer; import org.jboss.tools.smooks.graphical.editors.TaskTypeManager; import org.jboss.tools.smooks.model.freemarker.Freemarker; import org.jboss.tools.smooks.model.javabean12.BeanType; import org.jboss.tools.smooks.model.smooks.AbstractResourceConfig; import org.jboss.tools.smooks.model.smooks.ElementVisitor; import org.jboss.tools.smooks.model.smooks.ParamType; import org.jboss.tools.smooks.model.smooks.SmooksResourceListType; /** * @author Dart * */ public class ProcessTaskAnalyzer { public void analyzeTaskNode(ProcessType process, SmooksResourceListType resourceList) { process.getTask().clear(); if (resourceList == null) { return; } // Input task node must be in process: TaskType inputTask = ProcessFactory.eINSTANCE.createTaskType(); inputTask.setId(TaskTypeManager.TASK_ID_INPUT); inputTask.setName(TaskTypeManager.getTaskLabel(inputTask)); process.addTask(inputTask); List<AbstractResourceConfig> resourceConfigList = resourceList.getAbstractResourceConfig(); TaskType javaMappingTask = getJavaMappingTask(resourceConfigList); List<TaskType> templatingTasks = getTemplatingTasks(resourceConfigList); // Connect the Java Mappings task to the input task... if (javaMappingTask != null) { inputTask.addTask(javaMappingTask); } // Connect the Templating tasks to the Input and Java Mappings task as appropriate... for(TaskType templatingTask : templatingTasks) { AbstractResourceConfig templatingResource = templatingTask.getTaskResources().get(0); if(templatingResource instanceof Freemarker) { Freemarker freemarkerResource = (Freemarker) templatingResource; EList<ParamType> params = freemarkerResource.getParam(); if(SmooksModelUtils.getParam(params, SmooksModelUtils.KEY_TEMPLATE_TYPE) != null) { ParamType templateDataProvider = SmooksModelUtils.getParam(params, SmooksModelUtils.TEMPLATE_DATA_PROVIDER_PARAM_NAME); if(templateDataProvider == null || TaskTypeManager.TASK_ID_JAVA_MAPPING.equals(templateDataProvider.getStringValue())) { if(javaMappingTask != null) { javaMappingTask.addTask(templatingTask); } } else if(templateDataProvider != null && TaskTypeManager.TASK_ID_INPUT.equals(templateDataProvider.getStringValue())) { inputTask.addTask(templatingTask); } } } } } private TaskType getJavaMappingTask(List<AbstractResourceConfig> resourceConfigList) { return getTask(BeanType.class, TaskTypeManager.TASK_ID_JAVA_MAPPING, resourceConfigList); } private List<TaskType> getTemplatingTasks(List<AbstractResourceConfig> resourceConfigList) { List<TaskType> taskList = new ArrayList<TaskType>(); addFreeMarkerTasks(resourceConfigList, taskList); return taskList; } private TaskType getTask(Class<? extends ElementVisitor> resourceType, String taskId, List<AbstractResourceConfig> resourceConfigList) { TaskType task = null; for (AbstractResourceConfig abstractResourceConfig : resourceConfigList) { if (resourceType.isInstance(abstractResourceConfig)) { if(task == null) { task = ProcessFactory.eINSTANCE.createTaskType(); task.setId(taskId); task.setName(TaskTypeManager.getTaskLabel(task)); } task.addTaskResource(abstractResourceConfig); } } return task; } private void addFreeMarkerTasks(List<AbstractResourceConfig> resourceConfigList, List<TaskType> taskList) { for (AbstractResourceConfig resourceConfig : resourceConfigList) { if (resourceConfig instanceof Freemarker) { taskList.add(ProcessAnalyzer.toTaskType((Freemarker) resourceConfig)); } } } }