/** * Copyright (C) 2010 BonitaSoft S.A. * BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble * * This program 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 2.0 of the License, or * (at your option) any later version. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.simulation.engine; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bonitasoft.simulation.model.process.SimActivity; import org.bonitasoft.simulation.model.process.SimData; import org.bonitasoft.simulation.model.process.SimProcess; import org.bonitasoft.simulation.model.resource.Resource; /** * @author Romain Bioteau * */ public class DefinitionPool { private static DefinitionPool INSTANCE ; private Map<String,Map<String, SimActivity>> activityDefinitions ; private Map<String,Map<String, SimData>> dataDefinitions ; private Map<String, SimProcess> processDefinitions ; private Map<String, Resource> resourceDefinitions ; public static DefinitionPool getInstance(){ if(INSTANCE == null){ INSTANCE = new DefinitionPool(); } return INSTANCE ; } public static DefinitionPool createInstance(){ INSTANCE = new DefinitionPool() ; return INSTANCE ; } private DefinitionPool(){ processDefinitions = new HashMap<String, SimProcess>() ; activityDefinitions = new HashMap<String, Map<String, SimActivity>>() ; dataDefinitions = new HashMap<String, Map<String, SimData>>() ; resourceDefinitions = new HashMap<String, Resource>() ; } public void addResourceDefinition(Resource definition){ if(!resourceDefinitions.containsKey(definition.getName())){ resourceDefinitions.put(definition.getName(), definition); } } public void addProcessDefinition(SimProcess definition){ if(!processDefinitions.containsKey(definition.getName())){ processDefinitions.put(definition.getName(), definition); } } public void addDataDefinition(String parentProcessName,SimData definition){ if(dataDefinitions.get(parentProcessName) != null){ Map<String, SimData> data = dataDefinitions.get(parentProcessName) ; if(!data.containsKey(definition.getName())){ data.put(definition.getName(), definition); } }else{ Map<String, SimData> data = new HashMap<String, SimData>(); data.put(definition.getName(), definition) ; dataDefinitions.put(parentProcessName, data); } } public void addActivityDefinition(String parentProcessName ,SimActivity definition){ if(activityDefinitions.get(parentProcessName) != null){ Map<String, SimActivity> activities = activityDefinitions.get(parentProcessName) ; if(!activities.containsKey(definition.getName())){ activities.put(definition.getName(), definition); } }else{ Map<String, SimActivity> activities = new HashMap<String, SimActivity>(); activities.put(definition.getName(), definition) ; activityDefinitions.put(parentProcessName, activities); } } public SimActivity getActivityDefinition(String parentProcessName , String activityName){ return activityDefinitions.get(parentProcessName).get(activityName); } public SimProcess getProcessDefinition(String processName){ return processDefinitions.get(processName); } public SimData getDataDefinition(String parentProcessName, String dataName) { return dataDefinitions.get(parentProcessName).get(dataName); } public Resource getResourceDefinition(String resourceName) { return resourceDefinitions.get(resourceName); } public List<Resource> getResourceDefinitions() { return new ArrayList<Resource>(resourceDefinitions.values()); } public List<SimProcess> getProcessDefinition() { return new ArrayList<SimProcess>(processDefinitions.values()); } public List<SimData> getDataDefinition(String processName) { if(dataDefinitions.get(processName) != null){ return new ArrayList<SimData>(dataDefinitions.get(processName).values()); }else{ return Collections.emptyList() ; } } public List<SimActivity> getActivityDefinition(String processName) { if(activityDefinitions.get(processName) != null){ return new ArrayList<SimActivity>(activityDefinitions.get(processName).values()); }else{ return Collections.emptyList() ; } } }