package org.activiti.crystalball.generator; 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.engine.RepositoryService; import org.activiti.engine.impl.RepositoryServiceImpl; import javax.imageio.ImageIO; import java.awt.*; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class AbstractGraphGenerator { protected RepositoryService repositoryService; /** * limits for highlighting node - find interval into which count fits and highlight with color */ protected List<ColorInterval> highlightColorIntervalList; public AbstractGraphGenerator() { super(); } protected void reportGraph(String fileName, String processDefinitionKey, Map<Color,List<String>> highLightedActivitiesMap, Map<String, String> counts) throws IOException { Map<String, Object> params = new HashMap<String, Object>(); params.put("processDefinitionId", processDefinitionKey); 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", countGenerator.generateLayer("png", writeCountParams)); int i = 3; for (Color c : highLightedActivitiesMap.keySet()) { highlightGenerator.setColor( c ); Map<String, Object> highlightParams = new HashMap<String, Object>(); highlightParams.put("processDefinitionId", processDefinitionKey); highlightParams.put("highLightedActivities", highLightedActivitiesMap.get( c )); mergeL.put( String.valueOf(i), highlightGenerator.generateLayer("png", highlightParams)); i++; } File generatedFile = new File(fileName); ImageIO.write(ImageIO.read(mergeGenerator.generateLayer("png", mergeL)), "png", generatedFile); } protected static void addToHighlighted( Map<Color, List<String>> highLightedActivitiesMap, Color color, String id) { List<String> highLightedActivities = highLightedActivitiesMap.get( color ); if (highLightedActivities == null) { highLightedActivities = new ArrayList<String>(); highLightedActivitiesMap.put(color, highLightedActivities); } highLightedActivities.add(id); } public RepositoryService getRepositoryService() { return repositoryService; } public void setRepositoryService(RepositoryService repositoryService) { this.repositoryService = repositoryService; } public List<ColorInterval> getHighlightColorIntervalList() { return highlightColorIntervalList; } public void setHighlightColorIntervalList( List<ColorInterval> highlightColorIntervalList) { this.highlightColorIntervalList = highlightColorIntervalList; } protected Color getColorToHighlight(float number) { if (highlightColorIntervalList != null) { for ( ColorInterval colorInterval : highlightColorIntervalList) { if ( colorInterval.isInside( number )) return colorInterval.color; } } return Color.RED; } }