package org.activiti.crystalball.simulator; /* * #%L * simulator * %% * Copyright (C) 2012 - 2013 crystalball * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import org.activiti.crystalball.diagram.BasicProcessDiagramGenerator; import org.activiti.crystalball.diagram.HighlightNodeDiagramLayer; import org.activiti.crystalball.diagram.MergeLayersGenerator; import org.activiti.crystalball.diagram.WriteNodeDescriptionDiagramLayer; import org.activiti.crystalball.simulator.impl.persistence.entity.ResultEntity; import org.activiti.engine.RepositoryService; import org.activiti.engine.impl.RepositoryServiceImpl; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; import java.util.*; import static org.junit.Assert.assertTrue; public class SimulatorProcessMonitorTestWithoutProcess { private static final String tempDir = System.getProperty("tempDir", "target"); private static final String LIVE_DB = tempDir + "/BasicSimulation"; @Before public void before() throws IOException { System.setProperty("liveDB", LIVE_DB); System.setProperty("_SIM_DB_PATH", tempDir+"/simulationRunDB-SimulatorProcessMonitorTest-"+Thread.currentThread().getId()); FileUtils.copyFile( new File(LIVE_DB+".h2.db"), new File(tempDir+"/simulationRunDB-SimulatorProcessMonitorTest-"+Thread.currentThread().getId()+".h2.db")); } @After public void after() { // delete database file File f = new File(System.getProperty("_SIM_DB_PATH")+".h2.db"); f.delete(); } @Test public void testProcessRun() throws Throwable { ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("/org/activiti/crystalball/simulator/SimEngine-h2-context.xml"); SimulationRun simRun = appContext.getBean(SimulationRun.class); RepositoryService repositoryService = (RepositoryService) appContext.getBean("simRepositoryService"); List<ResultEntity> resultEventList = simRun.execute(new Date(), null); Collection<List<ResultEntity>> unfinishedTaskProcesses = SimulationResultsPostProcessor.groupProcessDefinitionKey( SimulationResultsPostProcessor.getEventType("unfinished_task", resultEventList)); for (List<ResultEntity> eventList : unfinishedTaskProcesses ) { String processDefinitionId=(String) eventList.get(0).getVariable("processDefinitionKey"); List<String> highlightTasks = SimulationResultsPostProcessor.getTaskDefinitionKeys( eventList); Map<String,String> nodeDescription = SimulationResultsPostProcessor.getNodeDescriptions( eventList); File dir = new File(tempDir + "/" + eventList.get(0).getType()); dir.mkdir(); String reportFileName = tempDir + "/" + eventList.get(0).getType() +"/"+ processDefinitionId +".png"; reportGraph(reportFileName, processDefinitionId, highlightTasks, nodeDescription, repositoryService); } appContext.close(); File expected = new File(System.getProperty("baseDir", ".") + "/src/test/resources/org/activiti/crystalball/simulator/SimulatorProcessMonitor-unfinishedTasks-expected.png" ); File generated = new File(System.getProperty("tempDir", "target") + "/unfinished_task/threetasksprocess.png"); assertTrue( FileUtils.contentEquals(expected, generated)); } private void reportGraph(String fileName, String processDefinitionKey, List<String> highLightedActivities, Map<String, String> counts, RepositoryService repositoryService) throws IOException { Map<String, Object> params = new HashMap<String, Object>(); params.put( "processDefinitionId", processDefinitionKey); Map<String, Object> highlightParams = new HashMap<String, Object>(); highlightParams.put( "processDefinitionId", processDefinitionKey); highlightParams.put( "highLightedActivities", highLightedActivities); Map<String, Object> writeCountParams = new HashMap<String, Object>(); writeCountParams.put( "processDefinitionId", processDefinitionKey); writeCountParams.putAll( counts ); BasicProcessDiagramGenerator basicGenerator = new BasicProcessDiagramGenerator((RepositoryServiceImpl) repositoryService); HighlightNodeDiagramLayer highlightGenerator = new HighlightNodeDiagramLayer((RepositoryServiceImpl) repositoryService); WriteNodeDescriptionDiagramLayer countGenerator = new WriteNodeDescriptionDiagramLayer((RepositoryServiceImpl) repositoryService); MergeLayersGenerator mergeGenerator = new MergeLayersGenerator(); Map<String, Object> mergeL = new HashMap<String, Object>(); mergeL.put( "1", basicGenerator.generateLayer("png", params)); mergeL.put( "2", highlightGenerator.generateLayer("png", highlightParams)); mergeL.put( "3", countGenerator.generateLayer("png", writeCountParams)); mergeGenerator.generateLayer("png", mergeL); File generatedFile = new File(fileName ); ImageIO.write( ImageIO.read(mergeGenerator.generateLayer("png", mergeL)) , "png" , generatedFile); } }