/*
* 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.
*/
import java.awt.Graphics;
import java.util.ArrayList;
import ilog.views.IlvGraphic;
import ilog.views.IlvGraphicBag;
import ilog.views.IlvManager;
import ilog.views.IlvTransformer;
import ilog.views.graphic.IlvRectangle;
import ilog.views.graphic.composite.IlvCompositeGraphic;
import ilog.views.sdm.graphic.IlvSDMCompositeNode;
import ilog.views.servlet.IlvHitmapDefinition;
import ilog.views.util.hitmap.IlvHitmapConstants;
/**
* A customized hitmap info definition example.
*/
public class HitmapDefinition extends IlvHitmapDefinition {
/**
* Creates a customized IlvHitmapDefinition.
*/
public HitmapDefinition() {
}
/*
* (non-Javadoc)
*
* @see
* ilog.views.servlet.IlvHitmapDefinition#shouldRender(ilog.views.IlvGraphic)
*/
Override
public boolean shouldRender(IlvGraphic graphic) {
return (graphic instanceof IlvCompositeGraphic);
}
/**
* A utility class used to draw a rectangle instead of the label.
*/
class LabelRectangle extends IlvRectangle {
/**
* The parent object of the label.
*/
private IlvCompositeGraphic compo;
/**
* Creates a new <code>LabelRectangle</code>.
*/
LabelRectangle() {
}
/**
* Creates a new <code>LabelRectangle</code>.
*/
LabelRectangle(IlvCompositeGraphic compo) {
this.setFillOn(true);
this.compo = compo;
}
String getLabel() {
return compo.getLabel();
}
/*
* (non-Javadoc)
*
* @see ilog.views.graphic.IlvRectangle#draw(java.awt.Graphics,
* ilog.views.IlvTransformer)
*/
Override
public void draw(Graphics g, IlvTransformer t) {
IlvGraphicBag bag = compo.getGraphicBag();
if (bag instanceof IlvManager) {
IlvManager manager = (IlvManager) bag;
IlvTransformer mt = manager.getTopLevelTransformer();
mt.compose(t);
t = mt;
}
setDefinitionRect(compo.getLabelBBox(t));
super.draw(g, null);
}
}
private void addLabelAsSeparatedItem(IlvSDMCompositeNode composite) {
String label = composite.getLabel();
if (label != null && label.length() > 0) {
ArrayList<Integer> indexs = new ArrayList<Integer>();
indexs.add(getGraphics().size());
indexs.add(getGraphics().size() + 1);
composite.setProperty(IlvHitmapConstants.JVIEWS_GROUP_PROPERTY, indexs.toString());
LabelRectangle rectangle = new LabelRectangle(composite);
super.addGraphic(rectangle);
// rectangle.setProperty(IlvHitmapConstants.JVIEWS_GROUP_PROPERTY,
// getGraphics().size());
}
}
/**
* Adds a graphic object to the managed list.
*
* @param graphic
* The graphic object to be added.
*/
Override
public void addGraphic(IlvGraphic graphic) {
super.addGraphic(graphic);
if (graphic instanceof IlvSDMCompositeNode) {
addLabelAsSeparatedItem((IlvSDMCompositeNode) graphic);
}
}
/**
* Returns the tooltip text of the graphic object;
*
* @see ilog.views.servlet.IlvHitmapDefinition#getTooltip(ilog.views.IlvGraphic)
*/
Override
SuppressWarnings("deprecation")
protected String getTooltip(IlvGraphic graphic) {
String tooltip = null;
String label = "Label";
if (graphic instanceof LabelRectangle) {
return formatLabelTooltip("Label:", ((LabelRectangle) graphic).getLabel());
} else if (graphic instanceof IlvCompositeGraphic) {
return formatCompositeTooltip("This is a composite", "Name:", ((IlvCompositeGraphic) graphic).getName());
}
if (tooltip == null || tooltip.length() == 0) {
tooltip = graphic.getName();
label = "Name";
}
if (tooltip == null || tooltip.length() == 0) {
tooltip = graphic.getToolTipText();
label = "Information";
}
if (tooltip != null && tooltip.length() > 0) {
StringBuffer buffer = new StringBuffer();
buffer.append("<table class='jviews_tooltip'>");
buffer.append("<tr class='jviews_tooltip_title'>");
buffer.append("<td>" + label + "</td>" + "<td>" + tooltip + "</td>");
buffer.append("</table>");
return buffer.toString();
}
return super.getTooltip(graphic);
}
private static String formatCompositeTooltip(String title, String label, String text) {
StringBuffer buffer = new StringBuffer();
buffer.append("<table>");
buffer.append("<tr>");
buffer.append("<th colspan='2'>" + title + "</th>");
buffer.append("<tr>");
buffer.append("<td>" + label + "</td>" + "<td>" + text + "</td>");
buffer.append("</table>");
return buffer.toString();
}
private static String formatLabelTooltip(String label, String text) {
StringBuffer buffer = new StringBuffer();
buffer.append("<table>");
buffer.append("<tr>");
buffer.append("<td>" + label + "</td>" + "<td>" + text + "</td>");
buffer.append("</tr>");
buffer.append("</table>");
return buffer.toString();
}
}