/* * Licensed Materials - Property of Rogue Wave Software, Inc. * © Copyright Rogue Wave Software, Inc. 2014, 2015 * © Copyright IBM Corp. 2009, 2014 * © Copyright ILOG 1996, 2009 * All Rights Reserved. * * Note to U.S. Government Users Restricted Rights: * The Software and Documentation were developed at private expense and * are "Commercial Items" as that term is defined at 48 CFR 2.101, * consisting of "Commercial Computer Software" and * "Commercial Computer Software Documentation", as such terms are * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4, * as applicable. */ package demo.ice; import ilog.views.IlvGraphic; import ilog.views.IlvRect; import ilog.views.IlvTransformer; import ilog.views.diagrammer.IlvDiagrammer; import ilog.views.diagrammer.faces.component.IlvFacesDiagrammerView; import ilog.views.diagrammer.faces.dhtml.component.IlvFacesDHTMLDiagrammerView; import ilog.views.faces.dhtml.interactor.IlvObjectSelectInteractor; import ilog.views.sdm.IlvSDMEngine; import ilog.views.sdm.IlvSDMView; import ilog.views.sdm.model.IlvSDMNode; import java.awt.Dimension; import java.util.Iterator; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.event.ValueChangeEvent; import com.icesoft.faces.context.effects.JavascriptContext; /** * This bean contains the logic of the JSF Diagrammer Editing sample. */ public class DiagrammerBean { /** * The diagrammer view. */ private IlvFacesDiagrammerView diagrammerView = new IlvFacesDHTMLDiagrammerView(); /** * @return The diagrammer view used in this demo. */ public IlvFacesDiagrammerView getDiagrammerView() { return diagrammerView; } /** * Sets the diagrammer view. * * @param diagrammerView * The new diagrammer view. */ public void setDiagrammerView(IlvFacesDiagrammerView diagrammerView) { this.diagrammerView = diagrammerView; } private static String empty = "none"; private String nodeTag = empty; private String nodeID = empty; /** * The tag of the selected node. */ public String getNodeTag() { return nodeTag; } /** * The ID of the selected node; */ public String getNodeID() { return nodeID; } /** * Selects the graphic object specified by this event. * * @param event * The value change event * @throws Exception */ public void selectNodeOrLink(ValueChangeEvent event) throws Exception { Object node = event.getNewValue(); if (node != null && event.getSource() instanceof IlvObjectSelectInteractor) { // The source of the event is the interactor IlvObjectSelectInteractor source = (IlvObjectSelectInteractor) event .getSource(); // Retrieve the JSF view connected to the interactor IlvFacesDiagrammerView jsfDiagrammer = (IlvFacesDiagrammerView) source .getView(); try { // Retrieve the IlvDiagrammer wrapped by the JSF component. IlvSDMView view = (IlvSDMView) jsfDiagrammer.getView(); // Select the clicked object IlvSDMEngine engine = view.getSDMEngine(); engine.setAdjusting(true); engine.deselectAllObjects(); engine.setSelected(node, true); engine.setAdjusting(false); } catch (Exception e) { e.printStackTrace(); } if (node instanceof IlvSDMNode) { nodeTag = ((IlvSDMNode) node).getTag(); nodeID = ((IlvSDMNode) node).getID(); } else { nodeTag = empty; nodeID = empty; } } } /** * Centers the selected node. * * @param e * Not used. */ public void centerSelection(ActionEvent e) { IlvDiagrammer diagrammer = null; try { diagrammer = diagrammerView.getDiagrammer(); } catch (Exception e1) { e1.printStackTrace(); } if (diagrammer != null) { Iterator it = diagrammer.getSelectedObjects(); Object selectedNode = null; while (it.hasNext()) { selectedNode = it.next(); } IlvGraphic graphic = null; IlvRect objBox = null; if (selectedNode != null) { graphic = diagrammer.getEngine() .getGraphic(selectedNode, false); objBox = graphic.boundingBox(); IlvSDMView view = diagrammer.getView(); Dimension size = view.getSize(); IlvRect port = new IlvRect(0, 0, size.width, size.height); IlvTransformer t = view.getTransformer(); if (t != null) t.inverse(port); float left = objBox.x + objBox.width / 2 - port.width / 2; float top = objBox.y + objBox.height / 2 - port.height / 2; String instruction = "diagrammer.moveTo(" + left + "," + top + ");"; JavascriptContext.addJavascriptCall(FacesContext .getCurrentInstance(), instruction); } } } }