/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © 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 pebbles;
import java.awt.Color;
import java.util.Collection;
import ilog.views.IlvGraphic;
import ilog.views.IlvPoint;
import ilog.views.graphic.IlvEllipse;
import ilog.views.sdm.IlvSDMEngine;
import ilog.views.sdm.graphic.IlvSimpleLink;
import ilog.views.sdm.renderer.IlvSDMRenderer;
import ilog.views.util.IlvColorUtil;
/**
* An implementation of SDM renderer that manages directly the objects (no css
* involved).
*
* @author kaplan
* @since JViews 8.5
*/
public class SimpleDiagrammerRenderer extends IlvSDMRenderer {
///////////////////////
// Actually, only the 2 following methods are mandatory.
Override
public IlvGraphic createLinkGraphic(IlvSDMEngine engine, Object link, IlvGraphic from, IlvGraphic to) {
IlvSimpleLink result = new IlvSimpleLink(from, to, true, null);
return result;
}
Override
public IlvGraphic createNodeGraphic(IlvSDMEngine engine, Object node) {
// let's create a filled circle for all objects
Number X = (Number) engine.getModel().getObjectProperty(node, "x");
Number Y = (Number) engine.getModel().getObjectProperty(node, "y");
IlvEllipse result = new IlvEllipse(new IlvPoint(X.doubleValue(), Y.doubleValue()), 20.);
setBackground(engine, node, result);
result.setFillOn(true);
return result;
}
//////////////////////////
// All the other methods are optional, but offer more services.
// called when model has changed
Override
public void propertiesChanged(IlvSDMEngine engine, Object object, Collection<String> propertyNames,
IlvGraphic graphic) {
if (graphic instanceof IlvEllipse) {
IlvEllipse gnode = (IlvEllipse) graphic;
setBackground(engine, object, gnode);
}
}
// called when a pseudo class has change (i.e.: selected)
Override
public void customize(IlvSDMEngine engine, Object object, IlvGraphic g, String[] pseudoClasses) {
if (g == null) {
return;
}
boolean selectRequest = false;
// is requesting selection ?
if (pseudoClasses != null) {
for (String s : pseudoClasses) {
if ("selected".equals(s)) {
selectRequest = true;
}
}
}
// manage node selection feedback
if (g instanceof IlvEllipse) {
IlvEllipse gnode = (IlvEllipse) g;
// compute current selected state
boolean selectedState = gnode.getForeground() == Color.red;
// match ?
if (selectedState != selectRequest) {
// toggle color
gnode.setForeground(selectedState ? Color.black : Color.red);
}
}
// same for links
if (g instanceof IlvSimpleLink) {
IlvSimpleLink glink = (IlvSimpleLink) g;
// compute current selected state
boolean selectedState = glink.getForeground() == Color.red;
// match ?
// toggle color
if (selectedState != selectRequest) {
glink.setForeground(selectedState ? Color.black : Color.red);
}
}
}
/**
* Sets node background, according to model state
*
* @param engine
* the engine
* @param node
* the model object
* @param graphic
* the graphic representation of node
*/
private void setBackground(IlvSDMEngine engine, Object node, IlvEllipse graphic) {
String colorString = (String) engine.getModel().getObjectProperty(node, "color");
Color color = colorString == null ? Color.orange : IlvColorUtil.getColor(colorString);
graphic.setBackground(color);
}
}