/*
* 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 demo;
import java.util.Enumeration;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import ilog.views.diagrammer.IlvDiagrammer;
import ilog.views.maps.servlet.IlvFacesMapsServlet;
import ilog.views.sdm.IlvSDMModel;
import ilog.views.sdm.servlet.IlvSDMServletSupport;
import ilog.views.servlet.IlvHitmapDefinition;
import ilog.views.servlet.ServerActionEvent;
import ilog.views.servlet.ServerActionListener;
import ilog.views.util.hitmap.IlvHitmapConstants;
/**
* Server side bean that regularly changes the node state. Note: for the
* demonstration, updating is based on a TimerTask, which should not be the case
* in a pure J2EE application.
*/
public class UpdatingServlet extends IlvFacesMapsServlet implements ServerActionListener {
private static final class DiagrammerUpdateTask extends TimerTask {
private final IlvDiagrammer diagrammer;
private DiagrammerUpdateTask(IlvDiagrammer diagrammer) {
this.diagrammer = diagrammer;
}
Override
public void run() {
IlvSDMModel model = diagrammer.getEngine().getModel();
Enumeration<?> objs = diagrammer.getEngine().getAllObjects();
while (objs.hasMoreElements()) {
Object obj = objs.nextElement();
Object otype = model.getObjectProperty(obj, "type"); //$NON-NLS-1$
if (otype != null) {// change the type of all objects
int rnd = (int) (Math.random() * 4 + 1);
model.setObjectProperty(obj, "type", "" + rnd); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
}
private static final String TIMER_PROPERTY = "DemoTimer"; //$NON-NLS-1$
private static final String TASK_PROPERTY = "DemoTask";//$NON-NLS-1$
/**
* Creates a new <code>UpdatingServlet</code>.
*/
public UpdatingServlet() {// do nothing.
}
Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
IlvHitmapDefinition hitmapDefinition = getServletSupport().getHitmapSupport().getHitmapDefinition();
hitmapDefinition.registerHitmapInfoGenerator(IlvHitmapConstants.TOOLTIP_TYPE,
new TooltipInfoGenerator(hitmapDefinition));
addServerActionListener(this);
}
/**
* {@inheritDoc}
*/
Override
protected IlvSDMServletSupport createServletSupport(ServletContext context) {
return new UpdatingServletSupport(context);
}
Override
public void actionPerformed(ServerActionEvent e) {
final IlvDiagrammer diagrammer = getDiagrammer(e.getRequest());
String name = e.getActionName();
synchronized (diagrammer) {
TimerTask task;
if ("start".equals(name)) { //$NON-NLS-1$
task = (TimerTask) diagrammer.getClientProperty(TASK_PROPERTY);
if (task == null) {
task = new DiagrammerUpdateTask(diagrammer);
Timer timer = (Timer) diagrammer.getClientProperty(TIMER_PROPERTY);
if (timer == null) {
timer = new Timer();
diagrammer.putClientProperty(TIMER_PROPERTY, timer);
}
diagrammer.putClientProperty(TASK_PROPERTY, task);
timer.schedule(task, 0, 5000);
}
} else if ("stop".equals(name)) {//$NON-NLS-1$
task = (TimerTask) diagrammer.getClientProperty(TASK_PROPERTY);
if (task != null) {
task.cancel();
// diagrammer.putClientProperty(TASK_PROPERTY, null);
}
task.cancel();
}
}
}
}