/*
* 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.Color;
import java.net.URL;
import java.util.Calendar;
import java.util.Hashtable;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JRootPane;
import ilog.views.dashboard.IlvDashboardContext;
import ilog.views.dashboard.IlvDashboardDiagram;
import ilog.views.dashboard.IlvDashboardInteractor;
import ilog.views.dashboard.IlvDashboardSymbol;
import ilog.views.diagrammer.IlvDiagrammerException;
import ilog.views.util.IlvProductUtil;
import ilog.views.util.swing.IlvSwingUtil;
/**
* This is the entry point of the Tunnel demo.
* It illustrates how to use dashboards and symbols to monitor traffic and events in a tunnel.
* This demo simulates the traffic in a tunnel and several events which could affect either the
* traffic or the installations.
*
*/
public class Tunnel extends JRootPane {
static {
// This sample uses JViews Diagrammer features. When deploying an
// application that includes this code, you need to be in possession
// of a Rogue Wave JViews Diagrammer Deployment license.
IlvProductUtil.DeploymentLicenseRequired(IlvProductUtil.JViews_Diagrammer_Deployment);
}
// the path to the idbd files (which defines the dashboards)
private static final String mapPath = "data/tunnelMap.idbd";
private static final String trafficPath = "data/tunnelDashboard.idbd";
private static final String monitoringPath = "data/tunnelMonitoring.idbd";
// the dashboard and context
private IlvDashboardDiagram dashboard;
private IlvDashboardContext context;
// a reference to a symbol inside the dashboard: a clock that will be updated with current time
private IlvDashboardSymbol clock = null;
// storage for views corresponding to the two tunnels to monitor
private Hashtable<String, MonitoringView> monitoringViews =
new Hashtable<String, MonitoringView>();
/**
* Creates the demo
*/
public Tunnel() {}
/**
* Initializes the application.
*/
public void init() {
IlvSwingUtil.invokeAndWait(new Runnable() {
Override
public void run() {
createGUI();
}
});
}
public void createGUI() {
// create the diagram and its context
context = new IlvDashboardContext();
dashboard = new IlvDashboardDiagram(context);
// In application, we can load manually the palette.
// Here this is useless because the palette is already in the CLASSPATH
// E.g :
// try {
// context.loadPalettes(new URL("file:myPalette.jar"));
// } catch (Exception e) {
// System.err.println("Could not read the palette ");
// System.exit(-1);
// }
// load the dashboard that will be the "menu" of the demo
loadDashboard(dashboard, mapPath);
// no need for scrollbars
dashboard.setScrollable(false);
dashboard.getView().setBackground(new Color(210, 210, 210));
// display the dashboard in the a frame
final JFrame frame = new JFrame();
frame.setTitle("Tunnel Map");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().add(dashboard);
frame.setBounds(0, 0, 730, 600);
frame.setVisible(true);
dashboard.fitToContents();
}
/**
* Load a file into a dashboard component
*
* @param dd The dashboard
* @param path the .idbd file to load
*/
private void loadDashboard(IlvDashboardDiagram dd, String path) {
URL url = null;
try {
url = new URL("file:./" + path);
dd.readDashboard(url);
} catch (IlvDiagrammerException er) {
er.getCause().printStackTrace();
System.exit(-1);
} catch (Exception e) {
System.err.println("Could not read the file " + url);
System.exit(-1);
}
}
/**
* Starts the application.
*/
public void start() {
// creates a new dashboard interactor and overrides the showDashboard method
// in order to open the monitoring view corresponding to a freely defined url in the symbol
IlvDashboardInteractor interactor = new IlvDashboardInteractor() {
Override
protected void showDashboard(String urlString) {
// get the monitoring view associated with the url. In this case the url
// is freely user defined: "Grant" or "Spring"
MonitoringView mv = (MonitoringView) monitoringViews.get(urlString);
// if no view has been created yet then creates it
if (mv == null) {
// creates and load the dashboards that will take place in the view
IlvDashboardDiagram monitoringDashboard = new IlvDashboardDiagram(context);
loadDashboard(monitoringDashboard, monitoringPath);
IlvDashboardDiagram trafficDashboard = new IlvDashboardDiagram(context);
loadDashboard(trafficDashboard, trafficPath);
// creates the view with the dashboards and put it in the list of created views
mv = new MonitoringView(urlString, monitoringDashboard, trafficDashboard);
monitoringViews.put(urlString, mv);
}
// display the view and bring it to front
mv.setVisible(true);
mv.toFront();
}
};
// set the new interactor on the dashboard
dashboard.getView().setInteractor(interactor);
// get a specific symbol of the dashboard in order to animate it later
clock = dashboard.getSymbol("Clock_1");
// creates a timer to update the clock in the dashboard
// first we define a task that will be processed by the timer
TimerTask task = new TimerTask() {
Override
public void run() {
// get the time and extract hours, minutes and seconds
Calendar now = Calendar.getInstance();
int hh = now.get(Calendar.HOUR_OF_DAY);
int mm = now.get(Calendar.MINUTE);
int ss = now.get(Calendar.SECOND);
// update the parameters of the clock
clock.setParameterValue(clock.getParameter("hours"), new Integer(hh));
clock.setParameterValue(clock.getParameter("minutes"), new Integer(mm));
clock.setParameterValue(clock.getParameter("seconds"), new Integer(ss));
}
};
// creates and set the timer which perfom the task
Timer timer = new Timer();
timer.schedule(task, 0, 1000);
}
/**
* Entry point: loads the dashboard and display it
* @param args (unused)
*/
public static void main(String[] args) {
IlvSwingUtil.invokeAndWait(new Runnable() {
Override
public void run() {
Tunnel dashboard = new Tunnel();
dashboard.init();
dashboard.start();
}
});
}
}