blob: cd3e8cf276f5cd6fc86c7962c5cdcd1175a187ce [file] [log] [blame]
/******************************************************************************
* Copyright � 2010-2011 Texas Center for Applied Technology
* Texas Engineering Experiment Station
* The Texas A&M University System
* All Rights Reserved.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Austin Riddle (Texas Center for Applied Technology) -
* initial API and implementation
*
*****************************************************************************/
package org.eclipse.rap.rwt.visualization.jit.demo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.rap.rwt.application.EntryPoint;
import org.eclipse.rap.rwt.visualization.jit.AreaChart;
import org.eclipse.rap.rwt.visualization.jit.BarChart;
import org.eclipse.rap.rwt.visualization.jit.AreaChart;
import org.eclipse.rap.rwt.visualization.jit.BarChart;
import org.eclipse.rap.rwt.visualization.jit.HyperTree;
import org.eclipse.rap.rwt.visualization.jit.JITVisualizationWidget;
import org.eclipse.rap.rwt.visualization.jit.RGraph;
import org.eclipse.rap.rwt.visualization.jit.SpaceTree;
import org.eclipse.rap.rwt.visualization.jit.TreeMap;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.osgi.framework.Bundle;
/**
* This class controls all aspects of the application's execution
* and is contributed through the plugin.xml.
*/
public class Application implements EntryPoint {
public static Listener createSelectionListener () {
return new Listener()
{
public void handleEvent(Event event)
{
JITVisualizationWidget widget = (JITVisualizationWidget)event.widget;
System.out.println( "Selected node id = " + widget.getSelectedNodeId());
}
};
}
public int createUI()
{
Display display = PlatformUI.createDisplay();
PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
return 0;
}
public static class HyperTreeExample extends ViewPart
{
private SashForm mainSash;
protected HyperTree topTree;
protected HyperTree bottomTree;
public void createPartControl (Composite parent)
{
mainSash = new SashForm(parent, SWT.VERTICAL);
Group group = new Group(mainSash,SWT.NONE);
group.setText("Default");
group.setLayout(new GridLayout(1,false));
Button backBtn = new Button(group, SWT.PUSH);
backBtn.setText("Previous State");
backBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
topTree.previousState();
}
});
backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
topTree = new HyperTree(group, SWT.BORDER);
String sampleData = loadSampleData("samples/hypertree.json");
topTree.setJSONData(sampleData);
topTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
topTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
// leave this hyper tree with default colors
topTree.addListener(SWT.Selection, createSelectionListener());
topTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
group = new Group(mainSash,SWT.NONE);
group.setText("Weighted");
group.setLayout(new GridLayout(1,false));
backBtn = new Button(group, SWT.PUSH);
backBtn.setText("Previous State");
backBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
bottomTree.previousState();
}
});
backBtn.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
bottomTree = new HyperTree(group, SWT.BORDER);
sampleData = loadSampleData("samples/hypertree-weighted.json");
bottomTree.setJSONData(sampleData);
bottomTree.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
bottomTree.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
//Demo change of node and edge colors
//JSON data can override colors.
bottomTree.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
bottomTree.setEdgeColor(new RGB(51,34,102)); //purple
bottomTree.addListener(SWT.Selection, createSelectionListener());
bottomTree.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
}
public void setFocus()
{
topTree.setFocus();
}
}
public static class TreeMapExample extends ViewPart
{
private SashForm oneSash;
private SashForm twoSash;
private TreeMap sqViz;
private TreeMap sliceViz;
private TreeMap stripViz;
private int seedId = 0;
public void createPartControl (Composite parent)
{
String sampleData = loadSampleData("samples/treemap.json");
oneSash = new SashForm(parent, SWT.VERTICAL);
twoSash = new SashForm(oneSash, SWT.HORIZONTAL);
Group group = new Group(twoSash,SWT.NONE);
group.setText("Squarified");
group.setLayout(new FillLayout());
sqViz = new TreeMap(group, TreeMap.SQUARIFY, SWT.BORDER);
sqViz.setJSONData(makeUnique(sampleData));
sqViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
sqViz.addListener(SWT.Selection, createSelectionListener());
group = new Group(twoSash,SWT.NONE);
group.setText("Strip");
group.setLayout(new FillLayout());
stripViz = new TreeMap(group, TreeMap.STRIP, SWT.BORDER);
stripViz.setJSONData(makeUnique(sampleData));
stripViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
stripViz.addListener(SWT.Selection, createSelectionListener());
group = new Group(oneSash,SWT.NONE);
group.setText("Slice and Dice");
group.setLayout(new FillLayout());
sliceViz = new TreeMap(group, TreeMap.SLICE_AND_DICE, SWT.BORDER);
sliceViz.setJSONData(makeUnique(sampleData));
sliceViz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
sliceViz.addListener(SWT.Selection, createSelectionListener());
}
public void setFocus()
{
oneSash.setFocus();
}
/**
* Replaces all of the ids in the srcJSON with a unique set.
* Widgets cannot share datasets with the same ids.
* @param srcJSON
* @return the JSON string with unique ids substituted for all ids
*/
public String makeUnique (String srcJSON) {
String[] split = srcJSON.split("\"id\" : .*,");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < split.length; i++) {
sb.append(split[i]);
if ((i+1) < split.length) {
seedId++;
sb.append("\"id\" : ").append("\"").append(seedId).append("\"").append(",");
}
}
// System.out.println(sb.toString());
return sb.toString();
}
}
public static class RGraphExample extends ViewPart
{
private RGraph viz;
public void createPartControl (Composite parent)
{
viz = new RGraph(parent, SWT.BORDER);
String sampleData = loadSampleData("samples/rgraph.json");
viz.setJSONData(sampleData);
viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
viz.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
//Demo change of node colors
//JSON data can override colors.
viz.setNodeColor(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE).getRGB());
viz.addListener(SWT.Selection, createSelectionListener());
}
public void setFocus()
{
viz.setFocus();
}
}
public static class SpaceTreeExample extends ViewPart
{
private SpaceTree viz;
public void createPartControl (Composite parent)
{
viz = new SpaceTree(parent, SWT.BORDER);
String sampleData = loadSampleData("samples/spacetree.json");
viz.setJSONData(sampleData);
viz.setProperty("orientation", "top");
viz.setEdgeProperty("type", "bezier");
viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
viz.addListener(SWT.Selection, createSelectionListener());
}
public void setFocus()
{
viz.setFocus();
}
}
public static class BarChartExample extends ViewPart
{
private BarChart viz;
public void createPartControl (Composite parent)
{
viz = new BarChart(parent, SWT.BORDER);
String sampleData = loadSampleData("samples/barchart.json");
viz.setJSONData(sampleData);
viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
viz.addListener(SWT.Selection, createSelectionListener());
}
public void setFocus()
{
viz.setFocus();
}
}
public static class AreaChartExample extends ViewPart
{
private AreaChart viz;
public void createPartControl (Composite parent)
{
viz = new AreaChart(parent, SWT.BORDER);
String sampleData = loadSampleData("samples/areachart.json");
viz.setJSONData(sampleData);
viz.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
viz.addListener(SWT.Selection, createSelectionListener());
}
public void setFocus()
{
viz.setFocus();
}
}
public static String loadSampleData (String sampleFilePath)
{
StringBuffer data = new StringBuffer();
try
{
Bundle bundle = Activator.getDefault().getBundle();
InputStream in = FileLocator.openStream(bundle,new Path(sampleFilePath),true);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
try
{
String line = null;
while ((line = br.readLine()) != null)
{
data.append(line).append("\n");
}
}
finally
{
br.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
return data.toString();
}
}