FlowCharts can be created using label overlays and arrow connectors.
Documentation<style type="text/css"> .ui-diagram-element { width:14em; height:4em; line-height:4em; text-align: center; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.8); border-radius: 4px; border: 1px solid transparent; background-color: #98AFC7; color: #ffffff; } .ui-diagram-success { background-color: #9CB071; color: #ffffff; border-color: #7ab02c; } .ui-diagram-fail { background-color: #C34A2C; color: #ffffff; } .flow-label { font-size: 24px; font-weight: bold; color: #816A51; } </style> <p:diagram value="#{diagramFlowChartView.model}" style="height:600px" styleClass="ui-widget-content" />
@Named("diagramFlowChartView") @RequestScoped public class FlowChartView { private DefaultDiagramModel model; @PostConstruct public void init() { model = new DefaultDiagramModel(); model.setMaxConnections(-1); FlowChartConnector connector = new FlowChartConnector(); connector.setPaintStyle("{strokeStyle:'#C7B097',lineWidth:3}"); model.setDefaultConnector(connector); Element start = new Element("Fight for your dream", "20em", "6em"); start.addEndPoint(new BlankEndPoint(EndPointAnchor.BOTTOM)); start.addEndPoint(new BlankEndPoint(EndPointAnchor.LEFT)); Element trouble = new Element("Do you meet some trouble?", "20em", "18em"); trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.TOP)); trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.BOTTOM)); trouble.addEndPoint(new BlankEndPoint(EndPointAnchor.RIGHT)); Element giveup = new Element("Do you give up?", "20em", "30em"); giveup.addEndPoint(new BlankEndPoint(EndPointAnchor.TOP)); giveup.addEndPoint(new BlankEndPoint(EndPointAnchor.LEFT)); giveup.addEndPoint(new BlankEndPoint(EndPointAnchor.RIGHT)); Element succeed = new Element("Succeed", "50em", "18em"); succeed.addEndPoint(new BlankEndPoint(EndPointAnchor.LEFT)); succeed.setStyleClass("ui-diagram-success"); Element fail = new Element("Fail", "50em", "30em"); fail.addEndPoint(new BlankEndPoint(EndPointAnchor.LEFT)); fail.setStyleClass("ui-diagram-fail"); model.addElement(start); model.addElement(trouble); model.addElement(giveup); model.addElement(succeed); model.addElement(fail); model.connect(createConnection(start.getEndPoints().get(0), trouble.getEndPoints().get(0), null)); model.connect(createConnection(trouble.getEndPoints().get(1), giveup.getEndPoints().get(0), "Yes")); model.connect(createConnection(giveup.getEndPoints().get(1), start.getEndPoints().get(1), "No")); model.connect(createConnection(trouble.getEndPoints().get(2), succeed.getEndPoints().get(0), "No")); model.connect(createConnection(giveup.getEndPoints().get(2), fail.getEndPoints().get(0), "Yes")); } public DiagramModel getModel() { return model; } private Connection createConnection(EndPoint from, EndPoint to, String label) { Connection conn = new Connection(from, to); conn.getOverlays().add(new ArrowOverlay(20, 20, 1, 1)); if(label != null) { conn.getOverlays().add(new LabelOverlay(label, "flow-label", 0.5)); } return conn; } }