ASSIGNED - bug 282953: Support different chart types.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=282953

Pie and histogram now work! Minor issues remain with bar chart implementation -- no labels and beige background color.
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/plugin.xml b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/plugin.xml
index 8c16590..11f1cbf 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/plugin.xml
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/plugin.xml
@@ -51,7 +51,7 @@
         <action
               class="org.eclipse.amp.agf.chart.ide.SelectTimeSeriesAction"
               icon="icons/obj16/linecharticon.gif"
-              id="org.eclipse.amp.agf.chart.action1"
+              id="org.eclipse.amp.agf.chart.timeseries"
               label="Time Series"
               menubarPath="org.eclipse.amp.agf.chart.menu/typegroup"
               state="true"
@@ -62,13 +62,33 @@
         <action
               class="org.eclipse.amp.agf.chart.ide.SelectAreaAction"
               icon="icons/obj16/areacharticon.gif"
-              id="org.eclipse.amp.agf.chart.action1"
+              id="org.eclipse.amp.agf.chart.area"
               label="Stacked Area"
               menubarPath="org.eclipse.amp.agf.chart.menu/typegroup"
               style="radio"
               toolbarPath="typegroup"
               tooltip="Displays the data as stacked areas">
         </action>
+        <action
+              class="org.eclipse.amp.agf.chart.ide.SelectPieAction"
+              icon="icons/obj16/piecharticon.gif"
+              id="org.eclipse.amp.agf.chart.pie"
+              label="Pie"
+              menubarPath="org.eclipse.amp.agf.chart.menu/typegroup"
+              style="radio"
+              toolbarPath="typegroup"
+              tooltip="Displays the data as a pie chart">
+        </action>
+        <action
+              class="org.eclipse.amp.agf.chart.ide.SelectHistogramAction"
+              icon="icons/obj16/barcharticon.gif"
+              id="org.eclipse.amp.agf.chart.histogram"
+              label="Pie"
+              menubarPath="org.eclipse.amp.agf.chart.menu/typegroup"
+              style="radio"
+              toolbarPath="typegroup"
+              tooltip="Displays the data as a pie chart">
+        </action>
      </viewContribution>
   </extension>
 <!--  <extension
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicAxesChartStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicAxesChartStrategy.java
new file mode 100644
index 0000000..45f0036
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicAxesChartStrategy.java
@@ -0,0 +1,118 @@
+package org.eclipse.amp.agf.chart;

+

+import java.util.List;

+

+import org.eclipse.birt.chart.model.Chart;

+import org.eclipse.birt.chart.model.ChartWithAxes;

+import org.eclipse.birt.chart.model.attribute.AxisType;

+import org.eclipse.birt.chart.model.attribute.IntersectionType;

+import org.eclipse.birt.chart.model.attribute.LegendItemType;

+import org.eclipse.birt.chart.model.attribute.TickStyle;

+import org.eclipse.birt.chart.model.attribute.impl.PaletteImpl;

+import org.eclipse.birt.chart.model.component.Axis;

+import org.eclipse.birt.chart.model.component.Series;

+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;

+import org.eclipse.birt.chart.model.data.DataSet;

+import org.eclipse.birt.chart.model.data.SeriesDefinition;

+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;

+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;

+import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;

+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;

+

+

+public abstract class BasicAxesChartStrategy extends BasicChartStrategy {

+

+    public void update() {

+    }

+

+    public Chart createChart(IDataProvider dataProvider, Object dataSource) {

+        this.dataProvider = dataProvider;

+        this.dataSource = dataSource;

+        ChartWithAxes chart = ChartWithAxesImpl.create();

+        setChart(chart);

+        chart.setUnitSpacing(20);

+

+        // X-Axis

+        Axis xAxisPrimary = getXAxisPrimary();

+        xAxisPrimary.setType(AxisType.TEXT_LITERAL);

+        xAxisPrimary.getTitle().getCaption().setValue("Period");

+        xAxisPrimary.getTitle().setVisible(true);

+        xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);

+        xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);

+        createXSeriesDefinition();

+

+        Axis yAxisPrimary = getYAxisPrimary();

+        yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);

+        yAxisPrimary.setType(AxisType.LINEAR_LITERAL);

+        yAxisPrimary.getLabel().getCaption().getFont().setRotation(90);

+        createYSeriesDefinition();

+

+        DataSet periods = TextDataSetImpl.create(dataProvider.getCategoryLabels(dataSource));

+        SeriesDefinition xSeriesDefinition = getXSeriesDefinition();

+        xSeriesDefinition.getSeries().get(0).setDataSet(periods);

+        return chart;

+    }

+

+    public void createLegend() {

+        super.createLegend();

+        getLegend().setItemType(LegendItemType.SERIES_LITERAL);

+    }

+

+    protected abstract void addValueSet(Object valueSet);

+

+    public void updateSelection() {

+        List valueSets = dataProvider.getValueSets(dataSource);

+        getValueSetsDefinition().getSeries().clear();

+        for (Object valueSet : valueSets) {

+            addValueSet(valueSet);

+        }

+    }

+

+    private void createXSeriesDefinition() {

+        SeriesDefinition xSeriesDefinition = SeriesDefinitionImpl.create();

+        Axis xAxisPrimary = getXAxisPrimary();

+        xAxisPrimary.getSeriesDefinitions().clear();

+        xAxisPrimary.getSeriesDefinitions().add(xSeriesDefinition);

+        xSeriesDefinition.getSeriesPalette().shift(0);

+

+        Series xSeriesCategory = SeriesImpl.create();

+        xSeriesDefinition.getSeries().clear();

+        xSeriesDefinition.getSeries().add(xSeriesCategory);

+    }

+

+    private void createYSeriesDefinition() {

+        SeriesDefinition ySeriesDefinition = SeriesDefinitionImpl.create();

+        Axis yAxisPrimary = getYAxisPrimary();

+        yAxisPrimary.getSeriesDefinitions().clear();

+        yAxisPrimary.getSeriesDefinitions().add(ySeriesDefinition);

+        ySeriesDefinition.setSeriesPalette(PaletteImpl.create(0, true));

+    }

+

+    protected void addValueSeries(Series series, Object valueSet) {

+        DataSet data = NumberDataSetImpl.create(dataProvider.getValues(valueSet));

+        series.setDataSet(data);

+        getValueSetsDefinition().getSeries().add(series);

+        series.getLabel().setVisible(false);

+        series.setSeriesIdentifier(dataProvider.getText(valueSet));

+    }

+

+    private Axis getXAxisPrimary() {

+        return ((ChartWithAxes) getChart()).getPrimaryBaseAxes()[0];

+    }

+

+    private Axis getYAxisPrimary() {

+        return ((ChartWithAxes) getChart()).getPrimaryOrthogonalAxis(getXAxisPrimary());

+    }

+

+    private SeriesDefinition getYSeriesDefinition() {

+        return getYAxisPrimary().getSeriesDefinitions().get(0);

+    }

+

+    private SeriesDefinition getXSeriesDefinition() {

+        return getXAxisPrimary().getSeriesDefinitions().get(0);

+    }

+

+    public SeriesDefinition getValueSetsDefinition() {

+        return getYSeriesDefinition();

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicChartStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicChartStrategy.java
new file mode 100644
index 0000000..f91a4a5
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/BasicChartStrategy.java
@@ -0,0 +1,40 @@
+package org.eclipse.amp.agf.chart;

+

+import org.eclipse.birt.chart.model.Chart;

+import org.eclipse.birt.chart.model.attribute.Anchor;

+import org.eclipse.birt.chart.model.attribute.LineAttributes;

+import org.eclipse.birt.chart.model.attribute.LineStyle;

+import org.eclipse.birt.chart.model.layout.Legend;

+

+public abstract class BasicChartStrategy implements IChartDesignStrategy {

+

+    protected IDataProvider dataProvider;

+    protected Object dataSource;

+

+    private Chart chart;

+

+    private Legend legend;

+

+    public void createLegend() {

+        legend = chart.getLegend();

+        LineAttributes lia = legend.getOutline();

+        legend.getText().getFont().setSize(10);

+        lia.setStyle(LineStyle.SOLID_LITERAL);

+        legend.getInsets().set(10, 5, 0, 0);

+        legend.getOutline().setVisible(false);

+        legend.setAnchor(Anchor.EAST_LITERAL);

+    }

+

+    public void setChart(Chart chart) {

+        this.chart = chart;

+        createLegend();

+    }

+

+    public Chart getChart() {

+        return chart;

+    }

+

+    public Legend getLegend() {

+        return legend;

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
index 0d7cde0..22fac1f 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartEditPart.java
@@ -15,14 +15,10 @@
  */

 package org.eclipse.amp.agf.chart;

 

-import java.util.ArrayList;

 import java.util.Collection;

-import java.util.HashMap;

 import java.util.HashSet;

 import java.util.List;

 import java.util.Locale;

-import java.util.Map;

-import java.util.Set;

 

 import org.eclipse.amp.axf.core.IModel;

 import org.eclipse.amp.axf.core.IObservationProvider;

@@ -36,36 +32,14 @@
 import org.eclipse.birt.chart.factory.RunTimeContext;

 import org.eclipse.birt.chart.log.ILogger;

 import org.eclipse.birt.chart.model.Chart;

-import org.eclipse.birt.chart.model.ChartWithAxes;

-import org.eclipse.birt.chart.model.attribute.Anchor;

-import org.eclipse.birt.chart.model.attribute.AxisType;

 import org.eclipse.birt.chart.model.attribute.Bounds;

 import org.eclipse.birt.chart.model.attribute.CallBackValue;

 import org.eclipse.birt.chart.model.attribute.ColorDefinition;

 import org.eclipse.birt.chart.model.attribute.Fill;

-import org.eclipse.birt.chart.model.attribute.IntersectionType;

-import org.eclipse.birt.chart.model.attribute.LegendItemType;

-import org.eclipse.birt.chart.model.attribute.LineAttributes;

-import org.eclipse.birt.chart.model.attribute.LineStyle;

 import org.eclipse.birt.chart.model.attribute.Palette;

-import org.eclipse.birt.chart.model.attribute.TickStyle;

 import org.eclipse.birt.chart.model.attribute.impl.BoundsImpl;

 import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;

 import org.eclipse.birt.chart.model.attribute.impl.PaletteImpl;

-import org.eclipse.birt.chart.model.component.Axis;

-import org.eclipse.birt.chart.model.component.Series;

-import org.eclipse.birt.chart.model.component.impl.SeriesImpl;

-import org.eclipse.birt.chart.model.data.DataSet;

-import org.eclipse.birt.chart.model.data.SeriesDefinition;

-import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;

-import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;

-import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;

-import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;

-import org.eclipse.birt.chart.model.layout.Legend;

-import org.eclipse.birt.chart.model.type.AreaSeries;

-import org.eclipse.birt.chart.model.type.LineSeries;

-import org.eclipse.birt.chart.model.type.impl.AreaSeriesImpl;

-import org.eclipse.birt.chart.model.type.impl.LineSeriesImpl;

 import org.eclipse.birt.chart.script.IChartScriptContext;

 import org.eclipse.birt.chart.script.IExternalContext;

 import org.eclipse.birt.core.framework.PlatformConfig;

@@ -82,7 +56,6 @@
 import org.eclipse.emf.common.util.EList;

 import org.eclipse.gef.editparts.AbstractGraphicalEditPart;

 import org.eclipse.jface.viewers.IColorProvider;

-import org.eclipse.jface.viewers.ILabelProvider;

 import org.eclipse.swt.events.SelectionEvent;

 import org.eclipse.swt.graphics.Color;

 import org.eclipse.swt.graphics.GC;

@@ -99,7 +72,7 @@
 

     private static final long serialVersionUID = 1L;

 

-    private ChartWithAxes chart;

+    private Chart chart;

 

     private IDeviceRenderer renderer;

 

@@ -109,43 +82,8 @@
 

     private IColorProvider seriesColorProvider;

 

-    private ILabelProvider seriesLabelProvider;

-

     private Palette genericPalette;

 

-    public enum ChartType {

-        TIME_SERIES, STACKED_AREA, HISTOGRAM, PIE

-    }

-

-    private ChartType chartType;

-

-    /**

-     * Gets the series label provider.

-     * 

-     * @return the series label provider

-     */

-    public ILabelProvider getSeriesLabelProvider() {

-        return seriesLabelProvider;

-    }

-

-    /**

-     * Sets the series label provider.

-     * 

-     * @param seriesLabelProvider the new series label provider

-     */

-    public void setSeriesLabelProvider(ILabelProvider seriesLabelProvider) {

-        this.seriesLabelProvider = seriesLabelProvider;

-    }

-

-    /**

-     * Gets the series color provider.

-     * 

-     * @return the series color provider

-     */

-    public IColorProvider getSeriesColorProvider() {

-        return seriesColorProvider;

-    }

-

     /**

      * Sets the series color provider.

      * 

@@ -157,16 +95,6 @@
 

     private Object dataSource;

 

-    private Series xSeriesCategory;

-

-    private SeriesDefinition ySeriesDefinition;

-

-    private SeriesDefinition xSeriesDefinition;

-

-    private Set<Object> currentSeries = new HashSet<Object>();

-    private Map<String, Color> colorForSeries = new HashMap<String, Color>();

-    private Map<Series, Object> dataForSeries;

-

     private GC imageGC;

 

     private Image image;

@@ -194,10 +122,8 @@
         } catch (ChartException e) {

             throw new RuntimeException(e);

         }

-        // rtc = new RunTimeContext();

-        // rtc.setULocale(ULocale.getDefault());

-        colorForSeries = new HashMap<String, Color>();

-

+        genericPalette = PaletteImpl.create(0, true);

+        genericPalette.shift(0);

     }

 

     /**

@@ -231,7 +157,7 @@
                 } catch (InterruptedException e) {

                 }

             }

-            setChartType(ChartType.TIME_SERIES);

+            setChartStrategy(ChartType.TIME_SERIES.createStrategy());

         }

 

         /**

@@ -239,7 +165,7 @@
          * @see org.eclipse.amp.axf.core.AbstractLifecycleListener#observeStart(org.eclipse.amp.axf.core.IObservationProvider)

          */

         public void observeStart(IObservationProvider observed) {

-            updateYSeries();

+            updateChartSelection();

             endPainting();

         }

 

@@ -259,6 +185,7 @@
         @Override

         public void update(final IModel model) {

             beginPainting();

+            chartStrategy.update();

             refresh();

         }

 

@@ -302,12 +229,12 @@
         }

     };

 

-    private void updateYSeriesColor(Series object, int index) {

-        Series lineSeries = object;

-        Object valueSet = dataForSeries.get(lineSeries);

-        String seriesLabel = seriesLabelProvider.getText(valueSet);

+    private IChartDesignStrategy chartStrategy;

+

+    private void updateValueSetColor(Object valueSet, int index) {

+        String seriesLabel = dataProvider.getText(valueSet);

         Color swtColor = seriesColorProvider.getForeground(seriesLabel);

-        EList<Fill> entries = ySeriesDefinition.getSeriesPalette().getEntries();

+        EList<Fill> entries = chartStrategy.getValueSetsDefinition().getSeriesPalette().getEntries();

         ColorDefinition cd = null;

         if (swtColor == null) {

             // List<Fill> palette = ySeriesDefinition.getSeriesPalette().getEntries();

@@ -338,14 +265,6 @@
             // cd.setBlue(swtColor.getBlue());

         }

         entries.add(cd);

-        if (chartType == ChartType.TIME_SERIES) {

-            // ((LineSeries) lineSeries).getLineAttributes().setColor(cd);

-            ((LineSeries) lineSeries).setPaletteLineColor(true);

-        } else if (chartType == ChartType.STACKED_AREA) {

-            // ((AreaSeries) lineSeries).getLineAttributes().setColor(cd);

-            ((AreaSeries) lineSeries).setStacked(true);

-            // ((AreaSeries) lineSeries).setShadowColor(cd);

-        }

     }

 

     /**

@@ -449,7 +368,7 @@
             image = null;

         }

         try {

-            if (chart != null && getFigure() != null && !getFigure().getSize().isEmpty() && ySeriesDefinition != null) {

+            if (chart != null && getFigure() != null && !getFigure().getSize().isEmpty()) {

                 createImage();

                 Dimension area = getFigure().getSize();

                 Bounds chartBounds = BoundsImpl.create(0, 0, area.width, area.height);

@@ -494,110 +413,26 @@
      * Creates the chart.

      */

     public synchronized void createChart() {

-        if (chart == null) {

-            chart = ChartWithAxesImpl.create();

-            chart.getTitle().getLabel().setVisible(false); //$NON-NLS-1$

-            chart.setUnitSpacing(20);

-            // Color gray = getFigure().getBackgroundColor();

-            // chart.getBlock().setBackground(ColorDefinitionImpl.create(gray.getRed(), gray.getGreen(),

-            // gray.getBlue()));

-            Legend lg = chart.getLegend();

-            LineAttributes lia = lg.getOutline();

-            lg.getText().getFont().setSize(16);

-            lia.setStyle(LineStyle.SOLID_LITERAL);

-            lg.getInsets().set(10, 5, 0, 0);

-            lg.getOutline().setVisible(false);

-            lg.setAnchor(Anchor.EAST_LITERAL);

-            lg.setItemType(LegendItemType.SERIES_LITERAL);

-        }

+        chart = chartStrategy.createChart(dataProvider, dataSource);

 

-        // X-Axis

-        Axis xAxisPrimary = chart.getPrimaryBaseAxes()[0];

-        xAxisPrimary.setType(AxisType.TEXT_LITERAL);

-        xAxisPrimary.getTitle().getCaption().setValue("Period");

-        xAxisPrimary.getTitle().setVisible(true);

-        xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);

-        xAxisPrimary.getOrigin().setType(IntersectionType.VALUE_LITERAL);

-

-        Axis yAxisPrimary = chart.getPrimaryOrthogonalAxis(xAxisPrimary);

-        yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);

-        yAxisPrimary.setType(AxisType.LINEAR_LITERAL);

-        yAxisPrimary.getLabel().getCaption().getFont().setRotation(90);

-

-        createXSeriesDefinition(xAxisPrimary);

-

-        createYSeriesDefinition(yAxisPrimary);

-

+        chart.getTitle().getLabel().setVisible(false);

     }

 

-    private void createYSeriesDefinition(Axis yAxisPrimary) {

-        ySeriesDefinition = SeriesDefinitionImpl.create();

-        yAxisPrimary.getSeriesDefinitions().clear();

-        yAxisPrimary.getSeriesDefinitions().add(ySeriesDefinition);

-        if (genericPalette == null) {

-            genericPalette = ySeriesDefinition.getSeriesPalette();

-            genericPalette.shift(0);

-        }

-        ySeriesDefinition.setSeriesPalette(PaletteImpl.create(0, true));

-    }

-

-    private void createXSeriesDefinition(Axis xAxisPrimary) {

-        xSeriesDefinition = SeriesDefinitionImpl.create();

-        xAxisPrimary.getSeriesDefinitions().clear();

-        xAxisPrimary.getSeriesDefinitions().add(xSeriesDefinition);

-        xSeriesDefinition.getSeriesPalette().shift(0);

-

-        xSeriesCategory = SeriesImpl.create();

-        xSeriesDefinition.getSeries().clear();

-        xSeriesDefinition.getSeries().add(xSeriesCategory);

-        DataSet periods = TextDataSetImpl.create(dataProvider.getCategoryLabels(dataSource));

-        xSeriesCategory.setDataSet(periods);

-    }

+    boolean chartUpated;

 

     /**

      * Update chart series.

      */

-    @SuppressWarnings("unchecked")

-    public synchronized void updateYSeries() {

+    public synchronized void updateChartSelection() {

+        chartStrategy.updateSelection();

         List valueSets = dataProvider.getValueSets(dataSource);

+        chartStrategy.getValueSetsDefinition().getSeriesPalette().getEntries().clear();

         int index = 0;

-        ySeriesDefinition.getSeries().clear();

-        ySeriesDefinition.getSeriesPalette().getEntries().clear();

         for (Object valueSet : valueSets) {

-            // if (!currentSeries.contains(valueSet)) {

-            Series series = addYSeries(valueSet, index);

-            // }

-            updateYSeriesColor(series, index);

+            updateValueSetColor(valueSet, index);

             index++;

         }

-        // currentSeries = new HashSet<Object>(valueSets);

-        for (Series lineSeries : new ArrayList<Series>(ySeriesDefinition.getSeries())) {

-            // Object valueSet = dataForSeries.get(lineSeries);

-            // if (!currentSeries.contains(valueSet)) {

-            // ySeriesDefinition.getSeries().remove(lineSeries);

-            // }

-        }

-    }

-

-    private Series addYSeries(Object valueSet, int index) {

-        Series series = null;

-        if (chartType == ChartType.TIME_SERIES) {

-            series = LineSeriesImpl.create();

-            ((LineSeries) series).getMarkers().clear();

-            ((LineSeries) series).setPaletteLineColor(true);

-        } else if (chartType == ChartType.STACKED_AREA) {

-            series = AreaSeriesImpl.create();

-            ((AreaSeries) series).getMarkers().clear();

-            // ((AreaSeries) lineSeries).setPaletteLineColor(false);

-        }

-

-        series.getLabel().setVisible(false);

-        series.setSeriesIdentifier(seriesLabelProvider.getText(valueSet));

-        DataSet data = NumberDataSetImpl.create(dataProvider.getValues(valueSet));

-        series.setDataSet(data);

-        dataForSeries.put(series, valueSet);

-        ySeriesDefinition.getSeries().add(series);

-        return series;

+        chartUpated = true;

     }

 

     /*

@@ -661,7 +496,7 @@
      * 

      * @return the chart

      */

-    public ChartWithAxes getChart() {

+    public Chart getChart() {

         return chart;

     }

 

@@ -698,12 +533,11 @@
      */

     public synchronized void setDataProvider(IDataProvider dataProvider) {

         this.dataProvider = dataProvider;

-        setSeriesLabelProvider(dataProvider);

         dataSource = dataProvider.getDataSource(getModel());

         dataListener = new IDataSelectionListener() {

             public void selectionChanged(Object dataSet) {

                 if (getParent() != null && getRoot() != null && getViewer() != null && chart != null) {

-                    updateYSeries();

+                    updateChartSelection();

                     getViewer().getControl().getDisplay().asyncExec(new Runnable() {

                         public void run() {

                             regenerateChart(true);

@@ -716,38 +550,12 @@
     }

 

     /**

-     * Gets the data set.

-     * 

-     * @return the data set

-     */

-    public Object getDataSet() {

-        return dataSource;

-    }

-

-    /**

-     * Sets the data set.

-     * 

-     * @param dataSet the new data set

-     */

-    public void setDataSet(Object dataSet) {

-        this.dataSource = dataSet;

-    }

-

-    /**

-     * @return the chartType

-     */

-    public ChartType getChartType() {

-        return chartType;

-    }

-

-    /**

      * @param chartType the chartType to set

      */

-    public void setChartType(ChartType chartType) {

-        this.chartType = chartType;

-        dataForSeries = new HashMap<Series, Object>();

-        currentSeries = new HashSet<Object>();

+    public void setChartStrategy(IChartDesignStrategy chartStrategy) {

+        this.chartStrategy = chartStrategy;

         createChart();

+        updateChartSelection();

         if (getViewer().getControl().getDisplay() != null) {

             getViewer().getControl().getDisplay().asyncExec(new Runnable() {

                 public void run() {

@@ -756,4 +564,13 @@
             });

         }

     }

+

+    /**

+     * Gets the series color provider.

+     * 

+     * @return the series color provider

+     */

+    public IColorProvider getSeriesColorProvider() {

+        return seriesColorProvider;

+    }

 }

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartType.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartType.java
new file mode 100644
index 0000000..e0d5029
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ChartType.java
@@ -0,0 +1,23 @@
+/**

+ * 

+ */

+package org.eclipse.amp.agf.chart;

+

+

+public enum ChartType {

+    TIME_SERIES, STACKED_AREA, HISTOGRAM, PIE;

+

+    public IChartDesignStrategy createStrategy() {

+        switch (this) {

+            case TIME_SERIES :

+                return new TimeSeriesStrategy();

+            case STACKED_AREA:

+                return new StackAreaStrategy();

+            case PIE:

+                return new PieStrategy();

+            case HISTOGRAM:

+                return new HistrogramStrategy();

+        }

+        return null;

+    }

+}
\ No newline at end of file
diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistrogramStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistrogramStrategy.java
new file mode 100644
index 0000000..ed740d0
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/HistrogramStrategy.java
@@ -0,0 +1,130 @@
+package org.eclipse.amp.agf.chart;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.birt.chart.model.Chart;

+import org.eclipse.birt.chart.model.ChartWithAxes;

+import org.eclipse.birt.chart.model.attribute.AxisType;

+import org.eclipse.birt.chart.model.attribute.IntersectionType;

+import org.eclipse.birt.chart.model.attribute.LegendItemType;

+import org.eclipse.birt.chart.model.attribute.Position;

+import org.eclipse.birt.chart.model.attribute.TickStyle;

+import org.eclipse.birt.chart.model.attribute.impl.ColorDefinitionImpl;

+import org.eclipse.birt.chart.model.component.Axis;

+import org.eclipse.birt.chart.model.component.Series;

+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;

+import org.eclipse.birt.chart.model.data.NumberDataSet;

+import org.eclipse.birt.chart.model.data.SeriesDefinition;

+import org.eclipse.birt.chart.model.data.TextDataSet;

+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;

+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;

+import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;

+import org.eclipse.birt.chart.model.impl.ChartWithAxesImpl;

+import org.eclipse.birt.chart.model.layout.Block;

+import org.eclipse.birt.chart.model.layout.Plot;

+import org.eclipse.birt.chart.model.type.BarSeries;

+import org.eclipse.birt.chart.model.type.impl.BarSeriesImpl;

+

+public class HistrogramStrategy extends LastValueStrategy {

+

+    private SeriesDefinition labelDefinition;

+    private BarSeries valueSeries;

+    private SeriesDefinition xSeriesDefinition;

+    private SeriesDefinition valueDefinition;

+

+    List<List<Double>> numbersLists = new ArrayList<List<Double>>();

+    List<List<String>> labelsLists = new ArrayList<List<String>>();

+

+    public Chart createChart(IDataProvider dataProvider, Object dataSource) {

+        this.dataProvider = dataProvider;

+        this.dataSource = dataSource;

+

+        ChartWithAxes chart = ChartWithAxesImpl.create();

+        chart.setType("Bar Chart"); //$NON-NLS-1$

+        chart.setSubType("Stacked"); //$NON-NLS-1$

+        // Plot

+        chart.getBlock().setBackground(ColorDefinitionImpl.WHITE());

+        chart.getBlock().getOutline().setVisible(true);

+        for (Block block : chart.getBlock().getChildren()) {

+            block.setBackground(ColorDefinitionImpl.WHITE());

+        }

+        Plot p = chart.getPlot();

+        p.getClientArea().setBackground(ColorDefinitionImpl.create(255, 255, 225));

+        p.setBackground(ColorDefinitionImpl.WHITE());

+

+        // X-Axis

+        Axis xAxisPrimary = chart.getPrimaryBaseAxes()[0];

+

+        xAxisPrimary.setType(AxisType.TEXT_LITERAL);

+        xAxisPrimary.getMajorGrid().setTickStyle(TickStyle.BELOW_LITERAL);

+        xAxisPrimary.getOrigin().setType(IntersectionType.MIN_LITERAL);

+

+        // Y-Axis

+        Axis yAxisPrimary = chart.getPrimaryOrthogonalAxis(xAxisPrimary);

+        yAxisPrimary.getMajorGrid().setTickStyle(TickStyle.LEFT_LITERAL);

+        yAxisPrimary.setType(AxisType.LINEAR_LITERAL);

+        yAxisPrimary.getLabel().getCaption().getFont().setRotation(90);

+

+

+        xSeriesDefinition = SeriesDefinitionImpl.create();

+        xAxisPrimary.getSeriesDefinitions().add(xSeriesDefinition);

+        xSeriesDefinition.getSeriesPalette().shift(0);

+

+        valueDefinition = SeriesDefinitionImpl.create();

+        // valueDefinition.getSeriesPalette().shift(0);

+        yAxisPrimary.getSeriesDefinitions().add(valueDefinition);

+

+

+        return chart;

+    }

+

+    public void update() {

+        int index = 0;

+        for (Object valueSet : dataProvider.getValueSets(dataSource)) {

+            List<Double> values = (List<Double>) dataProvider.getValues(valueSet);

+            numbersLists.get(index).set(0, values.get(values.size() - 1));

+            // X-Series

+            String text = dataProvider.getText(valueSet);

+            labelsLists.get(index++).set(0, text);

+        }

+    }

+

+    public void updateSelection() {

+        valueDefinition.getSeries().clear();

+        xSeriesDefinition.getSeries().clear();

+        numbersLists = new ArrayList<List<Double>>();

+        labelsLists = new ArrayList<List<String>>();

+        for (Object valueSet : dataProvider.getValueSets(dataSource)) {

+            Double number = 0.0;

+            List<Double> valueList = new ArrayList<Double>();

+            valueList.add(number);

+            NumberDataSet numberSet = NumberDataSetImpl.create(valueList);

+            numbersLists.add(valueList);

+            valueSeries = (BarSeries) BarSeriesImpl.create();

+            valueSeries.setDataSet(numberSet);

+            // valueSeries.setStacked(true);

+            valueSeries.getLabel().setVisible(true);

+            valueSeries.setLabelPosition(Position.INSIDE_LITERAL);

+            valueDefinition.getSeries().add(valueSeries);

+            List<String> labelList = new ArrayList<String>();

+            labelList.add("");

+            TextDataSet labelSet = TextDataSetImpl.create(labelList);//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$

+            labelsLists.add(labelList);

+            Series seCategory = SeriesImpl.create();

+            seCategory.setDataSet(labelSet);

+            xSeriesDefinition.getSeries().add(seCategory);

+        }

+    }

+

+    public void createLegend() {

+        super.createLegend();

+        getLegend().setItemType(LegendItemType.SERIES_LITERAL);

+    }

+

+    public SeriesDefinition getValueSetsDefinition() {

+        return valueDefinition;

+    }

+

+

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IChartDesignStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IChartDesignStrategy.java
new file mode 100644
index 0000000..91b0451
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/IChartDesignStrategy.java
@@ -0,0 +1,19 @@
+package org.eclipse.amp.agf.chart;

+

+import org.eclipse.birt.chart.model.Chart;

+import org.eclipse.birt.chart.model.data.SeriesDefinition;

+

+public interface IChartDesignStrategy {

+    void update();

+

+    Chart createChart(IDataProvider dataProvider, Object dataSource);

+

+    public SeriesDefinition getValueSetsDefinition();

+

+    Chart getChart();

+

+    void setChart(Chart chart);

+

+    void updateSelection();

+

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/LastValueStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/LastValueStrategy.java
new file mode 100644
index 0000000..8b3ddb2
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/LastValueStrategy.java
@@ -0,0 +1,48 @@
+package org.eclipse.amp.agf.chart;

+

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.List;

+

+public abstract class LastValueStrategy extends BasicChartStrategy {

+

+    protected Collection<String> labels = new HashSet<String>();

+

+    protected List<Double> numbers = new ArrayList<Double>();

+

+    public void updateSelection() {

+        numbers.clear();

+        labels.clear();

+        for (Object valueSet : dataProvider.getValueSets(dataSource)) {

+            List<Double> values = (List<Double>) dataProvider.getValues(valueSet);

+            numbers.add(0.0);

+            String text = dataProvider.getText(valueSet);

+            labels.add(text);

+        }

+    }

+

+    public void update() {

+        int index = 0;

+        for (Object valueSet : dataProvider.getValueSets(dataSource)) {

+            List<Double> values = (List<Double>) dataProvider.getValues(valueSet);

+            numbers.set(index++, values.get(values.size() - 1));

+        }

+    }

+

+    public void setLabels(Collection<String> labels) {

+        this.labels = labels;

+    }

+

+    public Collection<String> getLabels() {

+        return labels;

+    }

+

+    public void setNumbers(List<Double> numbers) {

+        this.numbers = numbers;

+    }

+

+    public List<Double> getNumbers() {

+        return numbers;

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/PieStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/PieStrategy.java
new file mode 100644
index 0000000..2c22aee
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/PieStrategy.java
@@ -0,0 +1,62 @@
+package org.eclipse.amp.agf.chart;

+

+import org.eclipse.birt.chart.model.Chart;

+import org.eclipse.birt.chart.model.ChartWithoutAxes;

+import org.eclipse.birt.chart.model.attribute.ChartDimension;

+import org.eclipse.birt.chart.model.component.Series;

+import org.eclipse.birt.chart.model.component.impl.SeriesImpl;

+import org.eclipse.birt.chart.model.data.NumberDataSet;

+import org.eclipse.birt.chart.model.data.SeriesDefinition;

+import org.eclipse.birt.chart.model.data.TextDataSet;

+import org.eclipse.birt.chart.model.data.impl.NumberDataSetImpl;

+import org.eclipse.birt.chart.model.data.impl.SeriesDefinitionImpl;

+import org.eclipse.birt.chart.model.data.impl.TextDataSetImpl;

+import org.eclipse.birt.chart.model.impl.ChartWithoutAxesImpl;

+import org.eclipse.birt.chart.model.type.PieSeries;

+import org.eclipse.birt.chart.model.type.impl.PieSeriesImpl;

+

+public class PieStrategy extends LastValueStrategy {

+

+    private PieSeries numberSeries;

+    private Series labelSeries;

+    private SeriesDefinition labelDefinition;

+    private SeriesDefinition numberDefinition;

+

+    public Chart createChart(IDataProvider dataProvider, Object dataSource) {

+        this.dataProvider = dataProvider;

+        this.dataSource = dataSource;

+        ChartWithoutAxes chart = ChartWithoutAxesImpl.create();

+        setChart(chart);

+        chart.setDimension(ChartDimension.TWO_DIMENSIONAL_LITERAL);

+        chart.setType("Pie Chart"); //$NON-NLS-1$

+        chart.setSubType("Standard Pie Chart"); //$NON-NLS-1$

+

+        // Plot

+        chart.setSeriesThickness(10);

+

+        // Data Set

+        TextDataSet labelSet = TextDataSetImpl.create(getLabels());//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$

+        NumberDataSet numberSet = NumberDataSetImpl.create(getNumbers());

+

+        labelSeries = SeriesImpl.create();

+        labelSeries.setDataSet(labelSet);

+

+        labelDefinition = SeriesDefinitionImpl.create();

+        chart.getSeriesDefinitions().add(labelDefinition);

+        labelDefinition.getSeriesPalette().shift(0);

+        labelDefinition.getSeries().add(labelSeries);

+

+        numberSeries = (PieSeries) PieSeriesImpl.create();

+        numberSeries.setDataSet(numberSet);

+        numberSeries.setExplosion(0);

+

+        numberDefinition = SeriesDefinitionImpl.create();

+        numberDefinition.getSeries().add(numberSeries);

+        labelDefinition.getSeriesDefinitions().add(numberDefinition);

+        return chart;

+    }

+

+    public SeriesDefinition getValueSetsDefinition() {

+        return labelDefinition;

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/StackAreaStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/StackAreaStrategy.java
new file mode 100644
index 0000000..f919387
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/StackAreaStrategy.java
@@ -0,0 +1,15 @@
+package org.eclipse.amp.agf.chart;

+

+import org.eclipse.birt.chart.model.component.Series;

+import org.eclipse.birt.chart.model.type.AreaSeries;

+import org.eclipse.birt.chart.model.type.impl.AreaSeriesImpl;

+

+public class StackAreaStrategy extends BasicAxesChartStrategy {

+

+    public void addValueSet(Object valueSet) {

+        Series series = AreaSeriesImpl.create();

+        ((AreaSeries) series).getMarkers().clear();

+        ((AreaSeries) series).setStacked(true);

+        addValueSeries(series, valueSet);

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/TimeSeriesStrategy.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/TimeSeriesStrategy.java
new file mode 100644
index 0000000..e59816a
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/TimeSeriesStrategy.java
@@ -0,0 +1,14 @@
+package org.eclipse.amp.agf.chart;

+

+import org.eclipse.birt.chart.model.type.LineSeries;

+import org.eclipse.birt.chart.model.type.impl.LineSeriesImpl;

+

+public class TimeSeriesStrategy extends BasicAxesChartStrategy {

+

+    public void addValueSet(Object valueSet) {

+        LineSeries series = (LineSeries) LineSeriesImpl.create();

+        series.getMarkers().clear();

+        series.setPaletteLineColor(true);

+        addValueSeries(series, valueSet);

+    }

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectAreaAction.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectAreaAction.java
index ef72d29..7b5918c 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectAreaAction.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectAreaAction.java
@@ -16,8 +16,9 @@
 package org.eclipse.amp.agf.chart.ide;

 

 import org.eclipse.amp.agf.chart.ChartEditPart;

+import org.eclipse.amp.agf.chart.ChartType;

 import org.eclipse.amp.agf.chart.ChartViewPart;

-import org.eclipse.amp.agf.chart.ChartEditPart.ChartType;

+import org.eclipse.amp.agf.chart.IChartDesignStrategy;

 import org.eclipse.jface.action.IAction;

 import org.eclipse.jface.viewers.ISelection;

 import org.eclipse.ui.IViewActionDelegate;

@@ -37,8 +38,9 @@
      * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)

      */

     public void run(IAction action) {

-        editor.setChartType(ChartType.STACKED_AREA);

-        editor.updateYSeries();

+        IChartDesignStrategy createChart = ChartType.STACKED_AREA.createStrategy();

+        editor.setChartStrategy(createChart);

+        createChart.update();

     }

 

     /**

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectHistogramAction.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectHistogramAction.java
new file mode 100644
index 0000000..74c973a
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectHistogramAction.java
@@ -0,0 +1,61 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

+ * 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:

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+package org.eclipse.amp.agf.chart.ide;

+

+import org.eclipse.amp.agf.chart.ChartEditPart;

+import org.eclipse.amp.agf.chart.ChartType;

+import org.eclipse.amp.agf.chart.ChartViewPart;

+import org.eclipse.amp.agf.chart.IChartDesignStrategy;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.ui.IViewActionDelegate;

+import org.eclipse.ui.IViewPart;

+

+

+// TODO: Auto-generated Javadoc

+/**

+ * The Class DisplayLegendAction.

+ */

+public class SelectHistogramAction implements IViewActionDelegate {

+

+    ChartEditPart editor;

+

+    /**

+     *

+     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)

+     */

+    public void run(IAction action) {

+        IChartDesignStrategy createChart = ChartType.HISTOGRAM.createStrategy();

+        editor.setChartStrategy(createChart);

+        createChart.update();

+    }

+

+    /**

+     *

+     * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)

+     */

+    public void init(IViewPart view) {

+        editor = (ChartEditPart) ((ChartViewPart) view).getEditPart();

+    }

+

+    /**

+     *

+     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)

+     */

+    public void selectionChanged(IAction action, ISelection selection) {

+    }

+

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectPieAction.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectPieAction.java
new file mode 100644
index 0000000..bc5d776
--- /dev/null
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectPieAction.java
@@ -0,0 +1,61 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

+ * 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:

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+package org.eclipse.amp.agf.chart.ide;

+

+import org.eclipse.amp.agf.chart.ChartEditPart;

+import org.eclipse.amp.agf.chart.ChartType;

+import org.eclipse.amp.agf.chart.ChartViewPart;

+import org.eclipse.amp.agf.chart.IChartDesignStrategy;

+import org.eclipse.jface.action.IAction;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.ui.IViewActionDelegate;

+import org.eclipse.ui.IViewPart;

+

+

+// TODO: Auto-generated Javadoc

+/**

+ * The Class DisplayLegendAction.

+ */

+public class SelectPieAction implements IViewActionDelegate {

+

+    ChartEditPart editor;

+

+    /**

+     *

+     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)

+     */

+    public void run(IAction action) {

+        IChartDesignStrategy createChart = ChartType.PIE.createStrategy();

+        editor.setChartStrategy(createChart);

+        createChart.update();

+    }

+

+    /**

+     *

+     * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)

+     */

+    public void init(IViewPart view) {

+        editor = (ChartEditPart) ((ChartViewPart) view).getEditPart();

+    }

+

+    /**

+     *

+     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)

+     */

+    public void selectionChanged(IAction action, ISelection selection) {

+    }

+

+}

diff --git a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectTimeSeriesAction.java b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectTimeSeriesAction.java
index 55b1c45..cc34382 100644
--- a/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectTimeSeriesAction.java
+++ b/org.eclipse.amp.agf/plugins/org.eclipse.amp.agf.chart/src/org/eclipse/amp/agf/chart/ide/SelectTimeSeriesAction.java
@@ -16,8 +16,9 @@
 package org.eclipse.amp.agf.chart.ide;

 

 import org.eclipse.amp.agf.chart.ChartEditPart;

+import org.eclipse.amp.agf.chart.ChartType;

 import org.eclipse.amp.agf.chart.ChartViewPart;

-import org.eclipse.amp.agf.chart.ChartEditPart.ChartType;

+import org.eclipse.amp.agf.chart.IChartDesignStrategy;

 import org.eclipse.jface.action.IAction;

 import org.eclipse.jface.viewers.ISelection;

 import org.eclipse.ui.IViewActionDelegate;

@@ -37,8 +38,9 @@
      * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)

      */

     public void run(IAction action) {

-        editor.setChartType(ChartType.TIME_SERIES);

-        editor.updateYSeries();

+        IChartDesignStrategy createChart = ChartType.TIME_SERIES.createStrategy();

+        editor.setChartStrategy(createChart);

+        createChart.update();

     }

 

     /**