package org.enhydra.jawe.components.graph; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.Rectangle; import java.util.List; import java.util.Map; import java.util.Properties; import org.enhydra.jawe.JaWEManager; import org.enhydra.shark.xpdl.elements.Activity; import org.enhydra.shark.xpdl.elements.ExtendedAttribute; import org.enhydra.shark.xpdl.elements.Participant; import org.enhydra.shark.xpdl.elements.Transition; import org.jgraph.graph.AttributeMap; import org.jgraph.graph.GraphConstants; /** * Factory for generating graph objects. * @author Sasa Bojanic */ public class GraphObjectFactory { protected Properties properties; public void configure(Properties props) throws Exception { this.properties = props; } public GraphActivityInterface createActivity(Map viewMap, Activity act, Point partPoint) { String type = JaWEManager.getInstance().getJaWEController().getTypeResolver().getJaWEType(act).getTypeId(); Point offset = GraphUtilities.getOffsetPoint(act); GraphActivityInterface gact = createActivityCell(act, type); Map m = initActivityProperties(partPoint, offset, act, type); viewMap.put(gact, m); return gact; } protected GraphActivityInterface createActivityCell(Activity act, String type) { return new DefaultGraphActivity(act); } protected Map initActivityProperties(Point partPoint, Point offset, Activity act, String type) { AttributeMap map = new AttributeMap(); //CUSTOM String displayName = act.getName(); int actW = GraphUtilities.getGraphController().getGraphSettings().getActivityWidth(); int actH = GraphUtilities.getGraphController().getGraphSettings().getActivityHeight(); Dimension dim = DefaultGraphActivityRenderer.calculateWidthAndHeight(displayName, actW, actH); actW = (int)dim.getWidth(); actH = (int)dim.getHeight(); Rectangle bounds = new Rectangle(partPoint.x + offset.x, partPoint.y + offset.y, actW, actH); if (type.equals("ACTIVITY_ROUTE")) { bounds = new Rectangle(partPoint.x + offset.x, partPoint.y + offset.y, GraphUtilities.getGraphController().getGraphSettings().getRouteWidth(), GraphUtilities.getGraphController().getGraphSettings().getRouteHeight()); } //CUSTOM GraphConstants.setBounds(map, bounds); GraphConstants.setOpaque(map, true); GraphConstants.setBorderColor(map, Color.darkGray); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } public GraphBubbleActivityInterface createStart(Map viewMap, ExtendedAttribute sea, Point partPoint) { GraphBubbleActivityInterface gact = createStartCell(sea); Map m = initStartProperties(partPoint, sea); viewMap.put(gact, m); return gact; } protected GraphBubbleActivityInterface createStartCell(ExtendedAttribute sea) { return new DefaultGraphBubbleActivity(sea); } protected Map initStartProperties(Point partPoint, ExtendedAttribute sea) { AttributeMap map = new AttributeMap(); StartEndDescription sed = new StartEndDescription(sea); Rectangle bounds = new Rectangle( partPoint.x + sed.getOffset().x, partPoint.y + sed.getOffset().y, GraphUtilities.getGraphController().getGraphSettings().getActivityHeight() / 5 * 3, GraphUtilities.getGraphController().getGraphSettings().getActivityHeight() / 5 * 3); GraphConstants.setBounds(map, bounds); GraphConstants.setOpaque(map, true); GraphConstants.setBorderColor(map, Color.darkGray); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } public GraphBubbleActivityInterface createEnd(Map viewMap, ExtendedAttribute eea, Point partPoint) { GraphBubbleActivityInterface gact = createEndCell(eea); Map m = initEndProperties(partPoint, eea); viewMap.put(gact, m); return gact; } protected GraphBubbleActivityInterface createEndCell(ExtendedAttribute eea) { return new DefaultGraphBubbleActivity(eea); } protected Map initEndProperties(Point partPoint, ExtendedAttribute eea) { AttributeMap map = new AttributeMap(); StartEndDescription sed = new StartEndDescription(eea); Rectangle bounds = new Rectangle( partPoint.x + sed.getOffset().x, partPoint.y + sed.getOffset().y, GraphUtilities.getGraphController().getGraphSettings().getActivityHeight() / 5 * 3, GraphUtilities.getGraphController().getGraphSettings().getActivityHeight() / 5 * 3); GraphConstants.setBounds(map, bounds); GraphConstants.setOpaque(map, true); GraphConstants.setBorderColor(map, Color.darkGray); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } public GraphParticipantInterface createParticipant(Rectangle bounds, Map viewMap, Participant par) { GraphParticipantInterface gpar = createParticipantCell(par); Map m = initParticipantProperties(bounds, par); viewMap.put(gpar, m); return gpar; } protected GraphParticipantInterface createParticipantCell(Participant par) { return new DefaultGraphParticipant(par); } protected Map initParticipantProperties(Rectangle bounds, Participant par) { AttributeMap map = new AttributeMap(); GraphConstants.setBounds(map, bounds); GraphConstants.setOpaque(map, false); GraphConstants.setBorderColor(map, Color.black); GraphConstants.setMoveable(map, false); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } public GraphTransitionInterface createTransition(List points, Map viewMap, Transition tra) { GraphTransitionInterface gtra = createTransitionCell(tra); Map m = initTransitionProperties(points, tra); viewMap.put(gtra, m); return gtra; } public GraphTransitionInterface createBubbleTransition(List points, Map viewMap, String style) { GraphTransitionInterface gtra = createTransitionCell(null); // CUSTOM: set orthogonal transition type style = GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_NO_ROUTING_ORTHOGONAL; // END CUSTOM Map m = initBubbleTransitionProperties(points, style); viewMap.put(gtra, m); return gtra; } protected GraphTransitionInterface createTransitionCell(Transition tra) { return new DefaultGraphTransition(tra); } protected Map initTransitionProperties(List points, Transition tra) { AttributeMap map = new AttributeMap(); //if (points!=null && points.size()>0) System.out.println("Setting points "+points); GraphConstants.setPoints(map, points); setTransitionStyle(GraphUtilities.getStyle(tra), map); //GraphConstants.setLineColor(map,Utils.getColor(JaWEConfig.getInstance().getTransitionColor())); GraphConstants.setLineEnd(map, GraphConstants.ARROW_TECHNICAL); GraphConstants.setEndFill(map, true); GraphConstants.setEndSize(map, 10); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } protected Map initBubbleTransitionProperties(List points, String style) { AttributeMap map = new AttributeMap(); //if (points!=null && points.size()>0) System.out.println("Setting points "+points); GraphConstants.setPoints(map, points); setTransitionStyle(style, map); //GraphConstants.setLineColor(map,Utils.getColor(JaWEConfig.getInstance().getTransitionColor())); GraphConstants.setLineEnd(map, GraphConstants.ARROW_TECHNICAL); GraphConstants.setEndFill(map, true); GraphConstants.setEndSize(map, 10); String fntn = JaWEManager.getFontName(); int fntsize = GraphUtilities.getGraphController().getGraphSettings().getGraphFontSize(); javax.swing.plaf.FontUIResource f; try { try { f = new javax.swing.plaf.FontUIResource(fntn, Font.PLAIN, fntsize); } catch (Exception ex) { f = new javax.swing.plaf.FontUIResource("Label.font", Font.PLAIN, fntsize); } GraphConstants.setFont(map, f); } catch (Exception ex) { } return map; } protected void setTransitionStyle(String style, AttributeMap map) { if (style.equals(GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_NO_ROUTING_BEZIER)) { GraphConstants.setLineStyle(map, GraphConstants.STYLE_BEZIER); } else if (style.equals(GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_NO_ROUTING_SPLINE)) { GraphConstants.setLineStyle(map, GraphConstants.STYLE_SPLINE); } else if (style.equals(GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_SIMPLE_ROUTING_BEZIER)) { GraphConstants.setRouting(map, GraphConstants.ROUTING_SIMPLE); GraphConstants.setLineStyle(map, GraphConstants.STYLE_BEZIER); } else if (style.equals(GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_SIMPLE_ROUTING_ORTHOGONAL)) { GraphConstants.setRouting(map, GraphConstants.ROUTING_SIMPLE); GraphConstants.setLineStyle(map, GraphConstants.STYLE_ORTHOGONAL); } else if (style.equals(GraphEAConstants.EA_JAWE_GRAPH_TRANSITION_STYLE_VALUE_SIMPLE_ROUTING_SPLINE)) { GraphConstants.setRouting(map, GraphConstants.ROUTING_SIMPLE); GraphConstants.setLineStyle(map, GraphConstants.STYLE_SPLINE); } else { GraphConstants.setLineStyle(map, GraphConstants.STYLE_ORTHOGONAL); } } public GraphPortInterface createPort(String name, String type) { GraphPortInterface gpor = createPortCell(name, type); return gpor; } protected GraphPortInterface createPortCell(String name, String type) { return new DefaultGraphPort(name, type); } protected Map initPortProperties(String type) { AttributeMap map = new AttributeMap(); return map; } }