/*******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* 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:
* IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse
*******************************************************************************/
package org.eclipse.linuxtools.systemtap.graphing.ui.wizards.graph;
import java.util.LinkedList;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.GraphingUIPlugin;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.Localization;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.AreaChartBuilder;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.BarChartBuilder;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.LineChartBuilder;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.PieChartBuilder;
import org.eclipse.linuxtools.internal.systemtap.graphing.ui.charts.ScatterChartBuilder;
import org.eclipse.linuxtools.systemtap.graphing.core.adapters.BlockAdapter;
import org.eclipse.linuxtools.systemtap.graphing.core.adapters.ScrollAdapter;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IBlockDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IHistoricalDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.structures.GraphData;
import org.eclipse.linuxtools.systemtap.graphing.ui.charts.AbstractChartBuilder;
import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.GraphComposite;
import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.GraphContinuousXControl;
import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.GraphContinuousYControl;
import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.GraphDiscreteXControl;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
public final class GraphFactory {
private static final String[] graphNames = new String[] {
Localization.getString("GraphFactory.ScatterGraph"), //$NON-NLS-1$
Localization.getString("GraphFactory.LineGraph"), //$NON-NLS-1$
Localization.getString("GraphFactory.BarGraph"), //$NON-NLS-1$
Localization.getString("GraphFactory.AreaGraph"), //$NON-NLS-1$
Localization.getString("GraphFactory.PieChart"), //$NON-NLS-1$
};
private static final String[] graphDescriptions = new String[] {
Localization.getString("GraphFactory.ScatterDescription"), //$NON-NLS-1$
Localization.getString("GraphFactory.LineDescription"), //$NON-NLS-1$
Localization.getString("GraphFactory.BarDescription"), //$NON-NLS-1$
Localization.getString("GraphFactory.AreaDescription"), //$NON-NLS-1$
Localization.getString("GraphFactory.PieDescription"), //$NON-NLS-1$
};
private static final Image[] graphImages = new Image[] {
GraphingUIPlugin.getImageDescriptor("icons/graphs/ScatterGraph.gif").createImage(), //$NON-NLS-1$
GraphingUIPlugin.getImageDescriptor("icons/graphs/LineGraph.gif").createImage(), //$NON-NLS-1$
GraphingUIPlugin.getImageDescriptor("icons/graphs/BarGraph.gif").createImage(), //$NON-NLS-1$
GraphingUIPlugin.getImageDescriptor("icons/graphs/AreaChart.gif").createImage(), //$NON-NLS-1$
GraphingUIPlugin.getImageDescriptor("icons/graphs/PieChart.gif").createImage(), //$NON-NLS-1$
};
private static final String[] graphIDs = new String[] {
ScatterChartBuilder.ID,
LineChartBuilder.ID,
BarChartBuilder.ID,
AreaChartBuilder.ID,
PieChartBuilder.ID,
};
public static String[] getAvailableGraphs(IDataSet data) {
LinkedList<String> ids = new LinkedList<>();
if(data instanceof IHistoricalDataSet) {
ids.add(ScatterChartBuilder.ID);
ids.add(LineChartBuilder.ID);
ids.add(AreaChartBuilder.ID);
ids.add(BarChartBuilder.ID);
ids.add(PieChartBuilder.ID);
}
if(data instanceof IBlockDataSet) {
if(!ids.contains(BarChartBuilder.ID)) {
ids.add(BarChartBuilder.ID);
}
ids.add(PieChartBuilder.ID);
}
String[] id = new String[0];
return ids.toArray(id);
}
public static String getGraphName(String id) {
int index = getIndex(id);
if(index >= 0) {
return graphNames[index];
}
return null;
}
public static String getGraphDescription(String id) {
int index = getIndex(id);
if(index >= 0) {
return graphDescriptions[index];
}
return null;
}
public static Image getGraphImage(String id) {
int index = getIndex(id);
if(index >= 0) {
return graphImages[index];
}
return null;
}
// TODO leave in id paramter to cover possible future support of more graph types.
public static boolean isMultiGraph(@SuppressWarnings("unused") String id) {
return true;
}
public static AbstractChartBuilder createGraph(GraphComposite comp,
int style, GraphData gd, IDataSet data) {
AbstractChartBuilder builder = null;
switch (getIndex(gd.graphID)) {
case 0:
builder = new ScatterChartBuilder(comp, style, gd.title,
new ScrollAdapter((IHistoricalDataSet) data, gd.xSeries,
gd.ySeries, gd.key));
break;
case 1:
builder = new LineChartBuilder(comp, style, gd.title,
new ScrollAdapter((IHistoricalDataSet) data, gd.xSeries,
gd.ySeries, gd.key));
break;
case 2:
if (!(data instanceof IBlockDataSet) || (null != gd.key)) {
builder = new BarChartBuilder(comp, style, gd.title,
new ScrollAdapter((IHistoricalDataSet) data,
gd.xSeries, gd.ySeries, gd.key));
} else {
builder = new BarChartBuilder(comp, style, gd.title,
new BlockAdapter((IBlockDataSet) data, gd.xSeries,
gd.ySeries));
}
break;
case 3:
builder = new AreaChartBuilder(comp, style, gd.title,
new ScrollAdapter((IHistoricalDataSet) data, gd.xSeries,
gd.ySeries, gd.key));
break;
case 4:
builder = new PieChartBuilder(comp, style, gd.title,
new ScrollAdapter((IHistoricalDataSet) data, gd.xSeries,
gd.ySeries, gd.key));
break;
}
return builder;
}
/**
* @param comp Parent composite.
* @param style Style of widget to create.
* @return The newly created X axis control.
* @since 3.0
*/
public static final Composite createGraphXControl(GraphComposite comp, int style) {
AbstractChartBuilder builder = comp.getCanvas();
if (builder instanceof BarChartBuilder || builder instanceof PieChartBuilder) {
return new GraphDiscreteXControl(comp, style);
}
return new GraphContinuousXControl(comp, style);
}
/**
* @param comp Parent composite.
* @param style Style of widget to create.
* @return The newly created Y axis control
* @since 3.0
*/
public static final Composite createGraphYControl(GraphComposite comp, int style) {
AbstractChartBuilder builder = comp.getCanvas();
if (builder instanceof PieChartBuilder) {
return null;
}
return new GraphContinuousYControl(comp, style);
}
private static int getIndex(String id) {
for(int i=0; i<graphIDs.length; i++) {
if(id.equals(graphIDs[i])) {
return i;
}
}
return -1;
}
}