/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.generator.wkf; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.logging.Logger; import org.openflexo.foundation.dm.AutoGeneratedProcessBusinessDataDMEntity; import org.openflexo.foundation.dm.DMEntity; import org.openflexo.foundation.dm.DMProperty; import org.openflexo.foundation.rm.cg.JavaFileResource; import org.openflexo.foundation.wkf.FlexoProcess; import org.openflexo.generator.ProjectGenerator; import org.openflexo.generator.utils.JavaClassGenerator; import org.openflexo.logging.FlexoLogger; public class WorkflowProcessGenerator extends JavaClassGenerator { private static final String TEMPLATE_NAME = "WorkflowProcess.java.vm"; private static final Logger logger = FlexoLogger.getLogger(WorkflowProcessGenerator.class.getPackage().getName()); private Map<String, Map<String, Class<? extends Object>>> keysTypeForBusinessData; private Map<String, DMEntity> entityTypeForBusinessData; public WorkflowProcessGenerator(ProjectGenerator projectGenerator, String packageName) { super(projectGenerator, "WorkflowProcess", packageName); } @Override public Logger getGeneratorLogger() { return logger; } /** * Overrides rebuildDependanciesForResource * * @see org.openflexo.generator.utils.JavaClassGenerator#rebuildDependanciesForResource(JavaFileResource) */ @Override public void rebuildDependanciesForResource(JavaFileResource resource) { } @Override public String getTemplateName() { return TEMPLATE_NAME; } private Map<String, Map<String, Class<? extends Object>>> getKeysTypeForBusinessData() { if (keysTypeForBusinessData == null || entityTypeForBusinessData == null) { keysTypeForBusinessData = new HashMap<String, Map<String, Class<? extends Object>>>(); entityTypeForBusinessData = new HashMap<String, DMEntity>(); DMEntity processBusinessDataBaseEntity = ((ProjectGenerator) getProjectGenerator()).getProcessBusinessDataBaseEntity(); Enumeration<FlexoProcess> processes = getProject().getSortedProcesses(); while (processes.hasMoreElements()) { FlexoProcess process = processes.nextElement(); DMEntity entity = process.getBusinessDataType(); if (entity == null) { entity = processBusinessDataBaseEntity; } entityTypeForBusinessData.put(process.getBusinessDataDictionaryKey(), entity); Map<String, Class<? extends Object>> processKeysMap = keysTypeForBusinessData.get(process.getBusinessDataDictionaryKey()); if (processKeysMap == null) { processKeysMap = new TreeMap<String, Class<? extends Object>>(); keysTypeForBusinessData.put(process.getBusinessDataDictionaryKey(), processKeysMap); } Map<String, Class<? extends Object>> currentProcessKeysMap = process.getProcessInstanceDictionaryKeys(); for (Map.Entry<String, Class<? extends Object>> entry : currentProcessKeysMap.entrySet()) { if (!processKeysMap.containsKey(entry.getKey())) { processKeysMap.put(entry.getKey(), entry.getValue()); } } if (process.getBusinessDataType() != null) { for (DMProperty property : process.getBusinessDataType().getProperties().values()) { try { processKeysMap.put(property.getName(), Class.forName(property.getType().getStringRepresentation())); } catch (ClassNotFoundException e) { processKeysMap.put(property.getName(), Object.class); } } } if (process.getParentProcess() != null) { processKeysMap.put( AutoGeneratedProcessBusinessDataDMEntity.getParentProcessBusinessDataIdKey(process.getParentProcess()), Integer.class); } } } return keysTypeForBusinessData; } private Map<String, DMEntity> getEntityTypeForBusinessData() { if (entityTypeForBusinessData == null) { getKeysTypeForBusinessData(); } return entityTypeForBusinessData; } public Set<String> getAllBusinessDataKeys() { return getKeysTypeForBusinessData().keySet(); } public Map<String, Class<? extends Object>> getKeysTypeForBusinessData(String businessDataKey) { return getKeysTypeForBusinessData().get(businessDataKey); } public DMEntity getDMEntityForBusinessData(String businessDataKey) { return getEntityTypeForBusinessData().get(businessDataKey); } }