package org.activiti.crystalball.diagram; /* * #%L * image-builder * %% * 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.svg.SVGCanvasFactory; import org.activiti.engine.impl.RepositoryServiceImpl; import org.activiti.engine.impl.test.PluggableActivitiTestCase; import org.apache.commons.io.FileUtils; import org.junit.Ignore; import javax.imageio.ImageIO; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ProcessDiagramGeneratorTest extends PluggableActivitiTestCase { private static String FINANCIALREPORT_PROCESS_KEY = "financialReport"; private List<String> processInstanceIds; protected void setUp() throws Exception { super.setUp(); repositoryService .createDeployment() .addClasspathResource( "org/activiti/examples/bpmn/usertask/FinancialReportProcess.bpmn20.xml") .addClasspathResource( "org/activiti/examples/bpmn/usertask/FinancialReportProcess.png") .deploy(); processInstanceIds = new ArrayList<String>(); for (int i = 0; i < 4; i++) { processInstanceIds.add(runtimeService.startProcessInstanceByKey( FINANCIALREPORT_PROCESS_KEY, "BUSINESS-KEY-" + i).getId()); } } protected void tearDown() throws Exception { for (org.activiti.engine.repository.Deployment deployment : repositoryService .createDeploymentQuery().list()) { repositoryService.deleteDeployment(deployment.getId(), true); } super.tearDown(); } @Ignore("Generator provides platform dependent images (fonts) see http://forums.activiti.org/en/viewtopic.php?f=6&t=4647&start=0") public void testGenerateProcessDefinition() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new BasicProcessDiagramGenerator( (RepositoryServiceImpl) repositoryService ); Map<String, Object> params = new HashMap<String, Object>(); params.put(AbstractProcessDiagramLayerGenerator.PROCESS_DEFINITION_ID, id); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/BasicProcessDiagramGeneratorTest.testSimpleProcessDefinition.png" ); File generatedFile = new File("target/BasicProcessDiagramGeneratorTest.testSimpleProcessDefinition.png" ); ImageIO.write( ImageIO.read( generator.generateLayer("png", params)) , "png" , generatedFile); assertTrue(FileUtils.contentEquals(expectedFile, generatedFile)); } public void testGenerateProcessDefinitionSVG() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new BasicProcessDiagramGenerator( (RepositoryServiceImpl) repositoryService, new SVGCanvasFactory()); Map<String, Object> params = new HashMap<String, Object>(); params.put(AbstractProcessDiagramLayerGenerator.PROCESS_DEFINITION_ID, id); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/BasicProcessDiagramGeneratorTest.testSimpleProcessDefinition.svg" ); File generatedFile = new File("target/BasicProcessDiagramGeneratorTest.testSimpleProcessDefinition.svg" ); FileUtils.copyInputStreamToFile( generator.generateLayer("svg", params), generatedFile); assertTrue(FileUtils.contentEquals(expectedFile, generatedFile)); } public void testOneNodeHighlight() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new HighlightNodeDiagramLayer( (RepositoryServiceImpl) repositoryService ); Map<String, Object> params = new HashMap<String, Object>(); params.put( HighlightNodeDiagramLayer.PROCESS_DEFINITION_ID, id); List<String> highlightedActivities = new ArrayList<String>(); highlightedActivities.add("writeReportTask"); params.put( HighlightNodeDiagramLayer.HIGHLIGHTED_ACTIVITIES, highlightedActivities); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/HighlightNodeDiagramLayer.testOneNodeHighlight.png" ); File generatedFile = new File("target/HighlightNodeDiagramLayer.testOneNodeHighlight.png" ); ImageIO.write( ImageIO.read( generator.generateLayer("png", params)) , "png" , generatedFile); assertTrue( FileUtils.contentEquals(expectedFile, generatedFile)); } public void testOneNodeHighlightSVG() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new HighlightNodeDiagramLayer( (RepositoryServiceImpl) repositoryService, null, new SVGCanvasFactory()); Map<String, Object> params = new HashMap<String, Object>(); params.put( HighlightNodeDiagramLayer.PROCESS_DEFINITION_ID, id); List<String> highlightedActivities = new ArrayList<String>(); highlightedActivities.add("writeReportTask"); params.put( HighlightNodeDiagramLayer.HIGHLIGHTED_ACTIVITIES, highlightedActivities); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/HighlightNodeDiagramLayer.testOneNodeHighlight.svg" ); File generatedFile = new File("target/HighlightNodeDiagramLayer.testOneNodeHighlight.svg" ); FileUtils.copyInputStreamToFile( generator.generateLayer("svg", params), generatedFile); assertTrue( FileUtils.contentEquals(expectedFile, generatedFile)); } public void testMergeLayers() throws IOException { DiagramLayerGenerator generator = new MergeLayersGenerator(); Map<String, Object> params = new HashMap<String, Object>(); params.put( "img1", getBytes("src/test/resources/org/activiti/crystalball/diagram/MergeLayerGenerator.testMergeLayers1.png")); params.put( "img2", getBytes("src/test/resources/org/activiti/crystalball/diagram/MergeLayerGenerator.testMergeLayers2.png")); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/MergeLayerGenerator.testMergeLayers.png" ); File generatedFile = new File("target/MergeLayerGenerator.testMergeLayers.png" ); ImageIO.write( ImageIO.read( generator.generateLayer("png", params)) , "png" , generatedFile); assertTrue( FileUtils.contentEquals(expectedFile, generatedFile)); } /** * get byte[] from fileName * @param fileName * @return */ private Object getBytes(String fileName) { //create file object File file = new File( fileName ); FileInputStream fin = null; try { //create FileInputStream object fin = new FileInputStream(fileName); return fin; } catch(FileNotFoundException e) { System.out.println("File not found" + e); try { fin.close(); } catch (IOException e1) { e1.printStackTrace(); } } finally { } return null; } @Ignore("Generator provides platform dependent images (fonts) see http://forums.activiti.org/en/viewtopic.php?f=6109t=4647&start=0") public void testOneNodeCount() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new WriteNodeDescriptionDiagramLayer( (RepositoryServiceImpl) repositoryService ); Map<String, Object> params = new HashMap<String, Object>(); params.put( WriteNodeDescriptionDiagramLayer.PROCESS_DEFINITION_ID, id); params.put( "writeReportTask", 5); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/WriteCountLayerGeneratorTest.oneNumber.png" ); File generatedFile = new File("target/WriteCountLayerGeneratorTest.oneNumber.png" ); ImageIO.write( ImageIO.read( generator.generateLayer("png", params)) , "png" , generatedFile); assertTrue( FileUtils.contentEquals(expectedFile, generatedFile)); } public void testOneNodeCountSVG() throws IOException { String id = FINANCIALREPORT_PROCESS_KEY; DiagramLayerGenerator generator = new WriteNodeDescriptionDiagramLayer( (RepositoryServiceImpl) repositoryService, new SVGCanvasFactory() ); Map<String, Object> params = new HashMap<String, Object>(); params.put( WriteNodeDescriptionDiagramLayer.PROCESS_DEFINITION_ID, id); params.put( "writeReportTask", 5); File expectedFile = new File("src/test/resources/org/activiti/crystalball/diagram/WriteCountLayerGeneratorTest.oneNumber.svg" ); File generatedFile = new File("target/WriteCountLayerGeneratorTest.oneNumber.svg" ); FileUtils.copyInputStreamToFile( generator.generateLayer("svg", params), generatedFile); assertTrue( FileUtils.contentEquals(expectedFile, generatedFile)); } }