Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MultipleItemsSelector.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MultipleItemsSelector.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MultipleItemsSelector.java	(revision 137)
@@ -5,8 +5,6 @@
 
 import java.text.Collator;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -19,7 +17,7 @@
 import org.jfree.chart.plot.CategoryPlot;
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.data.xy.XYDataset;
-import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
+import org.txm.ca.core.chartsengine.jfreechart.datasets.FCAXYDataset;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 
 /**
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/interfaces/IItemSelectionRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/interfaces/IItemSelectionRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/interfaces/IItemSelectionRenderer.java	(revision 137)
@@ -2,6 +2,7 @@
 
 import java.awt.Paint;
 
+import org.jfree.chart.ChartPanel;
 import org.jfree.chart.event.RendererChangeEvent;
 import org.jfree.chart.plot.CategoryPlot;
 import org.jfree.chart.plot.Plot;
@@ -17,9 +18,7 @@
 public interface IItemSelectionRenderer {
 
 	
-	
-	
-	
+
 	/**
 	 * Gets the item selector.
 	 * @return the item selector assigned to the renderer
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MouseOverItemSelector.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MouseOverItemSelector.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/renderers/MouseOverItemSelector.java	(revision 137)
@@ -5,11 +5,12 @@
 import java.util.List;
 import java.util.Map;
 
+import org.jfree.chart.ChartPanel;
 import org.jfree.chart.event.RendererChangeEvent;
 import org.jfree.chart.plot.SeriesRenderingOrder;
 import org.jfree.chart.plot.XYPlot;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionXYLineAndShapeRenderer;
 
 /**
@@ -71,6 +72,8 @@
 	protected Map<Integer, List<Integer>> itemsToDrawAsLastElements;
 	
 	
+	protected ChartPanel chartPanel;
+	
 	/**
 	 * 
 	 * @param renderer
@@ -346,5 +349,21 @@
 		// TODO Auto-generated method stub
 		
 	}
+
+
+	/**
+	 * @return the chartPanel
+	 */
+	public ChartPanel getChartPanel() {
+		return chartPanel;
+	}
+
+
+	/**
+	 * @param chartPanel the chartPanel to set
+	 */
+	public void setChartPanel(ChartPanel chartPanel) {
+		this.chartPanel = chartPanel;
+	}
 	
 }
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartsEngine.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartsEngine.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartsEngine.java	(revision 137)
@@ -1,7 +1,5 @@
 package org.txm.chartsengine.jfreechart.core;
 
-import java.awt.BasicStroke;
-import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
@@ -10,55 +8,29 @@
 import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
-import org.eclipse.core.runtime.Platform;
 import org.jfree.chart.ChartFactory;
 import org.jfree.chart.JFreeChart;
-import org.jfree.chart.annotations.XYAnnotation;
-import org.jfree.chart.annotations.XYLineAnnotation;
-import org.jfree.chart.annotations.XYTextAnnotation;
 import org.jfree.chart.axis.NumberAxis;
 import org.jfree.chart.axis.ValueAxis;
 import org.jfree.chart.plot.CategoryPlot;
-import org.jfree.chart.plot.Marker;
 import org.jfree.chart.plot.PlotOrientation;
-import org.jfree.chart.plot.ValueMarker;
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.data.category.CategoryDataset;
 import org.jfree.data.category.DefaultCategoryDataset;
 import org.jfree.data.general.DatasetUtilities;
 import org.jfree.data.general.PieDataset;
 import org.jfree.data.xy.IntervalXYDataset;
-import org.jfree.data.xy.XYDataset;
-import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jfree.graphics2d.svg.SVGGraphics2D;
-import org.jfree.ui.RectangleAnchor;
-import org.jfree.ui.TextAnchor;
 import org.txm.chartsengine.core.ChartsEngine;
-import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
 import org.txm.chartsengine.jfreechart.core.preferences.JFCChartsEnginePreferences;
-import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
-import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
 import org.txm.chartsengine.jfreechart.core.themes.base.SymbolAxisBetweenTicks;
 import org.txm.chartsengine.jfreechart.core.themes.base.Theme;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.HighchartsDefaultTheme;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.core.chartsengine.jfreechart.messages.JFreeChartsEngineMessages;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
-import org.txm.searchengine.cqp.corpus.query.Query;
-import org.txm.stat.StatException;
-import org.txm.utils.logger.Log;
 
 import com.lowagie.text.Document;
 import com.lowagie.text.Rectangle;
@@ -88,7 +60,7 @@
 	/**
 	 * The charts engine description.
 	 */
-	public final static String DESCRIPTION = JFreeChartsEngineMessages.JFCChartsEngine_ENGINE_DESCRIPTION;
+	public final static String DESCRIPTION = "Java";
 
 	/**
 	 * The rendering theme.
@@ -127,115 +99,8 @@
 		this(TXMPreferences.getString(JFCChartsEnginePreferences.PREFERENCE_NODE, JFCChartsEnginePreferences.OUTPUT_FORMAT));
 	}
 	
-	/**
-	 * Add some borders to the limits of the specified XY plot.
-	 * @param plot
-	 */
-	public static void createCAFactorialMapChartLimitsBorder(JFreeChart chart)	{
 
-		XYPlot plot = chart.getXYPlot();
 
-		// Remove all existent annotations
-		for(int i = plot.getAnnotations().size() - 1; i >= 0; i--) {
-			plot.removeAnnotation((XYAnnotation) plot.getAnnotations().get(i));
-		}
-
-
-        // Gets the extreme coordinates values
-		double minX = 0, maxX = 0, minY = 0, maxY = 0;
-
-		// FIXME: new version
-//		minX = plot.getDataRange(plot.getDomainAxis()).getLowerBound();
-//		maxX = plot.getDataRange(plot.getDomainAxis()).getUpperBound();
-//
-//		minY = plot.getDataRange(plot.getRangeAxis()).getLowerBound();
-//		maxY = plot.getDataRange(plot.getRangeAxis()).getUpperBound();
-
-		// FIXME: old version, to remove when new version will be validated
-		// Rows
-		if(plot.getRenderer().isSeriesVisible(0))	{
-			minX = ((FCAXYDataset)plot.getDataset()).getMinX(0);
-		}
-		// Cols
-		if(plot.getRenderer().isSeriesVisible(1))	{
-			double tmpMinX = ((FCAXYDataset)plot.getDataset()).getMinX(1);
-			if(tmpMinX < minX)	{
-				minX = tmpMinX;
-			}
-		}
-
-		// Rows
-		if(plot.getRenderer().isSeriesVisible(0))	{
-			maxX = ((FCAXYDataset)plot.getDataset()).getMaxX(0);
-		}
-		// Cols
-		if(plot.getRenderer().isSeriesVisible(1))	{
-			double tmpMaxX = ((FCAXYDataset)plot.getDataset()).getMaxX(1);
-			if(tmpMaxX > maxX)	{
-				maxX = tmpMaxX;
-			}
-		}
-
-		// Rows
-		if(plot.getRenderer().isSeriesVisible(0))	{
-			minY = ((FCAXYDataset)plot.getDataset()).getMinY(0);
-		}
-		// Cols
-		if(plot.getRenderer().isSeriesVisible(1))	{
-			double tmpMinY = ((FCAXYDataset)plot.getDataset()).getMinY(1);
-			if(tmpMinY < minY)	{
-				minY = tmpMinY;
-			}
-		}
-
-		// Rows
-		if(plot.getRenderer().isSeriesVisible(0))	{
-			maxY = ((FCAXYDataset)plot.getDataset()).getMaxY(0);
-		}
-		// Cols
-		if(plot.getRenderer().isSeriesVisible(1))	{
-			double tmpMaxY = ((FCAXYDataset)plot.getDataset()).getMaxY(1);
-			if(tmpMaxY > maxY)	{
-				maxY = tmpMaxY;
-			}
-		}
-
-		// Add some margins to the border
-		// FIXME : to compute according to the real series shape dimensions
-		// The code below doesn't work
-//		double shapeHalfWidth = chart.getXYPlot().getRenderer().getSeriesShape(0).getBounds2D().getWidth() / 2;
-		double shapeHalfWidth = 0.02;
-		minX -= shapeHalfWidth;
-		maxX += shapeHalfWidth;
-		minY -= shapeHalfWidth;
-		maxY += shapeHalfWidth;
-
-
-		// Create the border
-		BasicStroke dashedStroke = new BasicStroke(0.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f, new float[] {2f}, 0f);
-		XYLineAnnotation annotation;
-		Color borderColor = Color.GRAY;
-
-		// Left border
-		annotation = new XYLineAnnotation(minX, minY, minX, maxY, dashedStroke, borderColor);
-        plot.addAnnotation(annotation);
-
-        // Right border
-		annotation = new XYLineAnnotation(maxX, minY, maxX, maxY, dashedStroke, borderColor);
-        plot.addAnnotation(annotation);
-
-		// Bottom border
-		annotation = new XYLineAnnotation(minX, minY, maxX, minY, dashedStroke, borderColor);
-        plot.addAnnotation(annotation);
-
-        // Top border
-		annotation = new XYLineAnnotation(minX, maxY, maxX, maxY, dashedStroke, borderColor);
-        plot.addAnnotation(annotation);
-
-	}
-
-
-
 	/**
 	 * Creates an XY line chart from the specified dataset.
 	 * @param dataset
@@ -529,7 +394,7 @@
 
     	// Domain axis symbols instead of values
     	if(domainAxisSymbols != null)	{
-            chart.getXYPlot().setDomainAxis(new SymbolAxisBetweenTicks(ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_X_AXIS_LABEL, domainAxisSymbols));
+            chart.getXYPlot().setDomainAxis(new SymbolAxisBetweenTicks(xAxisLabel, domainAxisSymbols));
     	}
 
 		// Apply theme to the chart
@@ -556,773 +421,33 @@
 	}
 
 
-	/**
-	 * Creates a FCA scatter plot from the specified dataset.
-	 * @param dataset
-	 * @return the JFreeChart chart
-	 */
-	public JFreeChart createCAFactorialMapChart(FCAXYDataset dataset, String title, String xAxisLabel, String yAxisLabel) {
 
-		JFreeChart chart = ChartFactory.createScatterPlot(title, xAxisLabel, yAxisLabel, dataset, PlotOrientation.VERTICAL, true, false, false);
 
-		// Add some borders to the limits of the CA
-		JFCChartsEngine.createCAFactorialMapChartLimitsBorder(chart);
 
-		// Custom renderer
-		chart.getXYPlot().setRenderer(this.theme.createFCARenderer());
 
-		return chart;
-	}
 
-
-	@Override
-	public JFreeChart createCAFactorialMapChart(CA ca) {
-
-		JFreeChart chart  = null;
-
-		try {
-			FCAXYDataset dataset = new FCAXYDataset(ca);
-
-			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			double singularValuesSum = ca.getValeursPropresSum();
-
-			String percent1 = f.format(100 * ca.getValeursPropres()[ca.getFirstDimension() - 1] / singularValuesSum);
-			String axis1 = ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + ca.getFirstDimension() + " (" + percent1 + "%)";
-			String percent2 = f.format(100 * ca.getValeursPropres()[ca.getSecondDimension() - 1] / singularValuesSum);
-			String axis2 = ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX  + " " + ca.getSecondDimension() + " (" + percent2 + "%)";
-			chart = this.createCAFactorialMapChart(dataset, this.createCAFactorialMapChartTitle(ca), axis1, axis2);
-
-		}
-		catch(StatException e) {
-			Log.severe("Can't create CA factorial map scatter plot" + e);
-		}
-
-		// Apply theme to the chart
-		this.theme.apply(chart);
-
-		return chart;
-	}
-
-	@Override
-	public File createCAFactorialMapChartFile(CA ca, File file) {
-		return this.export(this.createCAFactorialMapChart(ca), file);
-	}
-
-
-	@Override
-	public JFreeChart createCASingularValuesBarChart(CA ca) {
-
-		JFreeChart chart = null;
-
-		try {
-			// Creating the data set from the CA result
-			DefaultCategoryDataset dataset = new DefaultCategoryDataset();
-			double[] singularValues = ca.getValeursPropres();
-
-			for(int i = 0; i < singularValues.length; i++) {
-				dataset.setValue(singularValues[i], ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_Y_LABEL, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + String.valueOf(i + 1));
-			}
-
-			// Create the chart
-			chart = this.createCategoryBarChart(dataset, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL, false, false, false);
-
-			// Custom renderer
-			chart.getCategoryPlot().setRenderer(this.theme.createCASingularValuesRenderer());
-	        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).getItemsSelector().setResultData(ca);
-
-	        // Custom range axis for ticks drawing options
-	        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
-
-		}
-		catch(StatException e) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_CANT_CREATE_CHART + e);
-		}
-
-		// Apply theme to the chart
-		this.theme.apply(chart);
-
-		return chart;
-	}
-
-
-	@Override
-	public File createCASingularValuesBarChartFile(CA ca, File file) {
-		return this.export(this.createCASingularValuesBarChart(ca), file);
-	}
-
-
-	// FIXME: old version with bar plot renderer
-	@Override
-	public JFreeChart createCAH2dChart(CAH cah) {
-
-
-		JFreeChart chart = null;
-
-		// Creating the data set from the result
-		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
-		String category = "cluster ";
-
-
-
-		int[] clusterNumbers = cah.getClusterNumbers();
-		String[] rowNames = cah.getClusterRowNames();
-		String[] orderedRowNames = cah.getClusterOrderedRowNames();
-		double[] clusterHeights = cah.getClusterTreeHeights();
-		double[][] clusterMerges = cah.getClusterTreeMerges();
-		double[][] clusterCoords = cah.getClusterCoords();
-
-		double[] yValuesByOrderedRowNames = new double[rowNames.length];
-		double[] clusterNumbersValuesByOrderedRowNames = new double[rowNames.length];
-
-
-
-		// FIXME: Sort the cluster numbers in reverse order
-//			Arrays.sort(clusterNumbers);
-//			ArrayUtils.reverse(clusterNumbers);
-//			System.out.println(Arrays.toString(clusterNumbers));
-
-
-		// FIXME: tests row names
-		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster row names: \t\t" + Arrays.toString(rowNames));
-
-		// FIXME: tests ordered row names
-		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster ordered row names: \t" + Arrays.toString(orderedRowNames));
-
-		// FIXME: tests, ordered cluster numbers
-		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster numbers: \t\t" + Arrays.toString(clusterNumbers));
-
-		// FIXME: tests, cluster tree merges
-		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster tree merges: \t\t" + Arrays.toString(clusterMerges));
-
-		// FIXME: tests, heights
-//		System.err.println("JFCChartsEngine.createCAH2dChart(): cluster heights: \t\t" + Arrays.toString(clusterHeights));
-
-
-		// FIXME: tests
-		System.err.println("JFCChartsEngine.createCAH2dChart(): tests: \t\t" + Arrays.toString(cah.getInertiaGains()));
-
-
-
-		System.out.println("JFCChartsEngine.createCAH2dChart() cluster heights count: " + clusterHeights.length);
-		for(int i = 0; i < clusterHeights.length; i++) {
-			System.out.println("JFCChartsEngine.createCAH2dChart() cluster height: " + new DecimalFormat("0.00000000000000000").format(clusterHeights[i]));
-		}
-
 //
-//		String[] clusterUnorderedRowNames = cah.getClusterRowNames();
-//		for(int i = 0; i < clusterUnorderedRowNames.length; i++) {
-//			System.out.println("JFCChartsEngine.createCAH2dChart() unordered row names " + i + " : " + clusterUnorderedRowNames[i]);
-//		}
-
-		// Parse the merge pairs
-		// A negative number in the FactoMineR tree merge table means a singleton
-		for (int i = 0 ; i < clusterMerges.length ; i++) {
-
-			// FIXME: debug
-			//for (int j = 0 ; j < clusterMerges.length ; j++) {
-				System.err.println("JFCChartsEngine.createCAH2dChart(): cluster tree merges: \t\t" + Arrays.toString(clusterMerges[i]));
-				System.err.println("JFCChartsEngine.createCAH2dChart(): row names: \t\t" + rowNames[(int) Math.abs(clusterMerges[i][0]) - 1] + " | " + rowNames[(int) Math.abs(clusterMerges[i][1]) - 1]);
-
-
-			//}
-
-			// Leaves pair
-			if(clusterMerges[i][0] < 0)	{
-
-				//System.err.print("JFCChartsEngine.createCAH2dChart(): merging: " + rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]);
-
-				// Put the height in the ordered by names values table
-				for(int j = 0; j < orderedRowNames.length; j++) {
-					if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerges[i][0]) - 1]))	{
-						yValuesByOrderedRowNames[j] = clusterHeights[i];
-						//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][0]) - 1];
-					}
-				}
-
-			}
-			// Non-singleton
-//				else	{
-//					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging aggregation: " +  clusterMerge[i][0]);
-//				}
-
-			// Leaves pair
-			if(clusterMerges[i][1] < 0)	{
-				//System.err.print(" with: " + rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]);
-
-				// Put the height in the ordered by names values table
-				for(int j = 0; j < orderedRowNames.length; j++) {
-					if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerges[i][1]) - 1]))	{
-						yValuesByOrderedRowNames[j] = clusterHeights[i];
-						//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][1]) - 1];
-					}
-
-				}
-
-			}
-			// Non-singleton
-//				else	{
-//					//System.err.print(" with aggregation: " + clusterMerge[i][1]);
-//				}
-
-			//System.err.println(" and height: " + clusterHeights[i] + " as aggregation: " + (i + 1));
-
-		}
-
-
-		//
-//		for (int i = 0 ; i <  cah.getClusterTreeMerges().length; i++) {
-//			System.err.println("JFCChartsEngine.createCAH2dChart() merges : ");
-//			for(int j = 0; j < cah.getClusterTreeMerges()[i].length; j++) {
-//				System.err.print(" : " + cah.getClusterTreeMerges()[i][j]);
-//			}
-//		}
-
-
-
-//		ArrayList<Double> middlePoints = cah.getClusterTreeMiddlePoints();
+//	@Override
+//	public File createCAH2dChartFile(CAH cah, File file) {
+//		return this.export(this.createCAH2dChart(cah), file);
+//	}
 //
-//		for (int i = 0 ; i <  middlePoints.size(); i++) {
-//			System.err.println("JFCChartsEngine.createCAH2dChart() middle points X: " + middlePoints.get(i));
-//		}
-
-
-
-//		for (int i = 0 ; i < cah.getClusterCoords().length ; i++) {
-//			for(int j = 0; j < cah.getClusterCoords()[i].length; j++) {
-//				//System.err.println("JFCChartsEngine.createCAH2dChart(): " + cah.getClusterCoords()[i][j]);
-//				dataset.setValue(cah.getClusterCoords()[i][j], category + clusterNumbers[i], rownames[i]);
-//			}
-//		}
-
-
-
-		// Create chart title
-		String title = "title";
-		String xAxisLabel = "Column";
-		if(!cah.isColumnsComputing())	{
-			xAxisLabel = "Row";
-		}
-
-
-
-		// Create the data set
-		// FIXME: bar plot test
-//		for(int i = 0; i < yValuesByOrderedRowNames.length; i++) {
-//			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[clusterNumbers.length - 1 - i], orderedRowNames[i]);
 //
-//
-//			dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
-//			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[i], orderedRowNames[i]);
-//
-//			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbersValuesByOrderedRowNames[i], orderedRowNames[i]);
-//		}
-//
-//		// Create the chart
-//        chart = this.createCategoryBarChart(dataset, title, xAxisLabel, "Height", false, false, false);
-//        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
-//
-//        // Draw tree
-//        for(int j = 0; j < chart.getCategoryPlot().getDataset().getColumnCount() - 1; j++) {
-//			//System.err.println("JFCChartsEngine.createCAH2dChart(): " + chart.getCategoryPlot().getDataset().getColumnKey(j));
-//
-//
-//        	// Non-singleton pairs lines
-//			if(yValuesByOrderedRowNames[j] == yValuesByOrderedRowNames[j + 1])	{
-//				chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation(chart.getCategoryPlot().getDataset().getColumnKey(j), yValuesByOrderedRowNames[j],
-//						chart.getCategoryPlot().getDataset().getColumnKey(j + 1), yValuesByOrderedRowNames[j + 1], Color.red, new BasicStroke(2.0f)));
-//			}
-//
-//
-//			//chart.getCategoryPlot().addAnnotation(new Cate
-//
-//
-//
-//		}
-
-
-
-		// Create the data set
-		// FIXME: step chart test
-//		for(int i = 0; i < yValuesByOrderedRowNames.length - 1; i++) {
-//			if(yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i + 1])	{
-//				dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
-//			}
-//		}
-////		dataset.addValue(0, "test", "truc 1");
-////		dataset.addValue(0.5, "test", "truc 1");
-////		dataset.addValue(0.9, "test", "truc 1");
-//		// Create the chart
-//        chart = this.createCategoryStepChart(dataset, title, xAxisLabel, "Height", false, false);
-//        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
-
-
-		// Create the data set
-		// FIXME: XY category bar chart test
-		XYSeriesCollection dataset2 = new XYSeriesCollection();
-
-		// Last tree level (leaves level)
-		XYSeries series = new XYSeries("leaves");
-		for(int i = 0; i < yValuesByOrderedRowNames.length - 1; i++) {
-			series.add(i, 0);
-			series.add(i, yValuesByOrderedRowNames[i]);
-			if(yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i + 1])	{
-				series.add(i + 1, yValuesByOrderedRowNames[i]);
-				series.add(i + 1, 0);
-			}
-			else	{
-				series.add(i + 1, null);
-			}
-		}
-		dataset2.addSeries(series);
-
-
-		// Link singletons to non singleton
-		series = new XYSeries("singleton to non singleton links");
-		for(int i = clusterHeights.length; i >= 0; i--) {
-
-			// Skip non singletons case
-			if(i > 3 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1] && yValuesByOrderedRowNames[i - 2] == yValuesByOrderedRowNames[i - 3])	{
-				continue;
-			}
-
-			// Link singletons to non singleton
-			if(i > 1 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1] && yValuesByOrderedRowNames[i - 1] != yValuesByOrderedRowNames[i - 2]) {
-				series.add(i - 0.5, yValuesByOrderedRowNames[i - 2]);
-				series.add(i - 0.5, yValuesByOrderedRowNames[i]);
-				series.add(i - 0.5, null);
-				series.add(i - 2, yValuesByOrderedRowNames[i - 2]);
-			}
-		}
-		dataset2.addSeries(series);
-
-		// Link singletons to newly created pairs
-		series = new XYSeries("singleton to newly created pairs");
-		for(int i = clusterHeights.length; i >= 0; i--) {
-
-			// Skip non singletons case
-			if(i > 0 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1])	{
-				series.add(i, null);
-				continue;
-			}
-
-			// Link singletons to newly created pairs
-			if(i < clusterHeights.length - 1 && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i + 1]
-					&& yValuesByOrderedRowNames[i + 1] != yValuesByOrderedRowNames[i + 2]
-
-//						&& i > 1 &&
-
-							) {
-
-				series.add(i, null);
-
-				series.add(i, yValuesByOrderedRowNames[i]);
-
-				series.add(i + 1.75, yValuesByOrderedRowNames[i]);
-				series.add(i + 1.75, yValuesByOrderedRowNames[i + 1]);
-
-
-				//series.add(i - 2, yValuesByOrderedRowNames[i - 2]);
-			}
-		}
-		dataset2.addSeries(series);
-
-
-
-		// Link singletons; test 2
-//		series = new XYSeries("singleton links");
-//		for(int i = 0; i <  clusterHeights.length - 2; i++) {
-//			if(i > 0 && i < clusterHeights.length - 2 && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i + 1] && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i - 1]) {
-//				series.add(i, yValuesByOrderedRowNames[i]);
-//				series.add(i + 1.5, yValuesByOrderedRowNames[i]);
-//				series.add(i + 1.5, yValuesByOrderedRowNames[i + 1]);
-//				series.add(i + 1.5, null);
-//			}
-//		}
-//		dataset2.addSeries(series);
-
-
-//		// Other clusters
-//		ArrayList<Double> otherClusters = new ArrayList<Double>();
-//		//series = new XYSeries("other clusters");
-//		for(int i = 0; i < clusterHeights.length; i++) {
-//			// If not a leaf
-//			boolean done = false;
-//			for(int j = 0; j < clusterNumbersValuesByOrderedRowNames.length; j++) {
-//				if(clusterHeights[i] == yValuesByOrderedRowNames[j])	{
-//					done = true;
-//					break;
-//				}
-//			}
-//			if(done)	{
-//				continue;
-//			}
-//			System.err.println("JFCChartsEngine.createCAH2dChart() other clusters: " + new DecimalFormat("0.0000000000000000").format(clusterHeights[i]));
-//		}
-//		//dataset2.addSeries(series);
-
-
-
-//		dataset.addValue(0, "test", "truc 1");
-//		dataset.addValue(0.5, "test", "truc 1");
-//		dataset.addValue(0.9, "test", "truc 1");
-		// Create the chart
-        //chart = this.createXYBarChart(dataset2, title, xAxisLabel, "Height", false, false);
-        chart = ChartFactory.createXYLineChart(
-        		title,      // chart title
-        		xAxisLabel,                      // x axis label
-                "height",                      // y axis label
-                dataset2,                  // data
-                PlotOrientation.VERTICAL,
-                true,                     // include legend
-                true,                     // tooltips
-                false                     // urls
-            );
-
-
-
-
-        chart.getXYPlot().setRenderer(this.theme.createXYLineAndShapeRenderer(true, false));
-        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
-
-
-        //chart.getXYPlot().addAnnotation(new XYLineAnnotation(0.5,  yValuesByOrderedRowNames[0], 0.5,  yValuesByOrderedRowNames[0] + 0.002));
-
-
-
-
-
-
-
-
-        //System.err.println("JFCChartsEngine.createCAH2dChart() " + chart.getCategoryPlot().getCategories().get(0));
-        //chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation("1970-12-31", .0002, "1965-12-31", .00005, Color.red, new BasicStroke(2.0f)));
-
-        // Custom range axis for ticks drawing options
-        //chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
-
-
-
-		// Apply theme to the chart
-		this.theme.apply(chart);
-
-
-
-		// FIXME: test algo R
-		int dimens = 2;
-		int ax1 = 0;
-		int ax2 = 1;
-		double x1, y1, x2, y2, w1, w2;
-
-		double h1, h2; // FIXME: when using 3 dimensions
-
-
-		double[][] aa = new double[clusterMerges.length][4];
-		for(int i = 0; i < clusterMerges.length; i++) {
-			for(int j = 0; j < 4; j++) {
-				aa[i][j] = 0;
-			}
-		}
-
-
-		   //aa=matrix(ncol=4, nrow=nrow(merge))
-
-
-
-
-		// Decrement/increment the cluster merge value because the R algorithm uses 1 as first table index
-
-		for(int i = 0; i < clusterMerges.length; i++) {
-			if(clusterMerges[i][0] < 0)	{
-				clusterMerges[i][0]++;
-			}
-			else	{
-				clusterMerges[i][0]--;
-			}
-
-			if(clusterMerges[i][1] < 0)	{
-				clusterMerges[i][1]++;
-			}
-			else	{
-				clusterMerges[i][1]--;
-			}
-		}
-
-
-		for(int i = 0; i < clusterMerges.length; i++) {
-
-//		    for(i in 1:nrow(merge)){
-			     // if(merge[i,1]<0){
-			// Singleton
-			if(clusterMerges[i][0] < 0)	{
-
-
-			        x1 = clusterCoords[(int) -clusterMerges[i][0]][ax1];
-			        y1 = clusterCoords[(int) -clusterMerges[i][0]][ax2];
-
-
-			        h1 = 0;
-			        w1 = 1;
-			      }
-			      else{
-			        x1 = aa[(int) clusterMerges[i][0]][0];
-			        y1 = aa[(int) clusterMerges[i][0]][1];
-			        w1 = aa[(int) clusterMerges[i][0]][3];
-			        h1 = aa[(int) clusterMerges[i][0]][2];
-			      }
-			// Singleton
-			if(clusterMerges[i][1] < 0)	{
-			      //if(merge[i,2]<0){
-			        x2 = clusterCoords[-(int) clusterMerges[i][1]][ax1];
-			        y2 = clusterCoords[-(int) clusterMerges[i][1]][ax2];
-			        h2 = 0;
-			        w2 = 1;
-			      }
-			      else{
-			        x2 = aa[(int) clusterMerges[i][1]][0];
-			        y2 = aa[(int) clusterMerges[i][1]][1];
-			        w2 = aa[(int) clusterMerges[i][1]][3];
-			        h2 = aa[(int) clusterMerges[i][1]][2];
-			      }
-			      aa[i][0] = (w1 * x1 + w2 * x2) / (w1 + w2);
-			      aa[i][1] = (w1 * y1 + w2 * y2) / (w1 + w2);
-
-			      //if(i<=nrow(merge)-t.level+1)
-			      if(i <= clusterMerges.length)	{
-			    	  clusterHeights[i] = 0;
-			      }
-
-			      aa[i][2] = clusterHeights[i];
-			      aa[i][3] = w1 + w2;
-
-//			      if(i>(nrow(merge)-t.level+1)){
-//			      if(i > clusterMerges[i][1]){ // FIXME: this test is strange
-//			        if(dimens==3) s$points3d(rbind(c(x1,y1,h1),c(x1,y1,height[i]), c(x2,y2,height[i]),c(x2,y2,h2)), lty=1, type="o", pch="")
-			        if(dimens == 2)	{
-			        //	lines(c(x1,x2), c(y1,y2), lwd=(height[i]/max(height))*3)
-
-			        	//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x2, y2));
-			        	// tests with steps lines
-			        	x1 *= 10;
-			        	x2 *= 10;
-			        	y1 /= 100;
-			        	y2 /= 100;
-
-			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x1, y2));
-			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y2, x2, y2));
-			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x2, y2, x2, y1));
-
-
-			        	// FIXME: labels tests
-			        	chart.getXYPlot().addAnnotation(new XYTextAnnotation(rowNames[(int) Math.abs(clusterMerges[i][0])], x1, y1));
-			        	chart.getXYPlot().addAnnotation(new XYTextAnnotation(rowNames[(int) Math.abs(clusterMerges[i][1])], x2, y1));
-
-
-
-//			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(y2, x1, y1, x1));
-
-
-			        	//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x2, y2, x2, y2));
-
-
-			        	System.err.println("JFCChartsEngine.createCAH2dChart(): draw line " + x1 + ", " + y1 + " | " + x2 + "," + y2);
-			        }
-//			      }
-		//	    }
-
-
-		}
-
-
-		// FIXME: test symbol axis
-		//chart.getXYPlot().setDomainAxis(new SymbolAxis("test symbol axis", new String[]{"A", "b", "c"}));
-
-		// FIXME: for cluster boxes we may use XYBoxAnnotation()
-
-
-		//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x2, y2));
-
-
-        return chart;
-
-	}
-
-	// FIXME: new version with category step renderer
 //	@Override
-//	public JFreeChart createCAH2dChart(CAH cah) {
+//	public JFreeChart createCAH3dChart(CAH cah) {
+//		// FIXME : tests CAH 3d
+//		return null;
+//	}
 //
 //
-//			JFreeChart chart = null;
-//
-//			// Creating the data set from the result
-//			DefaultCategoryDataset dataset = new DefaultCategoryDataset();
-//			String category = "cluster ";
-//
-//
-//
-//			int[] clusterNumbers = cah.getClusterNumbers();
-//			String[] rowNames = cah.getClusterRowNames();
-//			String[] orderedRowNames = cah.getClusterOrderedRowNames();
-//			double[] clusterHeights = cah.getClusterTreeHeights();
-//			double[][] clusterMerge = cah.getClusterTreeMerges();
-//
-//
-//			double[] yValuesByOrderedRowNames = new double[rowNames.length];
-//			double[] clusterNumbersValuesByOrderedRowNames = new double[rowNames.length];
-//
-//
-//
-//			// FIXME: Sort the cluster numbers in reverse order
-////			Arrays.sort(clusterNumbers);
-////			ArrayUtils.reverse(clusterNumbers);
-////			System.out.println(Arrays.toString(clusterNumbers));
-//
-//
-//			// FIXME: tests row names
-//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster row names: \t\t" + Arrays.toString(rowNames));
-//
-//			// FIXME: tests ordered row names
-//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster ordered row names: \t" + Arrays.toString(orderedRowNames));
-//
-//			// FIXME: tests, ordered cluster numbers
-//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster number: \t\t" + Arrays.toString(clusterNumbers));
-//
-//
-//
-//			for (int i = 0 ; i < clusterMerge.length ; i++) {
-//
-//				// Singleton
-//				if(clusterMerge[i][0] < 0)	{
-//
-//					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging: " + rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]);
-//
-//					// Put the height in the ordered by names values table
-//					for(int j = 0; j < orderedRowNames.length; j++) {
-//						if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]))	{
-//							yValuesByOrderedRowNames[j] = clusterHeights[i];
-//							//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][0]) - 1];
-//						}
-//					}
-//
-//				}
-//				// Non-singleton
-//				else	{
-//					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging aggregation: " +  clusterMerge[i][0]);
-//				}
-//
-//				// Singleton
-//				if(clusterMerge[i][1] < 0)	{
-//					//System.err.print(" with: " + rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]);
-//
-//					// Put the height in the ordered by names values table
-//					for(int j = 0; j < orderedRowNames.length; j++) {
-//						if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]))	{
-//							yValuesByOrderedRowNames[j] = clusterHeights[i];
-//							//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][1]) - 1];
-//						}
-//
-//					}
-//
-//				}
-//				// Non-singleton
-//				else	{
-//					//System.err.print(" with aggregation: " + clusterMerge[i][1]);
-//				}
-//
-//				//System.err.println(" and height: " + clusterHeights[i] + " as aggregation: " + (i + 1));
-//
-//			}
-//
-//
-//			// Create the data set
-//
-//			for(int i = 0; i < yValuesByOrderedRowNames.length; i++) {
-//				//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[clusterNumbers.length - 1 - i], orderedRowNames[i]);
-//
-//				dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
-//				//dataset.setValue(yValuesByOrderedRowNames[i], category, orderedRowNames[i]);
-//
-//				//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbersValuesByOrderedRowNames[i], orderedRowNames[i]);
-//			}
-//
-////
-////			for (int i = 0 ; i <  cah.getClusterTreeMerges().length; i++) {
-////				System.err.println("JFCChartsEngine.createCAH2dChart() merges : ");
-////				for(int j = 0; j < cah.getClusterTreeMerges()[i].length; j++) {
-////					System.err.print(" : " + cah.getClusterTreeMerges()[i][j]);
-////				}
-////			}
-//
-//
-//
-////			ArrayList<Double> middlePoints = cah.getClusterTreeMiddlePoints();
-////
-////			for (int i = 0 ; i <  middlePoints.size(); i++) {
-////				System.err.println("JFCChartsEngine.createCAH2dChart() middle points X: " + middlePoints.get(i));
-////			}
-//
-//
-//
-////			for (int i = 0 ; i < cah.getClusterCoords().length ; i++) {
-////				for(int j = 0; j < cah.getClusterCoords()[i].length; j++) {
-////					//System.err.println("JFCChartsEngine.createCAH2dChart(): " + cah.getClusterCoords()[i][j]);
-////					dataset.setValue(cah.getClusterCoords()[i][j], category + clusterNumbers[i], rownames[i]);
-////				}
-////			}
-//
-//
-//
-//			// Create chart title
-//			String title = "title";
-//			String xAxisLabel = "Column";
-//			if(!cah.isColumnsComputing())	{
-//				xAxisLabel = "Row";
-//			}
-//
-//
-//			// Create the chart
-//	        chart = this.createCategoryStepChart(dataset, title, xAxisLabel, "Height", false, false);
-//
-//
-//	        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
-//
-//
-//	        // Draw tree
-//	        chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation(chart.getCategoryPlot().getDataset().getColumnKey(0), 5.0,
-//	        		chart.getCategoryPlot().getDataset().getColumnKey(1), 8.0, Color.red, new BasicStroke(2.0f)));
-//
-//	        // Custom range axis for ticks drawing options: cut the range to minimum and maximum values
-//	        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
-//
-//
-//		return chart;
-//
-//
-//
-//
+//	@Override
+//	public File createCAH3dChartFile(CAH cah, File file) {
+//		return this.export(this.createCAH3dChart(cah), file);
 //	}
 
 
-	@Override
-	public File createCAH2dChartFile(CAH cah, File file) {
-		return this.export(this.createCAH2dChart(cah), file);
-	}
 
 
-	@Override
-	public JFreeChart createCAH3dChart(CAH cah) {
-		// FIXME : tests CAH 3d
-		return null;
-	}
-
-
-	@Override
-	public File createCAH3dChartFile(CAH cah, File file) {
-		return this.export(this.createCAH3dChart(cah), file);
-	}
-
-
-
-
 //	@Override
 //	public JFreeChart createPartitionDimensionsChart(Partition partition, boolean sortPartsBySize) {
 //
@@ -2235,243 +1360,67 @@
 
 
 
-	@Override
-	public void updateChartCAFactorialMapSetRowsVisible(Object chart, CA ca, boolean visible)	{
-		super.updateChartCAFactorialMapSetRowsVisible(chart, ca, visible);
 
-		((JFreeChart) chart).getXYPlot().getRenderer().setSeriesVisible(0, visible);
-
-		// Update the limits border
-		JFCChartsEngine.createCAFactorialMapChartLimitsBorder((JFreeChart) chart);
-
-	}
-
-
-	@Override
-	public void updateChartCAFactorialMapSetColumnsVisible(Object chart, CA ca, boolean visible)	{
-		super.updateChartCAFactorialMapSetColumnsVisible(chart, ca, visible);
-
-		((JFreeChart) chart).getXYPlot().getRenderer().setSeriesVisible(1, visible);
-
-		// Update the limits border
-		JFCChartsEngine.createCAFactorialMapChartLimitsBorder((JFreeChart) chart);
-
-	}
-
-
-
-	@Override
-	public void updateChartCAFactorialMapSetDimensions(Object chart, CA ca, int dimension1, int dimension2)	{
-		 super.updateChartCAFactorialMapSetDimensions(chart, ca, dimension1, dimension2);
-
-		 // Modify data set
-		 ((FCAXYDataset) ((JFreeChart) chart).getXYPlot().getDataset()).setAxis1(dimension1);
-		 ((FCAXYDataset) ((JFreeChart) chart).getXYPlot().getDataset()).setAxis2(dimension2);
-
-		 // Update axis labels
-		 // FIXME : create a method in CA to directly get a singular value as percent ?
-		 try {
-			 double sinuglarValuesSum = ca.getValeursPropresSum();
-			 DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			 ((JFreeChart) chart).getXYPlot().getDomainAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension1 + " (" + f.format(100 * ca.getValeursPropres()[dimension1 - 1] / sinuglarValuesSum) + "%)");
-			 ((JFreeChart) chart).getXYPlot().getRangeAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension2 + " (" + f.format(100 * ca.getValeursPropres()[dimension2 - 1] / sinuglarValuesSum) + "%)");
-
-			 // Refresh data set
-			 // FIXME : any way to fire a data set event rather than reassign the same data set ?
-			 ((JFreeChart) chart).getXYPlot().setDataset(((JFreeChart) chart).getXYPlot().getDataset());
-			// the code below doesn't neither center the view nor update the axes ticks of the new chart, continue tests
-			//((JFreeChart) chart).setNotify(true);
-
-
-			// Update the limits border
-			JFCChartsEngine.createCAFactorialMapChartLimitsBorder((JFreeChart) chart);
-
-		}
-		catch(StatException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	 }
-
-
-	@Override
-	public void updateChartCAFactorialMapHighlightPoints(Object chart, boolean rows, String[] labels) {
-
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((FCAItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-
-		// Rows
-		int series = 0;
-		// Columns
-		if(!rows)	{
-			series = 1;
-		}
-		selector.removeAllSelectedItems(series);
-		int[] items = ((FCAXYDataset)((JFreeChart) chart).getXYPlot().getDataset()).getLabelIndices(series, labels);
-
-		for(int i = 0; i < items.length; i++) {
-			selector.addSelectedItem(series, items[i]);
-		}
-
-		((JFreeChart) chart).setNotify(true);
-	}
-
-
-	@Override
-	public ArrayList<String> getCAFactorialMapChartSelectedRowPoints(Object chart) {
-		return this.getCAFactorialMapChartSelectedPoints(chart, 0);
-	}
-
-	@Override
-	public ArrayList<String> getCAFactorialMapChartSelectedColumnPoints(Object chart) {
-		return this.getCAFactorialMapChartSelectedPoints(chart, 1);
-	}
-
-	/**
-	 * Gets the currently selected item in the specified series in the chart.
-	 * @param chart
-	 * @param series
-	 * @return
-	 */
-	public ArrayList<String> getCAFactorialMapChartSelectedPoints(Object chart, int series) {
-
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((FCAItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-		ArrayList<String> pointLabels = new ArrayList<String>(selector.getSelectedItemsCount(series));
-
-		if(selector.getSelectedItemsCount(series) > 0)	{
-
-			FCAXYDataset dataset = (FCAXYDataset) ((JFreeChart) chart).getXYPlot().getDataset();
-			int[] selectedItems = selector.getSelectedItems(series);
-
-			for(int i = 0; i < selectedItems.length; i++) {
-				pointLabels.add(dataset.getLabel(series, selectedItems[i]));
-			}
-		}
-		return pointLabels;
-	}
-
-
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedPointPositions(Object chart) {
-
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-		ArrayList<Integer> pointPositionsInCorpora = new ArrayList<Integer>();
-
-
-		// FIXME: returns all the point positions
-		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
-		for(int i = 0; i < selector.getSelectedSeries().length; i++) {
-			int selectedSeries = selector.getSelectedSeries()[i];
-			int[] selectedItemsInSeries = selector.getSelectedItems(selectedSeries) ;
-			for(int j = 0; j < selectedItemsInSeries.length; j++) {
-				// if it's the dummy last chart point, get the previous point position instead of ther last one
-				if(selectedItemsInSeries[j] == dataset.getItemCount(selectedSeries) - 1)	{
-					pointPositionsInCorpora.add((int) (dataset.getXValue(selectedSeries, selectedItemsInSeries[j] - 1)));
-				}
-				else	{
-					pointPositionsInCorpora.add((int) (dataset.getXValue(selectedSeries, selectedItemsInSeries[j])));
-				}
-			}
-			
-		}
-
-		// put the last selected point at the end of the list
-		if(selector.getLastSelectedSeries() != -1 && selector.getLastSelectedItem() != -1)	{
-			int item = selector.getLastSelectedItem();
-			// if it's the dummy last chart point, get the previous point position instead of ther last one
-			if(item == dataset.getItemCount(selector.getLastSelectedSeries()) - 1)	{
-				item--;
-			}
-			
-			Integer lastSelectedPointPosition = (int) (dataset.getXValue(selector.getLastSelectedSeries(), item));
-			pointPositionsInCorpora.remove(lastSelectedPointPosition);
-			pointPositionsInCorpora.add(lastSelectedPointPosition);
-		}
-		
-		
-		// FIXME: old version which returns only 1 point position
-//		if(selector.getMultipleSelectedSeries().length > 0)	{
-//			int selectedSeries = selector.getMultipleSelectedSeries()[0];
-//			if(selector.getMouseOverItemInSeries(selectedSeries) != -1)	{
-//				XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
-//				// if it's the dummy last chart point, get the previous point position instead of ther last one
-//				if(selector.getMouseOverItemInSeries(selectedSeries) == dataset.getItemCount(selector.getMultipleSelectedSeries()[0]) - 1)	{
-//					pointPositionsInCorpora.add((int) (dataset.getXValue(selector.getMultipleSelectedSeries()[0], selector.getMouseOverItemInSeries(selectedSeries) - 1)));
-//				}
-//				else	{
-//					pointPositionsInCorpora.add((int) (dataset.getXValue(selector.getMultipleSelectedSeries()[0], selector.getMouseOverItemInSeries(selectedSeries))));
-//				}
-//				
-//			}
+//
+//
+//	@Override
+//	public void updateChartCAFactorialMapSetDimensions(Object chart, CA ca, int dimension1, int dimension2)	{
+//		 super.updateChartCAFactorialMapSetDimensions(chart, ca, dimension1, dimension2);
+//
+//		 // Modify data set
+//		 ((FCAXYDataset) ((JFreeChart) chart).getXYPlot().getDataset()).setAxis1(dimension1);
+//		 ((FCAXYDataset) ((JFreeChart) chart).getXYPlot().getDataset()).setAxis2(dimension2);
+//
+//		 // Update axis labels
+//		 // FIXME : create a method in CA to directly get a singular value as percent ?
+//		 try {
+//			 double sinuglarValuesSum = ca.getValeursPropresSum();
+//			 DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
+//			 ((JFreeChart) chart).getXYPlot().getDomainAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension1 + " (" + f.format(100 * ca.getValeursPropres()[dimension1 - 1] / sinuglarValuesSum) + "%)");
+//			 ((JFreeChart) chart).getXYPlot().getRangeAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension2 + " (" + f.format(100 * ca.getValeursPropres()[dimension2 - 1] / sinuglarValuesSum) + "%)");
+//
+//			 // Refresh data set
+//			 // FIXME : any way to fire a data set event rather than reassign the same data set ?
+//			 ((JFreeChart) chart).getXYPlot().setDataset(((JFreeChart) chart).getXYPlot().getDataset());
+//			// the code below doesn't neither center the view nor update the axes ticks of the new chart, continue tests
+//			//((JFreeChart) chart).setNotify(true);
+//
+//
+//			// Update the limits border
+//			JFCChartsEngine.createCAFactorialMapChartLimitsBorder((JFreeChart) chart);
+//
 //		}
-		
-		return pointPositionsInCorpora;
-	}
+//		catch(StatException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//	 }
+//
+//
+//	@Override
+//	public void updateChartCAFactorialMapHighlightPoints(Object chart, boolean rows, String[] labels) {
+//
+//		MultipleItemsSelector selector = (MultipleItemsSelector) ((FCAItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
+//
+//		// Rows
+//		int series = 0;
+//		// Columns
+//		if(!rows)	{
+//			series = 1;
+//		}
+//		selector.removeAllSelectedItems(series);
+//		int[] items = ((FCAXYDataset)((JFreeChart) chart).getXYPlot().getDataset()).getLabelIndices(series, labels);
+//
+//		for(int i = 0; i < items.length; i++) {
+//			selector.addSelectedItem(series, items[i]);
+//		}
+//
+//		((JFreeChart) chart).setNotify(true);
+//	}
+//
 
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedPointNumbers(Object chart) {
 
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-		ArrayList<Integer> pointNumbers = new ArrayList<Integer>();
-		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
-		
-		for(int i = 0; i < selector.getSelectedSeriesCount(); i++) {
-			int series = selector.getSelectedSeries()[i];
-			int[] items = selector.getSelectedItems(series);
-			int lastDummyItem = dataset.getItemCount(series) - 1; 
-			for(int j = 0; j < items.length; j++) {
-				int item = items[j];
-				// manage the first dummy point
-				if(item == 0)	{
-					item++;
-				}
-				// manage the last dummy point
-				else if(item == lastDummyItem)	 {
-					item--;
-				}
-				
-				pointNumbers.add(item);
-			}
-		}
-		
-		return pointNumbers;
-	}
-	
 
-	
-	@Override
-	public ArrayList<Integer> getProgressionChartAllPointPositions(Object chart) {
-
-		ArrayList<Integer> pointPositionsInCorpora = new ArrayList<Integer>();
-		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
-		
-		for(int i = 0; i < dataset.getSeriesCount(); i++) {
-			for(int j = 0; j < dataset.getItemCount(i) - 1; j++) { // -1 to skip the last dummy point of the step chart
-				pointPositionsInCorpora.add((int) dataset.getXValue(i, j));
-			}
-		}
-		
-		return pointPositionsInCorpora;
-	}
-	
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedSeries(Object chart) {
-		ArrayList<Integer> selectedSeries = new ArrayList<Integer>();
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-		Integer[] multipleSelectedSeries = selector.getSelectedSeries();
-		for(int i = 0; i < multipleSelectedSeries.length; i++) {
-			selectedSeries.add(multipleSelectedSeries[i]);
-		}
-		return selectedSeries;
-	}
-
-
-	@Override
-	public int getProgressionChartLastSelectedSeries(Object chart) {
-		return ((MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector()).getLastSelectedSeries();
-	}
-
-	
-
 	/**
 	 * Defines the theme to use for rendering charts.
 	 * @param theme the theme to set
@@ -2840,14 +1789,6 @@
 //	}
 	
 	
-	@Override
-	public void updateChartCAFactorialMapSetLabelItemsSelectionOrder(Object chart, String[] rowLabels, String[] colLabels) {
-		
-		MultipleItemsSelector selector = (MultipleItemsSelector) ((FCAItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
-		selector.setCyclicItemsOrder(selector.getItemsAndSeriesOrderedByLabels((FCAXYDataset)((JFreeChart) chart).getXYPlot().getDataset(), rowLabels, colLabels)); 
-	}
 
-
-
 	
 }
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartCreator.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartCreator.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/JFCChartCreator.java	(revision 137)
@@ -1,6 +1,8 @@
 package org.txm.chartsengine.jfreechart.core;
 
+import java.awt.Color;
 import java.io.File;
+import java.util.ArrayList;
 
 import org.jfree.chart.JFreeChart;
 import org.txm.chartsengine.core.ChartCreator;
@@ -53,7 +55,31 @@
 		
 	}
 	
+	
 	@Override
+	public ArrayList<Color> getSeriesShapesColors(Object chart) {
+		ArrayList<Color> colors = new ArrayList<Color>();
+		JFreeChart c = (JFreeChart) chart;
+
+		// XY plot
+		if(c.getXYPlot() != null)	{
+			for(int i = 0; i < c.getXYPlot().getSeriesCount(); i++) {
+				colors.add((Color) c.getXYPlot().getRenderer().getSeriesPaint(i));
+			}
+		}
+		// category plot
+		else if(c.getCategoryPlot() != null)	{
+			for(int i = 0; i < c.getCategoryPlot().getCategories().size(); i++) {
+				colors.add((Color) c.getCategoryPlot().getRenderer().getSeriesPaint(i));
+			}
+		}
+		return colors;
+	}
+
+
+
+	
+	@Override
 	public Class getChartsEngineClass() {
 		return JFCChartsEngine.class;
 	}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/CASingularValuesItemSelectionRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/CASingularValuesItemSelectionRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/CASingularValuesItemSelectionRenderer.java	(revision 137)
@@ -1,77 +0,0 @@
-package org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers;
-
-import java.awt.Color;
-import java.text.DecimalFormat;
-import java.util.List;
-
-import org.jfree.chart.labels.CategoryToolTipGenerator;
-import org.jfree.data.category.CategoryDataset;
-import org.jfree.data.category.DefaultCategoryDataset;
-import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.___ChartsEngine;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.functions.ca.CA;
-
-/**
- * Renderer providing item selection system and drawing features for selected item and custom rendering for CA singular values bar charts.
- * @author sjacquot
- *
- */
-public class CASingularValuesItemSelectionRenderer extends ItemSelectionCategoryBarRenderer {
-
-
-
-
-	/**
-	 * Percent values number format.
-	 */
-	protected DecimalFormat percentValuesNumberFormat;
-
-
-	/**
-	 * Creates a renderer dedicated to CA charts.
-	 */
-	public CASingularValuesItemSelectionRenderer() {
-		super();
-		this.setChartType(___ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES);
-
-		this.percentValuesNumberFormat = new DecimalFormat("#.00");
-	}
-
-
-
-	@Override
-	public void initToolTipGenerator(final IItemSelectionRenderer renderer)	{
-		this.setBaseToolTipGenerator(new CategoryToolTipGenerator() {
-
-			@Override
-			public String generateToolTip(CategoryDataset dataset, int row, int column) {
-
-				// Hexadecimal color
-				Color color = (Color) getSeriesPaint(row);
-				String hex = "#" + Integer.toHexString(color.getRGB()).substring(2);
-
-				DefaultCategoryDataset catDataset = (DefaultCategoryDataset) dataset;
-				Number value = catDataset.getValue(row, column);
-
-
-				CA ca = (CA) getItemsSelector().getResultData();
-				List<List<Object>> singularValuesData = ca.getSingularValuesInfos();
-
-				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>#" + catDataset.getColumnKey(column) + "</p>"
-						+ "<p><span style=\"color: " + hex + ";\">" + catDataset.getRowKey(row) + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
-							+ " </span><b>" + valuesNumberFormat.format(value) + "</b></p>"
-						+ "<p><span style=\"color: " + hex + ";\">" + ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_PERCENT + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
-							+ " </span><b>" + percentValuesNumberFormat.format(singularValuesData.get(column).get(2)) + "</b></p>"
-						+ "<p><span style=\"color: " + hex + ";\">" + ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_SUM + ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_PERCENT
-							+ ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
-							+ " </span><b>" + percentValuesNumberFormat.format(singularValuesData.get(column).get(3)) + "</b></p>"
-						+ "</body><html>";
-			}
-		});
-	}
-
-
-
-}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/FCAItemSelectionRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/FCAItemSelectionRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/FCAItemSelectionRenderer.java	(revision 137)
@@ -1,196 +0,0 @@
-package org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.Paint;
-import java.awt.Shape;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Area;
-import java.awt.geom.Rectangle2D;
-import java.awt.geom.RoundRectangle2D;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-
-import org.jfree.chart.ChartPanel;
-import org.jfree.chart.labels.XYItemLabelGenerator;
-import org.jfree.chart.labels.XYToolTipGenerator;
-import org.jfree.data.xy.XYDataset;
-import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
-import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.___ChartsEngine;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-
-/**
- * Renderer providing item selection system and drawing features for selected item and custom rendering for CA charts.
- * @author sjacquot
- *
- */
-public class FCAItemSelectionRenderer extends ItemSelectionXYLineAndShapeRenderer {
-
-
-	/**
-	 * Needed to get the Graphics2D object to use in getItemShape() to compute the label text bounds and draw a background rectangle.
-	 */
-	protected ChartPanel chartPanel;
-
-	/**
-	 * Stack to store selected items to draw at last, over other items.
-	 */
-	protected ArrayList itemsToDrawAtLast; 
-	
-
-	/**
-	 * Creates a renderer dedicated to CA charts.
-	 */
-	public FCAItemSelectionRenderer() {
-		super();
-		this.setChartType(___ChartsEngine.CHART_TYPE_CA_FACTORIAL_MAP);
-	}
-
-
-
-	@Override
-	public void initToolTipGenerator(final IItemSelectionRenderer renderer)	{
-		// Rows
-		this.setSeriesToolTipGenerator(0, new XYToolTipGenerator() {
-
-			@Override
-			public String generateToolTip(XYDataset dataset, int series, int item) {
-
-				// Coordinates format
-				String pattern = new String("#.##");
-				DecimalFormat format = new DecimalFormat(pattern);
-
-				// Hexadecimal color
-				Color color = (Color) getSeriesPaint(series);
-				String hex = "#" + Integer.toHexString(color.getRGB()).substring(2);
-
-				FCAXYDataset caDataset = (FCAXYDataset) dataset;
-				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p style=\"color: " + hex + "\"><b>" + caDataset.getLabel(series, item) + "</b></p><p>"
-						+ ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TOOLTIP_ROWS_LABEL + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + caDataset.getFrequency(series, item).replace("-", "") + "</b></p>"
-				+ "<p>" +  ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TOOLTIP_COORDINATES + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>[" + format.format(caDataset.getX(series, item)) + ":" + format.format(caDataset.getY(series, item)) + "]</b></p></body><html>";
-			}
-		});
-
-		// Columns
-		this.setSeriesToolTipGenerator(1, new XYToolTipGenerator() {
-
-			@Override
-			public String generateToolTip(XYDataset dataset, int series, int item) {
-
-				// Coordinates format
-				String pattern = new String("#.##");
-				DecimalFormat format = new DecimalFormat(pattern);
-
-				// Hexadecimal color
-				Color color = (Color) getSeriesPaint(series);
-				String hex = "#" + Integer.toHexString(color.getRGB()).substring(2);
-
-				FCAXYDataset caDataset = (FCAXYDataset) dataset;
-				// FIXME: to disable tool tip we can return null here or in other renderers generateToolTip methods
-//				return null;
-				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p style=\"color: " + hex + "\"><b>" + caDataset.getLabel(series, item) + "</b></p><p>"
-					+ ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TOOLTIP_COLS_LABEL + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + caDataset.getFrequency(series, item).replace("-", "") + "</b></p>"
-				+ "<p>" + ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TOOLTIP_COORDINATES + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>[" + format.format(caDataset.getX(series, item)) + ":" + format.format(caDataset.getY(series, item)) + "]</b></p></body><html>";
-			}
-		});
-
-	}
-
-
-	@Override
-	public void initItemLabelGenerator()	{
-		XYItemLabelGenerator generator = new XYItemLabelGenerator() {
-
-			@Override
-			public String generateLabel(XYDataset dataset, int series, int item) {
-				FCAXYDataset caDataset = (FCAXYDataset) dataset;
-				return caDataset.getLabel(series, item);
-			}
-		};
-
-		this.setBaseItemLabelGenerator(generator);
-		this.setBaseItemLabelsVisible(true);
-	}
-
-
-
-	@Override
-	public Shape getItemShape(int series, int item) {
-
-		// Scale selected item shape
-		Shape s = super.getItemShape(series, item);
-
-		// Highlight selected item
-		if(this.multipleItemsSelector.isMouseOverItem(series, item) || this.multipleItemsSelector.isSelectedItem(series, item)) {
-
-			// Add a background rectangle to the label selected item
-			String label = ((FCAXYDataset) this.getPlot().getDataset()).getLabel(series, item);
-
-			Font font = this.getItemLabelFont(series, item);
-			Rectangle2D bounds = font.getStringBounds(label, ((Graphics2D) this.chartPanel.getGraphics()).getFontRenderContext());
-
-			// FIXME : not rounded rectangle version
-//			Shape labelBackground = new Rectangle2D.Double(-bounds.getWidth() / 2, -s.getBounds2D().getHeight() / 2 + 1, bounds.getWidth() + 4, bounds.getHeight() / 2 + 8);
-
-			Shape labelBackground = new RoundRectangle2D.Double(-(bounds.getWidth() + 4) / 2, -s.getBounds2D().getHeight() / 2 + 1, bounds.getWidth() + 8, bounds.getHeight() / 2 + 10, 5, 5);
-
-			AffineTransform t = new AffineTransform();
-			t.setToTranslation(0,  bounds.getCenterY() - 2 - bounds.getHeight() / 2);
-			labelBackground = t.createTransformedShape(labelBackground);
-			
-			Area a = new Area(s);
-			a.add(new Area(labelBackground));
-
-			// FIXME : test de tooltip text à la main
-//			Shape tooltip = new Rectangle2D.Double(10, 10, 50, 50);
-//			GlyphVector text =  this.getBaseItemLabelFont().createGlyphVector(((Graphics2D) this.chartPanel.getGraphics()).getFontRenderContext(), "testteezrezrzerzerzerzerze");
-////			t.setToTranslation(-100,  -200);
-//			Shape textShape = t.createTransformedShape(text.getOutline());
-//			a.add(new Area(tooltip));
-//			a.add(new Area(textShape));
-
-			return a;
-		}
-		return s;
-	}
-
-
-	@Override
-	public Paint getItemPaint(int series, int item) {
-
-		Color color = (Color) super.getItemPaint(series, item);
-
-		// Change selected item shape color, reducing transparency
-		if(this.multipleItemsSelector.isMouseOverItem(series, item)) {
-			return new Color(color.getRed(), color.getGreen(), color.getBlue(), 195);
-		}
-		// Multiple item selection
-		else if(this.multipleItemsSelector.isSelectedItem(series, item))	{
-			// FIXME: rendering tests
-			//return new Color(255, 255, 255, 195);
-			return new Color(color.getRed(), color.getGreen(), color.getBlue(), 140);
-		}
-		return color;
-	}
-
-
-
-	/**
-	 * @param chartPanel the chartPanel to set
-	 */
-	public void setChartPanel(ChartPanel chartPanel) {
-		this.chartPanel = chartPanel;
-	}
-
-	
-	@Override
-	public void updateDatasetForDrawingSelectedItemAsLast() {
-		this.multipleItemsSelector.setItemDrawnAtLast(this);
-	}
-
-
-
-}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryBarRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryBarRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryBarRenderer.java	(revision 137)
@@ -8,10 +8,10 @@
 import org.jfree.chart.renderer.category.BarRenderer;
 import org.jfree.data.category.CategoryDataset;
 import org.jfree.data.category.DefaultCategoryDataset;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for bar charts.
@@ -149,7 +149,7 @@
 				Number value = catDataset.getValue(row, column);
 
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>" + catDataset.getColumnKey(column) + "</p><p><span style=\"color: " + hex + ";\">" + catDataset.getRowKey(row) + "</span>"
-				 + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(value) + "</b></p></body><html>";
+				 + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(value) + "</b></p></body><html>";
 			}
 		});
 	}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYBarRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYBarRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYBarRenderer.java	(revision 137)
@@ -8,11 +8,11 @@
 import org.jfree.chart.labels.XYToolTipGenerator;
 import org.jfree.chart.renderer.xy.ClusteredXYBarRenderer;
 import org.jfree.data.xy.XYDataset;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for bar charts.
@@ -88,7 +88,7 @@
 				}
 
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>" + label + "</p><p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series) + "</span>"
-				 + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(value) + "</b></p></body><html>";
+				 + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(value) + "</b></p></body><html>";
 			}
 		});
 	}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryLineAndShapeRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryLineAndShapeRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryLineAndShapeRenderer.java	(revision 137)
@@ -18,10 +18,10 @@
 import org.jfree.chart.renderer.category.LineAndShapeRenderer;
 import org.jfree.data.category.CategoryDataset;
 import org.jfree.data.category.DefaultCategoryDataset;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for category charts.
@@ -86,7 +86,7 @@
 
 				DefaultCategoryDataset catDataset = (DefaultCategoryDataset) dataset;
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>" + catDataset.getColumnKey(column) + "</p><p><span style=\"color: " + hex + ";\">" + catDataset.getRowKey(row)
-						+ ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </span><b>" + catDataset.getValue(row, column) + "</b></p></body><html>";
+						+ ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </span><b>" + catDataset.getValue(row, column) + "</b></p></body><html>";
 			}
 		});
 	}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryStepRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryStepRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionCategoryStepRenderer.java	(revision 137)
@@ -31,10 +31,10 @@
 import org.jfree.ui.GradientPaintTransformer;
 import org.jfree.ui.LengthAdjustmentType;
 import org.jfree.ui.RectangleAnchor;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 public class ItemSelectionCategoryStepRenderer extends CategoryStepRenderer implements IItemSelectionRenderer {
 
@@ -94,7 +94,7 @@
 				DefaultCategoryDataset catDataset = (DefaultCategoryDataset) dataset;
 				Number value = catDataset.getValue(row, column);
 
-				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>" + catDataset.getColumnKey(column) + "</p><p><span style=\"color: " + hex + ";\">" + catDataset.getRowKey(row) + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
+				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p>" + catDataset.getColumnKey(column) + "</p><p><span style=\"color: " + hex + ";\">" + catDataset.getRowKey(row) + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
 						+ " </span><b>" + valuesNumberFormat.format(value) + "</b></p></body><html>";
 			}
 		});
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYCardinalSplineRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYCardinalSplineRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYCardinalSplineRenderer.java	(revision 137)
@@ -30,11 +30,11 @@
 import org.jfree.ui.GradientPaintTransformer;
 import org.jfree.ui.LengthAdjustmentType;
 import org.jfree.ui.RectangleAnchor;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.XYCardinalSplineRenderer;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for XY charts with cardinal splines drawing support.
@@ -109,7 +109,7 @@
 
 				XYSeriesCollection xyDataset = (XYSeriesCollection) dataset;
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series) + "</span></p><p><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item))
-						 + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </b><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getX(item)) + "</b></p></body><html>";
+						 + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </b><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getX(item)) + "</b></p></body><html>";
 			}
 		});
 
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYSplineRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYSplineRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYSplineRenderer.java	(revision 137)
@@ -30,10 +30,10 @@
 import org.jfree.ui.GradientPaintTransformer;
 import org.jfree.ui.LengthAdjustmentType;
 import org.jfree.ui.RectangleAnchor;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for XY charts with splines drawing support.
@@ -116,7 +116,7 @@
 
 				XYSeriesCollection xyDataset = (XYSeriesCollection) dataset;
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series) + "</span></p><p><b>" + xyDataset.getSeries(series).getY(item)
-						 + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </b><b>" + xyDataset.getSeries(series).getX(item) + "</b></p></body><html>";
+						 + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " </b><b>" + xyDataset.getSeries(series).getX(item) + "</b></p></body><html>";
 			}
 		});
 
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYLineAndShapeRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYLineAndShapeRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYLineAndShapeRenderer.java	(revision 137)
@@ -21,11 +21,11 @@
 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
 import org.jfree.data.xy.XYDataset;
 import org.jfree.data.xy.XYSeriesCollection;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 /**
  * Renderer providing item selection system and drawing features for selected item and custom rendering for XY charts.
@@ -111,7 +111,7 @@
 
 
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + label + "</span></p><p>" + xyDataset.getSeriesKey(series)
-						 + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + "</b></p></body><html>";
+						 + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS + " <b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + "</b></p></body><html>";
 			}
 		});
 	}
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYStepRenderer.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYStepRenderer.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/renderers/ItemSelectionXYStepRenderer.java	(revision 137)
@@ -35,11 +35,11 @@
 import org.jfree.ui.LengthAdjustmentType;
 import org.jfree.ui.RectangleAnchor;
 import org.jfree.ui.RectangleEdge;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MouseOverItemSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 
 public class ItemSelectionXYStepRenderer extends XYStepRenderer implements IItemSelectionRenderer {
 
@@ -122,7 +122,7 @@
 				XYSeriesCollection xyDataset = (XYSeriesCollection) dataset;
 
 				return CustomHTMLToolTip.getDefaultHTMLBody(renderer, hex) + "<p><span style=\"color: " + hex + ";\">" + xyDataset.getSeriesKey(series)
-						+ "</span></p><p><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + ChartsEngineMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
+						+ "</span></p><p><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getY(item)) + ChartsEngineCoreMessages.ChartsEngine_LABEL_VALUE_SEPARATORS
 						+ " </b><b>" + valuesNumberFormat.format(xyDataset.getSeries(series).getX(item)) + "</b></p></body><html>";
 			}
 		});
Index: tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/HighchartsDefaultTheme.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/HighchartsDefaultTheme.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/src/org/txm/chartsengine/jfreechart/core/themes/highcharts/defaulttheme/HighchartsDefaultTheme.java	(revision 137)
@@ -42,14 +42,14 @@
 import org.jfree.ui.RectangleInsets;
 import org.jfree.ui.TextAnchor;
 import org.jfree.util.ShapeUtilities;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.CASingularValuesItemSelectionRenderer;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.jfreechart.core.renderers.XYCardinalSplineRenderer;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.base.BlockRoundBorder;
 import org.txm.chartsengine.jfreechart.core.themes.base.CategoryAxisBetweenTicks;
 import org.txm.chartsengine.jfreechart.core.themes.base.Theme;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.CASingularValuesItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionCategoryBarRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionCategoryLineAndShapeRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionCategoryStepRenderer;
Index: tmp/org.txm.chartsengine.jfreechart.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.core/META-INF/MANIFEST.MF	(revision 137)
@@ -3,14 +3,14 @@
 Bundle-Name: JFreeChart Charts Engine Core
 Bundle-SymbolicName: org.txm.chartsengine.jfreechart.core;singleton:=true
 Bundle-Version: 1.0.0.qualifier
-Require-Bundle: jfreechart;bundle-version="1.0.17";visibility:=reexport,
+Require-Bundle: org.txm.ca.core;bundle-version="1.0.0",
+ jfreechart;bundle-version="1.0.17";visibility:=reexport,
  org.eclipse.core.runtime,
  org.txm.chartsengine.core;bundle-version="1.0.0";visibility:=reexport,
  org.txm.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.txm.chartsengine.jfreechart.core,
- org.txm.chartsengine.jfreechart.core.datasets,
  org.txm.chartsengine.jfreechart.core.preferences,
  org.txm.chartsengine.jfreechart.core.renderers,
  org.txm.chartsengine.jfreechart.core.renderers.interfaces,
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru_utf8.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru_utf8.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru_utf8.properties	(revision 137)
@@ -1,5 +0,0 @@
-CAHPreferencePage_0=Показывать графики в 2D
-CAHPreferencePage_1=Классификация
-CAHPreferencePage_2=Число кластеров
-CAHPreferencePage_3=Метод
-CAHPreferencePage_4=Метрика
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages.properties	(revision 137)
@@ -1,5 +0,0 @@
-CAHPreferencePage_0=Display graphics in
-CAHPreferencePage_1=Classification
-CAHPreferencePage_2=Number of clusters
-CAHPreferencePage_3=Method
-CAHPreferencePage_4=Metric
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_ru.properties	(revision 137)
@@ -1,5 +0,0 @@
-CAHPreferencePage_0=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 2D
-CAHPreferencePage_1=\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f
-CAHPreferencePage_2=\u0427\u0438\u0441\u043b\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432
-CAHPreferencePage_3=\u041c\u0435\u0442\u043e\u0434
-CAHPreferencePage_4=\u041c\u0435\u0442\u0440\u0438\u043a\u0430
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_fr.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_fr.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages_fr.properties	(revision 137)
@@ -1,5 +0,0 @@
-CAHPreferencePage_0=Afficher les graphiques en 2D
-CAHPreferencePage_1=Classification
-CAHPreferencePage_2=Nombre de clusters
-CAHPreferencePage_3=M�thode
-CAHPreferencePage_4=M�trique
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/adapters/CAHAdapterFactory.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/adapters/CAHAdapterFactory.java	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/adapters/CAHAdapterFactory.java	(revision 137)
@@ -19,7 +19,7 @@
 	
 	public static final ImageDescriptor ICON =
 			AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(CAHAdapterFactory.class).getSymbolicName(),
-					"platform:/plugin/"+ FrameworkUtil.getBundle(CAHAdapterFactory.class).getSymbolicName() + "/icons/functions/cah.png"); //$NON-NLS-1$
+					"platform:/plugin/"+ FrameworkUtil.getBundle(CAHAdapterFactory.class).getSymbolicName() + "/icons/cah.png"); //$NON-NLS-1$
 	
 	/**
 	 * Gets the adapter.
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/RCPCAHMessages.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/RCPCAHMessages.java	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/RCPCAHMessages.java	(revision 137)
@@ -1,40 +0,0 @@
-package org.txm.cah.rcp.messages;
-
-import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMMessages;
-
-public class RCPCAHMessages extends NLS {
-
-	// FIXME: use the same properties file than the bundle
-	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
-	public static String CAHPreferencePage_0;
-	public static String CAHPreferencePage_2;
-	public static String CAHPreferencePage_3;
-	public static String CAHPreferencePage_4;
-	
-	public static String CAHEditor_0;
-	
-	public static String ComputeCAH_0;
-	public static String ComputeCAH_1;
-	public static String ComputeCAH_2;
-	public static String ComputeCAH_3;
-
-	public static String ComputeCAH_4;
-
-	public static String ComputeCAH_5;
-
-	public static String ComputeCAH_6;
-	public static String ComputeClassification_5;
-	public static String ComputeClassification_6;
-	
-	public static String CAHEditorTitle;
-	
-	static {
-		// initializes resource bundle
-		TXMMessages.initializeMessages(BUNDLE_NAME, RCPCAHMessages.class);
-		//NLS.initializeMessages(BUNDLE_NAME, RCPProgressionMessages.class);
-	}
-	
-	private RCPCAHMessages() {
-	}
-}
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_ru_utf8.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_ru_utf8.properties	(revision 0)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_ru_utf8.properties	(revision 137)
@@ -0,0 +1,11 @@
+ComputeCAH_0=Расчет Классификации {0}
+ComputeCAH_1=Показать график
+ComputeCAH_2=** Не удается записать данные во временный файл
+ComputeCAH_3=Расчет классификации с 
+ComputeClassification_5=Колонки
+ComputeClassification_6=Строчки
+CAHPreferencePage_0=Показывать графики в 2D
+CAHPreferencePage_1=Классификация
+CAHPreferencePage_2=Число кластеров
+CAHPreferencePage_3=Метод
+CAHPreferencePage_4=Метрика
\ No newline at end of file

Property changes on: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_ru_utf8.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages.properties	(revision 0)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages.properties	(revision 137)
@@ -0,0 +1,14 @@
+CAHPreferencePage_0=Display graphics in
+CAHPreferencePage_1=Classification
+CAHPreferencePage_2=Number of clusters
+CAHPreferencePage_3=Method
+CAHPreferencePage_4=Metric
+ComputeCAH_0=Compute Classification with {0}
+ComputeCAH_1=Show graphic
+ComputeCAH_2=Error\: temporary file created cannot be written\:
+ComputeCAH_3=Computing CAH with
+ComputeCAH_4=Statistics Engine is not ready. Canceling command.
+ComputeCAH_5=Opening the Classification result
+ComputeCAH_6=Error while computing Classification\: {0}
+ComputeClassification_5=Compute columns
+ComputeClassification_6=Compute rows
\ No newline at end of file

Property changes on: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/CAUIPMessages.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/CAUIPMessages.java	(revision 0)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/CAUIPMessages.java	(revision 137)
@@ -0,0 +1,40 @@
+package org.txm.cah.rcp.messages;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
+
+public class CAUIPMessages extends NLS {
+
+	// FIXME: use the same properties file than the bundle
+	//private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
+	private static final String BUNDLE_NAME = "org.txm.cah.rcp.messages.messages"; //$NON-NLS-1$
+	
+	
+	public static String CAHPreferencePage_0;
+	public static String CAHPreferencePage_2;
+	public static String CAHPreferencePage_3;
+	public static String CAHPreferencePage_4;
+	
+	public static String CAHEditor_0;
+	
+	public static String ComputeCAH_0;
+	public static String ComputeCAH_1;
+	public static String ComputeCAH_2;
+	public static String ComputeCAH_3;
+	public static String ComputeCAH_4;
+	public static String ComputeCAH_5;
+	public static String ComputeCAH_6;
+	
+	public static String ComputeClassification_5;
+	public static String ComputeClassification_6;
+	
+	public static String CAHEditorTitle;
+	
+	static {
+		// initializes resource bundle
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, CAUIPMessages.class);
+	}
+	
+	private CAUIPMessages() {
+	}
+}

Property changes on: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/CAUIPMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_fr.properties	(revision 0)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_fr.properties	(revision 137)
@@ -0,0 +1,13 @@
+CAHPreferencePage_0=Afficher les graphiques en 2D
+CAHPreferencePage_1=Classification
+CAHPreferencePage_2=Nombre de clusters
+CAHPreferencePage_3=Méthode
+CAHPreferencePage_4=Métrique
+ComputeCAH_0=Calcul de la Classification avec {0}
+ComputeCAH_1=Afficher le graphique
+ComputeCAH_2=** Impossible d'écrire dans le fichier temporaire
+ComputeCAH_3=Calcul de la classification avec
+ComputeCAH_5=Ouverture de la fenêtre de Classification
+ComputeCAH_6=Erreur lors de l'ouverture de l'éditeur de Classification \: {0}
+ComputeClassification_5=Classer les colonnes
+ComputeClassification_6=Classer les lignes
\ No newline at end of file

Property changes on: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/messages/messages_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/CAHChartEditor.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/CAHChartEditor.java	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/CAHChartEditor.java	(revision 137)
@@ -8,31 +8,25 @@
 import org.eclipse.swt.widgets.ToolItem;
 import org.txm.cah.core.functions.CAH;
 import org.txm.cah.rcp.chartsengine.jfreechart.events.CAHSelectionListener;
-import org.txm.cah.rcp.messages.RCPCAHMessages;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorInput;
+import org.txm.cah.rcp.messages.CAUIPMessages;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
 import org.txm.chartsengine.rcp.messages.SWTComponentsProviderMessages;
 import org.txm.functions.TXMResult;
 import org.txm.rcpapplication.IImageKeys;
-import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.commands.editor.CustomizableEditor;
 import org.txm.searchengine.cqp.corpus.Corpus;
 
 /**
  * CAH chart editor.
- * @author sjacquot, mdecorde
+ * 
+ * @author mdecorde
+ * @author sjacquot
  *
  */
 public class CAHChartEditor extends ChartEditorPart implements CustomizableEditor {
 
-	/**
-	 * The <code>EditorPart</code> ID constant.
-	 */
-	public static final String ID = CAHChartEditor.class.getCanonicalName();
 
 
-
 	/**
 	 * Numbers of clusters.
 	 */
@@ -45,22 +39,7 @@
 
 
 
-	/**
-	 * Creates an empty <code>CAHChartEditor</code>.
-	 */
-	public CAHChartEditor() {
-		super();
-	}
 
-
-	/**
-	 * Creates a <code>CAHChartEditor</code>.
-	 * @param editorInput
-	 */
-	public CAHChartEditor(ChartEditorInput editorInput) {
-		this.setInput(editorInput);
-	}
-
 	@Override
 	public void createPartControl(Composite parent) {
 
@@ -93,19 +72,19 @@
 
 		// Columns
 		this.computeColumns = new ToolItem(this.toolBar, SWT.RADIO);
-		this.computeColumns.setToolTipText(RCPCAHMessages.ComputeClassification_5);
+		this.computeColumns.setToolTipText(CAUIPMessages.ComputeClassification_5);
 		this.computeColumns.setImage(IImageKeys.getImage(IImageKeys.CHARTS_CAH_COMPUTE_COLUMNS));
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//this.computeColumns.setText(Messages.ComputeClassification_5);
+		//this.computeColumns.setText(CAUIPMessages.ComputeClassification_5);
 		this.computeColumns.setSelection(this.getResultData().isColumnsComputing());
 		this.computeColumns.addSelectionListener(new CAHSelectionListener(this, CAHSelectionListener.COMPUTE_COLUMNS));
 
 		// Rows
 		ToolItem computeRows = new ToolItem(this.toolBar, SWT.RADIO);
-		computeRows.setToolTipText(RCPCAHMessages.ComputeClassification_6);
+		computeRows.setToolTipText(CAUIPMessages.ComputeClassification_6);
 		computeRows.setImage(IImageKeys.getImage(IImageKeys.CHARTS_CAH_COMPUTE_ROWS));
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//computeRows.setText(Messages.ComputeClassification_6);
+		//computeRows.setText(CAUIPMessages.ComputeClassification_6);
 		computeRows.setSelection(!this.getResultData().isColumnsComputing());
 
 	}
@@ -171,10 +150,6 @@
 	}
 
 
-	@Override
-	public String getID() {
-		return CAHChartEditor.ID;
-	}
 
 	@Override
 	public boolean usingCorpus(Corpus corpus) {
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/commands/ComputeCAH.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/commands/ComputeCAH.java	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/commands/ComputeCAH.java	(revision 137)
@@ -47,22 +47,17 @@
 import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.txm.Toolbox;
-import org.txm.chartsengine.core.ChartsEngine;
-import org.txm.chartsengine.r.core.RChartsEngine;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorPart;
-import org.txm.chartsengine.svgbatik.rcp.SVGSWTChartsComponentsProvider;
-import org.txm.functions.ca.CA;
+import org.txm.ca.core.functions.CA;
+import org.txm.ca.core.preferences.CAPreferences;
 import org.txm.cah.core.functions.CAH;
 import org.txm.cah.core.preferences.CAHPreferences;
-import org.txm.cah.rcp.editors.CAHChartEditor;
-import org.txm.cah.rcp.messages.RCPCAHMessages;
-import org.txm.rcpapplication.IImageKeys;
+import org.txm.cah.rcp.messages.CAUIPMessages;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.core.preferences.TXMPreferences;
 import org.txm.rcpapplication.JobsTimer;
-import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.TxmPreferences;
 import org.txm.rcpapplication.actions.LexicalTableDialog;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
 import org.txm.rcpapplication.utils.JobHandler;
 import org.txm.rcpapplication.views.CorporaView;
 import org.txm.rcpapplication.views.QueriesView;
@@ -77,18 +72,19 @@
 /**
  * If the selection is a CA or a Lexical Table result computes the CAH.
  *
- * @author mdecorde, sjacquot.
+ * @author mdecorde
+ * @author sjacquot
  */
 public class ComputeCAH extends AbstractHandler {
 
 
-	/**
-	 * The command ID.
-	 */
-	public static final String ID =  ComputeCAH.class.getCanonicalName();
+	// FIXME: should be put in an Activator? or better in an extension point loaded by the corpora view? or in a method called here as initTreeDoubleClickListener(Class resultDataType, String commandId)?
+	// adds a double click listener to the Corpus View
+	static	{
+		CorporaView.addDoubleClickListener(CAH.class, "ComputeCAH"); //$NON-NLS-1$
+	}
+	
 
-
-
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
@@ -97,7 +93,7 @@
 
 
 		if (!Toolbox.isStatEngineInitialized()) {
-			System.out.println(RCPCAHMessages.ComputeCAH_4);
+			System.out.println(CAUIPMessages.ComputeCAH_4);
 			return null;
 		}
 
@@ -121,7 +117,7 @@
 			try {
 				ca = new CA(lexicaltable);
 			} catch (StatException e) {
-				System.out.println("Failed to build the CA with lexical table "+lexicaltable+": "+e);
+				System.out.println("Failed to build the CA with lexical table " + lexicaltable + ": " + e);
 				Log.printStackTrace(e);
 			}
 			lexicaltable.storeResult(ca);
@@ -134,12 +130,11 @@
 			//System.out.println("Compute CAH with Partition : "+((Partition)selection.getFirstElement()).getName());
 			partition = (Partition)selection.getFirstElement();
 			try {
-				String title = RCPCAHMessages.bind(RCPCAHMessages.ComputeCAH_0, partition.getName());
-				int vmax = TxmPreferences.getInt(CAPreferencePage.VMAX, 200);
-				int fmin = TxmPreferences.getInt(CAPreferencePage.FMIN, 10);
+				String title = CAUIPMessages.bind(CAUIPMessages.ComputeCAH_0, partition.getName());
+				int vmax = TXMPreferences.getInt(CAPreferences.PREFERENCES_NODE, CAPreferences.V_MAX);
+				int fmin = TXMPreferences.getInt(CAPreferences.PREFERENCES_NODE, CAPreferences.F_MIN);
 				Shell shell = Display.getCurrent().getActiveShell();
-				LexicalTableDialog d = new LexicalTableDialog(shell, partition
-						.getCorpus(), title);
+				LexicalTableDialog d = new LexicalTableDialog(shell, partition.getCorpus(), title);
 				d.setFminAndVMax(fmin, vmax);
 				
 				if (d.open() == Window.OK) {
@@ -158,16 +153,12 @@
 					return null;
 				}
 			} catch (Exception e) {
-				System.out.println("Failed to build the lexical table of "+partition+": "+e);
+				System.out.println("Failed to build the lexical table of " + partition + ": " + e);
 				Log.printStackTrace(e);
 				return null;
 			} 
 		}
 
-		final int ncluster = TxmPreferences.getInt(CAHPreferences.NCLUSTER, 2);
-		final String metric = TxmPreferences.getString(CAHPreferences.METRIC, CAH.getDefaultMetric());
-		final String method = TxmPreferences.getString(CAHPreferences.METHOD, CAH.getDefaultMethod());
-		final Boolean display2D = "2D".equals(TxmPreferences.getString(CAHPreferences.DISPLAY, "3D")); //$NON-NLS-1$ //$NON-NLS-2$
 		final boolean computeColumns = true;
 
 		// Use existent CAH (used when reopening an editor from a CAH result node)
@@ -178,7 +169,11 @@
 		} else {
 //			if (ca == null) cah = new CAH(lexicaltable, computeColumns, method, metric, ncluster, display2D);
 //			else 
-				cah = new CAH(ca, computeColumns, method, metric, ncluster, display2D);
+				cah = new CAH(ca, computeColumns,
+						TXMPreferences.getString(CAHPreferences.PREFERENCES_NODE, CAHPreferences.METHOD),
+						TXMPreferences.getString(CAHPreferences.PREFERENCES_NODE, CAHPreferences.METRIC),
+						TXMPreferences.getInt(CAHPreferences.PREFERENCES_NODE, CAHPreferences.NCLUSTER)
+						);
 		}
 	
 		try {
@@ -199,7 +194,7 @@
 	 */
 	public static void compute(final CAH cah, final ChartEditorPart chartEditor) throws RWorkspaceException {
 
-		JobHandler jobhandler = new JobHandler(RCPCAHMessages.CAHEditor_0) {
+		JobHandler jobhandler = new JobHandler(CAUIPMessages.CAHEditor_0) {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -225,30 +220,17 @@
 						@Override
 						public void run() {
 
-							System.err.println("ComputeCAH.compute(): charts creator is not yet implemented.");
-							
 							// Create a new chart editor
-							// FIXME: version to restore when the JFC CAH charts will be implemented
-//							if(chartEditor == null)	{
-//								ChartEditorPart chartEditor = Application.swtComponentProvider.createCAHChartEditorPart(IImageKeys.getImage(IImageKeys.ACTION_CAH), cah);
-//								// Create and open the chart editor
-//								SWTChartsComponentProvider.openEditor(chartEditor);
-//							}
-//							// Refresh the existing chart editor
-//							else	{
-//								// Create and load the new chart
-//								chartEditor.getComposite().loadChart(Toolbox.getChartsEngine().createCAHChart(((CAHChartEditor) chartEditor).getResultData(), ((CAHChartEditor) chartEditor).getResultData().isDisplay2D()));
-//								chartEditor.forceFocus();
-//							}
-
-							// FIXME: temporary force R/SVG version because the CAH charts are not yet implemented in JFC mode
-							RChartsEngine tmpChartsEngine = new RChartsEngine(ChartsEngine.OUTPUT_FORMAT_SVG);
 							if(chartEditor == null)	{
-								SVGSWTChartsComponentsProvider tmpSWTComponentsProvider = (SVGSWTChartsComponentsProvider) SWTChartsComponentsProvider.getComponentsProvider(tmpChartsEngine);
-								// FIXME: charts creator is not yet implemented
-								//ChartEditorPart chartEditor = tmpSWTComponentsProvider.createCAHChartEditorPart(IImageKeys.getImage(IImageKeys.ACTION_CAH), cah);
-								// Create and open the chart editor
-								tmpSWTComponentsProvider.openEditor(chartEditor);
+								SWTChartsComponentsProvider.getCurrent().openEditor(cah.getName(), cah, CAHPreferences.PREFERENCES_NODE);
+
+								// FIXME: temporary force R/SVG version because the CAH charts are not yet implemented in JFC mode								
+//								RChartsEngine tmpChartsEngine = new RChartsEngine(ChartsEngine.OUTPUT_FORMAT_SVG);
+//								SVGSWTChartsComponentsProvider tmpSWTComponentsProvider = (SVGSWTChartsComponentsProvider) SWTChartsComponentsProvider.getComponentsProvider(tmpChartsEngine);
+//								// FIXME: charts creator is not yet implemented
+//								//ChartEditorPart chartEditor = tmpSWTComponentsProvider.createCAHChartEditorPart(IImageKeys.getImage(IImageKeys.ACTION_CAH), cah);
+//								// Create and open the chart editor
+//								tmpSWTComponentsProvider.openEditor(chartEditor);
 							}
 							// Refresh the existing chart editor
 							else	{
@@ -436,7 +418,7 @@
 		 */
 		public CAHParamDialog(Shell parentShell) {
 			super(parentShell);
-			this.title = RCPCAHMessages.CAHEditorTitle;
+			this.title = CAUIPMessages.CAHEditorTitle;
 		}
 
 		/* (non-Javadoc)
@@ -449,7 +431,7 @@
 			if (title != null)
 				newShell.setText(title);
 			else
-				newShell.setText(RCPCAHMessages.CAHEditorTitle);
+				newShell.setText(CAUIPMessages.CAHEditorTitle);
 		}
 
 		/** The composite. */
@@ -478,7 +460,7 @@
 
 			// N CLUSTERS
 			Label label = new Label(composite, SWT.NONE);
-			label.setText(RCPCAHMessages.CAHPreferencePage_2);
+			label.setText(CAUIPMessages.CAHPreferencePage_2);
 
 			nclusterSpinner = new Spinner(composite, SWT.BORDER);
 			nclusterSpinner.setMinimum(2);
@@ -488,11 +470,11 @@
 
 			// ROWS OR COLS
 			docolumnsButton = new Button(composite, SWT.RADIO);
-			docolumnsButton.setText(RCPCAHMessages.ComputeClassification_5);
+			docolumnsButton.setText(CAUIPMessages.ComputeClassification_5);
 			docolumnsButton.setSelection(true);
 
 			Button dorowsButton = new Button(composite, SWT.RADIO);
-			dorowsButton.setText(RCPCAHMessages.ComputeClassification_6);
+			dorowsButton.setText(CAUIPMessages.ComputeClassification_6);
 
 			/*
 			// METHODS
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/CAHPreferencePage.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/CAHPreferencePage.java	(revision 136)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/CAHPreferencePage.java	(revision 137)
@@ -27,23 +27,18 @@
 //
 package org.txm.cah.rcp.preferences;
 
-import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.jface.preference.ComboFieldEditor;
 import org.eclipse.jface.preference.IntegerFieldEditor;
 import org.eclipse.jface.preference.RadioGroupFieldEditor;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.ui.IWorkbench;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.cah.core.functions.CAH;
 import org.txm.cah.core.preferences.CAHPreferences;
 import org.txm.cah.rcp.adapters.CAHAdapterFactory;
-import org.txm.cah.rcp.messages.RCPCAHMessages;
+import org.txm.cah.rcp.messages.CAUIPMessages;
+import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.rcp.preferences.TXMPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.TxmPreferences;
-import org.txm.rcpapplication.jface.DoubleFieldEditor;
 // TODO: Auto-generated Javadoc
 /**
  * This class represents a preference page that is contributed to the
@@ -54,8 +49,10 @@
  * This page is used to modif y preferences only. They are stored in the
  * preference store that belongs to the main plug-in class. That way,
  * preferences can be accessed directly via the preference store.
+ * 
+ * @author mdecorde
+ * @author sjacquot
  */
-
 public class CAHPreferencePage extends TXMPreferencePage {
 
 
@@ -85,8 +82,7 @@
 	public void createFieldEditors() {
 
 		
-		IntegerFieldEditor defaultncluster = new IntegerFieldEditor(CAHPreferences.NCLUSTER,
-				RCPCAHMessages.CAHPreferencePage_2, getFieldEditorParent());
+		IntegerFieldEditor defaultncluster = new IntegerFieldEditor(CAHPreferences.NCLUSTER, CAUIPMessages.CAHPreferencePage_2, getFieldEditorParent());
 		addField(defaultncluster);
 
 		String list[] = CAH.getMethods(); 
@@ -94,8 +90,7 @@
 		for(int i = 0 ; i < list.length ; i++)
 			methods[i][0] = methods[i][1] = list[i];
 				
-		ComboFieldEditor defaultmethod = new ComboFieldEditor(CAHPreferences.METHOD,
-				RCPCAHMessages.CAHPreferencePage_3, methods, getFieldEditorParent());
+		ComboFieldEditor defaultmethod = new ComboFieldEditor(CAHPreferences.METHOD, CAUIPMessages.CAHPreferencePage_3, methods, getFieldEditorParent());
 		addField(defaultmethod);
 
 		list = CAH.getMetrics(); 
@@ -103,17 +98,15 @@
 		for(int i = 0 ; i < list.length ; i++)
 			metrics[i][0] = metrics[i][1] = list[i];
 		
-		ComboFieldEditor defaultmetric = new ComboFieldEditor(CAHPreferences.METRIC,
-				RCPCAHMessages.CAHPreferencePage_4, metrics, getFieldEditorParent());
+		ComboFieldEditor defaultmetric = new ComboFieldEditor(CAHPreferences.METRIC, CAUIPMessages.CAHPreferencePage_4, metrics, getFieldEditorParent());
 		addField(defaultmetric);
 		
 		
 		// Charts
 		Group chartsGroup = SWTChartsComponentsProvider.createChartsRenderingPreferencesGroup(getFieldEditorParent());
 
-		// FIXME : these preferences should be renamed and moved to charts engine preference level (associated messages too)
-		String[][] labelAndValues = {{"2D", "2D"}, {"3D", "3D"}}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		RadioGroupFieldEditor default2D3Ddisplay = new RadioGroupFieldEditor(CAHPreferences.DISPLAY, RCPCAHMessages.CAHPreferencePage_0, 2, labelAndValues, chartsGroup);
+		String[][] labelAndValues = {{"2D", "true"}, {"3D", "false"}}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		RadioGroupFieldEditor default2D3Ddisplay = new RadioGroupFieldEditor(CAHPreferences.DISPLAY_2D, CAUIPMessages.CAHPreferencePage_0, 2, labelAndValues, chartsGroup);
 		addField(default2D3Ddisplay);
 		
 		
@@ -125,7 +118,7 @@
 	public void init(IWorkbench workbench) {
 		this.setPreferenceStore(getNewPreferenceStore());
 		//setDescription("CAH");
-		this.setTitle(RCPCAHMessages.CAHPreferencePage_2);
+		this.setTitle(CAUIPMessages.CAHPreferencePage_2);
 		this.setImageDescriptor(CAHAdapterFactory.ICON);
 	}
 
Index: tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle.properties
===================================================================
--- tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle.properties	(revision 137)
@@ -0,0 +1,3 @@
+command.name=Classification
+command.tooltip=Classification
+editor.name=Classification
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_fr.properties
===================================================================
--- tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 137)
@@ -0,0 +1,2 @@
+command.name=Classification
+command.tooltip=Calculer la classification
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties
===================================================================
--- tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties	(revision 136)
+++ tmp/org.txm.cah.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties	(revision 137)
@@ -0,0 +1,2 @@
+command.name=Классификация
+command.tooltip=Классификация
\ No newline at end of file
Index: tmp/org.txm.cah.rcp/icons/cah.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.cah.rcp/icons/cah.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.cah.rcp/plugin.xml
===================================================================
--- tmp/org.txm.cah.rcp/plugin.xml	(revision 136)
+++ tmp/org.txm.cah.rcp/plugin.xml	(revision 137)
@@ -2,370 +2,80 @@
 <?eclipse version="3.4"?>
 <plugin>
    <extension
-         point="org.txm.chartsengine.chartcreator">
-      <ChartCreator
-            class="org.txm.cah.core.chartsengine.r.RCAHChartCreator"
-            fileNamePrefix="cah">
-      </ChartCreator>
-   </extension>
-   <extension
          id="commands"
          name="commands"
          point="org.eclipse.ui.commands">
       <command
             categoryId="org.txm.rcpapplication.category.txm"
-            defaultHandler="org.txm.rcpapplication.commands.function.ComputeCAH"
-            id="org.txm.rcpapplication.commands.function.ComputeCAH"
-            name="%command.name.54">
+            defaultHandler="org.txm.cah.rcp.commands.ComputeCAH"
+            id="ComputeCAH"
+            name="%command.name">
       </command>
    </extension>
    <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            default="false"
+            icon="icons/cah.png"
+            id="org.txm.cah.core.functions.CAH"
+            name="%editor.name">
+      </editor>
+   </extension>
+   <extension
          point="org.eclipse.ui.menus">
       <menuContribution
-            locationURI="menu:org.eclipse.ui.main.menu">
-         <menu
-               id="menu.tools"
-               label="%menu.label.6">
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeFrequencyList"
-                  icon="icons/functions/IndexP.png"
-                  label="%command.label.79"
-                  style="push"
-                  tooltip="%command.tooltip.61">
-               <visibleWhen
-                     checkEnabled="false">
+            allPopups="false"
+            locationURI="toolbar:org.txm.rcpapplication.toolbartools">
+         <command
+               commandId="ComputeCAH"
+               icon="icons/cah.png"
+               style="push"
+               tooltip="%command.tooltip">
+            <visibleWhen
+                  checkEnabled="false">
+               <or>
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OneCASelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeIndex"
-                  icon="icons/functions/Index.png"
-                  label="%command.label.66"
-                  style="push"
-                  tooltip="%command.tooltip.62">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeConcordance"
-                  icon="icons/functions/Concordances.png"
-                  label="%command.label.11"
-                  style="push"
-                  tooltip="%command.tooltip.7">
-               <visibleWhen
-                     checkEnabled="false">
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OneLexicalTableSelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCooccurrences"
-                  icon="icons/functions/Cooccurrences.png"
-                  label="%command.label.91"
-                  style="push"
-                  tooltip="%command.tooltip.53">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneConcordanceSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeReferencer"
-                  icon="icons/functions/Referencer.png"
-                  label="%command.label.108"
-                  style="push"
-                  tooltip="%command.tooltip.62">
-               <visibleWhen
-                     checkEnabled="false">
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OnePartitionSelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <separator
-                  name="menu.tools.stats"
-                  visible="true">
-            </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-                  icon="icons/functions/CorrespondanceAnalysis.png"
-                  label="%command.label.80"
-                  style="push"
-                  tooltip="%command.tooltip.46">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneICAComputableSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-                  icon="icons/functions/CAH.png"
-                  label="%command.label.116"
-                  style="push"
-                  tooltip="%command.tooltip.69">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCASelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <separator
-                  name="menu.tools.misc"
-                  visible="true">
-            </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.base.SendToR"
-                  icon="icons/functions/SendToR.png"
-                  label="%command.label.117"
-                  style="push"
-                  tooltip="%command.tooltip.70">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneConcordanceSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexiconSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneIndexSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCooccurrenceSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneReferencerSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.eclipse.ui.window.preferences"
-                  icon="icons/functions/prefs.png"
-                  label="%command.label.4"
-                  style="push"
-                  tooltip="%command.tooltip.0">
-            </command>
-         </menu>
+               </or>
+            </visibleWhen>
+         </command>
       </menuContribution>
       <menuContribution
-            allPopups="true"
-            locationURI="toolbar:org.eclipse.ui.main.toolbar">
-         <toolbar
-               id="org.txm.rcpapplication.toolbartools">
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeFrequencyList"
-                  icon="icons/functions/IndexP.png"
-                  label="%command.label.79"
-                  style="push"
-                  tooltip="%command.tooltip.61">
-               <visibleWhen
-                     checkEnabled="false">
+            allPopups="false"
+            locationURI="popup:org.txm.rcpapplication.views.CorporaView">
+         <command
+               commandId="ComputeCAH"
+               icon="icons/cah.png"
+               style="push">
+            <visibleWhen
+                  checkEnabled="false">
+               <or>
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OneCASelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeIndex"
-                  icon="icons/functions/Index.png"
-                  label="%command.label.66"
-                  style="push"
-                  tooltip="%command.tooltip.62">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeConcordance"
-                  icon="icons/functions/Concordances.png"
-                  label="%command.label.11"
-                  style="push"
-                  tooltip="%command.tooltip.7">
-               <visibleWhen
-                     checkEnabled="false">
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OneLexicalTableSelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCooccurrences"
-                  icon="icons/functions/Cooccurrences.png"
-                  label="%command.label.96"
-                  style="push"
-                  tooltip="%command.tooltip.57">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneConcordanceSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeReferencer"
-                  icon="icons/functions/Referencer.png"
-                  label="%command.label.108"
-                  style="push"
-                  tooltip="%command.tooltip.63">
-               <visibleWhen
-                     checkEnabled="false">
                   <reference
-                        definitionId="OneCorpusSelected">
+                        definitionId="OnePartitionSelected">
                   </reference>
-               </visibleWhen>
-            </command>
-            <separator
-                  name="org.txm.rcp.separator4"
-                  visible="true">
-            </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-                  icon="icons/functions/CorrespondanceAnalysis.png"
-                  label="%command.label.80"
-                  style="push"
-                  tooltip="%command.tooltip.46">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneICAComputableSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-                  icon="icons/functions/CAH.png"
-                  label="%command.label.120"
-                  style="push"
-                  tooltip="%command.tooltip.73">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCASelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <separator
-                  name="org.txm.rcpapplication.separator1">
-            </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.base.SendToR"
-                  icon="icons/functions/SendToR.png"
-                  label="%command.label.121"
-                  style="push"
-                  tooltip="%command.tooltip.74">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneConcordanceSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexiconSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneIndexSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCooccurrenceSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneReferencerSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.eclipse.ui.window.preferences"
-                  icon="icons/functions/prefs.png"
-                  label="%command.label.4"
-                  style="push"
-                  tooltip="%command.tooltip.0">
-            </command>
-         </toolbar>
+               </or>
+            </visibleWhen>
+         </command>
       </menuContribution>
       <menuContribution
-            locationURI="popup:org.txm.rcpapplication.views.CorporaView">
+            locationURI="menu:menu.tools">
          <command
-               commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-               icon="icons/functions/CAH.png"
-               label="%command.label.126"
-               style="push"
-               tooltip="%command.tooltip.79">
+               commandId="ComputeCAH"
+               icon="icons/cah.png"
+               style="push">
             <visibleWhen
                   checkEnabled="false">
                <or>
Index: tmp/org.txm.cah.rcp/.settings/org.eclipse.core.resources.prefs
===================================================================
--- tmp/org.txm.cah.rcp/.settings/org.eclipse.core.resources.prefs	(revision 136)
+++ tmp/org.txm.cah.rcp/.settings/org.eclipse.core.resources.prefs	(revision 137)
@@ -1,2 +1,2 @@
 eclipse.preferences.version=1
-encoding//src/org/txm/cah/rcp/messages_ru_utf8.properties=UTF-8
+encoding//src/org/txm/cah/rcp/messages/messages_ru_utf8.properties=UTF-8
Index: tmp/org.txm.cah.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.cah.rcp/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.cah.rcp/META-INF/MANIFEST.MF	(revision 137)
@@ -4,9 +4,10 @@
 Bundle-SymbolicName: org.txm.cah.rcp;singleton:=true
 Bundle-Version: 1.0.0.qualifier
 Bundle-Activator: org.txm.cah.rcp.Activator
-Require-Bundle: org.txm.chartsengine.rcp;bundle-version="1.0.0",
- org.eclipse.ui,
+Require-Bundle: org.eclipse.ui,
+ org.txm.chartsengine.rcp;bundle-version="1.0.0",
  org.eclipse.core.runtime,
+ org.txm.ca.core;bundle-version="1.0.0",
  org.txm.cah.core;bundle-version="1.0.0",
  org.txm.chartsengine.core;bundle-version="1.0.0",
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/AdapterFactory.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/AdapterFactory.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/AdapterFactory.java	(revision 137)
@@ -38,17 +38,13 @@
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
 import org.txm.functions.internal.InternalView;
 import org.txm.functions.intertextualdistance.InterTextDistance;
-import org.txm.functions.progression.Progression;
 //import org.txm.functions.queryindex.QueryIndex;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.CorpusManager;
@@ -249,29 +245,29 @@
 		}
 	};
 
-	/** The Progression adapter. */
-	private IWorkbenchAdapter ProgressionAdapter = new IWorkbenchAdapter() {
-		@Override
-		public Object[] getChildren(Object progression) {
-			return new Object[0];
-		}
-
-		@Override
-		public ImageDescriptor getImageDescriptor(Object object) {
-			return AbstractUIPlugin.imageDescriptorFromPlugin(
-					Application.PLUGIN_ID, IImageKeys.ACTION_PROGRESSION);
-		}
-
-		@Override
-		public String getLabel(Object progression) {
-			return ((Progression) progression).getDetails(); 
-		}
-
-		@Override
-		public Object getParent(Object progression) {
-			return ((Progression) progression).getCorpus();
-		}
-	};
+//	/** The Progression adapter. */
+//	private IWorkbenchAdapter ProgressionAdapter = new IWorkbenchAdapter() {
+//		@Override
+//		public Object[] getChildren(Object progression) {
+//			return new Object[0];
+//		}
+//
+//		@Override
+//		public ImageDescriptor getImageDescriptor(Object object) {
+//			return AbstractUIPlugin.imageDescriptorFromPlugin(
+//					Application.PLUGIN_ID, IImageKeys.ACTION_PROGRESSION);
+//		}
+//
+//		@Override
+//		public String getLabel(Object progression) {
+//			return ((Progression) progression).getDetails(); 
+//		}
+//
+//		@Override
+//		public Object getParent(Object progression) {
+//			return ((Progression) progression).getCorpus();
+//		}
+//	};
 	
 	/** The Progression adapter. */
 	private IWorkbenchAdapter interTextDistAdapter = new IWorkbenchAdapter() {
@@ -321,30 +317,30 @@
 		}
 	};
 
-	/** The CAH adapter. */
-	private IWorkbenchAdapter CAHAdapter = new IWorkbenchAdapter() {
-		@Override
-		public Object[] getChildren(Object cah) {
-			return new Object[0];
-		}
+//	/** The CAH adapter. */
+//	private IWorkbenchAdapter CAHAdapter = new IWorkbenchAdapter() {
+//		@Override
+//		public Object[] getChildren(Object cah) {
+//			return new Object[0];
+//		}
+//
+//		@Override
+//		public ImageDescriptor getImageDescriptor(Object object) {
+//			return AbstractUIPlugin.imageDescriptorFromPlugin(
+//					Application.PLUGIN_ID, IImageKeys.ACTION_CAH);
+//		}
+//
+//		@Override
+//		public String getLabel(Object cah) {
+//			return "" + ((CAH) cah).getName(); //$NON-NLS-1$
+//		}
+//
+//		@Override
+//		public Object getParent(Object cah) {
+//			return ((CAH) cah).getParent();
+//		}
+//	};
 
-		@Override
-		public ImageDescriptor getImageDescriptor(Object object) {
-			return AbstractUIPlugin.imageDescriptorFromPlugin(
-					Application.PLUGIN_ID, IImageKeys.ACTION_CAH);
-		}
-
-		@Override
-		public String getLabel(Object cah) {
-			return "" + ((CAH) cah).getName(); //$NON-NLS-1$
-		}
-
-		@Override
-		public Object getParent(Object cah) {
-			return ((CAH) cah).getParent();
-		}
-	};
-
 	/** The Cooccurrence adapter. */
 	private IWorkbenchAdapter CooccurrenceAdapter = new IWorkbenchAdapter() {
 
@@ -370,32 +366,32 @@
 		}
 	};
 
-	/** The specificities result adapter. */
-	private IWorkbenchAdapter specificitiesResultAdapter = new IWorkbenchAdapter() {
+//	/** The specificities result adapter. */
+//	private IWorkbenchAdapter specificitiesResultAdapter = new IWorkbenchAdapter() {
+//
+//		@Override
+//		public Object[] getChildren(Object o) {
+//			return new Object[0];
+//		}
+//
+//		@Override
+//		public ImageDescriptor getImageDescriptor(Object object) {
+//			return AbstractUIPlugin.imageDescriptorFromPlugin(
+//					Application.PLUGIN_ID, IImageKeys.ACTION_SPECIFICITIES);
+//		}
+//
+//		@Override
+//		public String getLabel(Object o) {
+//			return ((SpecificitesResult) o).getName();
+//		}
+//
+//		@Override
+//		public Object getParent(Object o) {
+//			return ((SpecificitesResult) o).getParent();
+//		}
+//
+//	};
 
-		@Override
-		public Object[] getChildren(Object o) {
-			return new Object[0];
-		}
-
-		@Override
-		public ImageDescriptor getImageDescriptor(Object object) {
-			return AbstractUIPlugin.imageDescriptorFromPlugin(
-					Application.PLUGIN_ID, IImageKeys.ACTION_SPECIFICITIES);
-		}
-
-		@Override
-		public String getLabel(Object o) {
-			return ((SpecificitesResult) o).getName();
-		}
-
-		@Override
-		public Object getParent(Object o) {
-			return ((SpecificitesResult) o).getParent();
-		}
-
-	};
-
 	/** The referencer adapter. */
 	private IWorkbenchAdapter referencerAdapter = new IWorkbenchAdapter() {
 		@Override
@@ -444,33 +440,8 @@
 		}
 	};
 
-	/** The CA adapter. */
-	private IWorkbenchAdapter CAAdapter = new IWorkbenchAdapter() {
 
-		@Override
-		public Object[] getChildren(Object o) {
-			return ((CA)o).getResults().toArray();
-		}
 
-		@Override
-		public ImageDescriptor getImageDescriptor(Object object) {
-			return AbstractUIPlugin.imageDescriptorFromPlugin(
-					Application.PLUGIN_ID,
-					IImageKeys.ACTION_CORRESPONDANCE_ANALYSIS);
-		}
-
-		@Override
-		public String getLabel(Object o) {
-			return ""+((CA) o).getName(); //$NON-NLS-1$
-		}
-
-		@Override
-		public Object getParent(Object o) {
-			return ((CA) o).getParent();
-		}
-
-	};
-
 	/** The Lexicon adapter. */
 	private IWorkbenchAdapter LexiconAdapter = new IWorkbenchAdapter() {
 
@@ -542,37 +513,34 @@
 		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Partition)
 			return partitionAdapter;
+//		if (adapterType == IWorkbenchAdapter.class
+//				&& adaptableObject instanceof SpecificitesResult)
+//			return specificitiesResultAdapter;
 		if (adapterType == IWorkbenchAdapter.class
-				&& adaptableObject instanceof SpecificitesResult)
-			return specificitiesResultAdapter;
-		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Concordance)
 			return concordanceAdapter;
 		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Referencer)
 			return referencerAdapter;
 		if (adapterType == IWorkbenchAdapter.class
-				&& adaptableObject instanceof CA)
-			return CAAdapter;
-		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Lexicon)
 			return LexiconAdapter;
 		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Index)
 			return IndexAdapter;
+//		if (adapterType == IWorkbenchAdapter.class
+//				&& adaptableObject instanceof Progression)
+//			return ProgressionAdapter;
 		if (adapterType == IWorkbenchAdapter.class
-				&& adaptableObject instanceof Progression)
-			return ProgressionAdapter;
-		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof Cooccurrence)
 			return CooccurrenceAdapter;
 		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof LexicalTable)
 			return lexicalTableAdapter;
+//		if (adapterType == IWorkbenchAdapter.class
+//				&& adaptableObject instanceof CAH)
+//			return CAHAdapter;
 		if (adapterType == IWorkbenchAdapter.class
-				&& adaptableObject instanceof CAH)
-			return CAHAdapter;
-		if (adapterType == IWorkbenchAdapter.class
 				&& adaptableObject instanceof InternalView)
 			return InternalViewAdapter;
 		if (adapterType == IWorkbenchAdapter.class
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/CorporaView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/CorporaView.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/CorporaView.java	(revision 137)
@@ -63,17 +63,16 @@
 import org.eclipse.ui.internal.Workbench;
 import org.eclipse.ui.part.ViewPart;
 import org.txm.Toolbox;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
 import org.txm.functions.Function;
 import org.txm.functions.TXMResult;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
 import org.txm.functions.internal.InternalView;
 //import org.txm.functions.queryindex.QueryIndex;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.objects.Project;
 import org.txm.objects.Workspace;
 import org.txm.rcpapplication.Messages;
@@ -82,13 +81,10 @@
 import org.txm.rcpapplication.TextometrieLabelProvider;
 import org.txm.rcpapplication.commands.base.DeleteObject;
 import org.txm.rcpapplication.commands.editor.CustomizableEditor;
-import org.txm.rcpapplication.commands.function.ComputeCAH;
-import org.txm.rcpapplication.editors.ca.CaEditor;
 import org.txm.rcpapplication.editors.cooccurrences.CooccurrencesEditor;
 import org.txm.rcpapplication.editors.index.IndexEditor;
 import org.txm.rcpapplication.editors.input.ConcordancesEditorInput;
 import org.txm.rcpapplication.editors.input.CooccurrenceEditorInput;
-import org.txm.rcpapplication.editors.input.CorrespondanceAnalysisEditorInput;
 import org.txm.rcpapplication.editors.input.IndexEditorInput;
 import org.txm.rcpapplication.editors.input.InternalViewEditorInput;
 import org.txm.rcpapplication.editors.input.LexicalTableEditorInput;
@@ -102,6 +98,7 @@
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Partition;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 import org.txm.utils.logger.Log;
 // TODO: Auto-generated Javadoc
@@ -464,58 +461,58 @@
 					} catch (PartInitException e) {
 						System.err.println(Messages.CorporaView_6+ e);
 					}
-				} else if (selectedItem instanceof CA) {
-					CA ca = (CA) selectedItem;
-					CorrespondanceAnalysisEditorInput editorInput = new CorrespondanceAnalysisEditorInput(ca, ca.getPartition(), ca.getAnalysisProperty());
-					IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
-					try {
-						CaEditor editor = (CaEditor) page.openEditor(editorInput,"org.txm.rcpapplication.editors.ca.CaEditor"); //$NON-NLS-1$
-						editor.refreshGraphEditor();
-						// FIXME: to remove when charts engine will be validated
-						//IEditorPart editor2 = page.openEditor(editorInput, "org.txm.rcpapplication.editors.ca.FactorialMapEditor"); //$NON-NLS-1$
-					} catch (PartInitException e) {
-						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-					} 
-				}
-				else if (selectedItem instanceof CAH) {
-
-					IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
-					try {
-						handlerService.executeCommand(ComputeCAH.ID, null);
-					}
-					catch (Exception e) {
-						e.printStackTrace();
-					}
-
-					// FIXME: to remove when charts engine will be validated
-					//					CAH cah = (CAH) selectedItem;
-					//					try {
-					//						// System.out.println("run syncexec");
-					//						String txmhome = Toolbox.getParam(Toolbox.USER_TXM_HOME);
-					//						System.out.println("CorporaView.createPartControl(...).new IDoubleClickListener() {...}.doubleClick(): " + RDevice.SVG.toString().toUpperCase());
-					//						RDevice device = RDevice.valueOf(TxmPreferences.getString(ExportPreferencePage.RDEVICE, RDevice.SVG.toString()).toUpperCase());
-					//						File resultDir = new File(txmhome, "results"); //$NON-NLS-1$
-					//						resultDir.mkdirs();
-					//						File svgfile = File.createTempFile("cah", device.getExt(), resultDir); //$NON-NLS-1$
-					//						if(!svgfile.canWrite())
-					//						{
-					//							System.out.println(NLS.bind(Messages.CorporaView_9, svgfile));
-					//							return;
-					//						}
-					//
-					//						cah.toSVG(svgfile, device);
-					//						StatusLine.setMessage(""); //$NON-NLS-1$
-					//						IEditorPart editor = OpenGraph.OpenFile(svgfile, device, cah.getPartition().getName()+": "+cah.getName(), IImageKeys.ACTION_CAH); //$NON-NLS-1$
-					//						if (editor != null && editor instanceof CustomizableEditor) 
-					//						{
-					//							CustomizableEditor ceditor = (CustomizableEditor) editor;
-					//							ceditor.setName(cah.getName());
-					//							ceditor.setIcon(IImageKeys.getImage(IImageKeys.ACTION_CAH));
-					//							ceditor.setSource(cah);
-					//						}
-					//					} catch (Exception e) {
-					//						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-					//					}
+//				} else if (selectedItem instanceof CA) {
+//					CA ca = (CA) selectedItem;
+//					CorrespondanceAnalysisEditorInput editorInput = new CorrespondanceAnalysisEditorInput(ca, ca.getPartition(), ca.getAnalysisProperty());
+//					IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
+//					try {
+//						CaEditor editor = (CaEditor) page.openEditor(editorInput,"org.txm.rcpapplication.editors.ca.CaEditor"); //$NON-NLS-1$
+//						editor.refreshGraphEditor();
+//						// FIXME: to remove when charts engine will be validated
+//						//IEditorPart editor2 = page.openEditor(editorInput, "org.txm.rcpapplication.editors.ca.FactorialMapEditor"); //$NON-NLS-1$
+//					} catch (PartInitException e) {
+//						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
+//					} 
+//				}
+//				else if (selectedItem instanceof CAH) {
+//
+//					IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
+//					try {
+//						handlerService.executeCommand(ComputeCAH.ID, null);
+//					}
+//					catch (Exception e) {
+//						e.printStackTrace();
+//					}
+//
+//					// FIXME: to remove when charts engine will be validated
+//					//					CAH cah = (CAH) selectedItem;
+//					//					try {
+//					//						// System.out.println("run syncexec");
+//					//						String txmhome = Toolbox.getParam(Toolbox.USER_TXM_HOME);
+//					//						System.out.println("CorporaView.createPartControl(...).new IDoubleClickListener() {...}.doubleClick(): " + RDevice.SVG.toString().toUpperCase());
+//					//						RDevice device = RDevice.valueOf(TxmPreferences.getString(ExportPreferencePage.RDEVICE, RDevice.SVG.toString()).toUpperCase());
+//					//						File resultDir = new File(txmhome, "results"); //$NON-NLS-1$
+//					//						resultDir.mkdirs();
+//					//						File svgfile = File.createTempFile("cah", device.getExt(), resultDir); //$NON-NLS-1$
+//					//						if(!svgfile.canWrite())
+//					//						{
+//					//							System.out.println(NLS.bind(Messages.CorporaView_9, svgfile));
+//					//							return;
+//					//						}
+//					//
+//					//						cah.toSVG(svgfile, device);
+//					//						StatusLine.setMessage(""); //$NON-NLS-1$
+//					//						IEditorPart editor = OpenGraph.OpenFile(svgfile, device, cah.getPartition().getName()+": "+cah.getName(), IImageKeys.ACTION_CAH); //$NON-NLS-1$
+//					//						if (editor != null && editor instanceof CustomizableEditor) 
+//					//						{
+//					//							CustomizableEditor ceditor = (CustomizableEditor) editor;
+//					//							ceditor.setName(cah.getName());
+//					//							ceditor.setIcon(IImageKeys.getImage(IImageKeys.ACTION_CAH));
+//					//							ceditor.setSource(cah);
+//					//						}
+//					//					} catch (Exception e) {
+//					//						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
+//					//					}
 				} else if (selectedItem instanceof Function) {
 					((Function)selectedItem).openEditor();
 				}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/RVariablesView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/RVariablesView.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/RVariablesView.java	(revision 137)
@@ -60,15 +60,14 @@
 import org.eclipse.ui.part.ViewPart;
 import org.txm.HasResults;
 import org.txm.Toolbox;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
-import org.txm.functions.progression.Progression;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.objects.Base;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcpapplication.IImageKeys;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.commands.EditFile;
@@ -79,6 +78,7 @@
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Partition;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 import org.txm.stat.engine.r.RWorkspace;
 // TODO: Auto-generated Javadoc
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/cmdparameters/ParametersView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/cmdparameters/ParametersView.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/views/cmdparameters/ParametersView.java	(revision 137)
@@ -36,9 +36,8 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.ViewPart;
-import org.txm.functions.specificities.SpecificitesResult;
+import org.txm.ca.rcp.editors.CAEditor;
 import org.txm.rcpapplication.commands.editor.CustomizableEditor;
-import org.txm.rcpapplication.editors.ca.CaEditor;
 import org.txm.rcpapplication.editors.concordances.ConcordancesEditor;
 import org.txm.rcpapplication.editors.cooccurrences.CooccurrencesEditor;
 import org.txm.rcpapplication.editors.index.IndexEditor;
@@ -104,7 +103,7 @@
 			currentEditorLabel.setText("Index "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
 		} else if (editor instanceof CooccurrencesEditor) {
 			currentEditorLabel.setText("Cooccurences "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
-		} else if (editor instanceof CaEditor) {
+		} else if (editor instanceof CAEditor) {
 			currentEditorLabel.setText("CaEditor "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
 		} else if (editor instanceof ReferencerEditor) {
 			currentEditorLabel.setText("References "+editor.getTitle()+":\n\tquery\n\tproperty\n\tsort\n\t...");
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/actions/LexicalTableDialog.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/actions/LexicalTableDialog.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/actions/LexicalTableDialog.java	(revision 137)
@@ -41,18 +41,21 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
+import org.txm.ca.core.preferences.CAPreferences;
+import org.txm.ca.rcp.messages.CAUIMessages;
+import org.txm.ca.rcp.preferences.CAPreferencePage;
+import org.txm.core.preferences.TXMPreferences;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.TxmPreferences;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
 import org.txm.rcpapplication.utils.Logger;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Property;
-// TODO: Auto-generated Javadoc
 /**
- * Retrieve the property analysis to be used for computing correspondance
+ * Retrieve the property analysis to be used for computing correspondence
  * analysis. and also the max number of entries and their minimal frequency
  * 
+ * @author sjacquot
  * @author sloiseau
  * 
  */
@@ -88,14 +91,14 @@
 	/** The mess. */
 	String mess;
 	
-	/** The max, default value read from CA preference page. */
-	private int vmax = TxmPreferences.getInt(CAPreferencePage.VMAX, 200);
+	/** The max, default value read from CA preferences. */
+	private int vmax = TXMPreferences.getInt(CAPreferences.PREFERENCES_NODE, CAPreferences.V_MAX);
 	
-	/** The fmin, default value read from CA preference page. */
-	private int fmin = TxmPreferences.getInt(CAPreferencePage.FMIN, 10);
+	/** The fmin, default value read from CA preferences. */
+	private int fmin = TXMPreferences.getInt(CAPreferences.PREFERENCES_NODE, CAPreferences.F_MIN);
 
 	/**
-	 * Instantiates a new compute correspondance analysis dialog.
+	 * Instantiates a new compute correspondence analysis dialog.
 	 *
 	 * @param parentShell the parent shell
 	 * @param corpus the corpus
@@ -112,7 +115,7 @@
 	}
 
 	/**
-	 * Instantiates a new compute correspondance analysis dialog.
+	 * Instantiates a new compute correspondence analysis dialog.
 	 *
 	 * @param parentShell the parent shell
 	 * @param corpus the corpus
@@ -157,7 +160,7 @@
 			anaPropLabel.setText(mess);
 		else
 			anaPropLabel
-					.setText(Messages.ComputeCorrespondanceAnalysisDialog_1);
+					.setText(CAUIMessages.ComputeCorrespondanceAnalysisDialog_1);
 		anaPropLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER,
 				false, false));
 
@@ -175,7 +178,7 @@
 		anaPropCombo.select(iword);
 
 		maxlinesLabel = new Label(composite, SWT.NONE);
-		maxlinesLabel.setText(Messages.ComputeCorrespondanceAnalysisDialog_2);
+		maxlinesLabel.setText(CAUIMessages.ComputeCorrespondanceAnalysisDialog_2);
 		maxlinesLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER,
 				true, false));
 		maxlinesSpinner = new Spinner(composite, SWT.BORDER);
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/SendToR.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/SendToR.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/SendToR.java	(revision 137)
@@ -42,17 +42,16 @@
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.internal.Workbench;
-import org.txm.functions.ca.CA;
+import org.txm.ca.core.functions.CA;
+import org.txm.ca.rcp.editors.CAEditor;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
-import org.txm.functions.progression.Progression;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcpapplication.JobsTimer;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.commands.editor.CustomizableEditor;
-import org.txm.rcpapplication.editors.ca.CaEditor;
 import org.txm.rcpapplication.editors.concordances.ConcordancesEditor;
 import org.txm.rcpapplication.editors.cooccurrences.CooccurrencesEditor;
 import org.txm.rcpapplication.editors.index.IndexEditor;
@@ -63,6 +62,7 @@
 import org.txm.rcpapplication.views.RVariablesView;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Lexicon;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.specificities.rcp.editors.SpecificitiesTableEditor;
 import org.txm.stat.data.LexicalTable;
 import org.txm.stat.data.Vector;
@@ -218,8 +218,8 @@
 					for(IEditorReference editorref : page.getEditorReferences())
 					{
 						IEditorPart editor = editorref.getEditor(false);
-						if (editor instanceof CaEditor)
-							if (o.equals(((CaEditor)editor).getCA()))
+						if (editor instanceof CAEditor)
+							if (o.equals(((CAEditor)editor).getCA()))
 								editor.getEditorSite().getPage().closeEditor(editor, true);
 					}
 				}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/DeleteObject.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/DeleteObject.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/base/DeleteObject.java	(revision 137)
@@ -50,17 +50,15 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.internal.Workbench;
 import org.txm.HasResults;
+import org.txm.cah.core.functions.CAH;
 import org.txm.functions.Function;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
-import org.txm.functions.progression.Progression;
 //import org.txm.functions.queryindex.QueryIndex;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.objects.TxmObject;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.StatusLine;
 import org.txm.rcpapplication.TxmPreferences;
@@ -75,6 +73,7 @@
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Partition;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 import org.txm.utils.logger.Log;
 // TODO: Auto-generated Javadoc
@@ -293,15 +292,16 @@
 			Index voc = (Index) o;
 			voc.getParent().removeResult(voc);
 			System.out.println(NLS.bind(Messages.DeleteObject_10, voc.getName()));
-		} else if (o instanceof CA) {
-			CA ca = (CA) o;
-			for (int i = 0 ; i < ca.getResults().size() ; i++) {
-				deleted.addAll(delete(ca.getResults().get(i)));
-				i--;
-			}
-			ca.delete();
-			deleted.add(ca);
-			System.out.println(NLS.bind(Messages.DeleteObject_10, ca.getName()));
+			//FIXME
+//		} else if (o instanceof CA) {
+//			CA ca = (CA) o;
+//			for (int i = 0 ; i < ca.getResults().size() ; i++) {
+//				deleted.addAll(delete(ca.getResults().get(i)));
+//				i--;
+//			}
+//			ca.delete();
+//			deleted.add(ca);
+//			System.out.println(NLS.bind(Messages.DeleteObject_10, ca.getName()));
 		} else if (o instanceof CAH) {
 			CAH cah = (CAH) o;
 			cah.delete();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCAH.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCAH.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCAH.java	(revision 137)
@@ -1,585 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-//
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-//
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-//
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-//
-//
-//
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$
-//
-package org.txm.rcpapplication.commands.function;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.txm.Toolbox;
-import org.txm.chartsengine.core.ChartsEngine;
-import org.txm.chartsengine.r.core.RChartsEngine;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorPart;
-import org.txm.chartsengine.svgbatik.rcp.SVGSWTChartsComponentsProvider;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.rcpapplication.IImageKeys;
-import org.txm.rcpapplication.JobsTimer;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.TxmPreferences;
-import org.txm.rcpapplication.actions.LexicalTableDialog;
-import org.txm.rcpapplication.editors.cah.CAHChartEditor;
-import org.txm.rcpapplication.preferences.CAHPreferencePage;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
-import org.txm.rcpapplication.utils.JobHandler;
-import org.txm.rcpapplication.views.CorporaView;
-import org.txm.rcpapplication.views.QueriesView;
-import org.txm.rcpapplication.views.RVariablesView;
-import org.txm.searchengine.cqp.corpus.Partition;
-import org.txm.searchengine.cqp.corpus.Property;
-import org.txm.stat.StatException;
-import org.txm.stat.data.LexicalTable;
-import org.txm.stat.engine.r.RWorkspaceException;
-import org.txm.utils.logger.Log;
-
-/**
- * If the selection is a CA or a Lexical Table result computes the CAH.
- *
- * @author mdecorde, sjacquot.
- */
-public class ComputeCAH extends AbstractHandler {
-
-
-	/**
-	 * The command ID.
-	 */
-	public static final String ID =  ComputeCAH.class.getCanonicalName();
-
-
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
-	 */
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-
-
-		if (!Toolbox.isStatEngineInitialized()) {
-			System.out.println(Messages.ComputeCAH_4);
-			return null;
-		}
-
-		CAH cah = null;
-		CA ca = null;
-		LexicalTable lexicaltable = null;
-		Partition partition = null;
-		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
-
-		
-		// Build the CA or not depending on the selection
-		if (selection.getFirstElement() instanceof CAH) {
-			cah = (CAH) selection.getFirstElement();
-		} else if (selection.getFirstElement() instanceof CA) {
-			//System.out.println("Compute CAH with CA : "+((CA)selection.getFirstElement()).getName());
-			ca = (CA) selection.getFirstElement();
-		} else if (selection.getFirstElement() instanceof LexicalTable) {
-			//System.out.println("Compute CAH with LT : "+((LexicalTable)selection.getFirstElement()).getName());
-			lexicaltable = (LexicalTable) selection.getFirstElement();
-			
-			try {
-				ca = new CA(lexicaltable);
-			} catch (StatException e) {
-				System.out.println("Failed to build the CA with lexical table "+lexicaltable+": "+e);
-				Log.printStackTrace(e);
-			}
-			lexicaltable.storeResult(ca);
-			
-//			if (lexicaltable.getPartition() != null)
-//				lexicaltable.getPartition().storeResult(ca);
-//			else if (lexicaltable.getCorpus() != null)
-//				lexicaltable.getCorpus().storeResult(ca);
-		} else if (selection.getFirstElement() instanceof Partition) {
-			//System.out.println("Compute CAH with Partition : "+((Partition)selection.getFirstElement()).getName());
-			partition = (Partition)selection.getFirstElement();
-			try {
-				String title = Messages.bind(Messages.ComputeCAH_0, partition.getName());
-				int vmax = TxmPreferences.getInt(CAPreferencePage.VMAX, 200);
-				int fmin = TxmPreferences.getInt(CAPreferencePage.FMIN, 10);
-				Shell shell = Display.getCurrent().getActiveShell();
-				LexicalTableDialog d = new LexicalTableDialog(shell, partition
-						.getCorpus(), title);
-				d.setFminAndVMax(fmin, vmax);
-				
-				if (d.open() == Window.OK) {
-					Property property = d.getProperty();
-					fmin = d.getFmin();
-					vmax = d.getMaxLines();
-					
-					lexicaltable = partition.getLexicalTable(property, fmin); // use the CAPreferencePage Fmin
-					lexicaltable.cut(vmax);
-					partition.storeResult(lexicaltable);
-					
-					ca = new CA(lexicaltable);
-					lexicaltable.storeResult(ca);
-				} else {
-					// canceled
-					return null;
-				}
-			} catch (Exception e) {
-				System.out.println("Failed to build the lexical table of "+partition+": "+e);
-				Log.printStackTrace(e);
-				return null;
-			} 
-		}
-
-		final int ncluster = TxmPreferences.getInt(CAHPreferencePage.NCLUSTER, 2);
-		final String metric = TxmPreferences.getString(CAHPreferencePage.METRIC, CAH.getDefaultMetric());
-		final String method = TxmPreferences.getString(CAHPreferencePage.METHOD, CAH.getDefaultMethod());
-		final Boolean display2D = "2D".equals(TxmPreferences.getString(CAHPreferencePage.DISPLAY, "3D")); //$NON-NLS-1$ //$NON-NLS-2$
-		final boolean computeColumns = true;
-
-		// Use existent CAH (used when reopening an editor from a CAH result node)
-		if (cah != null)	{
-			if (cah.getParent() != null)	{
-				cah.getParent().removeResult(cah);
-			}
-		} else {
-//			if (ca == null) cah = new CAH(lexicaltable, computeColumns, method, metric, ncluster, display2D);
-//			else 
-				cah = new CAH(ca, computeColumns, method, metric, ncluster, display2D);
-		}
-	
-		try {
-			compute(cah, null);
-		}
-		catch(RWorkspaceException e) {
-			System.out.println("Failed to compute CAH: "+e);
-			Log.printStackTrace(e);
-		}
-
-		return null;
-	}
-
-	/**
-	 * Computes the CAH. Also creates the chart. Opens a chart editor if <code>chartEditor</code> is null otherwise refreshes the existing chart editor.
-	 * @param newResult
-	 * @throws RWorkspaceException
-	 */
-	public static void compute(final CAH cah, final ChartEditorPart chartEditor) throws RWorkspaceException {
-
-		JobHandler jobhandler = new JobHandler(Messages.CAHEditor_0) {
-			@Override
-			protected IStatus run(IProgressMonitor monitor) {
-				this.runInit(monitor);
-				try {
-
-					this.acquireSemaphore();
-					cah.stepCompute();
-					this.releaseSemaphore();
-
-					// Store result
-					if(chartEditor == null)	{
-//						if (cah.getPartition() != null)	{
-//							cah.getPartition().storeResult(cah);
-//						}
-//						else if (cah.getCorpus() != null)	{
-//							cah.getCorpus().storeResult(cah);
-//						}
-						cah.getCA().storeResult(cah);
-					}
-
-					// Refresh views
-					this.syncExec(new Runnable() {
-						@Override
-						public void run() {
-
-							System.err.println("ComputeCAH.compute(): charts creator is not yet implemented.");
-							
-							// Create a new chart editor
-							// FIXME: version to restore when the JFC CAH charts will be implemented
-//							if(chartEditor == null)	{
-//								ChartEditorPart chartEditor = Application.swtComponentProvider.createCAHChartEditorPart(IImageKeys.getImage(IImageKeys.ACTION_CAH), cah);
-//								// Create and open the chart editor
-//								SWTChartsComponentProvider.openEditor(chartEditor);
-//							}
-//							// Refresh the existing chart editor
-//							else	{
-//								// Create and load the new chart
-//								chartEditor.getComposite().loadChart(Toolbox.getChartsEngine().createCAHChart(((CAHChartEditor) chartEditor).getResultData(), ((CAHChartEditor) chartEditor).getResultData().isDisplay2D()));
-//								chartEditor.forceFocus();
-//							}
-
-							// FIXME: temporary force R/SVG version because the CAH charts are not yet implemented in JFC mode
-							RChartsEngine tmpChartsEngine = new RChartsEngine(ChartsEngine.OUTPUT_FORMAT_SVG);
-							if(chartEditor == null)	{
-								SVGSWTChartsComponentsProvider tmpSWTComponentsProvider = (SVGSWTChartsComponentsProvider) SWTChartsComponentsProvider.getComponentsProvider(tmpChartsEngine);
-								// FIXME: charts creator is not yet implemented
-								//ChartEditorPart chartEditor = tmpSWTComponentsProvider.createCAHChartEditorPart(IImageKeys.getImage(IImageKeys.ACTION_CAH), cah);
-								// Create and open the chart editor
-								tmpSWTComponentsProvider.openEditor(chartEditor);
-							}
-							// Refresh the existing chart editor
-							else	{
-								// FIXME: charts creator is not yet implemented
-								// Create and load the new chart
-								//chartEditor.getComposite().loadChart(tmpChartsEngine.createCAHChart(((CAHChartEditor) chartEditor).getResultData(), ((CAHChartEditor) chartEditor).getResultData().isDisplay2D()));
-								chartEditor.forceFocus();
-							}
-
-
-							// Refresh UI
-							CorporaView.refresh();
-							CorporaView.expand(cah.getParent());
-							QueriesView.refresh();
-							RVariablesView.refresh();
-						}
-					});
-
-
-				}
-				catch (ThreadDeath td) {
-					return Status.CANCEL_STATUS;
-				}
-				catch (Exception e) {
-					System.out.println(e.getLocalizedMessage());
-					org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-					Log.severe("Error while computing CAH: "+e.getLocalizedMessage());
-				}
-				finally {
-					monitor.done();
-					JobsTimer.stopAndPrint();
-				}
-				return Status.OK_STATUS;
-			}
-		};
-		jobhandler.startJob();
-
-	}
-
-
-
-
-
-
-
-
-	// FIXME: to remove when charts engine will be validated, be careful this method contains some old code to open a dialog bog, do we need to keep it ?
-//	public Object execute1(ExecutionEvent event) throws ExecutionException {
-//
-//		if (!Toolbox.isStatEngineInitialized()) {
-//			System.out.println("StatEngine is not ready. Canceling command.");
-//			return null;
-//		}
-//
-//		HandlerUtil.getActiveWorkbenchWindow(event);
-//		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
-//
-//		if (selection.getFirstElement() instanceof CA) {
-//			//System.out.println("Compute CAH with CA : "+((CA)selection.getFirstElement()).getName());
-//			ca = (CA) selection.getFirstElement();
-//		} else if (selection.getFirstElement() instanceof LexicalTable) {
-//			//System.out.println("Compute CAH with LT : "+((LexicalTable)selection.getFirstElement()).getName());
-//			lexicaltable = (LexicalTable) selection.getFirstElement();
-//		}
-//
-//		openEditor1(ca, lexicaltable);
-//
-////		//Open CAH parameters dialog
-////		CAHParamDialog d = new CAHParamDialog(window.getShell());
-////
-////		if (d.open() == Window.OK) {
-////			final int ncluster = d.getNcluster();
-////			final String metric = TxmPreferences.getString(CAHPreferencePage.METRIC, CAH.getDefaultMetric());
-////			final String method = TxmPreferences.getString(CAHPreferencePage.METHOD, CAH.getDefaultMethod());
-////			final Boolean displayMode = TxmPreferences.getBoolean(CAHPreferencePage.DISPLAY, false);
-////			final boolean docol = d.isDoculumns();
-////
-////			JobHandler jobhandler = new JobHandler(Messages.ComputeCAH_3+ca.getName()) {
-////				@Override
-////				protected IStatus run(IProgressMonitor monitor) {
-////					try {
-////						JobsTimer.start();
-////						monitor.beginTask("", 100); //$NON-NLS-1$
-////
-////						monitor.subTask(Messages.ComputeCAH_0);
-////
-////						final CAH cah;
-////						if (ca != null) {
-////							cah = new CAH(ca, docol, method, metric, ncluster, displayMode);
-////							cah.stepCompute();
-////							ca.getPartition().storeResult(cah);
-////						} else {
-////							cah = new CAH(lexicaltable, docol, method, metric, ncluster, displayMode);
-////							cah.stepCompute();
-////							lexicaltable.getPartition().storeResult(cah);
-////						}
-////						if (monitor.isCanceled())
-////							return Status.CANCEL_STATUS;
-////
-////						monitor.worked(20);
-////
-////						monitor.subTask(Messages.ComputeCAH_1);
-////
-////						syncExec(new Runnable() {
-////							@Override
-////							public void run() {
-////
-////								RDevice device = RDevice.valueOf(TxmPreferences.getString(ExportPreferencePage.RDEVICE, RDevice.SVG.toString()));
-////								String txmhome = Toolbox.getParam(Toolbox.USER_TXM_HOME);
-////								File resultDir = new File(txmhome, "results"); //$NON-NLS-1$
-////								resultDir.mkdirs();
-////								File outfile;
-////								try {
-////									outfile = File.createTempFile("cah", device.getExt(), resultDir); //$NON-NLS-1$
-////									if (!outfile.canWrite()) {
-////										System.out.println(NLS.bind(Messages.ComputeCAH_2, outfile));
-////									}
-////								} catch (IOException e1) {
-////									// TODO Auto-generated catch block
-////									org.txm.rcpapplication.utils.Logger.printStackTrace(e1);
-////									return;
-////								}
-////
-////								try {
-////									//System.out.println("CAH file : "+outfile);
-////									cah.toSVG(outfile, device);
-////									OpenGraph.OpenFile(outfile, device, cah.getPartition().getName()+": "+cah.getName(), IImageKeys.ACTION_CAH); //$NON-NLS-1$
-////								} catch (REXPMismatchException e) {
-////									// TODO Auto-generated catch block
-////									org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-////								} catch (StatException e) {
-////									// TODO Auto-generated catch block
-////									org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-////								}
-////							}
-////						});
-////						monitor.worked(50);
-////
-////						syncExec(new Runnable() {
-////							@Override
-////							public void run() {
-////								CorporaView.refresh();
-////								CorporaView.expand(cah.getPartition());
-////							}
-////						});
-////
-////						monitor.worked(100);
-////					} catch (Exception e) {
-////						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-////					} finally {
-////						monitor.done();
-////					}
-////					JobsTimer.stopAndPrint();
-////					return Status.OK_STATUS;
-////				}
-////			};
-////			jobhandler.startJob();
-////		}
-//		return null;
-//	}
-
-
-
-
-	/**
-	 * The Class CAHParamDialog.
-	 */
-	public class CAHParamDialog extends Dialog {
-
-		//protected Combo methodsCombo;
-		//protected Combo metricsCombo;
-		/** The ncluster spinner. */
-		protected Spinner nclusterSpinner;
-
-		/** The docolumns button. */
-		protected Button docolumnsButton;
-
-		/** The title. */
-		protected String title;
-
-		/**
-		 * Instantiates a new cAH param dialog.
-		 *
-		 * @param parentShell the parent shell
-		 */
-		public CAHParamDialog(Shell parentShell) {
-			super(parentShell);
-			this.title = Messages.CAHEditorTitle;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
-		 */
-		@Override
-		protected void configureShell(Shell newShell) {
-			super.configureShell(newShell);
-
-			if (title != null)
-				newShell.setText(title);
-			else
-				newShell.setText(Messages.CAHEditorTitle);
-		}
-
-		/** The composite. */
-		protected Composite composite;
-
-		/** The method. */
-		private String method;
-
-		/** The metric. */
-		private String metric;
-
-		/** The Ncluster. */
-		private int Ncluster;
-
-		/** The doculumns. */
-		private boolean doculumns;
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
-		 */
-		@Override
-		protected Control createDialogArea(Composite parent) {
-			composite = new Composite(parent, SWT.NONE);
-			GridLayout layout = new GridLayout(2, false);
-			composite.setLayout(layout);
-
-			// N CLUSTERS
-			Label label = new Label(composite, SWT.NONE);
-			label.setText(Messages.CAHPreferencePage_2);
-
-			nclusterSpinner = new Spinner(composite, SWT.BORDER);
-			nclusterSpinner.setMinimum(2);
-			nclusterSpinner.setIncrement(1);
-			nclusterSpinner.setSelection(TxmPreferences.getInt(CAHPreferencePage.NCLUSTER, 2));
-			nclusterSpinner.setMaximum(50);
-
-			// ROWS OR COLS
-			docolumnsButton = new Button(composite, SWT.RADIO);
-			docolumnsButton.setText(Messages.ComputeClassification_5);
-			docolumnsButton.setSelection(true);
-
-			Button dorowsButton = new Button(composite, SWT.RADIO);
-			dorowsButton.setText(Messages.ComputeClassification_6);
-
-			/*
-			// METHODS
-			Label methodLabel = new Label(composite, SWT.NONE);
-			methodLabel.setText("Methods");
-
-			methodLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER,
-					false, false));
-
-			methodsCombo = new Combo(composite, SWT.READ_ONLY);
-			methodsCombo.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
-					true, false));
-			methodsCombo.select(methodsCombo.indexOf(CAH.getDefaultMethod()));
-			for(String method : CAH.getMethods())
-				methodsCombo.add(method);
-
-			// METRICS
-			Label metricsLabel = new Label(composite, SWT.NONE);
-			metricsLabel.setText("Methods");
-
-			metricsLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER,
-					false, false));
-
-			metricsCombo = new Combo(composite, SWT.READ_ONLY);
-			metricsCombo.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
-					true, false));
-			metricsCombo.select(metricsCombo.indexOf(CAH.getDefaultMetric()));
-			for(String method : CAH.getMetrics())
-				metricsCombo.add(method);
-				*/
-
-			return composite;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
-		 */
-		@Override
-		protected void okPressed() {
-			/*int idx = methodsCombo.getSelectionIndex();
-			method = methodsCombo.getItem(idx);
-
-			idx = metricsCombo.getSelectionIndex();
-			metric = metricsCombo.getItem(idx);
-*/
-			Ncluster = this.nclusterSpinner.getSelection();
-
-			doculumns = this.docolumnsButton.getSelection();
-
-			super.okPressed();
-		}
-
-		/**
-		 * Gets the method.
-		 *
-		 * @return the method
-		 */
-		public String getMethod() {
-			return method;
-		}
-
-		/**
-		 * Gets the metric.
-		 *
-		 * @return the metric
-		 */
-		public String getMetric() {
-			return metric;
-		}
-
-		/**
-		 * Gets the ncluster.
-		 *
-		 * @return the ncluster
-		 */
-		public int getNcluster() {
-			return Ncluster;
-		}
-
-		/**
-		 * Checks if is doculumns.
-		 *
-		 * @return true, if is doculumns
-		 */
-		public boolean isDoculumns() {
-			return doculumns;
-		}
-	}
-
-
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCorrespondanceAnalysis.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCorrespondanceAnalysis.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeCorrespondanceAnalysis.java	(revision 137)
@@ -1,266 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.rcpapplication.commands.function;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.txm.Toolbox;
-import org.txm.functions.ca.CA;
-import org.txm.functions.ca.ICAComputable;
-import org.txm.rcpapplication.JobsTimer;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.StatusLine;
-import org.txm.rcpapplication.TxmPreferences;
-import org.txm.rcpapplication.actions.LexicalTableDialog;
-import org.txm.rcpapplication.editors.input.CorrespondanceAnalysisEditorInput;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
-import org.txm.rcpapplication.utils.JobHandler;
-import org.txm.rcpapplication.views.CorporaView;
-import org.txm.searchengine.cqp.corpus.Corpus;
-import org.txm.searchengine.cqp.corpus.Partition;
-import org.txm.searchengine.cqp.corpus.Property;
-import org.txm.stat.data.LexicalTable;
-import org.txm.utils.logger.MessageBox;
-
-// TODO: Auto-generated Javadoc
-/**
- * if the selection is a lexical table : computes the CA if the selection is a
- * partition : ask the user which property used and which threshold used then
- * open the CaEditor @ author mdecorde.
- */
-public class ComputeCorrespondanceAnalysis extends AbstractHandler {
-
-	/** The window. */
-	private IWorkbenchWindow window;
-
-	/** The selection. */
-	private IStructuredSelection selection;
-
-	/** The ca. */
-	private CA ca;
-
-	/** The property. */
-	private Property property;
-
-	/** The fmin. */
-	private int fmin;
-
-	/** The vmax. */
-	private int vmax;
-
-	/** The partition. */
-	private Partition partition;
-	private Corpus corpus;
-
-	/** The lexicaltable. */
-	private LexicalTable lexicaltable;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
-	 */
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		
-		if (!Toolbox.isStatEngineInitialized()) {
-			System.out.println(Messages.ComputeCorrespondanceAnalysis_2);
-			return null;
-		}
-		
-		window = HandlerUtil.getActiveWorkbenchWindow(event);
-		selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
-		int code = 0;
-		if (selection.getFirstElement() instanceof Partition) {
-			partition = (Partition) selection.getFirstElement();
-			corpus = partition.getCorpus();
-			//warning to few parts
-			if (partition.getNPart() < 4) {
-				MessageDialog d = new MessageDialog(
-						window.getShell(),
-						Messages.ComputeCorrespondanceAnalysis_3,
-						null,
-						NLS.bind(Messages.ComputeCorrespondanceAnalysis_4, partition.getNPart()),
-						0,
-						new String[] { Messages.ComputeCorrespondanceAnalysis_6 },
-						0);
-				d.open();
-				return null;
-			}
-			//ask property and Fmins and Vmax
-			String title = Messages.bind(Messages.ComputeCorrespondanceAnalysisDialog_0, partition.getName());
-			LexicalTableDialog d = new LexicalTableDialog(
-					window.getShell(), partition.getCorpus(), title);
-			code = d.open();
-			if (code == Window.OK) {
-				property = d.getProperty();
-				fmin = d.getFmin();
-				vmax = d.getMaxLines();
-			}
-		} else if (selection.getFirstElement() instanceof LexicalTable) {
-			lexicaltable = (LexicalTable) selection.getFirstElement();
-			property = lexicaltable.getProperty();
-			partition = lexicaltable.getPartition();
-			if (partition != null)
-				corpus = partition.getCorpus();
-			if (lexicaltable.getNColumns() < 4) {
-				MessageBox.error(Messages.ComputeCorrespondanceAnalysis_13);
-				return null;
-			}
-			if (lexicaltable.getNRows() < 4) {
-				MessageBox.error(Messages.ComputeCorrespondanceAnalysis_1);
-				return null;
-			}
-			code = Window.OK;
-		} else  if (selection.getFirstElement() instanceof ICAComputable) {
-			corpus = ((ICAComputable) selection.getFirstElement()).getCorpus();
-			partition = ((ICAComputable) selection.getFirstElement()).getPartition();
-		}
-
-		if (code == Window.OK) {
-			// final Property property = d.getProperty();
-			String statusmessage;
-			if (partition != null)
-				statusmessage = NLS.bind(Messages.ComputeCorrespondanceAnalysis_0, partition.getName(), property);
-			else
-				statusmessage = NLS.bind(Messages.ComputeCorrespondanceAnalysis_0, selection, "<none>"); //$NON-NLS-1$
-			
-			System.out.println(statusmessage);
-			JobHandler jobhandler = new JobHandler(statusmessage) {
-				@Override
-				protected IStatus run(IProgressMonitor monitor) {
-					this.runInit(monitor);
-					try {
-						JobsTimer.start();
-						monitor.beginTask("", 100); //$NON-NLS-1$
-						monitor.subTask(Messages.ComputeCorrespondanceAnalysis_15);
-
-						if (selection.getFirstElement() instanceof Partition)
-							ca = new CA(partition, property, fmin, vmax);
-						else if (selection.getFirstElement() instanceof LexicalTable)
-							ca = new CA(lexicaltable);
-						else if (selection.getFirstElement() instanceof ICAComputable)
-							ca = ((ICAComputable) selection.getFirstElement()).toCA();
-
-
-						if (selection.getFirstElement() instanceof Partition) {
-							if (monitor.isCanceled()) return Status.CANCEL_STATUS;
-							monitor.subTask(Messages.ComputeCorrespondanceAnalysis_16);
-							
-							this.acquireSemaphore();
-							ca.stepLexicalTable();
-							this.releaseSemaphore();
-							
-							this.acquireSemaphore();
-							ca.stepSortTableLexical();
-							this.releaseSemaphore();
-						}
-
-						monitor.worked(20);
-
-						if (monitor.isCanceled()) return Status.CANCEL_STATUS;
-
-						monitor.subTask(Messages.ComputeCorrespondanceAnalysis_17);
-						this.acquireSemaphore();
-						ca.stepCompute();
-						this.releaseSemaphore();
-						
-						boolean variables = TxmPreferences
-								.getBoolean(CAPreferencePage.SHOWVARIABLES);
-						boolean individuals = TxmPreferences
-								.getBoolean(CAPreferencePage.SHOWINDIVIDUALS);
-						ca.setShown(individuals, variables);
-
-						ca.getLexicalTable().storeResult(ca);
-//						if (partition != null) {
-//							partition.storeResult(ca);
-//						} else {
-//							corpus.storeResult(ca);
-//						}
-						
-						monitor.worked(20);
-						monitor.subTask(Messages.ComputeCorrespondanceAnalysis_8);
-
-						syncExec(new Runnable() {
-							@Override
-							public void run() {
-								if (ca == null) return;
-								IWorkbenchPage page = window.getActivePage();
-								CorrespondanceAnalysisEditorInput editorInput = new CorrespondanceAnalysisEditorInput(
-										ca, partition, property);
-
-								try {
-									StatusLine.setMessage(Messages.ComputeCorrespondanceAnalysis_14);
-									IEditorPart editor = page
-											.openEditor(editorInput,
-													"org.txm.rcpapplication.editors.ca.CaEditor"); //$NON-NLS-1$
-									StatusLine.setMessage(Messages.ComputeCorrespondanceAnalysis_14);
-								} catch (Exception e) {
-									org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-								} 
-
-							}
-						});
-						monitor.worked(50);
-
-						monitor.subTask(Messages.CreatePartition_9);
-						syncExec(new Runnable() {
-							@Override
-							public void run() {
-								CorporaView.refresh();
-								CorporaView.expand(ca.getParent());
-							}
-						});
-
-						monitor.worked(100);
-					} catch (ThreadDeath td) {
-						return Status.CANCEL_STATUS;
-					} catch (Exception e) {
-						org.txm.rcpapplication.utils.Logger.printStackTrace(e);
-					} finally {
-						monitor.done();
-						JobsTimer.stopAndPrint();
-					}
-					return Status.OK_STATUS;
-				}
-			};
-			jobhandler.startJob();
-		}
-		return null;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportResult.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportResult.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportResult.java	(revision 137)
@@ -42,25 +42,24 @@
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
 import org.txm.functions.Function;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.index.Index;
-import org.txm.functions.progression.Progression;
 import org.txm.functions.referencer.Referencer;
-import org.txm.functions.specificities.SpecificitesResult;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcpapplication.JobsTimer;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.StatusLine;
 import org.txm.rcpapplication.TxmPreferences;
 import org.txm.rcpapplication.commands.EditFile;
-import org.txm.rcpapplication.commands.OpenGraph;
 import org.txm.rcpapplication.preferences.ExportPreferencePage;
 import org.txm.rcpapplication.swt.dialog.LastOpened;
 import org.txm.rcpapplication.utils.JobHandler;
 import org.txm.searchengine.cqp.corpus.Lexicon;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 // TODO: Auto-generated Javadoc
 /**
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportSVG.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportSVG.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ExportSVG.java	(revision 137)
@@ -41,24 +41,27 @@
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.txm.Toolbox;
-import org.txm.core.chartsengine.r.__RDevice;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
+import org.txm.cah.core.functions.CAH;
+import org.txm.cah.core.preferences.CAHPreferences;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.r.core.RChartsEngine;
+import org.txm.progression.core.functions.Progression;
+import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.rcpapplication.JobsTimer;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.StatusLine;
 import org.txm.rcpapplication.TxmPreferences;
 import org.txm.rcpapplication.editors.SVGGraphicEditor;
-import org.txm.rcpapplication.editors.ca.CaEditor;
 import org.txm.rcpapplication.preferences.ExportPreferencePage;
 import org.txm.rcpapplication.swt.dialog.LastOpened;
 import org.txm.rcpapplication.views.CorporaView;
+import org.txm.stat.engine.r.RDevice;
 import org.txm.utils.FileCopy;
 
 /**
  * save the SVG file selected @ author mdecorde.
  */
+@Deprecated
 public class ExportSVG extends AbstractHandler {
 
 	private static final String ID = "org.txm.rcpapplication.commands.function.ExportSVG"; //$NON-NLS-1$
@@ -80,7 +83,7 @@
 					.getActivePage().getActivePart();
 
 			String prefDevice = TxmPreferences.getString(ExportPreferencePage.RDEVICE, "SVG"); //$NON-NLS-1$
-			__RDevice device = __RDevice.valueOf(prefDevice.toUpperCase());
+			RDevice device = RDevice.valueOf(prefDevice.toUpperCase());
 			System.out.println(NLS.bind(Messages.ExportSVG_2, device));
 
 			new File(txmhome, "results").mkdir(); //$NON-NLS-1$
@@ -89,26 +92,20 @@
 			if (page instanceof SVGGraphicEditor) {
 				SVGGraphicEditor te = (SVGGraphicEditor) page;
 				svgSourceFile = te.getSVGFile();
-				device = __RDevice.SVG;
-			} else if (page instanceof CaEditor) {
-				CaEditor ed = (CaEditor) page;
-				SVGGraphicEditor svged = ed.getSVGGraphicEditor();
-				if (svged != null) {
-					svgSourceFile = svged.getSVGFile();
-					device = __RDevice.SVG;
-				}
+				device = RDevice.SVG;
 			} else if (page instanceof CorporaView) {
 				CorporaView view = (CorporaView) page;
 				StructuredSelection sel = (StructuredSelection) view.getTreeViewer().getSelection();
 				Object obj = sel.getFirstElement();
 				//System.out.println("sel: "+obj);
 				if (obj instanceof CAH) {
-						((CAH)obj).toSVG(svgSourceFile, device);
-				} else if (obj instanceof CA) {
-						((CA)obj).toSVGFactorialMap(svgSourceFile, device);
-				} else if (obj instanceof Progression) {
-						((Progression)obj).toSvg(svgSourceFile, device);
+					ChartsEngine.getChartsEngine(RChartsEngine.class).getChartCreator(CAH.class).createChartFile(obj, svgSourceFile, CAHPreferences.PREFERENCES_NODE);
+//						((CAH)obj).toSVG(svgSourceFile, device);
 				}
+				else if (obj instanceof Progression) {
+					ChartsEngine.getChartsEngine(RChartsEngine.class).getChartCreator(Progression.class).createChartFile(obj, svgSourceFile, ProgressionPreferences.PREFERENCES_NODE);
+//						((Progression)obj).toSvg(svgSourceFile, device);
+				}
 			}
 
 			if (svgSourceFile != null && svgSourceFile.exists()) {
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeLexicalTable.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeLexicalTable.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/function/ComputeLexicalTable.java	(revision 137)
@@ -42,19 +42,13 @@
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.dialogs.ListDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.txm.Toolbox;
+import org.txm.ca.core.preferences.CAPreferences;
 import org.txm.functions.LexicalTableAble;
 //import org.txm.functions.queryindex.QueryIndex;
 import org.txm.functions.index.Index;
@@ -64,16 +58,11 @@
 import org.txm.rcpapplication.TxmPreferences;
 import org.txm.rcpapplication.actions.LexicalTableDialog;
 import org.txm.rcpapplication.editors.input.LexicalTableEditorInput;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
 import org.txm.rcpapplication.preferences.LexicalTablePreferencePage;
-import org.txm.rcpapplication.swt.dialog.PropertySelector;
 import org.txm.rcpapplication.utils.JobHandler;
-import org.txm.rcpapplication.utils.Logger;
 import org.txm.rcpapplication.views.CorporaView;
 import org.txm.rcpapplication.views.QueriesView;
 import org.txm.rcpapplication.views.RVariablesView;
-import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
-import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.stat.data.LexicalTable;
@@ -256,7 +245,7 @@
 		LexicalTableDialog d = new LexicalTableDialog(window.getShell(), partition
 				.getCorpus(), title);
 		d.setFminAndVMax(TxmPreferences.getInt(LexicalTablePreferencePage.FMIN, 10), 
-				TxmPreferences.getInt(CAPreferencePage.VMAX, 200));
+				TxmPreferences.getInt(CAPreferences.V_MAX, 200));
 		
 		if (d.open() == Window.OK) {
 			property = d.getProperty();
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenTXMUserPreferences.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenTXMUserPreferences.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenTXMUserPreferences.java	(revision 137)
@@ -42,7 +42,6 @@
 import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog;
 import org.txm.progression.rcp.preferences.ProgressionPreferencePage;
 import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.preferences.CAPreferencePage;
 import org.txm.rcpapplication.preferences.ConcordancerPreferencePage;
 import org.txm.rcpapplication.preferences.CoocPreferencePage;
 import org.txm.rcpapplication.preferences.DiagnosticPreferencePage;
@@ -82,7 +81,7 @@
 		
 		IPreferenceNode concordanceNode = new PreferenceNode(ConcordancerPreferencePage.ID, new ConcordancerPreferencePage());
 		IPreferenceNode cooccurrencesNode = new PreferenceNode(CoocPreferencePage.ID, new CoocPreferencePage());
-		IPreferenceNode caNode = new PreferenceNode(CAPreferencePage.ID, new CAPreferencePage());
+//		IPreferenceNode caNode = new PreferenceNode(CAPreferencePage.ID, new CAPreferencePage());
 		IPreferenceNode informationsNode = new PreferenceNode(DiagnosticPreferencePage.ID, new DiagnosticPreferencePage());
 		IPreferenceNode exportNode = new PreferenceNode(ExportPreferencePage.ID, new ExportPreferencePage());
 		IPreferenceNode languageNode = new PreferenceNode(LocalePreferencePage.ID, new LocalePreferencePage());
@@ -93,7 +92,7 @@
 
 		userNode.add(concordanceNode);
 		userNode.add(cooccurrencesNode);
-		userNode.add(caNode);
+//		userNode.add(caNode);
 		userNode.add(informationsNode);
 		userNode.add(exportNode);
 		userNode.add(languageNode);
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/tests/TestCommands.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/tests/TestCommands.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/tests/TestCommands.java	(revision 137)
@@ -40,24 +40,22 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
 import org.txm.Toolbox;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
+import org.txm.cah.core.preferences.CAHPreferences;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.r.core.RChartsEngine;
+import org.txm.core.preferences.TXMPreferences;
 import org.txm.doc.Zip;
-import org.txm.functions.Reference;
 import org.txm.functions.ReferencePattern;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
 import org.txm.functions.concordances.Concordance;
 import org.txm.functions.cooccurrences.Cooccurrence;
 import org.txm.functions.diagnostic.Diagnostic;
 import org.txm.functions.index.Index;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.Specificites;
-import org.txm.functions.specificities.SpecificitesResult;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcpapplication.JobsTimer;
-import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.utils.JobHandler;
-import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.CorpusManager;
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
@@ -68,6 +66,8 @@
 import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
 import org.txm.searchengine.cqp.corpus.Subcorpus;
 import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.specificities.core.functions.Specificites;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 import org.txm.utils.DeleteDir;
 
@@ -193,9 +193,9 @@
 					
 					monitor.subTask("PROGRESSION: no structures queries="+query1+" "+query2);
 					Progression rep = new Progression(corpus, Arrays.asList(query1, query2), null,
-							null, null, true, false, false, 1, false, 1.0f);
+							null, null, true, 1, false, 1.0f);
 					rep.process();
-					rep.toSvg(new File(outDir, "progression_acc.svg"));
+					ChartsEngine.getChartsEngine(RChartsEngine.class).createChartFile(rep, new File(outDir, "progression_acc.svg"), ChartsEngine.OUTPUT_FORMAT_SVG);
 					
 					monitor.worked(2); if (monitor.isCanceled()) return Status.CANCEL_STATUS;
 					
@@ -350,7 +350,8 @@
 					monitor.worked(5); if (monitor.isCanceled()) return Status.CANCEL_STATUS;
 					
 					monitor.subTask("PARTITION-AFC-CAH");
-					CAH cah = new CAH(partition_ca, true, CAH.getDefaultMethod(), CAH.getDefaultMetric(), 5, true);
+					CAH cah = new CAH(partition_ca, true, TXMPreferences.getString(CAHPreferences.PREFERENCES_NODE,  CAHPreferences.METHOD),
+							TXMPreferences.getString(CAHPreferences.PREFERENCES_NODE,  CAHPreferences.METRIC), 5);
 					cah.stepCompute();
 					cah.toTxt(new File(outDir, "partition_afc_cah.csv"), "UTF-8");
 					
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenGraph.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenGraph.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/commands/OpenGraph.java	(revision 137)
@@ -38,13 +38,13 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.handlers.HandlerUtil;
-import org.txm.core.chartsengine.r.__RDevice;
 import org.txm.rcpapplication.IImageKeys;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.editors.SVGGraphicEditor;
 import org.txm.rcpapplication.editors.TXMWebBrowserEditor;
 import org.txm.rcpapplication.swt.dialog.LastOpened;
 import org.txm.rcpapplication.utils.OpenURI;
+import org.txm.stat.engine.r.RDevice;
 // TODO: Auto-generated Javadoc
 /**
  * Open the graphics editor. It can open SVN, PNG, etc depending on the Device given.
@@ -107,7 +107,7 @@
 	 */
 	@Deprecated
 	// FIXME: this method is R charts engine dependent. But it seems to no be used so we may remove it
-	public static IEditorPart OpenFile(String filepath, __RDevice device) {
+	public static IEditorPart OpenFile(String filepath, RDevice device) {
 		return OpenFile(filepath, new File(filepath).getName(), device, null);
 	}
 
@@ -120,7 +120,7 @@
 	 */
 	@Deprecated
 	// FIXME: this method is R charts engine dependent. But it seems to no be used so we may remove it
-	public static IEditorPart OpenFile(File file, __RDevice device) {
+	public static IEditorPart OpenFile(File file, RDevice device) {
 		return OpenFile(file.getAbsolutePath(), file.getName(), device, null);
 	}
 
@@ -162,14 +162,14 @@
 	 */
 	@Deprecated
 	// FIXME: this method is R charts engine dependent. But it seems to no be used so we may remove it
-	public static IEditorPart OpenFile(String filepath, String editorname, __RDevice device, String image) {
+	public static IEditorPart OpenFile(String filepath, String editorname, RDevice device, String image) {
 		File graphfile = new File(filepath);
-		if (device.equals(__RDevice.SVG)) {
+		if (device.equals(RDevice.SVG)) {
 			SVGGraphicEditor editor = OpenSVGGraph.OpenSVGFile(filepath, editorname);
 			if (image != null && IImageKeys.getImage(image) != null)
 				editor.setIcon(IImageKeys.getImage(image));
 			return editor;
-		} else if (device.equals(__RDevice.PNG) || device.equals(__RDevice.JPEG)) {
+		} else if (device.equals(RDevice.PNG) || device.equals(RDevice.JPEG)) {
 			TXMWebBrowserEditor editor = OpenBrowser.openfile(graphfile.getAbsolutePath(), editorname);
 			if (image != null && IImageKeys.getImage(image) != null)
 				editor.setTitleImage(IImageKeys.getImage(image));
@@ -193,7 +193,7 @@
 	 */
 	@Deprecated
 	// FIXME: this method is R charts engine dependent. But it seems to no be used so we may remove it
-	public static IEditorPart OpenFile(File file, __RDevice device, String name, String image) {
+	public static IEditorPart OpenFile(File file, RDevice device, String name, String image) {
 		return OpenFile(file.getAbsolutePath(), name, device, image);
 	}
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAHPreferencePage.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAHPreferencePage.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAHPreferencePage.java	(revision 137)
@@ -1,179 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.rcpapplication.preferences;
-
-import org.eclipse.jface.preference.ComboFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.preference.RadioGroupFieldEditor;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.functions.classification.CAH;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.Messages;
-// TODO: Auto-generated Javadoc
-/**
- * This class represents a preference page that is contributed to the
- * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
- * can use the field support built into JFace that allows us to create a page
- * that is small and knows how to save, restore and apply itself.
- * <p>
- * This page is used to modif y preferences only. They are stored in the
- * preference store that belongs to the main plug-in class. That way,
- * preferences can be accessed directly via the preference store.
- */
-
-public class CAHPreferencePage extends FieldEditorPreferencePage implements
-		IWorkbenchPreferencePage {
-
-	/** The Constant DISPLAY. */
-	public static final String DISPLAY = "cah_display_2d"; //$NON-NLS-1$
-	
-	/** The Constant METHOD. */
-	public static final String METHOD = "cah_default_method"; //$NON-NLS-1$
-	
-	/** The Constant METRIC. */
-	public static final String METRIC = "cah_default_metric"; //$NON-NLS-1$
-	
-	/** The Constant NCLUSTER. */
-	public static final String NCLUSTER = "cah_default_ncluster"; //$NON-NLS-1$
-	
-	/** The Constant ID. */
-	public static final String ID = "org.txm.rcpapplication.preferences.CAHPreferencePage"; //$NON-NLS-1$
-
-	/** The preferences. */
-	private ScopedPreferenceStore preferences;
-
-	/** The defaultdisplay. */
-	private RadioGroupFieldEditor default2D3Ddisplay;
-	
-	/** The defaultncluster. */
-	private IntegerFieldEditor defaultncluster;
-	
-	/** The defaultmethod. */
-	private ComboFieldEditor defaultmethod;
-	
-	/** The defaultmetric. */
-	private ComboFieldEditor defaultmetric;
-
-	/**
-	 * Instantiates a new cAH preference page.
-	 */
-	public CAHPreferencePage() {
-		super(GRID);
-		
-		preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE,
-				Application.PLUGIN_ID);
-		setPreferenceStore(preferences);
-		setTitle(Messages.CAHEditorTitle);
-	}
-
-	/**
-	 * Creates the field editors. Field editors are abstractions of the common
-	 * GUI blocks needed to manipulate various types of preferences. Each field
-	 * editor knows how to save and restore itself.
-	 */
-	@Override
-	public void createFieldEditors() {
-
-		//set defaults
-//		TxmPreferences.set(DISPLAY, TxmPreferences.getBoolean(DISPLAY, false));
-//		TxmPreferences.set(NCLUSTER, TxmPreferences.getInt(NCLUSTER, 2));
-//		TxmPreferences.set(METHOD, TxmPreferences.getString(METHOD, CAH.getDefaultMethod()));
-//		TxmPreferences.set(METRIC, TxmPreferences.getString(METRIC, CAH.getDefaultMetric()));
-		
-		defaultncluster = new IntegerFieldEditor(NCLUSTER,
-				Messages.CAHPreferencePage_2, getFieldEditorParent());
-		addField(defaultncluster);
-
-		String list[] = CAH.getMethods(); 
-		String methods[][] = new String[list.length][2];
-		for(int i = 0 ; i < list.length ; i++)
-			methods[i][0] = methods[i][1] = list[i];
-				
-		defaultmethod = new ComboFieldEditor(METHOD,
-				Messages.CAHPreferencePage_3, methods, getFieldEditorParent());
-		addField(defaultmethod);
-
-		list = CAH.getMetrics(); 
-		String metrics[][] = new String[list.length][2];
-		for(int i = 0 ; i < list.length ; i++)
-			metrics[i][0] = metrics[i][1] = list[i];
-		
-		defaultmetric = new ComboFieldEditor(METRIC,
-				Messages.CAHPreferencePage_4, metrics, getFieldEditorParent());
-		addField(defaultmetric);
-		
-		
-		// Charts
-		Group chartsGroup = SWTChartsComponentsProvider.createChartsRenderingPreferencesGroup(getFieldEditorParent());
-
-		// FIXME : these preferences should be renamed and moved to charts engine preference level (associated messages too)
-		String[][] labelAndValues = {{"2D", "2D"}, {"3D", "3D"}}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		default2D3Ddisplay = new RadioGroupFieldEditor(DISPLAY, Messages.CAHPreferencePage_0, 2, labelAndValues, chartsGroup);
-		addField(default2D3Ddisplay);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
-	 */
-	@Override
-	public void init(IWorkbench workbench) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.PreferencePage#isValid()
-	 */
-	@Override
-	public boolean isValid() {
-		return true; // Otherwise the bahaviour is so strange ....
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performOk()
-	 */
-	@Override
-	public boolean performOk() {
-		try {
-			super.performOk();
-			preferences.save();
-			org.txm.Toolbox
-					.updateProperties(org.txm.rcpapplication.ApplicationWorkbenchAdvisor
-							.getProperties());
-		} catch (Exception e) {
-			System.err.println(Messages.FAILED_TO_SAVE_PREFERENCES + e);
-		}
-		return true;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/WordCloudPreferencePage.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/WordCloudPreferencePage.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/WordCloudPreferencePage.java	(revision 137)
@@ -1,162 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.rcpapplication.preferences;
-
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.ComboFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.txm.functions.classification.CAH;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.TxmPreferences;
-// TODO: Auto-generated Javadoc
-/**
- * This class represents a preference page that is contributed to the
- * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
- * can use the field support built into JFace that allows us to create a page
- * that is small and knows how to save, restore and apply itself.
- * <p>
- * This page is used to modif y preferences only. They are stored in the
- * preference store that belongs to the main plug-in class. That way,
- * preferences can be accessed directly via the preference store.
- */
-
-public class WordCloudPreferencePage extends FieldEditorPreferencePage implements
-		IWorkbenchPreferencePage {
-
-	/** The Constant DISPLAY. */
-	public static final String MAXWORDS = "wordcloud_maxwords"; //$NON-NLS-1$
-	
-	/** The Constant METHOD. */
-	public static final String FMIN = "wordcloud_fmin"; //$NON-NLS-1$
-	
-	/** The Constant METRIC. */
-	public static final String ROT = "wordcloud_rotper"; //$NON-NLS-1$
-	
-	/** The Constant NCLUSTER. */
-	public static final String RANDOMCOLOR = "wordcloud_randomcolor"; //$NON-NLS-1$
-	
-	/** The Constant ID. */
-	public static final String ID = "org.txm.rcpapplication.preferences.WordCloudPreferencePage"; //$NON-NLS-1$
-
-	/** The preferences. */
-	private ScopedPreferenceStore preferences;
-
-	/** The defaultdisplay. */
-	private BooleanFieldEditor randomcolors;
-	
-	/** The defaultncluster. */
-	private IntegerFieldEditor maxwords;
-	private IntegerFieldEditor fmin;
-	private IntegerFieldEditor rotper;
-	
-
-
-	/**
-	 * Instantiates a new cAH preference page.
-	 */
-	public WordCloudPreferencePage() {
-		super(GRID);
-		preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE,
-				Application.PLUGIN_ID);
-		setPreferenceStore(preferences);
-		setTitle(Messages.CAHEditorTitle);
-	}
-
-	/**
-	 * Creates the field editors. Field editors are abstractions of the common
-	 * GUI blocks needed to manipulate various types of preferences. Each field
-	 * editor knows how to save and restore itself.
-	 */
-	@Override
-	public void createFieldEditors() {
-
-		//set defaults
-		TxmPreferences.set(MAXWORDS, TxmPreferences.getInt(MAXWORDS, 2));
-		TxmPreferences.set(FMIN, TxmPreferences.getInt(FMIN, 2));
-		TxmPreferences.set(ROT, TxmPreferences.getInt(ROT, 10));
-		TxmPreferences.set(RANDOMCOLOR, TxmPreferences.getBoolean(RANDOMCOLOR, false));
-		
-		maxwords = new IntegerFieldEditor(MAXWORDS,
-				Messages.WordCloudPreferencePage_0, getFieldEditorParent());
-		addField(maxwords);
-		
-		fmin = new IntegerFieldEditor(FMIN,
-				Messages.WordCloudPreferencePage_1, getFieldEditorParent());
-		addField(fmin);
-		
-		rotper = new IntegerFieldEditor(ROT,
-				Messages.WordCloudPreferencePage_2, getFieldEditorParent());
-		addField(rotper);
-		
-		randomcolors = new BooleanFieldEditor(RANDOMCOLOR,
-				Messages.WordCloudPreferencePage_3, getFieldEditorParent());
-		addField(randomcolors);
-		
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
-	 */
-	@Override
-	public void init(IWorkbench workbench) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.PreferencePage#isValid()
-	 */
-	@Override
-	public boolean isValid() {
-		return true; // Otherwise the bahaviour is so strange ....
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performOk()
-	 */
-	@Override
-	public boolean performOk() {
-		try {
-			super.performOk();
-			preferences.save();
-			org.txm.Toolbox
-					.updateProperties(org.txm.rcpapplication.ApplicationWorkbenchAdvisor
-							.getProperties());
-		} catch (Exception e) {
-			System.err.println(Messages.FAILED_TO_SAVE_PREFERENCES + e);
-		}
-		return true;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAPreferencePage.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAPreferencePage.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/CAPreferencePage.java	(revision 137)
@@ -1,303 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-//
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-//
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-//
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-//
-//
-//
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$
-//
-package org.txm.rcpapplication.preferences;
-
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.preference.StringFieldEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.TxmPreferences;
-// TODO: Auto-generated Javadoc
-/**
- * This class represents a preference page that is contributed to the
- * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
- * can use the field support built into JFace that allows us to create a page
- * that is small and knows how to save, restore and apply itself.
- * <p>
- * This page is used to modif y preferences only. They are stored in the
- * preference store that belongs to the main plug-in class. That way,
- * preferences can be accessed directly via the preference store.
- */
-
-public class CAPreferencePage extends FieldEditorPreferencePage implements
-		IWorkbenchPreferencePage {
-
-	/** The Constant FMIN. */
-	public static final String FMIN = "ca_lt_fmin"; //$NON-NLS-1$
-	public static final String VMAX = "ca_lt_vmax"; //$NON-NLS-1$
-
-	/** The Constant SHOWINDIVIDUALS. */
-	public static final String SHOWINDIVIDUALS = "ca_show_individuals"; //$NON-NLS-1$
-
-	/** The Constant SHOWVARIABLES. */
-	public static final String SHOWVARIABLES = "ca_show_variables"; //$NON-NLS-1$
-
-	/** The Constant QUALITYDISPLAY. */
-	public static final String QUALITYDISPLAY = "ca_quality_display"; //$NON-NLS-1$
-
-	/** The Constant CONTRIBDISPLAY. */
-	public static final String CONTRIBDISPLAY = "ca_contrib_display"; //$NON-NLS-1$
-
-	/** The Constant MASSDISPLAY. */
-	public static final String MASSDISPLAY = "ca_mass_display"; //$NON-NLS-1$
-
-	/** The Constant DISTDISPLAY. */
-	public static final String DISTDISPLAY = "ca_dist_display"; //$NON-NLS-1$
-
-	/** The Constant COS2DISPLAY. */
-	public static final String COS2DISPLAY = "ca_cos2_display"; //$NON-NLS-1$
-
-	/** The Constant COORDDISPLAY. */
-	public static final String COORDDISPLAY = "ca_coord_display"; //$NON-NLS-1$
-
-	/** The Constant ID. */
-	public static final String ID = "org.txm.rcpapplication.preferences.CAPreferencePage"; //$NON-NLS-1$
-
-	/** The preferences. */
-	private ScopedPreferenceStore preferences;
-
-	/** The fmin preference field. */
-	public IntegerFieldEditor fmin;
-	public IntegerFieldEditor vmax;
-
-	/** The show variables preference field. */
-	private BooleanFieldEditor showVariables;
-
-	/** The show individuals preference field. */
-	private BooleanFieldEditor showIndividuals;
-
-	/** The quality display preference field. */
-	private StringFieldEditor qualityDisplay;
-
-	/** The contrib display preference field. */
-	private StringFieldEditor contribDisplay;
-
-	/** The mass display preference field. */
-	private StringFieldEditor massDisplay;
-
-	/** The dist display preference field. */
-	private StringFieldEditor distDisplay;
-
-	/** The cos2 display. */
-	private StringFieldEditor cos2Display;
-
-	/** The coord display preference field. */
-	private StringFieldEditor coordDisplay;
-
-	/**
-	 * Instantiates a new CA preference page.
-	 */
-	public CAPreferencePage() {
-		super(GRID);
-		preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE,
-				Application.PLUGIN_ID);
-		setPreferenceStore(preferences);
-		//setDescription(Messages.CorrespondanceAnalysisEditorInput_10);
-		setTitle(Messages.CorrespondanceAnalysisEditorInput_10);
-
-		if (TxmPreferences.getInt(FMIN, -1) <= 0)
-			TxmPreferences.set(FMIN, 10);
-		if (TxmPreferences.getInt(VMAX, -1) <= 0)
-			TxmPreferences.set(VMAX,200);
-	}
-
-	/**
-	 * Creates the field editors. Field editors are abstractions of the common
-	 * GUI blocks needed to manipulate various types of preferences. Each field
-	 * editor knows how to save and restore itself.
-	 */
-	@Override
-	public void createFieldEditors() {
-
-		Group ltGroup = new Group(getFieldEditorParent(), SWT.NONE);
-		ltGroup.setText(Messages.CAPreferencePage_2);
-		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
-		gridData.horizontalSpan = 2;
-		gridData.verticalIndent = 10;
-		ltGroup.setLayoutData(gridData);
-
-		fmin = new IntegerFieldEditor(FMIN,
-				Messages.LexicalTablePreferencePage_1, ltGroup);
-		addField(fmin);
-
-		vmax = new IntegerFieldEditor(VMAX,
-				Messages.LexicalTableEditor_8, ltGroup);
-		addField(vmax);
-
-		qualityDisplay = new StringFieldEditor(QUALITYDISPLAY,
-				Messages.CAPreferencePage_0, getFieldEditorParent());
-		addField(qualityDisplay);
-
-		contribDisplay = new StringFieldEditor(CONTRIBDISPLAY,
-				Messages.CAPreferencePage_1, getFieldEditorParent());
-		addField(contribDisplay);
-
-		massDisplay = new StringFieldEditor(MASSDISPLAY,
-				Messages.CAPreferencePage_5, getFieldEditorParent());
-		addField(massDisplay);
-
-		distDisplay = new StringFieldEditor(DISTDISPLAY,
-				Messages.CAPreferencePage_6, getFieldEditorParent());
-		addField(distDisplay);
-
-		cos2Display = new StringFieldEditor(COS2DISPLAY,
-				Messages.CAPreferencePage_7, getFieldEditorParent());
-		addField(cos2Display);
-
-		coordDisplay = new StringFieldEditor(COORDDISPLAY,
-				Messages.CAPreferencePage_8, getFieldEditorParent());
-		addField(coordDisplay);
-
-
-		// Charts rendering
-		Group chartsGroup = SWTChartsComponentsProvider.createChartsRenderingPreferencesGroup(getFieldEditorParent());
-
-		// FIXME : these 2 preferences should be renamed and moved to charts engine preference level (associated messages too)
-		showIndividuals = new BooleanFieldEditor(SHOWINDIVIDUALS, Messages.CAPreferencePage_3, chartsGroup);
-		addField(showIndividuals);
-
-		showVariables = new BooleanFieldEditor(SHOWVARIABLES, Messages.CAPreferencePage_4, chartsGroup);
-		addField(showVariables);
-
-	}
-
-	
-//	@Override
-//	public void createFieldEditors() {
-//
-//		
-//		// FIXME: tabbed preferences page test
-//		
-//		TabFolder tabFolder = new TabFolder(this.getFieldEditorParent(), SWT.TOP);
-//		tabFolder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-//		
-//		TabItem tabItem = new TabItem(tabFolder, SWT.NULL);
-//		tabItem.setText("Table lexicale");
-//		Composite composite1 = new Composite(tabFolder, SWT.NULL);
-//		tabItem.setControl(composite1);
-//		fmin = new IntegerFieldEditor(FMIN, Messages.LexicalTablePreferencePage_1, composite1);
-//		addField(fmin);
-//		vmax = new IntegerFieldEditor(VMAX, Messages.LexicalTableEditor_8, composite1);
-//		addField(vmax);
-//
-//		
-//		TabItem tabItem2 = new TabItem(tabFolder, SWT.NULL);
-//		tabItem2.setText("Calcul");
-//		Composite composite2 = new Composite(tabFolder, SWT.NULL);
-//		tabItem2.setControl(composite2);
-//		qualityDisplay = new StringFieldEditor(QUALITYDISPLAY,
-//				Messages.CAPreferencePage_0, composite2);
-//		addField(qualityDisplay);
-//
-//		contribDisplay = new StringFieldEditor(CONTRIBDISPLAY,
-//				Messages.CAPreferencePage_1, composite2);
-//		addField(contribDisplay);
-//
-//		massDisplay = new StringFieldEditor(MASSDISPLAY,
-//				Messages.CAPreferencePage_5, composite2);
-//		addField(massDisplay);
-//
-//		distDisplay = new StringFieldEditor(DISTDISPLAY,
-//				Messages.CAPreferencePage_6, composite2);
-//		addField(distDisplay);
-//
-//		cos2Display = new StringFieldEditor(COS2DISPLAY,
-//				Messages.CAPreferencePage_7, composite2);
-//		addField(cos2Display);
-//
-//		coordDisplay = new StringFieldEditor(COORDDISPLAY,
-//				Messages.CAPreferencePage_8, composite2);
-//		addField(coordDisplay);
-//
-//
-//		// Charts rendering
-//		TabItem tabItem3 = new TabItem(tabFolder, SWT.NULL);
-//		tabItem3.setText("Graphiques");
-//		Composite composite3 = new Composite(tabFolder, SWT.NULL);
-//		tabItem3.setControl(composite3);
-//
-//		// FIXME : these 2 preferences should be renamed and moved to charts engine preference level (associated messages too)
-//		showIndividuals = new BooleanFieldEditor(SHOWINDIVIDUALS, Messages.CAPreferencePage_3, composite3);
-//		addField(showIndividuals);
-//
-//		showVariables = new BooleanFieldEditor(SHOWVARIABLES, Messages.CAPreferencePage_4, composite3);
-//		addField(showVariables);
-//
-//	}
-
-	
-
-	
-	
-	
-	
-	
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see
-	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
-	 */
-	@Override
-	public void init(IWorkbench workbench) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.PreferencePage#isValid()
-	 */
-	@Override
-	public boolean isValid() {
-		return true; // Otherwise the bahaviour is so strange ....
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performOk()
-	 */
-	@Override
-	public boolean performOk() {
-		try {
-			super.performOk();
-			preferences.save();
-			org.txm.Toolbox
-					.updateProperties(org.txm.rcpapplication.ApplicationWorkbenchAdvisor
-							.getProperties());
-		} catch (Exception e) {
-			System.err.println(Messages.FAILED_TO_SAVE_PREFERENCES + e);
-		}
-		return true;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/ExportPreferencePage.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/ExportPreferencePage.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/preferences/ExportPreferencePage.java	(revision 137)
@@ -40,7 +40,6 @@
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.core.chartsengine.r.__RDevice;
 import org.txm.rcpapplication.Application;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.TxmPreferences;
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages.properties	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages.properties	(revision 137)
@@ -142,15 +142,6 @@
 CAHPreferencePage_3=Method
 CAHPreferencePage_4=Metric
 CANT_CREATE_GRAPHIC=** Cannot create the graphic
-CAPreferencePage_0=Quality column format
-CAPreferencePage_1=Contribution column format
-CAPreferencePage_2=Lexical table created when called from a partition
-CAPreferencePage_3=Show the columns
-CAPreferencePage_4=Show the rows
-CAPreferencePage_5=Mass column format
-CAPreferencePage_6=Distance column format
-CAPreferencePage_7=Cos\u00B2 column format
-CAPreferencePage_8=Coord column format
 CQPPreferenceInitializer_0=localhost
 CQPPreferenceInitializer_1=anonymous
 CQPPreferencePage_0=CQPlib path
@@ -196,15 +187,6 @@
 ComplexSubcorpusPanel_2=Some criteria
 ComplexSubcorpusPanel_4=Query
 ComplexSubcorpusPanel_5=Refresh
-ComputeCAH_0=Compute Classification with {0}
-ComputeCAH_1=Show graphic
-ComputeCAH_2=Error\: temporary file created cannot be written\:
-ComputeCAH_3=Computing CAH with
-ComputeCAH_4=Statistics Engine is not ready. Canceling command.
-ComputeCAH_5=Opening the Classification result
-ComputeCAH_6=Error while computing Classification\: {0}
-ComputeClassification_5=Compute columns
-ComputeClassification_6=Compute rows
 ComputeConcordance_0=Opening the Concordance result
 ComputeConcordance_1=Failed to open concordance editor.
 ComputeCoocFromLines_0=Computing Cooccurrents
@@ -222,21 +204,6 @@
 ComputeCooccurrences_0=Opening cooccurrents table
 ComputeCooccurrences_1=cannot compute cooccurrences with the selection
 ComputeCooccurrences_2=StatEngine is not ready. Canceling command.
-ComputeCorrespondanceAnalysisDialog_0=Correspondance analysis with {0}
-ComputeCorrespondanceAnalysisDialog_1=Property\:
-ComputeCorrespondanceAnalysisDialog_2=Number of lines\:
-ComputeCorrespondanceAnalysis_0=Computing Correspondance analysis on {0} with property {1}
-ComputeCorrespondanceAnalysis_1=Cannot compute CA with less than 4 rows in the table
-ComputeCorrespondanceAnalysis_13=Can't compute CA on lexical table with less than 4 columns
-ComputeCorrespondanceAnalysis_14=Opening the Correspondance Analysis results
-ComputeCorrespondanceAnalysis_15=Create CA
-ComputeCorrespondanceAnalysis_16=Get LexicalTable CA
-ComputeCorrespondanceAnalysis_17=Compute CA
-ComputeCorrespondanceAnalysis_2=StatEngine is not ready. Canceling command.
-ComputeCorrespondanceAnalysis_3=** Error
-ComputeCorrespondanceAnalysis_4=Cannot compute factorial analysis with only {0} parts (the minimum is 4 parts).
-ComputeCorrespondanceAnalysis_6=OK
-ComputeCorrespondanceAnalysis_8=Loading correspondances analysis results...
 ComputeFrequencyList_2=Processing word lexicon of {0} in the corpus {1}
 ComputeIndexFromLines_0=Send selection to Index
 ComputeInternalView_0=Selection is not structured
@@ -500,20 +467,6 @@
 CorpusPage_91=Error: can not read the selected file: 
 CorpusPage_92=Error: corpus name is invalid (remove special characters and punctuation ; must not with a number): 
 CorpusPage_93=Import stopped: corpus name does not matches the '[A-Z][-A-Z0-9]{1,20}' pattern: 
-CorrespondanceAnalysisEditorInput_0=Eigenvalues
-CorrespondanceAnalysisEditorInput_1=Fact. plan
-CorrespondanceAnalysisEditorInput_10=CA
-CorrespondanceAnalysisEditorInput_2=Eigenvalues histogram
-CorrespondanceAnalysisEditorInput_26=Mass
-CorrespondanceAnalysisEditorInput_27=Dist
-CorrespondanceAnalysisEditorInput_29=Cont
-CorrespondanceAnalysisEditorInput_3=Correspondance analysis result cannot be null
-CorrespondanceAnalysisEditorInput_30=Cos\u00B2
-CorrespondanceAnalysisEditorInput_4=#
-CorrespondanceAnalysisEditorInput_5=Eigenvalue
-CorrespondanceAnalysisEditorInput_8=Rows infos
-CorrespondanceAnalysisEditorInput_9=Cols infos
-CorrespondanceAnalysisEditorInput_11=\u2211
 CreateFile_1=New file\: {0}
 CreateFolder_1=New folder\: {0}
 CreateFrequencyList_8=Loading frequencies results...
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/IImageKeys.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/IImageKeys.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/IImageKeys.java	(revision 137)
@@ -239,8 +239,7 @@
 	 */
 	public static Image getImage(String imagekey) {
 		if (!images.containsKey(imagekey))
-			images.put(imagekey, new Image(null, AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, imagekey)
-					.getImageData()));
+			images.put(imagekey, new Image(null, AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, imagekey).getImageData()));
 		return images.get(imagekey);
 	}
 	
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/CorrespondanceAnalysisEditorInput.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/CorrespondanceAnalysisEditorInput.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/CorrespondanceAnalysisEditorInput.java	(revision 137)
@@ -1,612 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-//
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-//
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-//
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-//
-//
-//
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$
-//
-package org.txm.rcpapplication.editors.input;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.part.EditorPart;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorPart;
-import org.txm.functions.ca.CA;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.IImageKeys;
-import org.txm.rcpapplication.Messages;
-import org.txm.rcpapplication.editors.Tablable;
-import org.txm.rcpapplication.editors.ca.ColRowInfosLabelProvider;
-import org.txm.rcpapplication.editors.ca.ColsRowsInfosEditor;
-import org.txm.rcpapplication.editors.ca.SingularValuesEditor;
-import org.txm.searchengine.cqp.corpus.Partition;
-import org.txm.searchengine.cqp.corpus.Property;
-
-
-// TODO: Auto-generated Javadoc
-/**
- * The Class CorrespondanceAnalysisEditorInput.
- *
- * @author sloiseau
- */
-public class CorrespondanceAnalysisEditorInput implements IEditorInput,
-IProvidingMultiPageEditorInput {
-
-	/** The ca. */
-	private CA ca;
-	private static String SEPARATOR = "SEPARATOR"; //$NON-NLS-1$
-
-	/** The property. */
-	private Property property;
-
-	/** The editors. */
-	private List<EditorPart> editors;
-
-	/** The inputs. */
-	private List<IEditorInput> inputs;
-
-	/** The names. */
-	private List<String> names = Arrays.asList(new String[] {
-			Messages.CorrespondanceAnalysisEditorInput_1,
-			Messages.CorrespondanceAnalysisEditorInput_0,
-			Messages.CorrespondanceAnalysisEditorInput_8,
-			Messages.CorrespondanceAnalysisEditorInput_9,
-			Messages.CorrespondanceAnalysisEditorInput_2 });
-
-	/**
-	 * The Class CASingularValueLabelProvider.
-	 */
-	private class CASingularValueLabelProvider extends LabelProvider implements	ITableLabelProvider {
-
-
-		/**
-		 * Percent values number format.
-		 */
-		protected DecimalFormat percentValuesNumberFormat = new DecimalFormat(new String("0.00")); //$NON-NLS-1$
-
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
-		 */
-		@Override
-		public Image getColumnImage(Object element, int columnIndex) {
-			// TODO Auto-generated method stub
-			return null;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
-		 */
-		@Override
-		@SuppressWarnings("unchecked") //$NON-NLS-1$
-		public String getColumnText(Object element, int columnIndex) {
-			DecimalFormat f;
-			Object o = ((List<Object>) element).get(columnIndex);
-			switch (columnIndex) {
-				case 0: // factor
-					return o.toString();
-				case 1: // eigenvalue
-					if ((Double) o < 1) {
-						if ((Double) o < 0.0001)
-							f = new DecimalFormat("0.0000E00"); //$NON-NLS-1$
-						else
-							f = new DecimalFormat("0.0000"); //$NON-NLS-1$
-					} else {
-						f = new DecimalFormat("##########0.0000"); //$NON-NLS-1$
-					}
-					// FIXME: printf syntax tests
-					//return String.format("%.4f", o);
-					return f.format(o);
-				case 2: // percent
-				case 3: // cumul
-					return percentValuesNumberFormat.format(o);
-				default:
-					return ""; //$NON-NLS-1$
-			}
-		}
-	}
-
-	/**
-	 * Instantiates a new correspondence analysis editor input.
-	 *
-	 * @param ca the ca
-	 * @param partition the partition
-	 * @param property the property
-	 */
-	public CorrespondanceAnalysisEditorInput(final CA ca, Partition partition, Property property) {
-		super();
-		this.ca = ca;
-		this.property = property;
-
-		if (ca == null)
-			throw new IllegalArgumentException(
-					Messages.CorrespondanceAnalysisEditorInput_3);
-
-		// Create the tab-editor
-		editors = new ArrayList<EditorPart>();
-
-		// Create the input for each tab-editor
-		inputs = new ArrayList<IEditorInput>();
-
-		// Initialize the editor parts and editor inputs
-		this.initCAFactorialMapEditor();
-		this.initCASingularValuesTableEditor();
-		this.initRowsTableEditor();
-		this.initColumnsTableEditor();
-		this.initCASingularValuesBarChartEditor();
-	}
-
-
-	/**
-	 * Initializes CA factorial map editor.
-	 */
-	public void initCAFactorialMapEditor()	{
-
-		// FIXME: charts creator is not yet implemented
-		System.err.println("CorrespondanceAnalysisEditorInput.initCAFactorialMapEditor(): charts creator is not yet implemented.");
-		// Editor part
-		//EditorPart caFactorialMapEditorPart = SWTChartsComponentsProvider.getCurrent().createCAFactorialMapChartEditorPart(ca);
-		//editors.add(caFactorialMapEditorPart);
-
-		// Editor input
-		//inputs.add(caFactorialMapEditorPart.getEditorInput());
-
-	}
-
-	/**
-	 * Initializes CA singular values table editor.
-	 */
-	public void initCASingularValuesTableEditor()	{
-		// Editor part
-		editors.add(new SingularValuesEditor());
-
-		// Editor input
-		Tablable table = new AbstractTablable() {
-			@Override
-			public String[] getColumnTitles() {
-				return new String[] {
-						Messages.CorrespondanceAnalysisEditorInput_4,
-						Messages.CorrespondanceAnalysisEditorInput_5,
-						"%", Messages.CorrespondanceAnalysisEditorInput_11 + "%", "", ""}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			}
-
-			@Override
-			public String[] getColumnTypes() {
-				return new String[] {
-						Messages.FrequencyListEditorInput_6,
-						Messages.SpecificitiesResultEditorInput_11,
-						Messages.SpecificitiesResultEditorInput_11,
-						Messages.SpecificitiesResultEditorInput_11,
-						Messages.SpecificitiesResultEditorInput_11,
-						SEPARATOR};
-			}
-
-			@Override
-			public IStructuredContentProvider getContentProvider() {
-				return new IStructuredContentProvider() {
-					@Override
-					public Object[] getElements(Object inputElement) {
-						CA ca = (CA) inputElement;
-						List<List<Object>> tabledata = ca.getSingularValuesInfos();
-						return tabledata.toArray();
-					}
-
-					@Override
-					public void dispose() {
-						// TODO Auto-generated method stub
-					}
-
-					@Override
-					public void inputChanged(Viewer viewer, Object oldInput,
-							Object newInput) {
-						// TODO Auto-generated method stub
-					}
-				};
-			}
-
-			@Override
-			public Object getInput() {
-				return ca;
-			}
-
-			@Override
-			public LabelProvider getLabelProvider() {
-				return new CASingularValueLabelProvider();
-			}
-		};
-
-		inputs.add(table);
-	}
-
-
-
-	/**
-	 * Initializes rows data table editor.
-	 */
-	public void initRowsTableEditor()	{
-		// Editor part
-		editors.add(new ColsRowsInfosEditor());
-
-		// Editor input
-		Tablable table = new AbstractTablable() {
-
-			List<String> coltypes;
-			@Override
-			public String[] getColumnTitles() {
-				return ca.getRowInfosTitles();
-				// new String[]{"Rows"," ","Quality","Mass", "Dist", "Inertia"};
-			}
-
-			@Override
-			public String[] getColumnTypes() {
-				coltypes = new ArrayList<String>();
-				coltypes.add(Messages.FrequencyListEditorInput_6);
-				coltypes.add(SEPARATOR);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				for (int c = 0; c < 3; c++)// seulement les 3 premiers axes
-				{
-					coltypes.add(SEPARATOR);
-					coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-					coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				}
-				coltypes.add(SEPARATOR);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(SEPARATOR);
-				return coltypes.toArray(new String[] {});
-				// new String[]{Messages.FrequencyListEditorInput_6,
-				// Messages.SpecificitiesResultEditorInput_11,
-				// Messages.SpecificitiesResultEditorInput_11,
-				// Messages.SpecificitiesResultEditorInput_11};
-			}
-
-			@Override
-			public IStructuredContentProvider getContentProvider() {
-
-				return new IStructuredContentProvider() {
-					@Override
-					public Object[] getElements(Object inputElement) {
-
-						CA ca = (CA) inputElement;
-						return ca.getRowInfos();
-					}
-
-					@Override
-					public void dispose() {
-						// TODO Auto-generated method stub
-					}
-
-					@Override
-					public void inputChanged(Viewer viewer, Object oldInput,
-							Object newInput) {
-						// TODO Auto-generated method stub
-					}
-				};
-			}
-
-			@Override
-			public Object getInput() {
-				return ca;
-			}
-
-			@Override
-			public LabelProvider getLabelProvider() {
-				return new ColRowInfosLabelProvider(this.getColumnTitles());
-			}
-		};
-		inputs.add(table);
-	}
-
-
-	/**
-	 * Initializes columns data table editor.
-	 */
-	public void initColumnsTableEditor()	{
-		// Editor part
-		editors.add(new ColsRowsInfosEditor());
-
-		// Editor input
-		Tablable table = new AbstractTablable() {
-
-			List<String> colnames = new ArrayList<String>();
-			List<String> coltypes = new ArrayList<String>();
-			boolean firstInit = true;
-
-			@Override
-			public String[] getColumnTitles() {
-//				colnames = new ArrayList<String>();
-//				colnames.add(Messages.ComputeClassification_5);
-//				colnames.add(" "); //$NON-NLS-1$
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_46);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_47);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_25);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_26);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_27);
-//				for (int c = 0; c < 3; c++)// seulement les 3 premiers axes
-//				{
-//					colnames.add(" "); //$NON-NLS-1$
-//					colnames.add(Messages.CorrespondanceAnalysisEditorInput_29
-//							+ (c + 1));
-//					colnames.add(Messages.CorrespondanceAnalysisEditorInput_30
-//							+ (c + 1));
-//				}
-//				colnames.add(" "); //$NON-NLS-1$
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_32);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_33);
-//				colnames.add(Messages.CorrespondanceAnalysisEditorInput_34);
-//				colnames.add(""); //$NON-NLS-1$
-//				String[] titles = colnames.toArray(new String[] {});
-//				return titles;
-				return ca.getColInfosTitles();
-				// new String[]{"Rows"," ","Quality","Mass", "Dist", "Inertia"};
-			}
-
-			@Override
-			public String[] getColumnTypes() {
-				coltypes = new ArrayList<String>();
-				coltypes.add(Messages.FrequencyListEditorInput_6);
-				coltypes.add(SEPARATOR);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				for (int c = 0; c < 3; c++) {
-					coltypes.add(SEPARATOR);
-					coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-					coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				}
-				coltypes.add(SEPARATOR);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(Messages.SpecificitiesResultEditorInput_11);
-				coltypes.add(SEPARATOR);
-				return coltypes.toArray(new String[] {});
-				// new String[]{Messages.FrequencyListEditorInput_6,
-				// Messages.SpecificitiesResultEditorInput_11,
-				// Messages.SpecificitiesResultEditorInput_11,
-				// Messages.SpecificitiesResultEditorInput_11};
-			}
-
-			@Override
-			public IStructuredContentProvider getContentProvider() {
-
-				return new IStructuredContentProvider() {
-					@Override
-					public Object[] getElements(Object inputElement) {
-						CA ca = (CA) inputElement;
-						return ca.getColInfos();
-					}
-
-					@Override
-					public void dispose() {
-						// TODO Auto-generated method stub
-					}
-
-					@Override
-					public void inputChanged(Viewer viewer, Object oldInput,
-							Object newInput) {
-						// TODO Auto-generated method stub
-					}
-				};
-			}
-
-			@Override
-			public Object getInput() {
-				return ca;
-			}
-
-			@Override
-			public LabelProvider getLabelProvider() {
-				return new ColRowInfosLabelProvider(this.getColumnTitles());
-			}
-		};
-		inputs.add(table);
-	}
-
-
-	/**
-	 * Initializes CA singular values bar chart editor.
-	 */
-	public void initCASingularValuesBarChartEditor()	{
-		
-		//FIXME: charts creator is not yet implemented
-		System.err.println("CorrespondanceAnalysisEditorInput.initCASingularValuesBarChartEditor(): charts creator is not yet implemented.");
-		// Editor part
-//		ChartEditorPart caSingularValuesEditorPart = SWTChartsComponentsProvider.getCurrent().createCASingularValuesBarChartEditorPart(ca);
-//		editors.add(caSingularValuesEditorPart);
-//
-//		// Editor input
-//		inputs.add(caSingularValuesEditorPart.getEditorInput());
-	}
-
-
-	/**
-	 * Exists.
-	 *
-	 * @return true, if successful
-	 * @see org.eclipse.ui.IEditorInput#exists()
-	 */
-	@Override
-	public boolean exists() {
-		return false;
-	}
-
-	/**
-	 * Gets the image descriptor.
-	 *
-	 * @return the image descriptor
-	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
-	 */
-	@Override
-	public ImageDescriptor getImageDescriptor() {
-		return AbstractUIPlugin.imageDescriptorFromPlugin(
-				Application.PLUGIN_ID,
-				IImageKeys.ACTION_CORRESPONDANCE_ANALYSIS);
-	}
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 * @see org.eclipse.ui.IEditorInput#getName()
-	 */
-	@Override
-	public String getName() {
-		return Messages.CorrespondanceAnalysisEditorInput_10;
-	}
-
-	/**
-	 * Gets the persistable.
-	 *
-	 * @return the persistable
-	 * @see org.eclipse.ui.IEditorInput#getPersistable()
-	 */
-	@Override
-	public IPersistableElement getPersistable() {
-		return null;
-	}
-
-	/**
-	 * Gets the tool tip text.
-	 *
-	 * @return the tool tip text
-	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
-	 */
-	@Override
-	public String getToolTipText() {
-		return getName();
-	}
-
-	/**
-	 * Gets the adapter.
-	 *
-	 * @param arg0 the arg0
-	 * @return the adapter
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
-	@Override
-	@SuppressWarnings("unchecked") //$NON-NLS-1$
-	public Object getAdapter(Class arg0) {
-		return null;
-	}
-
-	/**
-	 * Gets the cA.
-	 *
-	 * @return the Correspondance analysis underlying object
-	 */
-	public CA getCA() {
-		return ca;
-	}
-
-	/**
-	 * Gets the property.
-	 *
-	 * @return the property
-	 */
-	public Property getProperty() {
-		return property;
-	}
-
-	/**
-	 * Gets the content provider.
-	 *
-	 * @return the content provider
-	 */
-	public IStructuredContentProvider getContentProvider() {
-		return new FrequencyListContentProvider();
-	}
-
-	/**
-	 * Gets the input.
-	 *
-	 * @return the input
-	 */
-	public Object getInput() {
-		return ca;
-	}
-
-	/**
-	 * Gets the label provider.
-	 *
-	 * @return the label provider
-	 */
-	public LabelProvider getLabelProvider() {
-		return new FrequencyListLabelProvider();
-	}
-
-	/**
-	 * Gets the column titles.
-	 *
-	 * @return the column titles
-	 */
-	public String[] getColumnTitles() {
-		return new String[] { Messages.FrequencyListEditorInput_9,
-				Messages.FrequencyListEditorInput_4 };
-	}
-
-	// Implementing IProvidingMultiPageEditorInput
-	/* (non-Javadoc)
-	 * @see org.txm.rcpapplication.editors.input.IProvidingMultiPageEditorInput#getEditorInputs()
-	 */
-	@Override
-	public List<IEditorInput> getEditorInputs() {
-		return inputs;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.rcpapplication.editors.input.IProvidingMultiPageEditorInput#getEditors()
-	 */
-	@Override
-	public List<EditorPart> getEditors() {
-		return editors;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.rcpapplication.editors.input.IProvidingMultiPageEditorInput#getNames()
-	 */
-	@Override
-	public List<String> getNames() {
-		return names;
-	}
-
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/ProgressionEditorInput.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/ProgressionEditorInput.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/ProgressionEditorInput.java	(revision 137)
@@ -1,136 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.rcpapplication.editors.input;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.txm.functions.progression.Progression;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.IImageKeys;
-import org.txm.rcpapplication.Messages;
-// TODO: Auto-generated Javadoc
-/**
- * The Class ProgressionEditorInput.
- *
- * @author mdecorde
- */
-public class ProgressionEditorInput implements IEditorInput {
-	
-	/** The progression. */
-	private Progression progression;
-
-	/**
-	 * Instantiates a new progression editor input.
-	 *
-	 * @param progression the progression
-	 */
-	public ProgressionEditorInput(Progression progression) {
-		super();
-		this.progression = progression;
-	}
-
-	/**
-	 * Exists.
-	 *
-	 * @return true, if successful
-	 * @see org.eclipse.ui.IEditorInput#exists()
-	 */
-	@Override
-	public boolean exists() {
-		return false;
-	}
-
-	/**
-	 * Gets the image descriptor.
-	 *
-	 * @return the image descriptor
-	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
-	 */
-	@Override
-	public ImageDescriptor getImageDescriptor() {
-		return AbstractUIPlugin.imageDescriptorFromPlugin(
-				Application.PLUGIN_ID, IImageKeys.ACTION_PROGRESSION);
-	}
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 * @see org.eclipse.ui.IEditorInput#getName()
-	 */
-	@Override
-	public String getName() {
-		return Messages.ProgressionEditorInput_0;
-	}
-
-	/**
-	 * Gets the persistable.
-	 *
-	 * @return the persistable
-	 * @see org.eclipse.ui.IEditorInput#getPersistable()
-	 */
-	@Override
-	public IPersistableElement getPersistable() {
-		return null;
-	}
-
-	/**
-	 * Gets the tool tip text.
-	 *
-	 * @return the tool tip text
-	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
-	 */
-	@Override
-	public String getToolTipText() {
-		return this.progression.getQueries().toString();
-	}
-
-	/**
-	 * Gets the adapter.
-	 *
-	 * @param arg0 the arg0
-	 * @return the adapter
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
-	@Override
-	@SuppressWarnings("unchecked") //$NON-NLS-1$
-	public Object getAdapter(Class arg0) {
-		return null;
-	}
-
-	/**
-	 * Gets the progression.
-	 *
-	 * @return the progression
-	 */
-	public Progression getProgression() {
-		return progression;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/___CAHEditorInput.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/___CAHEditorInput.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/editors/input/___CAHEditorInput.java	(revision 137)
@@ -1,154 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.rcpapplication.editors.input;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.txm.functions.ca.CA;
-import org.txm.rcpapplication.Application;
-import org.txm.rcpapplication.IImageKeys;
-import org.txm.stat.data.LexicalTable;
-// TODO: Auto-generated Javadoc
-/**
- * The Class CAHEditorInput.
- *
- * @author sjacquot
- * @author sloiseau
- */
-@Deprecated
-// FIXME: this class is no longer in use
-public class ___CAHEditorInput implements IEditorInput {
-	
-	/** The ca. */
-	private CA ca;
-	private LexicalTable table;
-		
-	/**
-	 * Instantiates a new classification editor input.
-	 *
-	 * @param ca the ca
-	 * @param partition the partition
-	 * @param property the property
-	 */
-	public ___CAHEditorInput(final CA ca, LexicalTable table) {
-		super();
-		this.ca = ca;
-		this.table = table;
-		if (ca != null && table == null) 	this.table = ca.getLexicalTable();
-	}
-
-	/**
-	 * Exists.
-	 *
-	 * @return true, if successful
-	 * @see org.eclipse.ui.IEditorInput#exists()
-	 */
-	@Override
-	public boolean exists() {
-		return false;
-	}
-
-	/**
-	 * Gets the image descriptor.
-	 *
-	 * @return the image descriptor
-	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
-	 */
-	@Override
-	public ImageDescriptor getImageDescriptor() {
-		return AbstractUIPlugin.imageDescriptorFromPlugin(
-				Application.PLUGIN_ID,
-				IImageKeys.ACTION_CAH);
-	}
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 * @see org.eclipse.ui.IEditorInput#getName()
-	 */
-	@Override
-	public String getName() {
-		return "CAH"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Gets the persistable.
-	 *
-	 * @return the persistable
-	 * @see org.eclipse.ui.IEditorInput#getPersistable()
-	 */
-	@Override
-	public IPersistableElement getPersistable() {
-		return null;
-	}
-
-	/**
-	 * Gets the tool tip text.
-	 *
-	 * @return the tool tip text
-	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
-	 */
-	@Override
-	public String getToolTipText() {
-		return getName();
-	}
-
-	/**
-	 * Gets the adapter.
-	 *
-	 * @param arg0 the arg0
-	 * @return the adapter
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
-	@Override
-	@SuppressWarnings("unchecked") //$NON-NLS-1$
-	public Object getAdapter(Class arg0) {
-		return null;
-	}
-
-	/**
-	 * Gets the CA.
-	 *
-	 * @return the Correspondence Analysis underlying object
-	 */
-	public CA getCA() {
-		return ca;
-	}
-	
-	/**
-	 * Gets the Lexical Table.
-	 *
-	 * @return the Lexical Table underlying object
-	 */
-	public LexicalTable getLexicalTable() {
-		return table;
-	}
-}
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/swt/dialog/PropertySelector.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/swt/dialog/PropertySelector.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/swt/dialog/PropertySelector.java	(revision 137)
@@ -40,6 +40,7 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.txm.ca.rcp.messages.CAUIMessages;
 import org.txm.rcpapplication.Messages;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Corpus;
@@ -137,7 +138,7 @@
 			anaPropLabel.setText(mess);
 		else
 			anaPropLabel
-					.setText(Messages.ComputeCorrespondanceAnalysisDialog_1);
+					.setText(CAUIMessages.ComputeCorrespondanceAnalysisDialog_1);
 		anaPropLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER,
 				false, false));
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_ru_utf8.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_ru_utf8.properties	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_ru_utf8.properties	(revision 137)
@@ -102,14 +102,6 @@
 CAHPreferencePage_3=Метод
 CAHPreferencePage_4=Метрика
 CANT_CREATE_GRAPHIC=** Невозможно создать график
-CAPreferencePage_0=Формат колонки Качество
-CAPreferencePage_1=Формат колонки Вклад
-CAPreferencePage_3=Показать колонки в графике факторного плана
-CAPreferencePage_4=Показать строчки в графике факторного плана
-CAPreferencePage_5=Формат колонки Масса
-CAPreferencePage_6=Формат колонки Дистанция
-CAPreferencePage_7=Формат колонки Cos²
-CAPreferencePage_8=Формат колонки Coord
 CQPPreferenceInitializer_0=localhost
 CQPPreferenceInitializer_1=anonymous
 CQPPreferencePage_0=N/A_CQPlib path
@@ -154,12 +146,6 @@
 ComplexSubcorpusPanel_2=отдельные критерии
 ComplexSubcorpusPanel_4=Запрос 
 ComplexSubcorpusPanel_5=Обновить
-ComputeCAH_0=Расчет Классификации {0}
-ComputeCAH_1=Показать график
-ComputeCAH_2=** Не удается записать данные во временный файл
-ComputeCAH_3=Расчет классификации с 
-ComputeClassification_5=Колонки
-ComputeClassification_6=Строчки
 ComputeConcordance_0=Открытие окна конкорданса
 ComputeConcordance_1=N/A_Failed to open concordance editor.
 ComputeCoocFromLines_0=Идет расчет совместной встречаемости
@@ -177,20 +163,6 @@
 ComputeCoocMatrix_7=N/A_CoocMatrix parameters
 ComputeCooccurrences_0=Загрузка таблицы совместной встречаемости
 ComputeCooccurrences_1=** Невозможно вычислить совместную встречаемость в выделении
-ComputeCorrespondanceAnalysisDialog_0=Факторный анализ соответствий {0}
-ComputeCorrespondanceAnalysisDialog_1=Свойства: 
-ComputeCorrespondanceAnalysisDialog_2=Число строк:
-ComputeCorrespondanceAnalysis_0=Расчет факторного анализа соответствий
-ComputeCorrespondanceAnalysis_1=** Невозможно провести факторный анализ соответствий при наличии менее 4-х колонок в таблице
-ComputeCorrespondanceAnalysis_13=** Невозможно провести факторный анализ соответствий при наличии менее 4-х колонок
-ComputeCorrespondanceAnalysis_14=Открытие результатов факторного анализа соответствий
-ComputeCorrespondanceAnalysis_15=Создание окна ФАС
-ComputeCorrespondanceAnalysis_16=Создание словарной таблицы для ФАС
-ComputeCorrespondanceAnalysis_17=Расчет ФАС
-ComputeCorrespondanceAnalysis_3=** Ошибка
-ComputeCorrespondanceAnalysis_4=** Невозможно провести факторный анализ соответствий при наличии только 
-ComputeCorrespondanceAnalysis_6=ОК
-ComputeCorrespondanceAnalysis_8=Загрузка результатов факторного анализа
 ComputeFrequencyList_2=Расчет списка значений свойства {0} в корпусе {1}
 ComputeIndexFromLines_0=Выполнить команду Индекс на выделении
 ComputeLexicalTable_0=Составление словарной таблицы {0}
@@ -364,18 +336,6 @@
 CorpusPage_7=Общая информация
 CorpusPage_8=Имя корпуса*
 CorpusPage_9=Описание - HTML
-CorrespondanceAnalysisEditorInput_0=Собственные значения
-CorrespondanceAnalysisEditorInput_1=Факт. план
-CorrespondanceAnalysisEditorInput_10=ФАС
-CorrespondanceAnalysisEditorInput_2=Гистограмма собственных значений propres
-CorrespondanceAnalysisEditorInput_26=Масса
-CorrespondanceAnalysisEditorInput_27=Дист
-CorrespondanceAnalysisEditorInput_29=Конт
-CorrespondanceAnalysisEditorInput_3=Результат анализа соответствий не может быть пустым 
-CorrespondanceAnalysisEditorInput_30=Cos²
-CorrespondanceAnalysisEditorInput_4=Фактор
-CorrespondanceAnalysisEditorInput_8=Инф Строчки
-CorrespondanceAnalysisEditorInput_9=Инф Колонки
 CreateFile_1=Новый файл: {0}
 CreateFolder_1=Новая папка: {0}
 CreateFrequencyList_8=Загрузка таблицы частотности
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/Messages.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/Messages.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/Messages.java	(revision 137)
@@ -2,7 +2,7 @@
 package org.txm.rcpapplication;
 
 import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMMessages;
+import org.txm.core.messages.TXMCoreMessages;
 
 public class Messages extends NLS {
 	
@@ -165,16 +165,6 @@
 	public static String CAHPreferencePage_3;
 	public static String CAHPreferencePage_4;
 	public static String CANT_CREATE_GRAPHIC;
-	public static String CAPreferencePage_0;
-	public static String CAPreferencePage_1;
-
-	public static String CAPreferencePage_2;
-	public static String CAPreferencePage_3;
-	public static String CAPreferencePage_4;
-	public static String CAPreferencePage_5;
-	public static String CAPreferencePage_6;
-	public static String CAPreferencePage_7;
-	public static String CAPreferencePage_8;
 	public static String CQPPreferenceInitializer_0;
 	public static String CQPPreferenceInitializer_1;
 	public static String CQPPreferencePage_0;
@@ -221,18 +211,6 @@
 	public static String ComplexSubcorpusPanel_2;
 	public static String ComplexSubcorpusPanel_4;
 	public static String ComplexSubcorpusPanel_5;
-	public static String ComputeCAH_0;
-	public static String ComputeCAH_1;
-	public static String ComputeCAH_2;
-	public static String ComputeCAH_3;
-
-	public static String ComputeCAH_4;
-
-	public static String ComputeCAH_5;
-
-	public static String ComputeCAH_6;
-	public static String ComputeClassification_5;
-	public static String ComputeClassification_6;
 	public static String ComputeConcordance_0;
 	public static String ComputeConcordance_1;
 	public static String ComputeCoocFromLines_0;
@@ -251,22 +229,6 @@
 	public static String ComputeCooccurrences_1;
 
 	public static String ComputeCooccurrences_2;
-	public static String ComputeCorrespondanceAnalysisDialog_0;
-	public static String ComputeCorrespondanceAnalysisDialog_1;
-	public static String ComputeCorrespondanceAnalysisDialog_2;
-	public static String ComputeCorrespondanceAnalysis_0;
-	public static String ComputeCorrespondanceAnalysis_1;
-	public static String ComputeCorrespondanceAnalysis_13;
-	public static String ComputeCorrespondanceAnalysis_14;
-	public static String ComputeCorrespondanceAnalysis_15;
-	public static String ComputeCorrespondanceAnalysis_16;
-	public static String ComputeCorrespondanceAnalysis_17;
-
-	public static String ComputeCorrespondanceAnalysis_2;
-	public static String ComputeCorrespondanceAnalysis_3;
-	public static String ComputeCorrespondanceAnalysis_4;
-	public static String ComputeCorrespondanceAnalysis_6;
-	public static String ComputeCorrespondanceAnalysis_8;
 	public static String ComputeFrequencyList_2;
 	public static String ComputeIndexFromLines_0;
 
@@ -617,20 +579,6 @@
 	public static String CorpusPage_92;
 
 	public static String CorpusPage_93;
-	public static String CorrespondanceAnalysisEditorInput_0;
-	public static String CorrespondanceAnalysisEditorInput_1;
-	public static String CorrespondanceAnalysisEditorInput_11;
-	public static String CorrespondanceAnalysisEditorInput_10;
-	public static String CorrespondanceAnalysisEditorInput_2;
-	public static String CorrespondanceAnalysisEditorInput_26;
-	public static String CorrespondanceAnalysisEditorInput_27;
-	public static String CorrespondanceAnalysisEditorInput_29;
-	public static String CorrespondanceAnalysisEditorInput_3;
-	public static String CorrespondanceAnalysisEditorInput_30;
-	public static String CorrespondanceAnalysisEditorInput_4;
-	public static String CorrespondanceAnalysisEditorInput_5;
-	public static String CorrespondanceAnalysisEditorInput_8;
-	public static String CorrespondanceAnalysisEditorInput_9;
 	public static String CreateFile_1;
 	public static String CreateFolder_1;
 	public static String CreateFrequencyList_8;
@@ -1383,7 +1331,7 @@
 	
 	static {
 		// initialize resource bundle
-		TXMMessages.initializeMessages(BUNDLE_NAME, Messages.class);
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, Messages.class);
 		//NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_fr.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_fr.properties	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcpapplication/messages_fr.properties	(revision 137)
@@ -116,14 +116,6 @@
 CAHPreferencePage_3=Méthode
 CAHPreferencePage_4=Métrique
 CANT_CREATE_GRAPHIC=** Impossible de créer le graphique
-CAPreferencePage_0=Format de la colonne Qualité
-CAPreferencePage_1=Format de la colonne Contribution
-CAPreferencePage_3=Afficher les colonnes
-CAPreferencePage_4=Afficher les lignes
-CAPreferencePage_5=Format de la colonne Masse
-CAPreferencePage_6=Format de la colonne Distance
-CAPreferencePage_7=Format de la colonne Cos\u00B2
-CAPreferencePage_8=Format de la colonne Coord
 CQPPreferenceInitializer_0=localhost
 CQPPreferenceInitializer_1=anonymous
 CQPPreferencePage_0=Chemin vers CQPlib
@@ -168,14 +160,6 @@
 ComplexSubcorpusPanel_2=certains crit\u00E8res
 ComplexSubcorpusPanel_4=Requ\u00EAte 
 ComplexSubcorpusPanel_5=Rafra\u00EEchir
-ComputeCAH_0=Calcul de la Classification avec {0}
-ComputeCAH_1=Afficher le graphique
-ComputeCAH_2=** Impossible d'écrire dans le fichier temporaire
-ComputeCAH_3=Calcul de la classification avec
-ComputeCAH_5=Ouverture de la fen\u00EAtre de Classification
-ComputeCAH_6=Erreur lors de l''ouverture de l''éditeur de Classification \: {0}
-ComputeClassification_5=Classer les colonnes
-ComputeClassification_6=Classer les lignes
 ComputeConcordance_0=Ouverture de la fen\u00EAtre de concordance
 ComputeConcordance_1=Erreur lors de l'ouverture de l'éditeur des concordances \:
 ComputeCoocFromLines_0=Calcul des cooccurrents en cours
@@ -192,20 +176,6 @@
 ComputeCoocMatrix_7=Param\u00E8tres de la matrice mot-mot
 ComputeCooccurrences_0=Chargement du tableau de cooccurrents
 ComputeCooccurrences_1=** Impossible de calculer les cooccurrents de la sélection
-ComputeCorrespondanceAnalysisDialog_0=Analyse factorielle des correspondances avec {0}
-ComputeCorrespondanceAnalysisDialog_1=Propriétés \: 
-ComputeCorrespondanceAnalysisDialog_2=Nombre de lignes \: 
-ComputeCorrespondanceAnalysis_0=Calcul de l'analyse factorielle des correspondances
-ComputeCorrespondanceAnalysis_1=** Impossible de calculer l'analyse factorielle des correspondances avec moins de 4 colonnes dans la table
-ComputeCorrespondanceAnalysis_13=** Impossible de calculer l'analyse factorielle des correspondances avec moins de 4 colonnes 
-ComputeCorrespondanceAnalysis_14=Ouverture des résultats de l'analyse factorielle des correspondances
-ComputeCorrespondanceAnalysis_15=Création de la fen\u00EAtre de l'AFC
-ComputeCorrespondanceAnalysis_16=Création de la table lexicale pour l'AFC
-ComputeCorrespondanceAnalysis_17=Calcul de l'AFC
-ComputeCorrespondanceAnalysis_3=** Erreur
-ComputeCorrespondanceAnalysis_4=** Impossible de calculer l''analyse factorielle avec seulement {0} parties (minimum=4).
-ComputeCorrespondanceAnalysis_6=OK
-ComputeCorrespondanceAnalysis_8=Chargement des résultats de l'analyse factorielle
 ComputeFrequencyList_2=Calcul du lexique de la propriété {0} dans le corpus {1}
 ComputeIndexFromLines_0=Envoyer la sélection vers la commande Index
 ComputeLexicalTable_0=Calcul de la table lexicale avec {0}
@@ -434,19 +404,6 @@
 CorpusPage_7=Informations générales
 CorpusPage_8=Nom du corpus* (majuscules et pas de chiffre en début)
 CorpusPage_9=Description - HTML (nom complet, auteur, date, license, commentaire...)
-CorrespondanceAnalysisEditorInput_0=Valeurs propres
-CorrespondanceAnalysisEditorInput_1=Plan fact.
-CorrespondanceAnalysisEditorInput_10=AFC
-CorrespondanceAnalysisEditorInput_2=Histogramme des valeurs propres
-CorrespondanceAnalysisEditorInput_26=Mass
-CorrespondanceAnalysisEditorInput_27=Dist
-CorrespondanceAnalysisEditorInput_29=Cont
-CorrespondanceAnalysisEditorInput_3=Le résultat de l'analyse des correspondances ne peut \u00EAtre nul 
-CorrespondanceAnalysisEditorInput_30=Cos\u00B2
-CorrespondanceAnalysisEditorInput_4=#
-CorrespondanceAnalysisEditorInput_5=Valeur propre
-CorrespondanceAnalysisEditorInput_8=Info lignes
-CorrespondanceAnalysisEditorInput_9=Info colonnes
 CreateFile_1=Nouveau fichier \: {0}
 CreateFolder_1=Nouveau dossier \: {0}
 CreateFrequencyList_8=Chargement du tableau des fréquences
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages.properties	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages.properties	(revision 137)
@@ -7,11 +7,6 @@
 ChartsEnginePreferencePage_COMBO_FIELD_SELECT_ENGINE_LABEL=Current Engine
 ChartsEnginePreferencePage_LOG_RECREATING_CHARTS_ENGINE=Recreating Charts Engine and SWT chart components provider
 ChartsEngineSharedPreferencePage_CHARTS_RENDERING_DEFAULT_PREFERENCES=Charts rendering
-SWTChartsComponentProvider_CA_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL=Axes: 
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL=Show columns
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP=Show/hide the column points
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL=Show rows
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP=Show/hide the row points
 SWTChartsComponentProvider_CAH_TOOLBAR_BUTTON_NUMBER_OF_CLUSTERS=Number of clusters: 
 SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_CONCORDANCE=Send selection to concordance
 SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_COOCCURRENCE=Send selection to cooccurrence
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/___SWTComponentsProviderMessages.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/___SWTComponentsProviderMessages.java	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/___SWTComponentsProviderMessages.java	(revision 137)
@@ -19,13 +19,6 @@
 	public static String ChartsEngineSharedPreferencePage_CHARTS_RENDERING_DEFAULT_PREFERENCES;
 	
 	
-	public static String SWTChartsComponentProvider_CA_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL;
-	public static String SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL;
-	public static String SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP;
-	public static String SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL;
-	public static String SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP;
-
-	
 	public static String SWTChartsComponentProvider_CAH_TOOLBAR_BUTTON_NUMBER_OF_CLUSTERS;
 
 	public static String SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_CONCORDANCE;
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/chartsengine/base/messages/messages_fr.properties	(revision 137)
@@ -1,18 +1,13 @@
 ChartEditorToolBar_SHARED_BUTTON_EXPORT_VIEW_LABEL=Exporter la vue
 ChartEditorToolBar_SHARED_BUTTON_EXPORT_VIEW_TOOLTIP=Exporter la vue actuelle du graphique
-ChartEditorToolBar_SHARED_BUTTON_RESET_VIEW_LABEL=R�tablir la vue initiale
-ChartEditorToolBar_SHARED_BUTTON_RESET_VIEW_TOOLTIP=R�tablir la vue initiale
+ChartEditorToolBar_SHARED_BUTTON_RESET_VIEW_LABEL=R�tablir la vue initiale
+ChartEditorToolBar_SHARED_BUTTON_RESET_VIEW_TOOLTIP=R�tablir la vue initiale
 ChartsEnginePartitionPreferencePage_DISPLAY_PARTS_COUNT_IN_TITLE=Afficher le nombre de parties dans le titre du graphique
 ChartsEnginePreferencePage_COMBO_FIELD_SELECT_DISPLAY_FORMAT_LABEL=Format d'affichage
 ChartsEnginePreferencePage_COMBO_FIELD_SELECT_ENGINE_LABEL=Moteur de graphiques courant
-ChartsEnginePreferencePage_LOG_RECREATING_CHARTS_ENGINE=R�initialisation du moteur de production de graphiques et du fournisseur de composants SWT
+ChartsEnginePreferencePage_LOG_RECREATING_CHARTS_ENGINE=R�initialisation du moteur de production de graphiques et du fournisseur de composants SWT
 ChartsEngineSharedPreferencePage_CHARTS_RENDERING_DEFAULT_PREFERENCES=Rendu des graphiques
-SWTChartsComponentProvider_CA_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL=Axes : 
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL=Afficher les colonnes
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP=Afficher/masquer les points-colonnes
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL=Afficher les lignes
-SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP=Afficher/masquer les points-lignes
 SWTChartsComponentProvider_CAH_TOOLBAR_BUTTON_NUMBER_OF_CLUSTERS=Nombre de clusters : 
-SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_CONCORDANCE=Envoyer la s�lection vers la concordance
-SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_COOCCURRENCE=Envoyer la s�lection vers la cooccurrence
-SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_INDEX=Envoyer la s�lection vers l'index
\ No newline at end of file
+SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_CONCORDANCE=Envoyer la s�lection vers la concordance
+SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_COOCCURRENCE=Envoyer la s�lection vers la cooccurrence
+SWTChartsComponentProvider_SHARED_SEND_SELECTION_TO_INDEX=Envoyer la s�lection vers l'index
\ No newline at end of file
Index: tmp/org.txm.rcp/plugin.xml
===================================================================
--- tmp/org.txm.rcp/plugin.xml	(revision 136)
+++ tmp/org.txm.rcp/plugin.xml	(revision 137)
@@ -236,13 +236,6 @@
 		<adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
 	</factory>
  <factory
-       adaptableType="org.txm.functions.ca.CA"
-       class="org.txm.rcpapplication.AdapterFactory">
-    <adapter
-          type="org.eclipse.ui.model.IWorkbenchAdapter">
-    </adapter>
- </factory>
- <factory
        adaptableType="org.txm.functions.index.Index"
        class="org.txm.rcpapplication.AdapterFactory">
     <adapter
@@ -271,13 +264,6 @@
     </adapter>
  </factory>
  <factory
-       adaptableType="org.txm.functions.classification.CAH"
-       class="org.txm.rcpapplication.AdapterFactory">
-    <adapter
-          type="org.eclipse.ui.model.IWorkbenchAdapter">
-    </adapter>
- </factory>
- <factory
        adaptableType="org.txm.functions.internal.InternalView"
        class="org.txm.rcpapplication.AdapterFactory">
     <adapter
@@ -292,13 +278,6 @@
     </adapter>
  </factory>
  
- <factory
-       adaptableType="org.txm.functions.wordcloud.WordCloud"
-       class="org.txm.rcpapplication.AdapterFactory">
-    <adapter
-          type="org.eclipse.ui.model.IWorkbenchAdapter">
-    </adapter>
- </factory>
    </extension>
    <extension
          point="org.eclipse.ui.editors">
@@ -368,13 +347,6 @@
             name="%editor.name.9">
       </editor>
       <editor
-            class="org.txm.rcpapplication.editors.ca.___FactorialMapEditor"
-            default="false"
-            icon="icons/functions/CorrespondanceAnalysis.png"
-            id="org.txm.rcpapplication.editors.ca.FactorialMapEditor"
-            name="%editor.name.10">
-      </editor>
-      <editor
             class="org.txm.rcpapplication.editors.lexicaltable.LexicalTableEditor"
             default="false"
             icon="icons/objects/lexicaltable.png"
@@ -389,13 +361,6 @@
             name="%editor.name.12">
       </editor>
       <editor
-            class="org.txm.rcpapplication.editors.ca.CaEditor"
-            default="false"
-            icon="icons/functions/CorrespondanceAnalysis.png"
-            id="org.txm.rcpapplication.editors.ca.CaEditor"
-            name="%editor.name.13">
-      </editor>
-      <editor
             class="org.txm.rcpapplication.editors.referencer.ReferencerEditor"
             default="false"
             icon="icons/functions/Referencer.png"
@@ -441,25 +406,6 @@
             id="TestEMEditor"
             name="%editor.name.23">
       </editor>
-	<editor
-            class="org.txm.rcp.chartsengine.jfreechart.editors.JFCChartEditorPart"
-            default="false"
-            id="org.txm.rcp.chartsengine.jfreechart.editors.JFCChartEditorPart"
-            name="%editor.name.24">
-      </editor>
-	<editor
-            class="org.txm.rcp.chartsengine.svgbatik.editors.SVGChartEditorPart"
-            default="false"
-            id="org.txm.rcp.chartsengine.svgbatik.editors.SVGChartEditorPart"
-            name="%editor.name.25">
-	</editor>
- <editor
-       class="org.txm.rcpapplication.editors.cah.CAHChartEditor"
-       default="false"
-       icon="icons/functions/CAH.png"
-       id="org.txm.rcpapplication.editors.cah.CAHChartEditor"
-       name="%editor.name.18">
- </editor>
    </extension>
    <extension
          point="org.eclipse.core.runtime.preferences">
@@ -536,12 +482,6 @@
       </page>
       <page
             category="org.txm.rcpapplication.preferences.UserPreferencePage"
-            class="org.txm.rcpapplication.preferences.CAPreferencePage"
-            id="org.txm.rcpapplication.preferences.CAPreferencePage"
-            name="%page.name.10">
-      </page>
-      <page
-            category="org.txm.rcpapplication.preferences.UserPreferencePage"
             class="org.txm.rcpapplication.preferences.CoocPreferencePage"
             id="org.txm.rcpapplication.preferences.CoocPreferencePage"
             name="%page.name.11">
@@ -566,12 +506,6 @@
       </page>
       <page
             category="org.txm.rcpapplication.preferences.UserPreferencePage"
-            class="org.txm.rcpapplication.preferences.CAHPreferencePage"
-            id="org.txm.rcpapplication.preferences.CAHPreferencePage"
-            name="%page.name.17">
-      </page>
-      <page
-            category="org.txm.rcpapplication.preferences.UserPreferencePage"
             class="org.txm.rcpapplication.preferences.FileExplorerPreferencePage"
             id="org.txm.rcpapplication.preferences.FileExplorerPreferencePage"
             name="%page.name.2">
@@ -1459,48 +1393,6 @@
                   name="menu.tools.stats"
                   visible="true">
             </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-                  icon="icons/functions/CorrespondanceAnalysis.png"
-                  label="%command.label.80"
-                  style="push"
-                  tooltip="%command.tooltip.46">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneICAComputableSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-                  icon="icons/functions/CAH.png"
-                  label="%command.label.116"
-                  style="push"
-                  tooltip="%command.tooltip.69">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCASelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
             <separator
                   name="menu.tools.misc"
                   visible="true">
@@ -2162,48 +2054,6 @@
                   name="org.txm.rcp.separator4"
                   visible="true">
             </separator>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-                  icon="icons/functions/CorrespondanceAnalysis.png"
-                  label="%command.label.80"
-                  style="push"
-                  tooltip="%command.tooltip.46">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneICAComputableSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <command
-                  commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-                  icon="icons/functions/CAH.png"
-                  label="%command.label.120"
-                  style="push"
-                  tooltip="%command.tooltip.73">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneCASelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
             <separator
                   name="org.txm.rcpapplication.separator1">
             </separator>
@@ -3057,48 +2907,6 @@
                name="org.txm.rcpapplication.separator54"
                visible="true">
          </separator>
-         <command
-               commandId="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-               icon="icons/functions/CorrespondanceAnalysis.png"
-               label="%command.label.85"
-               style="push"
-               tooltip="%command.tooltip.49">
-            <visibleWhen
-                  checkEnabled="false">
-               <or>
-                  <reference
-                        definitionId="OnePartitionSelected">
-                  </reference>
-                  <reference
-                        definitionId="OneLexicalTableSelected">
-                  </reference>
-                  <reference
-                        definitionId="OneICAComputableSelected">
-                  </reference>
-               </or>
-            </visibleWhen>
-         </command>
-         <command
-               commandId="org.txm.rcpapplication.commands.function.ComputeCAH"
-               icon="icons/functions/CAH.png"
-               label="%command.label.126"
-               style="push"
-               tooltip="%command.tooltip.79">
-            <visibleWhen
-                  checkEnabled="false">
-               <or>
-                  <reference
-                        definitionId="OneCASelected">
-                  </reference>
-                  <reference
-                        definitionId="OneLexicalTableSelected">
-                  </reference>
-                  <reference
-                        definitionId="OnePartitionSelected">
-                  </reference>
-               </or>
-            </visibleWhen>
-         </command>
          <separator
                name="org.txm.rcpapplication.separator55"
                visible="true">
@@ -3981,12 +3789,6 @@
       </command>
       <command
             categoryId="org.txm.rcpapplication.category.txm"
-            defaultHandler="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-            id="org.txm.rcpapplication.commands.function.ComputeCorrespondanceAnalysis"
-            name="%command.name.6">
-      </command>
-      <command
-            categoryId="org.txm.rcpapplication.category.txm"
             defaultHandler="org.txm.rcpapplication.commands.function.ComputeFrequencyList"
             id="org.txm.rcpapplication.commands.function.ComputeFrequencyList"
             name="%command.name.7">
@@ -4022,12 +3824,6 @@
       </command>
       <command
             categoryId="org.txm.rcpapplication.category.txm"
-            defaultHandler="org.txm.rcpapplication.commands.function.ComputeCAH"
-            id="org.txm.rcpapplication.commands.function.ComputeCAH"
-            name="%command.name.54">
-      </command>
-      <command
-            categoryId="org.txm.rcpapplication.category.txm"
             defaultHandler="org.txm.rcpapplication.commands.function.ComputeReferencer"
             id="org.txm.rcpapplication.commands.function.ComputeReferencer"
             name="%command.name.44">
@@ -4547,7 +4343,7 @@
                         ifEmpty="false"
                         operator="and">
                      <instanceof
-                           value="org.txm.functions.classification.CAH">
+                           value="org.txm.cah.core.functions.CAH">
                      </instanceof>
                   </iterate>
                </with>
Index: tmp/org.txm.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.rcp/META-INF/MANIFEST.MF	(revision 137)
@@ -5,7 +5,8 @@
 Bundle-Version: 0.7.8.qualifier
 Bundle-Activator: org.txm.rcpapplication.Activator
 Bundle-Vendor: %Bundle-Vendor
-Require-Bundle: org.eclipse.ui,
+Require-Bundle: org.txm.ca.rcp;bundle-version="1.0.0",
+ org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.core.filesystem;bundle-version="1.2.0",
  org.eclipse.ui.ide,
@@ -62,13 +63,17 @@
  org.txm.chartsengine.jfreechart.rcp;bundle-version="1.0.0",
  org.txm.chartsengine.r.rcp;bundle-version="1.0.0",
  org.txm.chartsengine.raster.rcp;bundle-version="1.0.0",
+ org.txm.cah.core;bundle-version="1.0.0",
  org.txm.chartsengine.svgbatik.rcp;bundle-version="1.0.0",
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
  org.txm.chartsengine.r.core;bundle-version="1.0.0",
  Batik;bundle-version="0.0.0",
  org.txm.progression.rcp,
  org.txm.specificities.rcp,
- org.txm.specificities.core;bundle-version="1.0.0"
+ org.txm.specificities.core;bundle-version="1.0.0",
+ org.txm.ca.core,
+ org.txm.partition.core;bundle-version="1.0.0",
+ org.txm.progression.core;bundle-version="1.0.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: junit.extensions,
@@ -126,8 +131,6 @@
  org.junit.runners,
  org.junit.runners.model,
  org.txm.rcp.adapters,
- org.txm.rcp.chartsengine.base.events.ca,
- org.txm.rcp.chartsengine.base.events.cah,
  org.txm.rcp.chartsengine.base.messages,
  org.txm.rcp.editors,
  org.txm.rcp.preferences,
@@ -149,8 +152,6 @@
  org.txm.rcpapplication.decorators,
  org.txm.rcpapplication.editors,
  org.txm.rcpapplication.editors.adaptableDataStructure,
- org.txm.rcpapplication.editors.ca,
- org.txm.rcpapplication.editors.cah,
  org.txm.rcpapplication.editors.concordances,
  org.txm.rcpapplication.editors.cooccurrences,
  org.txm.rcpapplication.editors.dictionnary,
Index: tmp/org.txm.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties
===================================================================
--- tmp/org.txm.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties	(revision 136)
+++ tmp/org.txm.rcp/OSGI-INF/l10n/bundle_ru_utf-8.properties	(revision 137)
@@ -1,6 +1,5 @@
 #=
 #Mon Mar 05 10:02:31 CET 2012=N/A_
-command.tooltip.69=Классификация
 command.tooltip.67=Экспортировать корпус в архив
 command.label.139=Ещё...
 command.tooltip.66=Выполнить как скрипт R
@@ -44,7 +43,6 @@
 command.label.121=Отправить в R
 command.label.120=Классификация
 command.tooltip.49=ФАК
-command.tooltip.46=ФАК
 command.label.118=Экспортировать корпус
 command.tooltip.45=Из папки с текстовыми файлами
 command.label.117=Отправить в R
@@ -152,7 +150,6 @@
 command.label.87=Экспорт
 command.label.85=ФАС
 command.label.84=Словарь
-command.label.80=ФАС
 category.name=TXM
 command.label.79=Словарь
 command.label.78=TXT + CSV
Index: tmp/org.txm.rcp/OSGI-INF/l10n/bundle.properties
===================================================================
--- tmp/org.txm.rcp/OSGI-INF/l10n/bundle.properties	(revision 136)
+++ tmp/org.txm.rcp/OSGI-INF/l10n/bundle.properties	(revision 137)
@@ -1,6 +1,5 @@
 #
 #Thu Jul 25 14:46:50 CEST 2013
-command.tooltip.69=Classification
 command.tooltip.67=Export
 command.label.139=Other...
 command.label.138=R Variables
@@ -47,7 +46,6 @@
 command.tooltip.49=CA
 command.tooltip.48=Test imports
 command.tooltip.47=Contribuer
-command.tooltip.46=CA
 command.label.118=Export
 command.tooltip.45=From a directory containing text files
 command.label.117=Send to R
@@ -213,7 +211,6 @@
 command.label.83=New file
 command.label.82=CWB
 command.label.81=XML-TMX
-command.label.80=CA
 command.name.79=Execute Macro
 category.name=TXM
 command.name.78=Tests commands
Index: tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties
===================================================================
--- tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 136)
+++ tmp/org.txm.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 137)
@@ -1,6 +1,5 @@
 ﻿#
 #Thu Jul 25 14:48:07 CEST 2013
-command.tooltip.69=Calculer la classification
 command.tooltip.67=Exporter dans un fichier
 command.label.139=Autres...
 command.label.138=Variables R
@@ -47,7 +46,6 @@
 command.tooltip.49=Calculer l'Analyse Factorielle des Correspondances
 command.tooltip.48=Tester les modules d'import
 command.tooltip.47=Contribuer à TXM
-command.tooltip.46=Calculer l'Analyse Factorielle des Correspondances
 command.label.118=Exporter
 command.tooltip.45=Exécuter un script d'import sur un dossier de fichiers source
 command.label.117=Envoyer vers R
@@ -213,7 +211,6 @@
 command.label.83=Nouveau fichier
 command.label.82=CWB
 command.label.81=XML-TMX
-command.label.80=AFC
 command.name.79=Ex�cuter la Macro
 category.name=TXM
 command.name.78=Tester toutes les commandes
Index: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages.properties	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages.properties	(revision 137)
@@ -1,25 +0,0 @@
-WordCloudTitle=WordCloud
-ComputeVocabulary_0=Opening WordCloud results
-ComputeWordCloud_0=StatEngine is not ready. Canceling command.
-ComputeWordCloud_11=The necessary R packages have not been installed properly, it is not possible to complete the installation of the WordCloud command.\nSee instructions at https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud 
-ComputeWordCloud_12=Aborting WordCloud.
-ComputeWordCloud_2=R packages loaded. Now running WordCloud
-ComputeWordCloud_3=The {0} R package was not installed. Reason: {1}
-ComputeWordCloud_4=Installing {0} R package...
-ComputeWordCloud_5=Loading package: 
-ComputeWordCloud_6=Could not install the {0} package
-ComputeWordCloud_7=Operation canceled by user
-WordCloudEditor_0=Vmax: 
-WordCloudEditor_1=Fmin: 
-WordCloudEditor_2=% of rotated labels: 
-WordCloudEditor_3=Randomize positions
-WordCloudEditor_4=Draw
-WordCloudEditor_5=Wrong WordCloud input object
-WordCloudEditor_6=WordCloud ready: 
-WordCloudEditor_7=WordClouding...
-WordCloudEditor_8=Drawing in {0}
-WordCloudEditor_9=WordCloud refreshed
-WordCloudPreferencePage_0=Number of used words
-WordCloudPreferencePage_1=Minimal frequency for used words
-WordCloudPreferencePage_2=Percent of rotated words
-WordCloudPreferencePage_3=Random word positions
\ No newline at end of file
Index: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages_fr.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages_fr.properties	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages_fr.properties	(revision 137)
@@ -1,25 +0,0 @@
-WordCloudTitle=Nuage de mot
-ComputeVocabulary_0=Ouverture du r�sultat
-ComputeWordCloud_0=Le moteur de statistique n'est pas pr�t. Abandon.
-ComputeWordCloud_11=Les packages n�c�ssaires au fonctionnement de la fonctionnalit� n'ont pas pu �tre install�s. Voir les instructions pour installation manuelle � l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
-ComputeWordCloud_12=Abandon du calcul.
-ComputeWordCloud_2=Les packages R ont �t� charg�s. Lancement du calcul.
-ComputeWordCloud_3=Le package R {0} n'a pas pu �tre install�. Raison : {1} 
-ComputeWordCloud_4=Installation du package R {0}...
-ComputeWordCloud_5=Chargement du package : 
-ComputeWordCloud_6=Echec de l'installation du package {0}.
-ComputeWordCloud_7=Annulation par l'utilisateur.
-WordCloudEditor_0=Vmax : 
-WordCloudEditor_1=Fmin : 
-WordCloudEditor_2=% de labels verticaux : 
-WordCloudEditor_3=Position al�atoire
-WordCloudEditor_4=Calculer
-WordCloudEditor_5=Object non-compatible avec la fonctionnalit� Nuage de mot
-WordCloudEditor_6=WordCloud est pr�t : 
-WordCloudEditor_7=Dessin en cours...
-WordCloudEditor_8=Sauvegarde dans le fichier {0} 
-WordCloudEditor_9=Rafra�chissement 
-WordCloudPreferencePage_0=Filtre en nombre de mot � utiliser
-WordCloudPreferencePage_1=Filtre en fr�quence minimal des mots � utiliser frequency
-WordCloudPreferencePage_2=Pourcentage de mot verticaux
-WordCloudPreferencePage_3=Position al�atoire des mots
\ No newline at end of file
Index: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages.properties	(revision 0)
+++ tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages.properties	(revision 137)
@@ -0,0 +1,25 @@
+WordCloudTitle=WordCloud
+ComputeVocabulary_0=Opening WordCloud results
+ComputeWordCloud_0=StatEngine is not ready. Canceling command.
+ComputeWordCloud_11=The necessary R packages have not been installed properly, it is not possible to complete the installation of the WordCloud command.\nSee instructions at https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud 
+ComputeWordCloud_12=Aborting WordCloud.
+ComputeWordCloud_2=R packages loaded. Now running WordCloud
+ComputeWordCloud_3=The {0} R package was not installed. Reason: {1}
+ComputeWordCloud_4=Installing {0} R package...
+ComputeWordCloud_5=Loading package: 
+ComputeWordCloud_6=Could not install the {0} package
+ComputeWordCloud_7=Operation canceled by user
+WordCloudEditor_0=Vmax: 
+WordCloudEditor_1=Fmin: 
+WordCloudEditor_2=% of rotated labels: 
+WordCloudEditor_3=Randomize positions
+WordCloudEditor_4=Draw
+WordCloudEditor_5=Wrong WordCloud input object
+WordCloudEditor_6=WordCloud ready: 
+WordCloudEditor_7=WordClouding...
+WordCloudEditor_8=Drawing in {0}
+WordCloudEditor_9=WordCloud refreshed
+WordCloudPreferencePage_0=Number of used words
+WordCloudPreferencePage_1=Minimal frequency for used words
+WordCloudPreferencePage_2=Percent of rotated words
+WordCloudPreferencePage_3=Random word positions
\ No newline at end of file

Property changes on: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages_fr.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages_fr.properties	(revision 0)
+++ tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages_fr.properties	(revision 137)
@@ -0,0 +1,25 @@
+WordCloudTitle=Nuage de mot
+ComputeVocabulary_0=Ouverture du r�sultat
+ComputeWordCloud_0=Le moteur de statistique n'est pas pr�t. Abandon.
+ComputeWordCloud_11=Les packages n�c�ssaires au fonctionnement de la fonctionnalit� n'ont pas pu �tre install�s. Voir les instructions pour installation manuelle � l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
+ComputeWordCloud_12=Abandon du calcul.
+ComputeWordCloud_2=Les packages R ont �t� charg�s. Lancement du calcul.
+ComputeWordCloud_3=Le package R {0} n'a pas pu �tre install�. Raison : {1} 
+ComputeWordCloud_4=Installation du package R {0}...
+ComputeWordCloud_5=Chargement du package : 
+ComputeWordCloud_6=Echec de l'installation du package {0}.
+ComputeWordCloud_7=Annulation par l'utilisateur.
+WordCloudEditor_0=Vmax : 
+WordCloudEditor_1=Fmin : 
+WordCloudEditor_2=% de labels verticaux : 
+WordCloudEditor_3=Position al�atoire
+WordCloudEditor_4=Calculer
+WordCloudEditor_5=Object non-compatible avec la fonctionnalit� Nuage de mot
+WordCloudEditor_6=WordCloud est pr�t : 
+WordCloudEditor_7=Dessin en cours...
+WordCloudEditor_8=Sauvegarde dans le fichier {0} 
+WordCloudEditor_9=Rafra�chissement 
+WordCloudPreferencePage_0=Filtre en nombre de mot � utiliser
+WordCloudPreferencePage_1=Filtre en fr�quence minimal des mots � utiliser frequency
+WordCloudPreferencePage_2=Pourcentage de mot verticaux
+WordCloudPreferencePage_3=Position al�atoire des mots
\ No newline at end of file

Property changes on: tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___messages_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/Messages.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/Messages.java	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/Messages.java	(revision 137)
@@ -1,6 +1,7 @@
 package org.txm.wordcloud.rcp.messages;
 
 import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
 
 public class Messages extends NLS {
 	
@@ -12,7 +13,7 @@
 	
 	
 	public static String EditorName;
-	public static String EditorToolBar_vmin;
+	public static String EditorToolBar_vmax;
 	public static String EditorToolBar_fmin;
 	public static String EditorToolBar_Percent_of_rotated_labels;
 	public static String EditorToolBar_Randomize_positions;
@@ -28,7 +29,8 @@
 	public static String PreferencePage_Random_word_positions;
 	static {
 		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, Messages.class);
+		//NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
 
 	private Messages() {
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java	(revision 137)
@@ -11,8 +11,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Spinner;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.rcpapplication.views.CorporaView;
@@ -29,25 +27,9 @@
  */
 public class WordCloudEditor extends ChartEditorPart {
 	
-	
-	/**
-	 * 
-	 */
-	public WordCloudEditor() {
-	}
 
 	
-	
-	/**
-	 * 
-	 * @param swtComponentsProvider
-	 * @param chartEditorInput
-	 */
-	public WordCloudEditor(SWTChartsComponentsProvider swtComponentsProvider, ChartEditorInput chartEditorInput) {
-		super(swtComponentsProvider, chartEditorInput);
-	}
-	
-	
+
 	@Override
 	public void createPartControl(Composite parent) {
 		super.createPartControl(parent);
@@ -73,7 +55,7 @@
 //		this.getParametersComposite().setLayout(layout);
 
 		// max words
-		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_vmin);
+		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_vmax);
 		final Spinner maxWordsSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
 		maxWordsSpinner.setMinimum(10);
 		maxWordsSpinner.setIncrement(1);
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditorInput.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditorInput.java	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditorInput.java	(revision 137)
@@ -30,7 +30,6 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IPersistableElement;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.rcpapplication.Application;
 import org.txm.rcpapplication.IImageKeys;
Index: tmp/org.txm.wordcloud.rcp/build.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/build.properties	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/build.properties	(revision 137)
@@ -2,4 +2,5 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               plugin.xml
+               plugin.xml,\
+               OSGI-INF/
Index: tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle.properties	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle.properties	(revision 137)
@@ -6,7 +6,7 @@
 EditorToolBar_fmin=Fmin: 
 EditorToolBar_Percent_of_rotated_labels=% of rotated labels: 
 EditorToolBar_Randomize_positions=Randomize positions
-EditorToolBar_vmin=Vmax: 
+EditorToolBar_vmax=Vmax: 
 Log_WordCloud_ready=WordCloud ready: 
 Log_Wrong_input_object=Wrong WordCloud input object
 page.name = WordCloud
Index: tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle_fr.properties
===================================================================
--- tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle_fr.properties	(revision 137)
@@ -5,15 +5,15 @@
 EditorToolBar_Draw=Calculer
 EditorToolBar_fmin=Fmin : 
 EditorToolBar_Percent_of_rotated_labels=% de labels verticaux : 
-EditorToolBar_Randomize_positions=Position al�atoire
-EditorToolBar_vmin=Vmax : 
+EditorToolBar_Randomize_positions=Position aléatoire
+EditorToolBar_vmax=Vmax : 
 Log_WordCloud_ready=WordCloud est prêt : 
 Log_Wrong_input_object=Object non-compatible avec la fonctionnalité Nuage de mots
 page.name = Nuage de mots
 perspective.name = RCP Perspective
-PreferencePage_Minimal_frequency=Filtre en fréquence minimal des mots à utiliser frequency
-PreferencePage_Number_of_used_words=Filtre en nombre de mot à utiliser
-PreferencePage_Percent_of_rotated_words=Pourcentage de mot verticaux
+PreferencePage_Minimal_frequency=Filtre en fréquence minimal des mots à utiliser
+PreferencePage_Number_of_used_words=Filtre en nombre de mots à utiliser
+PreferencePage_Percent_of_rotated_words=Pourcentage de mots verticaux
 PreferencePage_Random_word_positions=Position aléatoire des mots
 WordCloudEditor_7=Dessin en cours...
 WordCloudEditor_8=Sauvegarde dans le fichier {0} 
Index: tmp/org.txm.wordcloud.rcp/.classpath
===================================================================
--- tmp/org.txm.wordcloud.rcp/.classpath	(revision 136)
+++ tmp/org.txm.wordcloud.rcp/.classpath	(revision 137)
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="OSGI-INF"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="OSGI-INF"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/messages_fr.properties	(revision 137)
@@ -1,11 +1,11 @@
 ComputeWordCloud_6=Echec de l'installation du package {0}.
 ComputeWordCloud_7=Annulation par l'utilisateur.
 Log_Aborting=Abandon du calcul.
-Log_Could_not_install_R_package=Le package R {0} n'a pas pu �tre install�. Raison : {1}. 
+Log_Could_not_install_R_package=Le package R {0} n'a pas pu être installé. Raison : {1}. 
 Log_Installing_R_package=Installation du package R {0}...
 Log_Loading_R_package=Chargement du package : 
-Log_R_Packages_installation_failed=Les packages n�c�ssaires au fonctionnement de la fonctionnalit� n'ont pas pu �tre install�s. Voir les instructions pour installation manuelle � l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
-Log_R_Packages_loaded=Les packages R ont �t� charg�s. Lancement du calcul.
-Log_Stats_Engine_not_ready=Le moteur de statistique n'est pas pr�t. Abandon.
-StatusBar_Opening_result=Ouverture du r�sultat.
+Log_R_Packages_installation_failed=Les packages nécessaires au fonctionnement de la fonctionnalité n'ont pas pu être installés. Voir les instructions pour installation manuelle à l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
+Log_R_Packages_loaded=Les packages R ont été chargés. Lancement du calcul.
+Log_Stats_Engine_not_ready=Le moteur de statistique n'est pas prêt. Abandon.
+StatusBar_Opening_result=Ouverture du résultat.
 WordCloudTitle=Nuage de mots
\ No newline at end of file
Index: tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/RCPPartitionMessages.java
===================================================================
--- tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/RCPPartitionMessages.java	(revision 136)
+++ tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/RCPPartitionMessages.java	(revision 137)
@@ -1,23 +0,0 @@
-package org.txm.partition.rcp.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-
-
-public class RCPPartitionMessages extends NLS {
-
-	// FIXME: use the same properties file than the bundle	
-	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
-
-	public static String PreferencesPage_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE;
-	public static String PreferencesPage_DIMENSIONS_SORT_BY_PARTS_SIZE;
-	
-
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, RCPPartitionMessages.class);
-	}
-
-	private RCPPartitionMessages() {
-	}
-}
Index: tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/PartitionUIMessages.java
===================================================================
--- tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/PartitionUIMessages.java	(revision 0)
+++ tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/PartitionUIMessages.java	(revision 137)
@@ -0,0 +1,23 @@
+package org.txm.partition.rcp.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+
+
+public class PartitionUIMessages extends NLS {
+
+	// FIXME: use the same properties file than the bundle	
+	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
+
+	public static String PreferencesPage_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE;
+	public static String PreferencesPage_DIMENSIONS_SORT_BY_PARTS_SIZE;
+	
+
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PartitionUIMessages.class);
+	}
+
+	private PartitionUIMessages() {
+	}
+}

Property changes on: tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/messages/PartitionUIMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/preferences/PartitionPreferencePage.java
===================================================================
--- tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/preferences/PartitionPreferencePage.java	(revision 136)
+++ tmp/org.txm.partition.rcp/src/org/txm/partition/rcp/preferences/PartitionPreferencePage.java	(revision 137)
@@ -32,7 +32,7 @@
 import org.eclipse.ui.IWorkbench;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.partition.core.preferences.PartitionDimensionsPreferences;
-import org.txm.partition.rcp.messages.RCPPartitionMessages;
+import org.txm.partition.rcp.messages.PartitionUIMessages;
 import org.txm.rcp.preferences.TXMPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
 import org.txm.rcpapplication.Messages;
@@ -57,8 +57,8 @@
 		// Charts rendering
 		Composite chartsTab = SWTChartsComponentsProvider.createChartsRenderingPreferencesTabFolderComposite(this.getFieldEditorParent());
 		
-		this.addField(new BooleanFieldEditor(PartitionDimensionsPreferences.CHART_DIMENSIONS_SORTED_BY_SIZE, RCPPartitionMessages.PreferencesPage_DIMENSIONS_SORT_BY_PARTS_SIZE, chartsTab));
-		this.addField(new BooleanFieldEditor(PartitionDimensionsPreferences.CHART_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE, RCPPartitionMessages.PreferencesPage_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE, chartsTab));
+		this.addField(new BooleanFieldEditor(PartitionDimensionsPreferences.CHART_DIMENSIONS_SORTED_BY_SIZE, PartitionUIMessages.PreferencesPage_DIMENSIONS_SORT_BY_PARTS_SIZE, chartsTab));
+		this.addField(new BooleanFieldEditor(PartitionDimensionsPreferences.CHART_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE, PartitionUIMessages.PreferencesPage_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE, chartsTab));
 		
 		// other shared preferences
 		SWTChartsComponentsProvider.createChartsRenderingPreferencesFields(this, chartsTab);
Index: tmp/org.txm.chartsengine.raster.rcp/src/org/txm/chartsengine/raster/rcp/editors/___RasterChartEditorPart.java
===================================================================
--- tmp/org.txm.chartsengine.raster.rcp/src/org/txm/chartsengine/raster/rcp/editors/___RasterChartEditorPart.java	(revision 136)
+++ tmp/org.txm.chartsengine.raster.rcp/src/org/txm/chartsengine/raster/rcp/editors/___RasterChartEditorPart.java	(revision 137)
@@ -43,7 +43,6 @@
 	}
 
 
-	@Override
 	public String getID() {
 		return ___RasterChartEditorPart.ID;
 	}
Index: tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RDevice.java
===================================================================
--- tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RDevice.java	(revision 136)
+++ tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RDevice.java	(revision 137)
@@ -1,118 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.chartsengine.r.core;
-
-import org.txm.Toolbox;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Enum RDevice.
- */
-// FIXME : voir le problème lié au stockage de la pref export_rdevice au niveau de la RCP qu'il faudrait renommer et amener au niveau TBX
-// FIXME : en fait non ? car l'appel du device utilise ceci : ex : svg(), postscript(), donc le device peut être différent de l'extension du fichier (file format)
-public enum RDevice {
-	
-	/** The SVG. */
-	SVG,
-	
-	/** The JPEG. */
-	JPEG,
-	
-	/** The PDF. */
-	PDF,
-	
-	/** The PNG. */
-	PNG,
-	
-	/** The PS. */
-	PS;
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 */
-	public String getName() {
-		if (this.name().equals("SVG")) //$NON-NLS-1$
-			return getCurrentSVGDevice(); //$NON-NLS-1$
-		else if (this.name().equals("PDF")) //$NON-NLS-1$
-			return "pdf"; //$NON-NLS-1$
-		else if (this.name().equals("PS")) //$NON-NLS-1$
-			return "postscript"; //$NON-NLS-1$
-		else if (this.name().equals("PNG")) //$NON-NLS-1$
-			return "png"; //$NON-NLS-1$
-		else if (this.name().equals("JPEG")) //$NON-NLS-1$
-			return "jpeg"; //$NON-NLS-1$
-		return "svg"; //$NON-NLS-1$
-	}
-	
-	public String getCurrentSVGDevice() {
-		String dev = Toolbox.getParam("r_svg_device");
-		if (dev == null || dev.length() == 0) dev = "svg";
-		return dev;
-	}
-	
-	/**
-	 * Gets the ext.
-	 *
-	 * @return the ext
-	 */
-	public String getExt() {
-		if (this.name().equals("SVG")) //$NON-NLS-1$
-			return ".svg"; //$NON-NLS-1$
-		else if (this.name().equals("PDF")) //$NON-NLS-1$
-			return ".pdf"; //$NON-NLS-1$
-		else if (this.name().equals("PS")) //$NON-NLS-1$
-			return ".ps"; //$NON-NLS-1$
-		else if (this.name().equals("PNG")) //$NON-NLS-1$
-			return ".png"; //$NON-NLS-1$
-		else if (this.name().equals("JPEG")) //$NON-NLS-1$
-			return ".jpeg"; //$NON-NLS-1$
-		return ".svg"; //$NON-NLS-1$
-	}
-	
-	/**
-	 * Ext2 device.
-	 *
-	 * @return the r device
-	 */
-	public RDevice ext2Device()
-	{
-		if (this.name().equals(".svg")) //$NON-NLS-1$
-			return SVG;
-		else if (this.name().equals(".pdf")) //$NON-NLS-1$
-			return PDF;
-		else if (this.name().equals(".ps")) //$NON-NLS-1$
-			return PS;
-		else if (this.name().equals(".png")) //$NON-NLS-1$
-			return PNG;
-		else if (this.name().equals(".jpeg")) //$NON-NLS-1$
-			return JPEG;
-		return SVG;
-	}
-}
Index: tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartCreator.java
===================================================================
--- tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartCreator.java	(revision 136)
+++ tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartCreator.java	(revision 137)
@@ -1,8 +1,11 @@
 package org.txm.chartsengine.r.core;
 
+import java.awt.Color;
 import java.io.File;
+import java.util.ArrayList;
 
 import org.txm.chartsengine.core.ChartCreator;
+import org.txm.utils.logger.Log;
 
 
 
@@ -34,6 +37,14 @@
 	}
 	
 	@Override
+	public ArrayList<Color> getSeriesShapesColors(Object chart) {
+		Log.severe(this.getClass() + ".getSeriesShapesColors(): Not yet implemented."); //$NON-NLS-1$
+		return null;
+	}
+
+
+	
+	@Override
 	public Class getChartsEngineClass() {
 		return RChartsEngine.class;
 	}
Index: tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartsEngine.java
===================================================================
--- tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartsEngine.java	(revision 136)
+++ tmp/org.txm.chartsengine.r.core/src/org/txm/chartsengine/r/core/RChartsEngine.java	(revision 137)
@@ -1,32 +1,15 @@
 package org.txm.chartsengine.r.core;
 import java.io.File;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
-import java.util.List;
 
-import org.apache.commons.lang.StringEscapeUtils;
-import org.jfree.chart.JFreeChart;
 import org.rosuda.REngine.REXPMismatchException;
 import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.r.core.preferences.RChartsEnginePreferences;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.core.chartsengine.r.__RDevice;
-import org.txm.core.chartsengine.r.messages.RChartsEngineMessages;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
-import org.txm.searchengine.cqp.corpus.Part;
-import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.stat.StatException;
-import org.txm.stat.data.Matrix;
-import org.txm.stat.data.Vector;
+import org.txm.stat.engine.r.RDevice;
 import org.txm.stat.engine.r.RWorkspace;
 import org.txm.stat.engine.r.RWorkspaceException;
-import org.txm.stat.engine.r.data.DoubleMatrix;
-import org.txm.stat.engine.r.data.VectorImpl;
-import org.txm.stat.engine.r.function.FactoMineRCA;
 import org.txm.utils.logger.Log;
 
 
@@ -46,7 +29,7 @@
 	/**
 	 * The charts engine description.
 	 */
-	public final static String DESCRIPTION = RChartsEngineMessages.RChartsEngine_ENGINE_DESCRIPTION;
+	public final static String DESCRIPTION = "R";
 
 
 	/**
@@ -59,7 +42,7 @@
 	/**
 	 * The R device to use for generating charts.
 	 */
-	protected __RDevice rDevice;
+	protected RDevice rDevice;
 
 
 	/**
@@ -83,221 +66,13 @@
 	
 	@Override
 	public File createChartFile(Object chart, File file)	{
-		
-		try {
-			RWorkspace r = RWorkspace.getRWorkspaceInstance();
-			r.plot(file, (String) chart, this.getRDevice());
-		}
-		catch(RWorkspaceException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(REXPMismatchException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(StatException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		
+		this.plot(file, (String) chart);
 		return file;
 	}
 	
-	
 
-	@Override
-	public Object createCAFactorialMapChart(CA ca) {
-		// TODO Auto-generated method stub
-		return null;
-	}
 
 
-
-	@Override
-	public File createCAFactorialMapChartFile(CA ca, File file)	{
-
-		// FactoMineR R package
-		if(ca.useFactoMineR())	{
-			return this.createFactorialMapChart((FactoMineRCA) ca.getCa(), file, ca.isShowIndividuals(), ca.isShowVariables(), ca.getFirstDimension(), ca.getSecondDimension(), this.createCAFactorialMapChartTitle(ca));
-		}
-		// CA R package
-		else	{
-			return this.createFactorialMapChart((org.txm.stat.engine.r.function.CA) ca.getCa(), file, ca.isShowIndividuals(), ca.isShowVariables(), ca.getFirstDimension(), ca.getSecondDimension());
-		}
-
-	}
-
-
-
-	/**
-	 * Creates a factorial map chart from the specified CA result from "FactoMineR" R package and writes it in the specified file.
-	 * @param ca
-	 * @param destFile
-	 * @param showIndividuals
-	 * @param showVariables
-	 * @param firstDimension
-	 * @param secondDimension
-	 * @return the generated file containing the chart
-	 */
-	public File createFactorialMapChart(FactoMineRCA ca, File destFile, boolean showIndividuals, boolean showVariables, int firstDimension, int secondDimension, String title)	{
-
-		try {
-
-			String label = ""; //$NON-NLS-1$
-			String invisible = ""; //$NON-NLS-1$
-			if (showIndividuals)
-				label +=", \"col\""; //$NON-NLS-1$
-			else
-				invisible +=", \"col\""; //$NON-NLS-1$
-
-			if (showVariables)
-				label +=", \"row\""; //$NON-NLS-1$
-			else
-				invisible +=", \"row\""; //$NON-NLS-1$
-
-			if (label.length() > 0)
-				label = "c("+label.substring(1)+")"; //$NON-NLS-1$ //$NON-NLS-2$
-			else
-				label = "c(\"all\")"; //$NON-NLS-1$
-
-			if (invisible.length() > 0)
-				invisible = "c("+invisible.substring(1)+")"; //$NON-NLS-1$ //$NON-NLS-2$
-			else
-				invisible = "c()"; //$NON-NLS-1$
-
-			String axes = "c(" + firstDimension + ", " + secondDimension + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
-			RWorkspace.getRWorkspaceInstance().plot(destFile, "plot.CA("+ ca.getSymbol() +", label=" + label + ", invisible=" + invisible + ", axes=" + axes + ", title=\"" + title + "\", cex=.8)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		}
-		catch(Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
-		}
-
-		return destFile;
-	}
-
-
-	/**
-	 * Creates a factorial map chart from the specified CA result from "CA" R package and writes it in the specified file.
-	 * @param ca
-	 * @param destFile
-	 * @param showIndividuals
-	 * @param showVariables
-	 * @param firstDimension
-	 * @param secondDimension
-	 * @return the generated file containing the chart
-	 */
-	public File createFactorialMapChart(org.txm.stat.engine.r.function.CA ca, File destFile, boolean showIndividuals, boolean showVariables, int firstDimension, int secondDimension)	{
-
-		try {
-
-			double[] sv = ca.getValeursPropres();
-			double tot = 0;
-			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			for (int i = 0; i < sv.length; i++)
-				tot += (sv[i]);
-
-			double inertie1 = (((sv[firstDimension - 1] * sv[firstDimension - 1]) / tot) * 100.0);
-			double inertie2 = (((sv[secondDimension - 1] * sv[secondDimension - 1]) / tot) * 100.0);
-			String contrib1 = "axis(" + firstDimension + "): inertia=" + f.format(inertie1) + "%"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String contrib2 = "axis(" + secondDimension + "): inertia=" + f.format(inertie2) + "%"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String cmd = "plot(" + ca.getSymbol() + ", dim=c(" + firstDimension + ", " + secondDimension + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			cmd += ", what=c(" + (showVariables ? "\"all\"" : "\"none\"") + ", " + (showIndividuals ? "\"all\"" : "\"none\"") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
-			// cmd +=
-			// ", mass = c(TRUE, TRUE), contrib = c(\"relative\", \"relative\")";
-			cmd += ", col = c(\"#0000FF\", \"#FF0000\")"; //$NON-NLS-1$
-			cmd += ", cex=.5);"; //$NON-NLS-1$
-			cmd += "mtext(\"" + contrib1 + "\", side = 1, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-			cmd += "mtext(\"" + contrib2 + "\", side = 2, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-
-			RWorkspace.getRWorkspaceInstance().plot(destFile, cmd, this.rDevice);
-		}
-		catch(Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
-		}
-
-		return destFile;
-	}
-
-
-	@Override
-	public Object createCASingularValuesBarChart(CA ca) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-
-	@Override
-	public File createCASingularValuesBarChartFile(CA ca, File file) {
-
-		// FactoMineR R package
-		if(ca.useFactoMineR())	{
-			return this.createSingularValuesBarPlot((FactoMineRCA) ca.getCa(), file);
-		}
-		// CA R package
-		else	{
-			return this.createSingularValuesBarPlot((org.txm.stat.engine.r.function.CA) ca.getCa(), file);
-		}
-
-	}
-
-
-	/**
-	 * Creates a bar plot with singular values of the specified CA result from "FactoMineR" R package.
-	 * @param ca
-	 * @param file
-	 * @return the singular values bar plot object
-	 */
-	public File createSingularValuesBarPlot(FactoMineRCA ca, File file) {
-		try {
-			// Create the X axis labels with custom prefix
-			StringBuilder xLabels = new StringBuilder(30);
-			xLabels.append("c("); //$NON-NLS-1$
-			for(int i = 0, c = ca.getColumnsCount() - 1; i < c; i++) {
-				if(i > 0)	 {
-					xLabels.append(", "); //$NON-NLS-1$
-				}
-				xLabels.append("\"" + ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + (i + 1) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-			xLabels.append(")"); //$NON-NLS-1$
-
-			String cmd = "tmpY <- " + ca.getSymbol() + "$eig$eigenvalue[1:length(" + ca.getSymbol() + "$eig$eigenvalue) - 1];\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			cmd += "barplot(tmpY, main=\"" //$NON-NLS-1$
-					+ ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE + "\", ylab=\"" + //$NON-NLS-1$
-					ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL + "\", xlab=\"" + //$NON-NLS-1$
-					ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL + "\", names.arg=" + xLabels + ");\n"; //$NON-NLS-1$ //$NON-NLS-2$
-
-			RWorkspace.getRWorkspaceInstance().plot(file, cmd, this.rDevice);
-		}
-		catch (Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
-		}
-
-		return file;
-	}
-
-
-	/**
-	 * Creates a bar plot with singular values of the specified CA result from "CA" R package.
-	 * @param ca
-	 * @param file
-	 * @return the singular values bar plot object
-	 */
-	public File createSingularValuesBarPlot(org.txm.stat.engine.r.function.CA ca, File file) {
-		try {
-			RWorkspace.getRWorkspaceInstance().plot(file, "barplot(" +  ca.getSymbol() + "$sv)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		catch (Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
-		}
-
-		return file;
-	}
-
-
-
-
 //	@Override
 //	public Object createPartitionDimensionsChart(Partition partition, boolean sortPartsBySize) {
 //		// TODO Auto-generated method stub
@@ -641,77 +416,71 @@
 
 
 
-	@Override
-	public Object createCAH2dChart(CAH cah) {
-		return this.createCAH2dChartFile(cah);
-	}
+//	@Override
+//	public Object createCAH2dChart(CAH cah) {
+//		return this.createCAH2dChartFile(cah);
+//	}
+//
+//
+//
+//	@Override
+//	public File createCAH2dChartFile(CAH cah, File file) {
+//		try {
+//			RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\")", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
+//		}
+//		catch(RWorkspaceException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		catch(REXPMismatchException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		catch(StatException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		return file;
+//	}
+//
+//
+//	@Override
+//	public Object createCAH3dChart(CAH cah) {
+//		return this.createCAH3dChartFile(cah);
+//	}
+//
+//	@Override
+//	public File createCAH3dChartFile(CAH cah, File file) {
+//		try {
+//			RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC("+ cah.getSymbol() +", new.plot=FALSE)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
+//		}
+//		catch(RWorkspaceException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		catch(REXPMismatchException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		catch(StatException e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
+//		return file;
+//	}
 
 
 
-	@Override
-	public File createCAH2dChartFile(CAH cah, File file) {
-		try {
-			RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\")", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
-			// FIXME: for tests without drawing the inertia barplot. Without it, the max available clusters can exceed 16
-			//RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\", tree.barplot=FALSE)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
-			// FIXME: Tests for drawing only the inertia bar plot. We may need to create a method for this : createCAHIntertiaChart() in the charts engines
-			//RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"bar\")", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
 
+//	/**
+//	 * Gets the current R device.
+//	 * @return the rDevice
+//	 */
+//	public RDevice getRDevice() {
+//		return rDevice;
+//	}
+//
 
-		}
-		catch(RWorkspaceException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(REXPMismatchException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(StatException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return file;
-	}
-
-
-	@Override
-	public Object createCAH3dChart(CAH cah) {
-		return this.createCAH3dChartFile(cah);
-	}
-
-	@Override
-	public File createCAH3dChartFile(CAH cah, File file) {
-		try {
-			RWorkspace.getRWorkspaceInstance().plot(file, "plot.HCPC("+ cah.getSymbol() +", new.plot=FALSE)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		catch(RWorkspaceException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(REXPMismatchException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		catch(StatException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		return file;
-	}
-
-
-
-
-	/**
-	 * Gets the current R device.
-	 * @return the rDevice
-	 */
-	public __RDevice getRDevice() {
-		return rDevice;
-	}
-
-
 	
 	/**
 	 * Plots the specified expression using R workspace instance and current charts engine output format.
@@ -745,19 +514,19 @@
 
 		// FIXME : voir comment gérer cela autrement + supprimer certaines méthodes du RDevice devenues inutiles depuis qu'on stocke outputFormat ?
 		if(outputFormat.equals(ChartsEngine.OUTPUT_FORMAT_JPEG))	{
-			this.rDevice = __RDevice.JPEG;
+			this.rDevice = RDevice.JPEG;
 		}
 		else if(outputFormat.equals(ChartsEngine.OUTPUT_FORMAT_PDF))	{
-			this.rDevice = __RDevice.PDF;
+			this.rDevice = RDevice.PDF;
 		}
 		else if(outputFormat.equals(ChartsEngine.OUTPUT_FORMAT_PNG))	{
-			this.rDevice = __RDevice.PNG;
+			this.rDevice = RDevice.PNG;
 		}
 		else if(outputFormat.equals(ChartsEngine.OUTPUT_FORMAT_PS))	{
-			this.rDevice = __RDevice.PS;
+			this.rDevice = RDevice.PS;
 		}
 		else if(outputFormat.equals(ChartsEngine.OUTPUT_FORMAT_SVG))	{
-			this.rDevice = __RDevice.SVG;
+			this.rDevice = RDevice.SVG;
 		}
 	}
 
@@ -815,97 +584,14 @@
 	}
 
 
-	 @Override
-	public void updateChartCAFactorialMapSetRowsVisible(Object chart, CA ca, boolean visible)	{
-		super.updateChartCAFactorialMapSetRowsVisible(chart, ca, visible);
 
-		// Recreate the chart file
-		this.createCAFactorialMapChartFile(ca, (File) chart);
-	}
+//
+//	@Override
+//	public void updateChartCAFactorialMapSetLabelItemsSelectionOrder(Object chart, String[] rowLabels, String[] colLabels) {
+//		Log.severe(this.getClass() + ".updateChartCAFactorialMapSetLabelItemsSelectionOrder(): Not yet implemented."); //$NON-NLS-1$
+//	}
 
 
-	 @Override
-	public void updateChartCAFactorialMapSetColumnsVisible(Object chart, CA ca, boolean visible)	{
-		 super.updateChartCAFactorialMapSetColumnsVisible(chart, ca, visible);
 
-		// Recreate the chart file
-		this.createCAFactorialMapChartFile(ca, (File) chart);
-	}
 
-
-	 @Override
-	public void updateChartCAFactorialMapSetDimensions(Object chart, CA ca, int dimension1, int dimension2)	{
-		 super.updateChartCAFactorialMapSetDimensions(chart, ca, dimension1, dimension2);
-
-		// Recreate the chart file
-		this.createCAFactorialMapChartFile(ca, (File) chart);
-	 }
-
-
-	@Override
-	public void updateChartCAFactorialMapHighlightPoints(Object chart, boolean rows, String[] labels) {
-		// FIXME: not implemented
-		Log.severe(this.getClass() + ".updateChartCAFactorialMapHighlightPoints(): Not yet implemented."); //$NON-NLS-1$
-	}
-
-
-	@Override
-	public ArrayList<String> getCAFactorialMapChartSelectedRowPoints(Object chart) {
-		// FIXME: not implemented
-		Log.severe(this.getClass() + ".updateChartCAFactorialMapGetSelectedRowPoints(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<String>(0);
-	}
-
-
-	@Override
-	public ArrayList<String> getCAFactorialMapChartSelectedColumnPoints(Object chart) {
-		// FIXME: not implemented
-		Log.severe(this.getClass() + ".updateChartCAFactorialMapGetSelectedColumnPoints(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<String>(0);
-	}
-
-
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedPointPositions(Object chart) {
-		// FIXME: not implemented
-		Log.severe(this.getClass() + ".updateChartProgressionGetSelectedPoints(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<Integer>(0);
-	}
-
-
-	@Override
-	public ArrayList<Integer> getProgressionChartAllPointPositions(Object chart) {
-		// FIXME: not implemented
-		Log.severe(this.getClass() + ".getProgressionChartAllPointPositions(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<Integer>(0);
-	}
-
-
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedSeries(Object chart) {
-		Log.severe(this.getClass() + ".getProgressionChartSelectedSeries(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<Integer>(0);
-	}
-
-
-	@Override
-	public ArrayList<Integer> getProgressionChartSelectedPointNumbers(Object chart) {
-		Log.severe(this.getClass() + ".getProgressionChartSelectedPointNumber(): Not yet implemented."); //$NON-NLS-1$
-		return new ArrayList<Integer>(0);
-	}
-
-
-	@Override
-	public int getProgressionChartLastSelectedSeries(Object chart) {
-		Log.severe(this.getClass() + ".getProgressionChartLastSelectedSeries(): Not yet implemented."); //$NON-NLS-1$
-		return -1;
-	}
-
-
-	@Override
-	public void updateChartCAFactorialMapSetLabelItemsSelectionOrder(Object chart, String[] rowLabels, String[] colLabels) {
-		Log.severe(this.getClass() + ".updateChartCAFactorialMapSetLabelItemsSelectionOrder(): Not yet implemented."); //$NON-NLS-1$
-	}
-
-
 }
Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/EditionPanel.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/EditionPanel.java	(revision 136)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/EditionPanel.java	(revision 137)
@@ -285,6 +285,13 @@
 	}
 
 	/**
+	 * Removes all highlighted words.  
+	 */
+	public void removeHighlightWords() {
+		this.highlightedColorPerWordIDS.clear();
+	}
+	
+	/**
 	 * Open the page containing the word with ID=$line_wordid
 	 * @param line_wordid
 	 * @return true if the page changed
Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/SynopticEditionEditor.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/SynopticEditionEditor.java	(revision 136)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/rcp/synoptic/editor/SynopticEditionEditor.java	(revision 137)
@@ -174,6 +174,16 @@
 		}
 	}
 
+	/**
+	 * Removes all highlighted words.  
+	 */
+	public void removeHighlightWords() {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.removeHighlightWords();
+		}
+	}
+	
+	
 	//	/**
 	//	 * 
 	//	 * @param wordids2 all the words to highlight
Index: tmp/org.txm.chartsengine.svgbatik.rcp/src/org/txm/chartsengine/svgbatik/rcp/editors/___SVGChartEditorPart.java
===================================================================
--- tmp/org.txm.chartsengine.svgbatik.rcp/src/org/txm/chartsengine/svgbatik/rcp/editors/___SVGChartEditorPart.java	(revision 136)
+++ tmp/org.txm.chartsengine.svgbatik.rcp/src/org/txm/chartsengine/svgbatik/rcp/editors/___SVGChartEditorPart.java	(revision 137)
@@ -64,7 +64,6 @@
 	}
 
 
-	@Override
 	public String getID() {
 		return ___SVGChartEditorPart.ID;
 	}
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/r/RSpecificitiesBarChartCreator.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/r/RSpecificitiesBarChartCreator.java	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/r/RSpecificitiesBarChartCreator.java	(revision 137)
@@ -5,10 +5,10 @@
 import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.r.core.RChartCreator;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.functions.progression.Progression;
+import org.txm.progression.core.functions.Progression;
 import org.txm.specificities.core.functions.SpecificitesResult;
+import org.txm.specificities.core.messages.SpecificitiesCoreMessages;
 import org.txm.specificities.core.preferences.SpecificitiesPreferences;
 import org.txm.stat.data.Matrix;
 import org.txm.stat.data.Vector;
@@ -160,7 +160,7 @@
 
 		}
 		catch (Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_SPECIFICITIES_FILE_CHART, this.getChartsEngine().getName()) + e);
+			Log.severe(SpecificitiesCoreMessages.bind(SpecificitiesCoreMessages.ChartsEngine_CANT_CREATE_SPECIFICITIES_FILE_CHART, this.getChartsEngine().getName()) + e);
 		}
 
 		return file;
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/jfreechart/JFCSpecificitiesBarChartCreator.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/jfreechart/JFCSpecificitiesBarChartCreator.java	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/chartsengine/jfreechart/JFCSpecificitiesBarChartCreator.java	(revision 137)
@@ -15,10 +15,10 @@
 import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.core.chartsengine.jfreechart.messages.JFreeChartsEngineMessages;
+import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.specificities.core.functions.SpecificitesResult;
+import org.txm.specificities.core.messages.SpecificitiesCoreMessages;
 import org.txm.specificities.core.preferences.SpecificitiesPreferences;
 
 /**
@@ -87,11 +87,11 @@
 
         if(drawBars)	{
 			// Create the bar chart
-	        chart = this.getChartsEngine().createXYBarChart(dataset, specificitiesResult.getName(), ChartsEngineMessages.ChartsEngine_SPECIFICITIES_X_AXIS_LABEL, ChartsEngineMessages.ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL, true, false, false, xAxisSymbols);
+	        chart = this.getChartsEngine().createXYBarChart(dataset, specificitiesResult.getName(), SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_X_AXIS_LABEL, SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL, true, false, false, xAxisSymbols);
         }
         else	{
 			// Create the line chart
-	        chart = this.getChartsEngine().createXYLineChart(dataset, specificitiesResult.getName(), ChartsEngineMessages.ChartsEngine_SPECIFICITIES_X_AXIS_LABEL, ChartsEngineMessages.ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL,
+	        chart = this.getChartsEngine().createXYLineChart(dataset, specificitiesResult.getName(), SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_X_AXIS_LABEL, SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL,
 	        		true, false, true, true, true, false, false, xAxisSymbols);
         }
 
@@ -116,7 +116,7 @@
         // Add positive banality marker
         Marker marker = new ValueMarker(banality);
         marker.setPaint(Color.red);
-        marker.setLabel(JFreeChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL, banality));
+        marker.setLabel(SpecificitiesCoreMessages.bind(SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL, banality));
         marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
         marker.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
         chart.getXYPlot().addRangeMarker(marker);
@@ -125,7 +125,7 @@
         // Add negative banality marker
         marker = new ValueMarker(-banality);
         marker.setPaint(Color.red);
-        marker.setLabel(JFreeChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL, -banality));
+        marker.setLabel(SpecificitiesCoreMessages.bind(SpecificitiesCoreMessages.ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL, -banality));
         marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
         marker.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
         chart.getXYPlot().addRangeMarker(marker);
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/TBXSpecificitiesMessages.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/TBXSpecificitiesMessages.java	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/TBXSpecificitiesMessages.java	(revision 137)
@@ -1,21 +0,0 @@
-package org.txm.specificities.core.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-
-
-public class TBXSpecificitiesMessages extends NLS {
-
-	private static final String BUNDLE_NAME = "org.txm.specificities.core.messages.messages"; //$NON-NLS-1$
-
-	public static String ChartsEngine_SPECIFICITIES_X_AXIS_LABEL;
-	public static String ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL;
-	public static String ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL;
-
-
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, TBXSpecificitiesMessages.class);
-	}
-
-}
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages_fr.properties	(revision 137)
@@ -1,3 +1,4 @@
-ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL=Banalit� : {0}
+ChartsEngine_CANT_CREATE_SPECIFICITIES_FILE_CHART=Impossible de créer le fichier du graphique des spécificités (moteur de production de graphiques: {0})
+ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL=Banalité : {0}
 ChartsEngine_SPECIFICITIES_X_AXIS_LABEL=Partie
 ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL=Score
\ No newline at end of file
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages.properties
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages.properties	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/messages.properties	(revision 137)
@@ -1,3 +1,4 @@
+ChartsEngine_CANT_CREATE_SPECIFICITIES_FILE_CHART=Can''t create specificities chart file (charts engine: {0})
 ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL=Banality: {0}
 ChartsEngine_SPECIFICITIES_X_AXIS_LABEL=Part
-ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL=Score
+ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL=Score
\ No newline at end of file
Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/SpecificitiesCoreMessages.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/SpecificitiesCoreMessages.java	(revision 0)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/SpecificitiesCoreMessages.java	(revision 137)
@@ -0,0 +1,25 @@
+package org.txm.specificities.core.messages;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
+
+
+
+
+public class SpecificitiesCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.txm.specificities.core.messages.messages"; //$NON-NLS-1$
+
+	public static String ChartsEngine_CANT_CREATE_SPECIFICITIES_FILE_CHART;
+	
+	public static String ChartsEngine_SPECIFICITIES_X_AXIS_LABEL;
+	public static String ChartsEngine_SPECIFICITIES_Y_AXIS_LABEL;
+	public static String ChartsEngine_SPECIFICITIES_BANALITY_MARKER_LABEL;
+
+
+	static {
+		// initialize resource bundle
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, SpecificitiesCoreMessages.class);
+	}
+
+}

Property changes on: tmp/org.txm.specificities.core/src/org/txm/specificities/core/messages/SpecificitiesCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitesResult.java
===================================================================
--- tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitesResult.java	(revision 136)
+++ tmp/org.txm.specificities.core/src/org/txm/specificities/core/functions/SpecificitesResult.java	(revision 137)
@@ -34,14 +34,14 @@
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
 import java.util.List;
 
 import org.rosuda.REngine.REXPMismatchException;
-import org.txm.core.chartsengine.r.__RDevice;
+import org.txm.HasResults;
+import org.txm.Messages;
 import org.txm.functions.Function;
 import org.txm.functions.TXMResult;
-import org.txm.functions.progression.Progression;
+import org.txm.progression.core.functions.Progression;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.searchengine.cqp.corpus.Partition;
@@ -56,8 +56,6 @@
 import org.txm.stat.utils.ArrayIndex;
 import org.txm.stat.utils.CheckArray;
 import org.txm.stat.utils.VectorizeArray;
-import org.txm.HasResults;
-import org.txm.Messages;
 
 // TODO: Auto-generated Javadoc
 /**
@@ -527,175 +525,9 @@
 		return true;
 	}
 
-	/**
-	 * To svg.
-	 *
-	 * @param file the file
-	 * @param typeNames the type names
-	 * @param partNames the part names
-	 * @param specIndex the spec index
-	 * @param transpose the transpose
-	 * @param drawBarPlot the draw bar plot
-	 * @param drawLines the draw lines
-	 * @param device the device
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated
-	public final void toSVG(File file, String[] typeNames,
-			String[] partNames, double[][] specIndex, boolean transpose, boolean drawBarPlot, boolean drawLines, __RDevice device, float BANALITE, boolean monochrome) throws StatException {
 
-		// TODO: should filter max and min here
-		// specIndex
 
-		Matrix spec = new DoubleMatrix(specIndex);
-		Vector types = new VectorImpl(typeNames);
-		Vector parts = new VectorImpl(partNames);
-
-		RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-		rw.eval("rownames(" + spec.getSymbol() + ") <- " + types.getSymbol() + ";"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		rw.eval("colnames(" + spec.getSymbol() + ") <- " + parts.getSymbol() + ";"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		try {
-			//System.out.println(""+"barplot(" + spec.getSymbol() + ", beside=T, legend.text=rownames(" + spec.getSymbol() + "));"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-
-			String matrix = spec.getSymbol();
-			if (transpose)
-				matrix = "t("+matrix+")"; //$NON-NLS-1$ //$NON-NLS-2$
-
-
-			String names = parts.getSymbol();
-			if (transpose)
-				names = types.getSymbol();
-
-			String legend = types.getSymbol();
-			if (transpose)
-				legend = parts.getSymbol();
-
-			String title = this.getName();
-
-			String cmd = ""; //$NON-NLS-1$
-
-			String[] colors;
-			String[] allcolors = Progression.colors;
-			if (transpose) { // one color per part
-				colors = new String[partNames.length];
-				for (int j = 0 ; j < partNames.length ; j++) {
-					colors[j] = allcolors[j%allcolors.length];
-				}
-			} else { // one color per word
-				colors = new String[typeNames.length];
-				for (int j = 0 ; j < typeNames.length ; j++)
-					colors[j] = allcolors[j%allcolors.length];
-			}
-
-			RWorkspace.getRWorkspaceInstance().eval("rm(colors)"); //$NON-NLS-1$
-			RWorkspace.getRWorkspaceInstance().addVectorToWorkspace("colors", colors); //$NON-NLS-1$
-			//System.out.println("colors: "+Arrays.toString(colors));
-
-			String colorString;
-
-			if (monochrome)
-				colorString = ""; //$NON-NLS-1$
-			else
-				colorString = ", col=colors"; //$NON-NLS-1$
-
-			cmd += "op <- par(mar=c(5,5,5,10), xpd=TRUE);\n"; //$NON-NLS-1$
-
-			if (drawBarPlot) {
-				cmd += 	"mat <- "+matrix+";\n" + //$NON-NLS-1$ //$NON-NLS-2$
-						"draw <- barplot(mat, space=c(1,3)"+colorString+ //$NON-NLS-1$
-						", horiz=F, las=2, names.arg="+names+", main=\""+title+ //$NON-NLS-1$ //$NON-NLS-2$
-						"\", beside=T, xpd=TRUE);\n" +  //$NON-NLS-1$ //$NON-NLS-2$
-						// removed : legend.text="+legend + "
-						//"rm(op);" + //$NON-NLS-1$
-						"W2 <- 100000;\n"+//$NON-NLS-1$
-						"lines(c(0,W2), c(-"+BANALITE+", -"+BANALITE+"), lty=2);\n" + // seuil banalité inférieur //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-						"lines(c(0,W2), c("+BANALITE+", "+BANALITE+"), lty=2);\n" + // seuil banalité supérieur //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-						"lines(c(0,W2), c(0,0), lty=1);\n"+ //$NON-NLS-1$
-						"\n"; //$NON-NLS-1$ 
-			} else {
-				//compute the hist but dont show the bar
-				cmd += 	"mat <- "+matrix+";\n" + //$NON-NLS-1$ //$NON-NLS-2$
-						"draw <- barplot(mat, space=c(1,3), col=\"white\", border=NA, horiz=F, las=2, names.arg="+names+", main=\""+title+"\", beside=T);\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				//"rm(op);\n"; //$NON-NLS-1$ 
-			}
-
-			if (drawLines) {
-				if (transpose) {
-					cmd +=	"for(i in 1:length(draw[1,])){\n" + //$NON-NLS-1$
-							"lines(draw[,i], mat[,i], col=colors[[i]]);\n" + //$NON-NLS-1$
-							"}\n"; //$NON-NLS-1$
-				} else {
-					cmd +=	"for(i in 1:length(draw[,1])){\n" + //$NON-NLS-1$
-							"lines(draw[i,], mat[i,], col=colors[[i]]);\n" + //$NON-NLS-1$
-							"}\n"; //$NON-NLS-1$
-				}
-				if (!drawBarPlot) {
-					if (transpose) {
-						cmd +=	"for(i in 1:length(draw[1,])){\n" + //$NON-NLS-1$
-								"text(draw[,i], 0, label="+legend+", offset=0, srt=90);\n" + //$NON-NLS-1$ //$NON-NLS-2$
-								"lines(c(draw[[1,i]],draw[[length(draw[,i]),i]]), c(0,0))" + //$NON-NLS-1$
-								"}\n"; //$NON-NLS-1$
-					} else {
-						cmd += "lines( c(0,99999), c(0,0))\n"; //$NON-NLS-1$
-					}
-				}
-			}
-
-			//			if (transpose)
-			//				cmd += "legend(\"topright\", "+names+", inset = c(-0.2, 0), col = colors, lty = 1, xpd=TRUE);\n"; //$NON-NLS-1$ //$NON-NLS-2$
-			//			else
-			if (drawBarPlot)
-				cmd += "legend(\"topright\", "+legend+", inset = c(-0.2,0), col = colors, pch = 0, xpd=TRUE);\n"; //$NON-NLS-1$ //$NON-NLS-2$
-			else
-				cmd += "legend(\"topright\", "+legend+", inset = c(-0.2,0), col = colors, lty = 1, xpd=TRUE);\n"; //$NON-NLS-1$ //$NON-NLS-2$
-
-			rw.plot(file, cmd, device);
-		} catch (Exception e) {
-			System.out.println(e.getLocalizedMessage());
-			throw new StatException(e);
-		}
-	}
-
 	/**
-	 * SL
-	 * 
-	 * TODO should be a generic function for drawing barplot with vector.
-	 *
-	 * @param file the file
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated
-	public void toSVG(File file) throws StatException {
-		toSVG(file, __RDevice.SVG);
-	}
-
-
-	/**
-	 * To svg.
-	 *
-	 * @param file the file
-	 * @param device the device
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated
-	public void toSVG(File file, __RDevice device) throws StatException {
-		// TODO Auto-generated method stub
-		double[][] specindex = getSpecificitesIndex();
-		try {
-			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-			double[] i = VectorizeArray.vectorizeByInner(specindex);
-			VectorImpl v = new VectorImpl(i);
-			//System.out.println("R : "+v.getSymbol()); //$NON-NLS-1$
-			rw.plot(file, "barplot(" + v.getSymbol() + ")", device); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (REXPMismatchException e) {
-			throw new StatException(e);
-		}
-	}
-
-	/**
 	 * Gets the parent, i.e. the subcorpus if the specif ities were computed on a
 	 * subcorpus, and the partition if teh specificities were computed on a
 	 * partition
Index: tmp/org.txm.specificities.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.specificities.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.specificities.core/META-INF/MANIFEST.MF	(revision 137)
@@ -4,8 +4,9 @@
 Bundle-SymbolicName: org.txm.specificities.core;singleton:=true
 Bundle-Version: 1.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: org.txm.chartsengine.core;bundle-version="1.0.0",
+Require-Bundle: org.txm.progression.core;bundle-version="1.0.0",
  org.txm.core,
+ org.txm.chartsengine.core;bundle-version="1.0.0",
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
  org.txm.chartsengine.r.core;bundle-version="1.0.0",
  org.eclipse.core.runtime;bundle-version="3.10.0"
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/Activator.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/Activator.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/Activator.java	(revision 137)
@@ -1,50 +0,0 @@
-package org.txm.cah.core;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.txm.cah.core"; //$NON-NLS-1$
-
-	// The shared instance
-	private static Activator plugin;
-	
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-}
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/CAHPreferences.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/CAHPreferences.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/CAHPreferences.java	(revision 137)
@@ -4,7 +4,6 @@
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.service.prefs.Preferences;
-import org.txm.cah.core.functions.CAH;
 import org.txm.core.preferences.TXMPreferences;
 
 /**
@@ -21,19 +20,17 @@
 	public static final String PREFERENCES_PREFIX = "cah_"; //$NON-NLS-1$
 	
 	/** The Constant DISPLAY. */
-	public static final String DISPLAY = "cah_display_2d"; //$NON-NLS-1$
+	public static final String DISPLAY_2D = "display_2d"; //$NON-NLS-1$
 	
 	/** The Constant METHOD. */
-	public static final String METHOD = "cah_default_method"; //$NON-NLS-1$
+	public static final String METHOD = "method"; //$NON-NLS-1$
 	
 	/** The Constant METRIC. */
-	public static final String METRIC = "cah_default_metric"; //$NON-NLS-1$
+	public static final String METRIC = "metric"; //$NON-NLS-1$
 	
 	/** The Constant NCLUSTER. */
-	public static final String NCLUSTER = "cah_default_ncluster"; //$NON-NLS-1$
+	public static final String NCLUSTER = "ncluster"; //$NON-NLS-1$
 	
-	/** The Constant ID. */
-	public static final String ID = "org.txm.rcpapplication.preferences.CAHPreferencePage"; //$NON-NLS-1$
 
 	public CAHPreferences() {
 		// TODO Auto-generated constructor stub
@@ -42,10 +39,11 @@
 	@Override
 	public void initializeDefaultPreferences() {
 		Preferences preferences = DefaultScope.INSTANCE.getNode(PREFERENCES_NODE);
-		preferences.putBoolean(DISPLAY, false);
+		
+		preferences.putBoolean(DISPLAY_2D, true);
 		preferences.putInt(NCLUSTER, 2);
-		preferences.put(METHOD, CAH.getDefaultMethod());
-		preferences.put(METRIC, CAH.getDefaultMetric());
+		preferences.put(METHOD, "ward");
+		preferences.put(METRIC, "euclidean");
 		
 		// shared charts rendering preferences
 		super.initializeChartsEngineSharedPreferences(preferences);
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/messages/TBXCAHMessages.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/messages/TBXCAHMessages.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/messages/TBXCAHMessages.java	(revision 137)
@@ -1,21 +0,0 @@
-package org.txm.cah.core.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TBXCAHMessages extends NLS {
-
-	private static final String BUNDLE_NAME = "org.txm.cah.core.messages.messages"; //$NON-NLS-1$
-
-	public static String CAH_0;
-
-	public static String CAHEditor_PART_NAME_PREFIX;
-	public static String CAHEditorTitle;
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, TBXCAHMessages.class);
-	}
-
-	private TBXCAHMessages() {
-	}
-}
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/messages/messages_fr.properties	(revision 137)
@@ -1 +1 @@
-CAH_0=Erreur durant l'export du r�sultat CAH : 
\ No newline at end of file
+CAH_0=Erreur durant l'export du résultat CAH : 
\ No newline at end of file
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/messages/CAHCoreMessages.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/messages/CAHCoreMessages.java	(revision 0)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/messages/CAHCoreMessages.java	(revision 137)
@@ -0,0 +1,21 @@
+package org.txm.cah.core.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+public class CAHCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.txm.cah.core.messages.messages"; //$NON-NLS-1$
+
+	public static String CAH_0;
+
+	public static String CAHEditor_PART_NAME_PREFIX;
+	public static String CAHEditorTitle;
+	
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, CAHCoreMessages.class);
+	}
+
+	private CAHCoreMessages() {
+	}
+}

Property changes on: tmp/org.txm.cah.core/src/org/txm/cah/core/messages/CAHCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.cah.core/src/org/txm/cah/core/functions/CAH.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/functions/CAH.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/functions/CAH.java	(revision 137)
@@ -32,21 +32,21 @@
 import org.rosuda.REngine.REXP;
 import org.rosuda.REngine.REXPMismatchException;
 import org.txm.HasResults;
-import org.txm.cah.core.messages.TBXCAHMessages;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.messages.CAHCoreMessages;
 import org.txm.functions.Function;
 import org.txm.functions.TXMResult;
-import org.txm.functions.ca.CA;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.stat.data.LexicalTable;
 import org.txm.stat.engine.r.RWorkspace;
 import org.txm.stat.engine.r.RWorkspaceException;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Class CAH.
  * 
  * @author mdecorde
+ * @author sjacquot
  *
  */
 public class CAH extends Function implements TXMResult
@@ -79,16 +79,6 @@
 	/** The name. */
 	String name;
 
-	/** The display2 d. */
-	// FIXME : to remove when charts engine will be validated
-	@Deprecated
-	boolean display2D;
-
-	// FIXME : to remove when charts engine will be validated
-	@Deprecated
-	private File svgFile;
-
-
 	/**
 	 * The coordinates of the clusters.
 	 */
@@ -138,7 +128,7 @@
 	 * @param NCluster the n cluster
 	 * @param display2D the display mode
 	 */
-	public CAH(CA ca, boolean col, String method, String metric, int NCluster, Boolean display2D)
+	public CAH(CA ca, boolean col, String method, String metric, int NCluster)
 	{
 		this.ca = ca;
 		this.table = ca.getLexicalTable();
@@ -146,7 +136,6 @@
 		this.metric = metric;
 		this.NCluster = NCluster;
 		this.method = method;
-		this.display2D = display2D;
 
 		this.source = ca;
 		this.partition = ca.getPartition();
@@ -165,13 +154,12 @@
 	 * @param NCluster the n cluster
 	 * @param displayMode the display mode
 	 */
-	public CAH(LexicalTable table, boolean col, String method, String metric, int NCluster, Boolean display2D)
+	public CAH(LexicalTable table, boolean col, String method, String metric, int NCluster)
 	{
 		this.columns = col;
 		this.metric = metric;
 		this.NCluster = NCluster;
 		this.method = method;
-		this.display2D = display2D;
 
 		this.source = table;
 		this.partition = table.getPartition();
@@ -292,7 +280,7 @@
 			rw.eval("sink()"); //$NON-NLS-1$
 		} catch (RWorkspaceException e) {
 			// TODO Auto-generated catch block
-			System.out.println(TBXCAHMessages.CAH_0+e);
+			System.out.println(CAHCoreMessages.CAH_0+e);
 			org.txm.utils.logger.Log.printStackTrace(e);
 			ret = false;
 		} finally {
@@ -340,11 +328,6 @@
 		return corpus;
 	}
 
-	@Deprecated
-	public File getSVGFile() {
-		return svgFile;
-	}
-
 	/**
 	 * Gets the default method.
 	 *
@@ -630,13 +613,8 @@
 		return maxClustersCount;
 	}
 
-	/**
-	 * @return the display2D
-	 */
-	public boolean isDisplay2D() {
-		return display2D;
-	}
 
+
 	@Override
 	public boolean delete() {
 		return getParent().removeResult(this);
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RCAHChartCreator.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RCAHChartCreator.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RCAHChartCreator.java	(revision 137)
@@ -3,9 +3,17 @@
 import java.io.File;
 
 import org.txm.cah.core.functions.CAH;
+import org.txm.cah.core.preferences.CAHPreferences;
 import org.txm.chartsengine.r.core.RChartCreator;
-import org.txm.chartsengine.r.core.RChartsEngine;
+import org.txm.core.preferences.TXMPreferences;
 
+/**
+ * R CAH chart creator.
+ * 
+ * @author mdecorde
+ * @author sjacquot
+ *
+ */
 public class RCAHChartCreator extends RChartCreator {
 
 	public RCAHChartCreator() {
@@ -19,51 +27,39 @@
 	}
 	
 
-	public String createCAH2dChartFile(CAH cah) {
-		return "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\")";
-	}
-
-	public String createCAH3dChartFile(CAH cah) {
-		return "plot.HCPC("+ cah.getSymbol() +", new.plot=FALSE)";
-	}
-
 	@Override
 	public File createChartFile(Object resultData, File file, String preferencesNode) {
 
-		try {
-			CAH cah = (CAH) resultData;
-			
-			// parameters
+		CAH cah = (CAH) resultData;
+		
+		//FIXME: parameters
 //			int maxWords = TXMPreferences.getInt(preferencesNode, resultData, WordCloudPreferences.MAX_WORDS);
 //			int minFreq = TXMPreferences.getInt(preferencesNode, resultData, WordCloudPreferences.FMIN);
 //			float rotPer = TXMPreferences.getFloat(preferencesNode, resultData, WordCloudPreferences.ROT);
 //			boolean randomOrder = TXMPreferences.getBoolean(preferencesNode, resultData, WordCloudPreferences.RANDOM_POSITION);
+		
+		String cmd = null;
+		if (TXMPreferences.getBoolean(preferencesNode, resultData, CAHPreferences.DISPLAY_2D)) {
+			cmd = "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\")";
 			
-			String cmd = null;
-			if (cah.isDisplay2D()) {
-				cmd = createCAH2dChartFile(cah);
-			} else {
-				cmd = createCAH3dChartFile(cah);
-			}
+		// FIXME: for tests without drawing the inertia barplot. Without it, the max available clusters can exceed 16
+		//cmd = "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\", tree.barplot=FALSE)"; //$NON-NLS-1$ //$NON-NLS-2$
+		// FIXME: Tests for drawing only the inertia bar plot. We may need to create a method for this : createCAHIntertiaChart() in the charts engines
+		//cmd= "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"bar\")"; //$NON-NLS-1$ //$NON-NLS-2$
+
 			
-			((RChartsEngine) this.chartsEngine).plot(file, cmd);
 		}
-		catch(Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		else {
+			cmd = "plot.HCPC("+ cah.getSymbol() +", new.plot=FALSE)";
 		}
 		
+		this.getChartsEngine().plot(file, cmd);
+		
 		return file;
 	}
 
 	
 	@Override
-	// FIXME: to not load the chart creator, to remove when implemented 
-	public Class getChartsEngineClass() {
-		return null;
-	}
-	
-	@Override
 	public Class getResultDataClass() {
 		return CAH.class;
 	}
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/jfreechart/JFCCAHChartCreator.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/jfreechart/JFCCAHChartCreator.java	(revision 136)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/jfreechart/JFCCAHChartCreator.java	(revision 137)
@@ -5,11 +5,12 @@
 import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
 
 /**
+ * JFC CAH chart creator.
  * 
  * @author mdecorde
+ * @author sjacquot
  * 
- * TODO: not done
- *
+ * 
  */
 public class JFCCAHChartCreator extends JFCChartCreator {
 
@@ -20,6 +21,8 @@
 	@Override
 	public JFreeChart createChart(Object resultData, String preferencesNode) {
 
+		System.err.println("JFCCAHChartCreator.createChart(): not yet implemented.");
+		
 		final CAH cah = (CAH) resultData;
 		
 		
@@ -27,7 +30,15 @@
 		
 	}
 
+	
+	@Override
+	// FIXME: to not load the chart creator, to remove when implemented 
+	public Class getChartsEngineClass() {
+		return null;
+	}
 
+	
+
 	@Override
 	public Class getResultDataClass() {
 		return CAH.class;
@@ -36,7 +47,659 @@
 
 
 
+	
+	// FIXME: old version with bar plot renderer
+//	@Override
+//	public JFreeChart createCAH2dChart(CAH cah) {
+//
+//
+//		JFreeChart chart = null;
+//
+//		// Creating the data set from the result
+//		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+//		String category = "cluster ";
+//
+//
+//
+//		int[] clusterNumbers = cah.getClusterNumbers();
+//		String[] rowNames = cah.getClusterRowNames();
+//		String[] orderedRowNames = cah.getClusterOrderedRowNames();
+//		double[] clusterHeights = cah.getClusterTreeHeights();
+//		double[][] clusterMerges = cah.getClusterTreeMerges();
+//		double[][] clusterCoords = cah.getClusterCoords();
+//
+//		double[] yValuesByOrderedRowNames = new double[rowNames.length];
+//		double[] clusterNumbersValuesByOrderedRowNames = new double[rowNames.length];
+//
+//
+//
+//		// FIXME: Sort the cluster numbers in reverse order
+////			Arrays.sort(clusterNumbers);
+////			ArrayUtils.reverse(clusterNumbers);
+////			System.out.println(Arrays.toString(clusterNumbers));
+//
+//
+//		// FIXME: tests row names
+//		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster row names: \t\t" + Arrays.toString(rowNames));
+//
+//		// FIXME: tests ordered row names
+//		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster ordered row names: \t" + Arrays.toString(orderedRowNames));
+//
+//		// FIXME: tests, ordered cluster numbers
+//		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster numbers: \t\t" + Arrays.toString(clusterNumbers));
+//
+//		// FIXME: tests, cluster tree merges
+//		//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster tree merges: \t\t" + Arrays.toString(clusterMerges));
+//
+//		// FIXME: tests, heights
+////		System.err.println("JFCChartsEngine.createCAH2dChart(): cluster heights: \t\t" + Arrays.toString(clusterHeights));
+//
+//
+//		// FIXME: tests
+//		System.err.println("JFCChartsEngine.createCAH2dChart(): tests: \t\t" + Arrays.toString(cah.getInertiaGains()));
+//
+//
+//
+//		System.out.println("JFCChartsEngine.createCAH2dChart() cluster heights count: " + clusterHeights.length);
+//		for(int i = 0; i < clusterHeights.length; i++) {
+//			System.out.println("JFCChartsEngine.createCAH2dChart() cluster height: " + new DecimalFormat("0.00000000000000000").format(clusterHeights[i]));
+//		}
+//
+////
+////		String[] clusterUnorderedRowNames = cah.getClusterRowNames();
+////		for(int i = 0; i < clusterUnorderedRowNames.length; i++) {
+////			System.out.println("JFCChartsEngine.createCAH2dChart() unordered row names " + i + " : " + clusterUnorderedRowNames[i]);
+////		}
+//
+//		// Parse the merge pairs
+//		// A negative number in the FactoMineR tree merge table means a singleton
+//		for (int i = 0 ; i < clusterMerges.length ; i++) {
+//
+//			// FIXME: debug
+//			//for (int j = 0 ; j < clusterMerges.length ; j++) {
+//				System.err.println("JFCChartsEngine.createCAH2dChart(): cluster tree merges: \t\t" + Arrays.toString(clusterMerges[i]));
+//				System.err.println("JFCChartsEngine.createCAH2dChart(): row names: \t\t" + rowNames[(int) Math.abs(clusterMerges[i][0]) - 1] + " | " + rowNames[(int) Math.abs(clusterMerges[i][1]) - 1]);
+//
+//
+//			//}
+//
+//			// Leaves pair
+//			if(clusterMerges[i][0] < 0)	{
+//
+//				//System.err.print("JFCChartsEngine.createCAH2dChart(): merging: " + rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]);
+//
+//				// Put the height in the ordered by names values table
+//				for(int j = 0; j < orderedRowNames.length; j++) {
+//					if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerges[i][0]) - 1]))	{
+//						yValuesByOrderedRowNames[j] = clusterHeights[i];
+//						//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][0]) - 1];
+//					}
+//				}
+//
+//			}
+//			// Non-singleton
+////				else	{
+////					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging aggregation: " +  clusterMerge[i][0]);
+////				}
+//
+//			// Leaves pair
+//			if(clusterMerges[i][1] < 0)	{
+//				//System.err.print(" with: " + rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]);
+//
+//				// Put the height in the ordered by names values table
+//				for(int j = 0; j < orderedRowNames.length; j++) {
+//					if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerges[i][1]) - 1]))	{
+//						yValuesByOrderedRowNames[j] = clusterHeights[i];
+//						//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][1]) - 1];
+//					}
+//
+//				}
+//
+//			}
+//			// Non-singleton
+////				else	{
+////					//System.err.print(" with aggregation: " + clusterMerge[i][1]);
+////				}
+//
+//			//System.err.println(" and height: " + clusterHeights[i] + " as aggregation: " + (i + 1));
+//
+//		}
+//
+//
+//		//
+////		for (int i = 0 ; i <  cah.getClusterTreeMerges().length; i++) {
+////			System.err.println("JFCChartsEngine.createCAH2dChart() merges : ");
+////			for(int j = 0; j < cah.getClusterTreeMerges()[i].length; j++) {
+////				System.err.print(" : " + cah.getClusterTreeMerges()[i][j]);
+////			}
+////		}
+//
+//
+//
+////		ArrayList<Double> middlePoints = cah.getClusterTreeMiddlePoints();
+////
+////		for (int i = 0 ; i <  middlePoints.size(); i++) {
+////			System.err.println("JFCChartsEngine.createCAH2dChart() middle points X: " + middlePoints.get(i));
+////		}
+//
+//
+//
+////		for (int i = 0 ; i < cah.getClusterCoords().length ; i++) {
+////			for(int j = 0; j < cah.getClusterCoords()[i].length; j++) {
+////				//System.err.println("JFCChartsEngine.createCAH2dChart(): " + cah.getClusterCoords()[i][j]);
+////				dataset.setValue(cah.getClusterCoords()[i][j], category + clusterNumbers[i], rownames[i]);
+////			}
+////		}
+//
+//
+//
+//		// Create chart title
+//		String title = "title";
+//		String xAxisLabel = "Column";
+//		if(!cah.isColumnsComputing())	{
+//			xAxisLabel = "Row";
+//		}
+//
+//
+//
+//		// Create the data set
+//		// FIXME: bar plot test
+////		for(int i = 0; i < yValuesByOrderedRowNames.length; i++) {
+////			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[clusterNumbers.length - 1 - i], orderedRowNames[i]);
+////
+////
+////			dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
+////			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[i], orderedRowNames[i]);
+////
+////			//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbersValuesByOrderedRowNames[i], orderedRowNames[i]);
+////		}
+////
+////		// Create the chart
+////        chart = this.createCategoryBarChart(dataset, title, xAxisLabel, "Height", false, false, false);
+////        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
+////
+////        // Draw tree
+////        for(int j = 0; j < chart.getCategoryPlot().getDataset().getColumnCount() - 1; j++) {
+////			//System.err.println("JFCChartsEngine.createCAH2dChart(): " + chart.getCategoryPlot().getDataset().getColumnKey(j));
+////
+////
+////        	// Non-singleton pairs lines
+////			if(yValuesByOrderedRowNames[j] == yValuesByOrderedRowNames[j + 1])	{
+////				chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation(chart.getCategoryPlot().getDataset().getColumnKey(j), yValuesByOrderedRowNames[j],
+////						chart.getCategoryPlot().getDataset().getColumnKey(j + 1), yValuesByOrderedRowNames[j + 1], Color.red, new BasicStroke(2.0f)));
+////			}
+////
+////
+////			//chart.getCategoryPlot().addAnnotation(new Cate
+////
+////
+////
+////		}
+//
+//
+//
+//		// Create the data set
+//		// FIXME: step chart test
+////		for(int i = 0; i < yValuesByOrderedRowNames.length - 1; i++) {
+////			if(yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i + 1])	{
+////				dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
+////			}
+////		}
+//////		dataset.addValue(0, "test", "truc 1");
+//////		dataset.addValue(0.5, "test", "truc 1");
+//////		dataset.addValue(0.9, "test", "truc 1");
+////		// Create the chart
+////        chart = this.createCategoryStepChart(dataset, title, xAxisLabel, "Height", false, false);
+////        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
+//
+//
+//		// Create the data set
+//		// FIXME: XY category bar chart test
+//		XYSeriesCollection dataset2 = new XYSeriesCollection();
+//
+//		// Last tree level (leaves level)
+//		XYSeries series = new XYSeries("leaves");
+//		for(int i = 0; i < yValuesByOrderedRowNames.length - 1; i++) {
+//			series.add(i, 0);
+//			series.add(i, yValuesByOrderedRowNames[i]);
+//			if(yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i + 1])	{
+//				series.add(i + 1, yValuesByOrderedRowNames[i]);
+//				series.add(i + 1, 0);
+//			}
+//			else	{
+//				series.add(i + 1, null);
+//			}
+//		}
+//		dataset2.addSeries(series);
+//
+//
+//		// Link singletons to non singleton
+//		series = new XYSeries("singleton to non singleton links");
+//		for(int i = clusterHeights.length; i >= 0; i--) {
+//
+//			// Skip non singletons case
+//			if(i > 3 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1] && yValuesByOrderedRowNames[i - 2] == yValuesByOrderedRowNames[i - 3])	{
+//				continue;
+//			}
+//
+//			// Link singletons to non singleton
+//			if(i > 1 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1] && yValuesByOrderedRowNames[i - 1] != yValuesByOrderedRowNames[i - 2]) {
+//				series.add(i - 0.5, yValuesByOrderedRowNames[i - 2]);
+//				series.add(i - 0.5, yValuesByOrderedRowNames[i]);
+//				series.add(i - 0.5, null);
+//				series.add(i - 2, yValuesByOrderedRowNames[i - 2]);
+//			}
+//		}
+//		dataset2.addSeries(series);
+//
+//		// Link singletons to newly created pairs
+//		series = new XYSeries("singleton to newly created pairs");
+//		for(int i = clusterHeights.length; i >= 0; i--) {
+//
+//			// Skip non singletons case
+//			if(i > 0 && yValuesByOrderedRowNames[i] == yValuesByOrderedRowNames[i - 1])	{
+//				series.add(i, null);
+//				continue;
+//			}
+//
+//			// Link singletons to newly created pairs
+//			if(i < clusterHeights.length - 1 && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i + 1]
+//					&& yValuesByOrderedRowNames[i + 1] != yValuesByOrderedRowNames[i + 2]
+//
+////						&& i > 1 &&
+//
+//							) {
+//
+//				series.add(i, null);
+//
+//				series.add(i, yValuesByOrderedRowNames[i]);
+//
+//				series.add(i + 1.75, yValuesByOrderedRowNames[i]);
+//				series.add(i + 1.75, yValuesByOrderedRowNames[i + 1]);
+//
+//
+//				//series.add(i - 2, yValuesByOrderedRowNames[i - 2]);
+//			}
+//		}
+//		dataset2.addSeries(series);
+//
+//
+//
+//		// Link singletons; test 2
+////		series = new XYSeries("singleton links");
+////		for(int i = 0; i <  clusterHeights.length - 2; i++) {
+////			if(i > 0 && i < clusterHeights.length - 2 && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i + 1] && yValuesByOrderedRowNames[i] != yValuesByOrderedRowNames[i - 1]) {
+////				series.add(i, yValuesByOrderedRowNames[i]);
+////				series.add(i + 1.5, yValuesByOrderedRowNames[i]);
+////				series.add(i + 1.5, yValuesByOrderedRowNames[i + 1]);
+////				series.add(i + 1.5, null);
+////			}
+////		}
+////		dataset2.addSeries(series);
+//
+//
+////		// Other clusters
+////		ArrayList<Double> otherClusters = new ArrayList<Double>();
+////		//series = new XYSeries("other clusters");
+////		for(int i = 0; i < clusterHeights.length; i++) {
+////			// If not a leaf
+////			boolean done = false;
+////			for(int j = 0; j < clusterNumbersValuesByOrderedRowNames.length; j++) {
+////				if(clusterHeights[i] == yValuesByOrderedRowNames[j])	{
+////					done = true;
+////					break;
+////				}
+////			}
+////			if(done)	{
+////				continue;
+////			}
+////			System.err.println("JFCChartsEngine.createCAH2dChart() other clusters: " + new DecimalFormat("0.0000000000000000").format(clusterHeights[i]));
+////		}
+////		//dataset2.addSeries(series);
+//
+//
+//
+////		dataset.addValue(0, "test", "truc 1");
+////		dataset.addValue(0.5, "test", "truc 1");
+////		dataset.addValue(0.9, "test", "truc 1");
+//		// Create the chart
+//        //chart = this.createXYBarChart(dataset2, title, xAxisLabel, "Height", false, false);
+//        chart = ChartFactory.createXYLineChart(
+//        		title,      // chart title
+//        		xAxisLabel,                      // x axis label
+//                "height",                      // y axis label
+//                dataset2,                  // data
+//                PlotOrientation.VERTICAL,
+//                true,                     // include legend
+//                true,                     // tooltips
+//                false                     // urls
+//            );
+//
+//
+//
+//
+//        chart.getXYPlot().setRenderer(this.theme.createXYLineAndShapeRenderer(true, false));
+//        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
+//
+//
+//        //chart.getXYPlot().addAnnotation(new XYLineAnnotation(0.5,  yValuesByOrderedRowNames[0], 0.5,  yValuesByOrderedRowNames[0] + 0.002));
+//
+//
+//
+//
+//
+//
+//
+//
+//        //System.err.println("JFCChartsEngine.createCAH2dChart() " + chart.getCategoryPlot().getCategories().get(0));
+//        //chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation("1970-12-31", .0002, "1965-12-31", .00005, Color.red, new BasicStroke(2.0f)));
+//
+//        // Custom range axis for ticks drawing options
+//        //chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
+//
+//
+//
+//		// Apply theme to the chart
+//		this.theme.apply(chart);
+//
+//
+//
+//		// FIXME: test algo R
+//		int dimens = 2;
+//		int ax1 = 0;
+//		int ax2 = 1;
+//		double x1, y1, x2, y2, w1, w2;
+//
+//		double h1, h2; // FIXME: when using 3 dimensions
+//
+//
+//		double[][] aa = new double[clusterMerges.length][4];
+//		for(int i = 0; i < clusterMerges.length; i++) {
+//			for(int j = 0; j < 4; j++) {
+//				aa[i][j] = 0;
+//			}
+//		}
+//
+//
+//		   //aa=matrix(ncol=4, nrow=nrow(merge))
+//
+//
+//
+//
+//		// Decrement/increment the cluster merge value because the R algorithm uses 1 as first table index
+//
+//		for(int i = 0; i < clusterMerges.length; i++) {
+//			if(clusterMerges[i][0] < 0)	{
+//				clusterMerges[i][0]++;
+//			}
+//			else	{
+//				clusterMerges[i][0]--;
+//			}
+//
+//			if(clusterMerges[i][1] < 0)	{
+//				clusterMerges[i][1]++;
+//			}
+//			else	{
+//				clusterMerges[i][1]--;
+//			}
+//		}
+//
+//
+//		for(int i = 0; i < clusterMerges.length; i++) {
+//
+////		    for(i in 1:nrow(merge)){
+//			     // if(merge[i,1]<0){
+//			// Singleton
+//			if(clusterMerges[i][0] < 0)	{
+//
+//
+//			        x1 = clusterCoords[(int) -clusterMerges[i][0]][ax1];
+//			        y1 = clusterCoords[(int) -clusterMerges[i][0]][ax2];
+//
+//
+//			        h1 = 0;
+//			        w1 = 1;
+//			      }
+//			      else{
+//			        x1 = aa[(int) clusterMerges[i][0]][0];
+//			        y1 = aa[(int) clusterMerges[i][0]][1];
+//			        w1 = aa[(int) clusterMerges[i][0]][3];
+//			        h1 = aa[(int) clusterMerges[i][0]][2];
+//			      }
+//			// Singleton
+//			if(clusterMerges[i][1] < 0)	{
+//			      //if(merge[i,2]<0){
+//			        x2 = clusterCoords[-(int) clusterMerges[i][1]][ax1];
+//			        y2 = clusterCoords[-(int) clusterMerges[i][1]][ax2];
+//			        h2 = 0;
+//			        w2 = 1;
+//			      }
+//			      else{
+//			        x2 = aa[(int) clusterMerges[i][1]][0];
+//			        y2 = aa[(int) clusterMerges[i][1]][1];
+//			        w2 = aa[(int) clusterMerges[i][1]][3];
+//			        h2 = aa[(int) clusterMerges[i][1]][2];
+//			      }
+//			      aa[i][0] = (w1 * x1 + w2 * x2) / (w1 + w2);
+//			      aa[i][1] = (w1 * y1 + w2 * y2) / (w1 + w2);
+//
+//			      //if(i<=nrow(merge)-t.level+1)
+//			      if(i <= clusterMerges.length)	{
+//			    	  clusterHeights[i] = 0;
+//			      }
+//
+//			      aa[i][2] = clusterHeights[i];
+//			      aa[i][3] = w1 + w2;
+//
+////			      if(i>(nrow(merge)-t.level+1)){
+////			      if(i > clusterMerges[i][1]){ // FIXME: this test is strange
+////			        if(dimens==3) s$points3d(rbind(c(x1,y1,h1),c(x1,y1,height[i]), c(x2,y2,height[i]),c(x2,y2,h2)), lty=1, type="o", pch="")
+//			        if(dimens == 2)	{
+//			        //	lines(c(x1,x2), c(y1,y2), lwd=(height[i]/max(height))*3)
+//
+//			        	//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x2, y2));
+//			        	// tests with steps lines
+//			        	x1 *= 10;
+//			        	x2 *= 10;
+//			        	y1 /= 100;
+//			        	y2 /= 100;
+//
+//			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x1, y2));
+//			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y2, x2, y2));
+//			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(x2, y2, x2, y1));
+//
+//
+//			        	// FIXME: labels tests
+//			        	chart.getXYPlot().addAnnotation(new XYTextAnnotation(rowNames[(int) Math.abs(clusterMerges[i][0])], x1, y1));
+//			        	chart.getXYPlot().addAnnotation(new XYTextAnnotation(rowNames[(int) Math.abs(clusterMerges[i][1])], x2, y1));
+//
+//
+//
+////			        	chart.getXYPlot().addAnnotation(new XYLineAnnotation(y2, x1, y1, x1));
+//
+//
+//			        	//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x2, y2, x2, y2));
+//
+//
+//			        	System.err.println("JFCChartsEngine.createCAH2dChart(): draw line " + x1 + ", " + y1 + " | " + x2 + "," + y2);
+//			        }
+////			      }
+//		//	    }
+//
+//
+//		}
+//
+//
+//		// FIXME: test symbol axis
+//		//chart.getXYPlot().setDomainAxis(new SymbolAxis("test symbol axis", new String[]{"A", "b", "c"}));
+//
+//		// FIXME: for cluster boxes we may use XYBoxAnnotation()
+//
+//
+//		//chart.getXYPlot().addAnnotation(new XYLineAnnotation(x1, y1, x2, y2));
+//
+//
+//        return chart;
+//
+//	}
 
+	// FIXME: new version with category step renderer
+//	@Override
+//	public JFreeChart createCAH2dChart(CAH cah) {
+//
+//
+//			JFreeChart chart = null;
+//
+//			// Creating the data set from the result
+//			DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+//			String category = "cluster ";
+//
+//
+//
+//			int[] clusterNumbers = cah.getClusterNumbers();
+//			String[] rowNames = cah.getClusterRowNames();
+//			String[] orderedRowNames = cah.getClusterOrderedRowNames();
+//			double[] clusterHeights = cah.getClusterTreeHeights();
+//			double[][] clusterMerge = cah.getClusterTreeMerges();
+//
+//
+//			double[] yValuesByOrderedRowNames = new double[rowNames.length];
+//			double[] clusterNumbersValuesByOrderedRowNames = new double[rowNames.length];
+//
+//
+//
+//			// FIXME: Sort the cluster numbers in reverse order
+////			Arrays.sort(clusterNumbers);
+////			ArrayUtils.reverse(clusterNumbers);
+////			System.out.println(Arrays.toString(clusterNumbers));
+//
+//
+//			// FIXME: tests row names
+//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster row names: \t\t" + Arrays.toString(rowNames));
+//
+//			// FIXME: tests ordered row names
+//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster ordered row names: \t" + Arrays.toString(orderedRowNames));
+//
+//			// FIXME: tests, ordered cluster numbers
+//			//System.err.println("JFCChartsEngine.createCAH2dChart(): cluster number: \t\t" + Arrays.toString(clusterNumbers));
+//
+//
+//
+//			for (int i = 0 ; i < clusterMerge.length ; i++) {
+//
+//				// Singleton
+//				if(clusterMerge[i][0] < 0)	{
+//
+//					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging: " + rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]);
+//
+//					// Put the height in the ordered by names values table
+//					for(int j = 0; j < orderedRowNames.length; j++) {
+//						if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerge[i][0]) - 1]))	{
+//							yValuesByOrderedRowNames[j] = clusterHeights[i];
+//							//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][0]) - 1];
+//						}
+//					}
+//
+//				}
+//				// Non-singleton
+//				else	{
+//					//System.err.print("JFCChartsEngine.createCAH2dChart(): merging aggregation: " +  clusterMerge[i][0]);
+//				}
+//
+//				// Singleton
+//				if(clusterMerge[i][1] < 0)	{
+//					//System.err.print(" with: " + rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]);
+//
+//					// Put the height in the ordered by names values table
+//					for(int j = 0; j < orderedRowNames.length; j++) {
+//						if(orderedRowNames[j].equals(rowNames[(int) Math.abs(clusterMerge[i][1]) - 1]))	{
+//							yValuesByOrderedRowNames[j] = clusterHeights[i];
+//							//clusterNumbersValuesByOrderedRowNames[j] = clusterNumbers[(int) Math.abs(clusterMerge[i][1]) - 1];
+//						}
+//
+//					}
+//
+//				}
+//				// Non-singleton
+//				else	{
+//					//System.err.print(" with aggregation: " + clusterMerge[i][1]);
+//				}
+//
+//				//System.err.println(" and height: " + clusterHeights[i] + " as aggregation: " + (i + 1));
+//
+//			}
+//
+//
+//			// Create the data set
+//
+//			for(int i = 0; i < yValuesByOrderedRowNames.length; i++) {
+//				//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[clusterNumbers.length - 1 - i], orderedRowNames[i]);
+//
+//				dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbers[yValuesByOrderedRowNames.length - 1 - i], orderedRowNames[i]);
+//				//dataset.setValue(yValuesByOrderedRowNames[i], category, orderedRowNames[i]);
+//
+//				//dataset.setValue(yValuesByOrderedRowNames[i], category + clusterNumbersValuesByOrderedRowNames[i], orderedRowNames[i]);
+//			}
+//
+////
+////			for (int i = 0 ; i <  cah.getClusterTreeMerges().length; i++) {
+////				System.err.println("JFCChartsEngine.createCAH2dChart() merges : ");
+////				for(int j = 0; j < cah.getClusterTreeMerges()[i].length; j++) {
+////					System.err.print(" : " + cah.getClusterTreeMerges()[i][j]);
+////				}
+////			}
+//
+//
+//
+////			ArrayList<Double> middlePoints = cah.getClusterTreeMiddlePoints();
+////
+////			for (int i = 0 ; i <  middlePoints.size(); i++) {
+////				System.err.println("JFCChartsEngine.createCAH2dChart() middle points X: " + middlePoints.get(i));
+////			}
+//
+//
+//
+////			for (int i = 0 ; i < cah.getClusterCoords().length ; i++) {
+////				for(int j = 0; j < cah.getClusterCoords()[i].length; j++) {
+////					//System.err.println("JFCChartsEngine.createCAH2dChart(): " + cah.getClusterCoords()[i][j]);
+////					dataset.setValue(cah.getClusterCoords()[i][j], category + clusterNumbers[i], rownames[i]);
+////				}
+////			}
+//
+//
+//
+//			// Create chart title
+//			String title = "title";
+//			String xAxisLabel = "Column";
+//			if(!cah.isColumnsComputing())	{
+//				xAxisLabel = "Row";
+//			}
+//
+//
+//			// Create the chart
+//	        chart = this.createCategoryStepChart(dataset, title, xAxisLabel, "Height", false, false);
+//
+//
+//	        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_CAH_2D);
+//
+//
+//	        // Draw tree
+//	        chart.getCategoryPlot().addAnnotation(new CategoryLineAnnotation(chart.getCategoryPlot().getDataset().getColumnKey(0), 5.0,
+//	        		chart.getCategoryPlot().getDataset().getColumnKey(1), 8.0, Color.red, new BasicStroke(2.0f)));
+//
+//	        // Custom range axis for ticks drawing options: cut the range to minimum and maximum values
+//	        chart.getCategoryPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getCategoryPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getCategoryPlot().getDataset()).doubleValue()));
+//
+//
+//		return chart;
+//
+//
+//
+//
+//	}
 	
 
+
+	
+
 }
Index: tmp/org.txm.cah.core/plugin.xml
===================================================================
--- tmp/org.txm.cah.core/plugin.xml	(revision 136)
+++ tmp/org.txm.cah.core/plugin.xml	(revision 137)
@@ -2,21 +2,17 @@
 <?eclipse version="3.4"?>
 <plugin>
    <extension
-         point="org.txm.chartsengine.chartcreator">
-      <ChartCreator
-            class="org.txm.cah.core.chartsengine.jfreechart.JFCCAHChartCreator"
-            fileNamePrefix="cah_">
-      </ChartCreator>
-      <ChartCreator
-            class="org.txm.cah.core.chartsengine.r.RCAHChartCreator"
-            fileNamePrefix="cah_">
-      </ChartCreator>
-   </extension>
-   <extension
          point="org.eclipse.core.runtime.preferences">
       <initializer
             class="org.txm.cah.core.preferences.CAHPreferences">
       </initializer>
    </extension>
+   <extension
+         point="org.txm.chartsengine.chartcreator">
+      <ChartCreator
+            class="org.txm.cah.core.chartsengine.r.RCAHChartCreator"
+            fileNamePrefix="cah">
+      </ChartCreator>
+   </extension>
 
 </plugin>
Index: tmp/org.txm.cah.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.cah.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.cah.core/META-INF/MANIFEST.MF	(revision 137)
@@ -1,10 +1,9 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: CAH TBX
+Bundle-Name: CAH Core
 Bundle-SymbolicName: org.txm.cah.core;singleton:=true
 Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.txm.cah.core.Activator
-Require-Bundle: org.eclipse.ui,
+Require-Bundle: org.txm.ca.core;bundle-version="1.0.0",
  org.eclipse.core.runtime,
  org.txm.core;bundle-version="0.7.0",
  org.txm.chartsengine.core;bundle-version="1.0.0",
@@ -12,8 +11,7 @@
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
-Export-Package: org.txm.cah.core,
- org.txm.cah.core.chartsengine.jfreechart,
+Export-Package: org.txm.cah.core.chartsengine.jfreechart,
  org.txm.cah.core.chartsengine.r,
  org.txm.cah.core.functions,
  org.txm.cah.core.messages,
Index: tmp/org.txm.core/src/java/org/txm/Toolbox.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/Toolbox.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/Toolbox.java	(revision 137)
@@ -43,16 +43,14 @@
 import java.util.logging.Level;
 
 import org.apache.commons.lang.StringUtils;
+import org.txm.ca.core.functions.CA;
 import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
-import org.txm.core.chartsengine.base.___ChartsEngine;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.functions.ca.CA;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.importer.cwb.PatchCwbRegistry;
 import org.txm.objects.Base;
 import org.txm.objects.Workspace;
+import org.txm.progression.core.functions.Progression;
 import org.txm.searchengine.cqp.AbstractCqiClient;
 import org.txm.searchengine.cqp.AbstractCqiServer;
 import org.txm.searchengine.cqp.MemCqiClient;
@@ -64,6 +62,7 @@
 import org.txm.searchengine.cqp.corpus.CorpusManager;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Partition;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.data.LexicalTable;
 import org.txm.stat.engine.r.RWorkspace;
 import org.txm.stat.engine.r.RWorkspaceException;
@@ -538,7 +537,7 @@
 			properties = props;
 
 			// FIXME: Set charts engine default properties
-			___ChartsEngine.initDefaultProperties(props);
+			//___ChartsEngine.initDefaultProperties(props);
 
 			// initialize workspace : list of corpus loaded in TXM
 			stateWorkspace = startWorkspace();
Index: tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrast.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrast.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrast.java	(revision 137)
@@ -8,9 +8,8 @@
 import java.io.UnsupportedEncodingException;
 
 import org.txm.Messages;
-import org.txm.core.chartsengine.r.__RDevice;
 import org.txm.functions.TXMResult;
-import org.txm.functions.progression.Progression;
+import org.txm.progression.core.functions.Progression;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Lexicon;
@@ -19,12 +18,10 @@
 import org.txm.searchengine.cqp.corpus.Subcorpus;
 import org.txm.stat.StatException;
 import org.txm.stat.data.LexicalTable;
-import org.txm.stat.data.Matrix;
 import org.txm.stat.data.Vector;
+import org.txm.stat.engine.r.RDevice;
 import org.txm.stat.engine.r.RWorkspace;
-import org.txm.stat.engine.r.data.DoubleMatrix;
 import org.txm.stat.engine.r.data.LexicalTableImpl;
-import org.txm.stat.engine.r.data.VectorImpl;
 
 public abstract class Contrast  implements TXMResult {
 
@@ -170,8 +167,10 @@
 	 * @param device the device
 	 * @throws StatException the stat exception
 	 */
+	// FIXME: should be manage by the charts engine
+	@Deprecated
 	public final void toSVG(File file, String[] typeNames,
-			String[] partNames, double[][] specIndex, boolean transpose, boolean drawBarPlot, boolean drawLines, __RDevice device, int BANALITE, boolean monochrome) throws StatException {
+			String[] partNames, double[][] specIndex, boolean transpose, boolean drawBarPlot, boolean drawLines, RDevice device, int BANALITE, boolean monochrome) throws StatException {
 
 		RWorkspace rw = RWorkspace.getRWorkspaceInstance();
 		try {
Index: tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrasts.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrasts.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/functions/contrasts/Contrasts.java	(revision 137)
@@ -3,8 +3,8 @@
 import java.util.ArrayList;
 
 import org.txm.Messages;
-import org.txm.functions.specificities.Chi2;
-import org.txm.functions.specificities.Specificites2;
+import org.txm.specificities.core.functions.Chi2;
+import org.txm.specificities.core.functions.Specificites2;
 import org.txm.stat.data.LexicalTable;
 
 public class Contrasts {
Index: tmp/org.txm.core/src/java/org/txm/functions/cooccurrences/Cooccurrence.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/functions/cooccurrences/Cooccurrence.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/functions/cooccurrences/Cooccurrence.java	(revision 137)
@@ -50,8 +50,6 @@
 import org.txm.functions.concordances.Line;
 import org.txm.functions.cooccurrences.comparators.CLineComparator;
 import org.txm.functions.index.Index;
-import org.txm.functions.specificities.Specificites;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.clientExceptions.UnexpectedAnswerException;
 import org.txm.searchengine.cqp.corpus.Corpus;
@@ -62,6 +60,8 @@
 import org.txm.searchengine.cqp.corpus.query.Match;
 import org.txm.searchengine.cqp.corpus.query.Query;
 import org.txm.searchengine.cqp.serverException.CqiServerError;
+import org.txm.specificities.core.functions.Specificites;
+import org.txm.specificities.core.functions.SpecificitesResult;
 import org.txm.stat.StatException;
 import org.txm.stat.data.LexicalTable;
 import org.txm.stat.engine.r.RWorkspace;
Index: tmp/org.txm.core/src/java/org/txm/stat/engine/r/RWorkspace.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/stat/engine/r/RWorkspace.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/stat/engine/r/RWorkspace.java	(revision 137)
@@ -35,17 +35,11 @@
 import java.sql.Connection;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.UUID;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.eclipse.core.net.proxy.IProxyData;
-import org.eclipse.core.net.proxy.IProxyService;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.util.tracker.ServiceTracker;
 import org.rosuda.REngine.REXP;
 import org.rosuda.REngine.REXPLogical;
 import org.rosuda.REngine.REXPMismatchException;
@@ -54,7 +48,6 @@
 import org.rosuda.REngine.Rserve.RserveException;
 import org.txm.Messages;
 import org.txm.Toolbox;
-import org.txm.core.chartsengine.r.__RDevice;
 import org.txm.searchengine.cqp.corpus.Lexicon;
 import org.txm.stat.StatException;
 import org.txm.stat.data.QuantitativeDataStructure;
@@ -62,8 +55,8 @@
 import org.txm.stat.engine.r.rcolt.RColt;
 import org.txm.stat.utils.VectorizeArray;
 import org.txm.utils.OSDetector;
-import org.txm.utils.SystemProxyDetector;
 import org.txm.utils.StreamHog;
+import org.txm.utils.SystemProxyDetector;
 import org.txm.utils.logger.Log;
 
 import cern.colt.list.DoubleArrayList;
@@ -549,7 +542,7 @@
 	}
 
 	/** The default device. */
-	private __RDevice defaultDevice = __RDevice.SVG;
+	private RDevice defaultDevice = RDevice.SVG;
 
 	/** The error logger. */
 	private StreamHog errorLogger;
@@ -1354,8 +1347,7 @@
 	 * @throws REXPMismatchException the rEXP mismatch exception
 	 * @throws StatException the stat exception
 	 */
-	public void plot(File file, String expr) throws REXPMismatchException,
-	StatException {
+	public void plot(File file, String expr) throws REXPMismatchException,	StatException {
 		plot(file, expr, defaultDevice );
 	}
 
@@ -1368,7 +1360,7 @@
 	 * @throws REXPMismatchException the rEXP mismatch exception
 	 * @throws StatException the stat exception
 	 */
-	public void plot(File file, String expr, __RDevice device)throws REXPMismatchException,
+	public void plot(File file, String expr, RDevice device)throws REXPMismatchException,
 	StatException
 	{
 		try {
@@ -1462,7 +1454,7 @@
 	 *
 	 * @param device the new default graphic device
 	 */
-	public void setDefaultGraphicDevice(__RDevice device) {
+	public void setDefaultGraphicDevice(RDevice device) {
 		this.defaultDevice = device;
 	}
 
@@ -1472,7 +1464,7 @@
 	 * @param devicename the new default graphic device
 	 */
 	public void setDefaultGraphicDevice(String devicename) {
-		__RDevice device = __RDevice.valueOf(devicename);
+		RDevice device = RDevice.valueOf(devicename);
 		if (device != null)
 			this.defaultDevice = device;
 	}
Index: tmp/org.txm.core/src/java/org/txm/stat/engine/r/RDevice.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/stat/engine/r/RDevice.java	(revision 0)
+++ tmp/org.txm.core/src/java/org/txm/stat/engine/r/RDevice.java	(revision 137)
@@ -0,0 +1,118 @@
+// Copyright © 2010-2013 ENS de Lyon.
+// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
+// Lyon 2, University of Franche-Comté, University of Nice
+// Sophia Antipolis, University of Paris 3.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// The TXM platform is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE. See the GNU General Public License for more
+// details.
+// 
+// You should have received a copy of the GNU General
+// Public License along with the TXM platform. If not, see
+// http://www.gnu.org/licenses.
+// 
+// 
+// 
+// $LastChangedDate:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.stat.engine.r;
+
+import org.txm.Toolbox;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Enum RDevice.
+ */
+// FIXME : voir le problème lié au stockage de la pref export_rdevice au niveau de la RCP qu'il faudrait renommer et amener au niveau TBX
+// FIXME : en fait non ? car l'appel du device utilise ceci : ex : svg(), postscript(), donc le device peut être différent de l'extension du fichier (file format)
+public enum RDevice {
+	
+	/** The SVG. */
+	SVG,
+	
+	/** The JPEG. */
+	JPEG,
+	
+	/** The PDF. */
+	PDF,
+	
+	/** The PNG. */
+	PNG,
+	
+	/** The PS. */
+	PS;
+
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 */
+	public String getName() {
+		if (this.name().equals("SVG")) //$NON-NLS-1$
+			return getCurrentSVGDevice(); //$NON-NLS-1$
+		else if (this.name().equals("PDF")) //$NON-NLS-1$
+			return "pdf"; //$NON-NLS-1$
+		else if (this.name().equals("PS")) //$NON-NLS-1$
+			return "postscript"; //$NON-NLS-1$
+		else if (this.name().equals("PNG")) //$NON-NLS-1$
+			return "png"; //$NON-NLS-1$
+		else if (this.name().equals("JPEG")) //$NON-NLS-1$
+			return "jpeg"; //$NON-NLS-1$
+		return "svg"; //$NON-NLS-1$
+	}
+	
+	public String getCurrentSVGDevice() {
+		String dev = Toolbox.getParam("r_svg_device");
+		if (dev == null || dev.length() == 0) dev = "svg";
+		return dev;
+	}
+	
+	/**
+	 * Gets the ext.
+	 *
+	 * @return the ext
+	 */
+	public String getExt() {
+		if (this.name().equals("SVG")) //$NON-NLS-1$
+			return ".svg"; //$NON-NLS-1$
+		else if (this.name().equals("PDF")) //$NON-NLS-1$
+			return ".pdf"; //$NON-NLS-1$
+		else if (this.name().equals("PS")) //$NON-NLS-1$
+			return ".ps"; //$NON-NLS-1$
+		else if (this.name().equals("PNG")) //$NON-NLS-1$
+			return ".png"; //$NON-NLS-1$
+		else if (this.name().equals("JPEG")) //$NON-NLS-1$
+			return ".jpeg"; //$NON-NLS-1$
+		return ".svg"; //$NON-NLS-1$
+	}
+	
+	/**
+	 * Ext2 device.
+	 *
+	 * @return the r device
+	 */
+	public RDevice ext2Device()
+	{
+		if (this.name().equals(".svg")) //$NON-NLS-1$
+			return SVG;
+		else if (this.name().equals(".pdf")) //$NON-NLS-1$
+			return PDF;
+		else if (this.name().equals(".ps")) //$NON-NLS-1$
+			return PS;
+		else if (this.name().equals(".png")) //$NON-NLS-1$
+			return PNG;
+		else if (this.name().equals(".jpeg")) //$NON-NLS-1$
+			return JPEG;
+		return SVG;
+	}
+}

Property changes on: tmp/org.txm.core/src/java/org/txm/stat/engine/r/RDevice.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/CA.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/CA.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/CA.java	(revision 137)
@@ -1,571 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate: 2014-06-10 15:10:24 +0200 (Tue, 10 Jun 2014) $
-// $LastChangedRevision: 2771 $
-// $LastChangedBy: sjacquot $ 
-//
-package org.txm.stat.engine.r.function;
-
-import java.io.File;
-import java.text.DecimalFormat;
-
-import org.rosuda.REngine.REXPMismatchException;
-import org.txm.core.chartsengine.r.__RDevice;
-import org.txm.stat.StatException;
-import org.txm.stat.data.LexicalTable;
-import org.txm.stat.engine.r.RWorkspace;
-import org.txm.stat.engine.r.RWorkspaceException;
-import org.txm.stat.engine.r.data.QuantitativeDataStructureImpl;
-import org.rosuda.REngine.REXP;
-import org.txm.Messages;
-
-// TODO: Auto-generated Javadoc
-/**
- * Access to the R implementation of the Correspondance Analysis.
- *
- * @author sloiseau, mdecorde
- */
-public class CA implements ICA{
-
-	/** The singular values. */
-	private double[] singularValues = null;
-	
-	/** The singular values2. */
-	private double[] singularValues2 = null;
-	
-	/** The rowmass. */
-	private double[] rowmass = null;
-	
-	/** The rowdist. */
-	private double[] rowdist = null;
-	
-	/** The rowinertia. */
-	private double[] rowinertia = null;
-	
-	/** The rowcos2. */
-	private double[][] rowcos2 = null;
-	
-	/** The rowcontrib. */
-	private double[][] rowcontrib = null;
-
-	/** The colmass. */
-	private double[] colmass = null;
-	
-	/** The coldist. */
-	private double[] coldist = null;
-	
-	/** The colinertia. */
-	private double[] colinertia = null;
-	
-	/** The colcos2. */
-	private double[][] colcos2 = null;
-	
-	/** The colcontrib. */
-	private double[][] colcontrib = null;
-
-	/** The rw. */
-	private final RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-	
-	/** The symbol. */
-	private final String symbol = QuantitativeDataStructureImpl.createSymbole(CA.class);
-
-	/** The rowscoords. */
-	private double[][] rowscoords;
-
-	/** The colscoords. */
-	private double[][] colscoords;
-	
-	/**
-	 * The lexical table.
-	 */
-	private LexicalTable table;
-	
-	/**
-	 * Create a correspondance analysis on the given table. The correspondance
-	 * analysis is computed as soon as the object is created.
-	 *
-	 * @param table the table
-	 * @throws StatException the stat exception
-	 */
-	public CA(LexicalTable table) throws StatException {
-
-		
-		
-		if (!rw.containsVariable(table.getSymbol())) {
-			throw new StatException(Messages.CA_0);
-		}
-
-		loadLibrary();
-		this.table = table;
-		
-		try {
-			rw.callFunctionAndAffect(
-					"ca", new String[] { table.getSymbol() }, symbol); //$NON-NLS-1$
-		} catch (RWorkspaceException e) {
-			throw new StatException(Messages.CA_2 + e.getMessage(), e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColContrib()
-	 */
-	@Override
-	public double[][] getColContrib() throws StatException {
-
-		double[][] colcoords = getColsCoords();
-		double[] sv = this.getValeursPropres();
-		double[] mass = this.getColsMass();
-
-		colcontrib = new double[colcoords.length][3];
-
-		for (int i = 0; i < colcoords.length; i++) {
-			for(int c = 0 ; c < 3 ; c++)
-			{
-				colcontrib[i][c] = 100.0 * mass[i] * (colcoords[i][c] * colcoords[i][c]) / (sv[c]);
-			}
-		}
-		return colcontrib;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColCos2()
-	 */
-	@Override
-	public double[][] getColCos2() {
-		if (colcos2 == null)
-		{
-			double[][] colcoords = getColsCoords();
-			double[] dist = getColDist();
-			colcos2 = new double[colcoords.length][3];
-
-			for (int i = 0; i < colcoords.length; i++) {
-
-				double distt = dist[i];
-
-				colcos2[i][0] = Math.pow(colcoords[i][0], 2) / distt;
-				colcos2[i][1] = Math.pow(colcoords[i][1], 2) / distt;
-				colcos2[i][2] = Math.pow(colcoords[i][2], 2) / distt;
-			}
-		}
-		return colcos2;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColDist()
-	 */
-	@Override
-	public double[] getColDist() {
-		if (coldist == null)
-		{
-			double[][] colcoords = getColsCoords();
-			coldist = new double[colcoords.length];
-			for (int i = 0; i < colcoords.length; i++)
-				for (int c = 0; c < colcoords[i].length; c++)
-					coldist[i] += Math.pow(colcoords[i][c], 2);
-		}
-		return coldist;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColsCoords()
-	 */
-	@Override
-	public double[][] getColsCoords() {
-		if (colscoords == null) {
-			try {
-				REXP exp = rw.extractItemFromListByName(symbol, "colcoord"); //$NON-NLS-1$
-				colscoords = exp.asDoubleMatrix();
-
-				// multiply coords by sv
-				this.getSingularValues();
-				for (int i = 0; i < colscoords.length; i++)
-					for (int c = 0; c < colscoords[i].length; c++)
-						colscoords[i][c] = colscoords[i][c] * singularValues[c];
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return colscoords;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols dist
-	 * @throws StatException the stat exception
-	 */
-	public double[] getColsDist() throws StatException {
-		if (coldist == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "coldist"); //$NON-NLS-1$
-				coldist = RWorkspace.toDouble(sv);
-				// Arrays.sort(coldist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return coldist;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols inertia
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getColsInertia() throws StatException {
-		if (colinertia == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "colinertia"); //$NON-NLS-1$
-				colinertia = RWorkspace.toDouble(sv);
-				// Arrays.sort(colinertia);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return colinertia;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols mass
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getColsMass() throws StatException {
-		if (colmass == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "colmass"); //$NON-NLS-1$
-				colmass = RWorkspace.toDouble(sv);
-				// Arrays.sort(colmass);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return colmass;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowContrib()
-	 */
-	@Override
-	public double[][] getRowContrib() throws StatException {
-		if (rowcontrib != null)
-			return rowcontrib;
-
-		double[][] rowcoords = getRowsCoords();
-		double[] sv = this.getValeursPropres();
-		double[] mass = this.getRowsMass();
-
-		rowcontrib = new double[rowcoords.length][3];
-
-		for (int i = 0; i < rowcoords.length; i++) {
-			for(int c = 0 ; c <3 ; c++)
-			{
-				rowcontrib[i][c] = 100.0 * mass[i] * (rowcoords[i][c] * rowcoords[i][c]) / (sv[c]);
-			}
-		}
-		return rowcontrib;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowCos2()
-	 */
-	@Override
-	public double[][] getRowCos2() {
-		if (rowcos2 == null)
-		{
-			double[][] rowcoords = getRowsCoords();
-			double[] dist = getRowDist();
-
-			rowcos2 = new double[rowcoords.length][3];
-
-			for (int i = 0; i < rowcoords.length; i++) {
-
-				double distt = dist[i];
-
-				rowcos2[i][0] = Math.pow(rowcoords[i][0], 2) / distt;
-				rowcos2[i][1] = Math.pow(rowcoords[i][1], 2) / distt;
-				rowcos2[i][2] = Math.pow(rowcoords[i][2], 2) / distt;
-			}
-		}
-		return rowcos2;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowDist()
-	 */
-	@Override
-	public double[] getRowDist() {
-		if (rowdist == null)
-		{
-			double[][] rowcoords = getRowsCoords();
-			rowdist = new double[rowcoords.length];
-			for (int i = 0; i < rowcoords.length; i++)
-				for (int c = 0; c < rowcoords[i].length; c++)
-					rowdist[i] += Math.pow(rowcoords[i][c], 2);
-		}
-		return rowdist;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowsCoords()
-	 */
-	@Override
-	public double[][] getRowsCoords() {
-		if (rowscoords == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "rowcoord"); //$NON-NLS-1$
-				rowscoords = sv.asDoubleMatrix();
-
-				this.getSingularValues();
-				for (int i = 0; i < rowscoords.length; i++)
-					for (int c = 0; c < rowscoords[i].length; c++)
-						rowscoords[i][c] = rowscoords[i][c] * singularValues[c];
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return rowscoords;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows dist
-	 * @throws StatException the stat exception
-	 */
-	public double[] getRowsDist() throws StatException {
-		if (rowdist == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "rowdist"); //$NON-NLS-1$
-				rowdist = RWorkspace.toDouble(sv);
-				// Arrays.sort(rowdist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return rowdist;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows inertia
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getRowsInertia() throws StatException {
-		if (rowinertia == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "rowinertia"); //$NON-NLS-1$
-				rowinertia = RWorkspace.toDouble(sv);
-				// Arrays.sort(rowinertia);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return rowinertia;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows mass
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getRowsMass() throws StatException {
-		if (rowmass == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "rowmass"); //$NON-NLS-1$
-				rowmass = RWorkspace.toDouble(sv);
-				// Arrays.sort(rowmass);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return rowmass;
-	}
-
-	/**
-	 * Get the singular values.
-	 *
-	 * @return the singular values
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getSingularValues() throws StatException {
-		if (singularValues == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "sv"); //$NON-NLS-1$
-				singularValues = RWorkspace.toDouble(sv);
-				// Arrays.sort(singularValues);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return singularValues;
-	}
-	
-	/**
-	 * Gets the valeurs propres.
-	 *
-	 * @return the singular valeurs pow 2
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getValeursPropres() throws StatException {
-		if (singularValues2 == null) {
-			getSingularValues();
-			singularValues2 = new double[singularValues.length];
-			for(int i = 0 ; i < singularValues.length ; i++)
-				singularValues2[i] = Math.pow(singularValues[i], 2);
-		}
-		return singularValues2;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getSymbol()
-	 */
-	@Override
-	public String getSymbol() {
-		return symbol;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#loadLibrary()
-	 */
-	@Override
-	public boolean loadLibrary() {
-		try {
-			rw.voidEval("library(ca)"); //$NON-NLS-1$
-		} catch (RWorkspaceException e) {
-			System.out.println(Messages.CA_16 + e);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param showIndividual the show individual
-	 * @param showVariable the show variable
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showIndividual,
-			boolean showVariable, String colfilter, String rowfilter, float cex) throws StatException {
-		toSVGFactorialMap(file, showIndividual, showVariable, 1, 2, __RDevice.SVG, colfilter, rowfilter, cex);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#toSVGFactorialMap(java.io.File, boolean, boolean, int, int)
-	 */
-	@Override
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showCol,
-			boolean showLine, int firstdim, int seconddim, __RDevice device, String colfilter, String rowfilter, float cex)
-	throws StatException {
-		try {
-			double[] sv = this.getValeursPropres();
-			double tot = 0;
-			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			for (int i = 0; i < sv.length; i++)
-				tot += (sv[i]);
-			
-			double inertie1 = (((sv[firstdim - 1] * sv[firstdim - 1]) / tot) * 100.0);
-			double inertie2 = (((sv[seconddim - 1] * sv[seconddim - 1]) / tot) * 100.0);
-			String contrib1 = "axis(" + firstdim + "): inertia=" + f.format(inertie1) + "%"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String contrib2 = "axis(" + seconddim + "): inertia=" + f.format(inertie2) + "%"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			String cmd = "plot(" + symbol + ", dim=c(" + firstdim + ", " + seconddim + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			cmd += ", what=c(" + (showLine ? "\"all\"" : "\"none\"") + ", " + (showCol ? "\"all\"" : "\"none\"") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
-			// cmd +=
-			// ", mass = c(TRUE, TRUE), contrib = c(\"relative\", \"relative\")";
-			cmd += ", col = c(\"#0000FF\", \"#FF0000\")"; //$NON-NLS-1$
-			cmd += ", cex=.5);"; //$NON-NLS-1$
-			cmd += "mtext(\"" + contrib1 + "\", side = 1, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-			cmd += "mtext(\"" + contrib2 + "\", side = 2, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-			rw.plot(file, cmd, device);
-		} catch (REXPMismatchException e) {
-			throw new StatException(e);
-		}
-	}
-
-	/**
-	 * Draw in the given file a barplot of the singular values in SVG format.
-	 *
-	 * @param file the file
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	@Deprecated
-	public void toSVGSingularValues(File file) throws StatException {
-		try {
-			rw.plot(file, "barplot(" + symbol + "$sv)", __RDevice.SVG); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (REXPMismatchException e) {
-			throw new StatException(e);
-		}
-	}
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param encoding the encoding
-	 * @param colseparator the colseparator
-	 * @param txtseparator the txtseparator
-	 * @return true, if successful
-	 */
-	@Override
-	public boolean toTxt(File file, String encoding, String colseparator, String txtseparator) {
-		try {
-			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-			rw.eval("sink(file=\"" + file.getAbsolutePath().replace("\\", "\\\\")+"\")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			rw.eval("print("+symbol+")"); //$NON-NLS-1$ //$NON-NLS-2$
-			rw.eval("sink()"); //$NON-NLS-1$
-		} catch (StatException e) {
-			org.txm.utils.logger.Log.printStackTrace(e);
-			return false;
-		}
-		return true;
-	}
-
-	@Override
-	public int getRowsCount() {
-		return this.table.getRowsCount();
-	}
-
-	@Override
-	public int getColumnsCount() {
-		return this.table.getColumnsCount();
-	}
-}
Index: tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/FactoMineRCA.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/FactoMineRCA.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/FactoMineRCA.java	(revision 137)
@@ -1,607 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.stat.engine.r.function;
-
-import java.io.File;
-import java.util.Arrays;
-
-import org.rosuda.REngine.REXPMismatchException;
-import org.txm.core.chartsengine.r.__RDevice;
-import org.txm.stat.StatException;
-import org.txm.stat.data.LexicalTable;
-import org.txm.stat.engine.r.RWorkspace;
-import org.txm.stat.engine.r.RWorkspaceException;
-import org.txm.stat.engine.r.data.QuantitativeDataStructureImpl;
-import org.rosuda.REngine.REXP;
-import org.txm.Messages;
-
-// TODO: Auto-generated Javadoc
-/**
- * Access to the R implementation of the Correspondance Analysis.
- *
- * @author mdecorde
- */
-public class FactoMineRCA implements ICA {
-
-	/** The singular values. */
-	private double[] valeursPropres = null;
-	
-	/** The singular values2. */
-	private double[] singularValues = null;
-
-	/** The rowmass. */
-	private double[] rowmass = null;
-	
-	/** The rowdist. */
-	private double[] rowdist = null;
-	
-	/** The rowinertia. */
-	private double[] rowinertia = null;
-	
-	/** The colmass. */
-	private double[] colmass = null;
-	
-	/** The coldist. */
-	private double[] coldist = null;
-	
-	/** The colinertia. */
-	private double[] colinertia = null;
-
-	/** The rowcos2. */
-	private double[][] rowcos2 = null;
-	
-	/** The rowcontrib. */
-	private double[][] rowcontrib = null;
-	
-	/** The colcos2. */
-	private double[][] colcos2 = null;
-	
-	/** The colcontrib. */
-	private double[][] colcontrib = null;
-
-	/** The rw. */
-	private final RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-	
-	/** The symbol. */
-	private final String symbol = QuantitativeDataStructureImpl.createSymbole(FactoMineRCA.class);
-
-	/** The rowscoords. */
-	private double[][] rowscoords;
-
-	/** The colscoords. */
-	private double[][] colscoords;
-
-	private LexicalTable table;
-	
-	/**
-	 * Create a correspondance analysis on the given table. The correspondance
-	 * analysis is computed as soon as the object is created.
-	 *
-	 * @param table the table
-	 * @throws StatException the stat exception
-	 */
-	public FactoMineRCA(LexicalTable table) throws StatException {
-
-		if (!rw.containsVariable(table.getSymbol())) {
-			throw new StatException(Messages.CA_0);
-		}
-
-		loadLibrary();
-
-		this.table = table;
-		try {
-			//rw.callFunctionAndAffect("FactoMineR:CA", new String[] { table.getSymbol() }, symbol); //$NON-NLS-1$
-			rw.eval(symbol+" <- FactoMineR::CA("+table.getSymbol()+", graph=FALSE)"); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (RWorkspaceException e) {
-			throw new StatException(Messages.CA_2 + e.getMessage(), e);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColContrib()
-	 */
-	@Override
-	public double[][] getColContrib() throws StatException {
-		if (colcontrib == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "col$contrib"); //$NON-NLS-1$
-				colcontrib = sv.asDoubleMatrix();
-				// Arrays.sort(rowdist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.FactoMineRCA_2 + e.getMessage(), e);
-			} catch (REXPMismatchException e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return colcontrib;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColCos2()
-	 */
-	@Override
-	public double[][] getColCos2() throws StatException {
-		if (colcos2 == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "col$cos2"); //$NON-NLS-1$
-				colcos2 = sv.asDoubleMatrix();
-				// Arrays.sort(rowdist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.FactoMineRCA_3 + e.getMessage(), e);
-			} catch (REXPMismatchException e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return colcos2;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the col dist
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getColDist() throws StatException {
-		if (coldist == null) 
-		{
-			double[][] colcoords = getColsCoords();
-			coldist = new double[colcoords.length];
-			for (int i = 0; i < colcoords.length; i++)
-				for (int c = 0; c < colcoords[i].length; c++)
-					coldist[i] += Math.pow(colcoords[i][c], 2);
-		}
-		return coldist;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getColsCoords()
-	 */
-	@Override
-	public double[][] getColsCoords() {
-		if (colscoords == null) {
-			try {
-				REXP exp = rw.extractItemFromListByName(symbol, "col$coord"); //$NON-NLS-1$
-				colscoords = exp.asDoubleMatrix();
-
-				//System.out.println("Avant:");
-//				for (int i = 0; i < colscoords.length; i++)
-//				{
-//					for (int c = 0; c < colscoords[i].length; c++)
-//					{
-//						System.out.println(" "+colscoords[i][c]);
-//					}
-//					System.out.println();
-//				}
-				
-				// multiply coords by sv
-//				this.getSingularValues();
-//				for (int i = 0; i < colscoords.length; i++)
-//					for (int c = 0; c < colscoords[i].length; c++)
-//						colscoords[i][c] = colscoords[i][c] * singularValues[c];
-//				
-//				System.out.println("Apres:");
-//				for (int i = 0; i < colscoords.length; i++)
-//				{
-//					for (int c = 0; c < colscoords[i].length; c++)
-//					{
-//						System.out.println(" "+colscoords[i][c]);
-//					}
-//					System.out.println();
-//				}
-						
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return colscoords;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols inertia
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getColsInertia() throws StatException {
-		if (colinertia == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "col$contrib"); //$NON-NLS-1$
-				colinertia = RWorkspace.toDouble(sv);
-				// Arrays.sort(colinertia);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return colinertia;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols mass
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getColsMass() throws StatException {
-		if (colmass == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "call$marge.col"); //$NON-NLS-1$
-				colmass = RWorkspace.toDouble(sv);
-				// Arrays.sort(colmass);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return colmass;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowContrib()
-	 */
-	@Override
-	public double[][] getRowContrib() throws StatException {
-		//System.out.println("FACTO: getRowContrib");
-		if (rowcontrib == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "row$contrib"); //$NON-NLS-1$
-				rowcontrib = sv.asDoubleMatrix();
-				for (int i = 0 ; i < rowcontrib.length ; i++)
-					for (int j = 0 ; j < rowcontrib[i].length ; j++)
-						rowcontrib[i][j] = rowcontrib[i][j] / 100.0; 
-				// Arrays.sort(rowdist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.FactoMineRCA_4 + e.getMessage(), e);
-			} catch (REXPMismatchException e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return rowcontrib;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowCos2()
-	 */
-	@Override
-	public double[][] getRowCos2() throws StatException {
-		if (rowcos2 == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "row$cos2"); //$NON-NLS-1$
-				rowcos2 = sv.asDoubleMatrix();
-				// Arrays.sort(rowdist);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.FactoMineRCA_5 + e.getMessage(), e);
-			} catch (REXPMismatchException e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return rowcos2;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the row dist
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getRowDist() throws StatException {
-		if (rowdist == null)
-		{
-			double[][] rowcoords = getRowsCoords();
-			rowdist = new double[rowcoords.length];
-			for (int i = 0; i < rowcoords.length; i++)
-				for (int c = 0; c < rowcoords[i].length; c++)
-					rowdist[i] += Math.pow(rowcoords[i][c], 2);
-		}
-		return rowdist;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getRowsCoords()
-	 */
-	@Override
-	public double[][] getRowsCoords() {
-		if (rowscoords == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "row$coord"); //$NON-NLS-1$
-				rowscoords = sv.asDoubleMatrix();
-				
-//				this.getSingularValues();
-//				//System.out.println("Apres:");
-//				for (int i = 0; i < rowscoords.length; i++)
-//				{
-//					for (int c = 0; c < rowscoords[i].length; c++)
-//					{
-//						rowscoords[i][c] = rowscoords[i][c] * singularValues[c];
-//				//		System.out.println(" "+rowscoords[i][c]);
-//					}
-//					//System.out.println();
-//				}
-						
-			} catch (Exception e) {
-				// TODO Auto-generated catch block
-				org.txm.utils.logger.Log.printStackTrace(e);
-			}
-		}
-		return rowscoords;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows inertia
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getRowsInertia() throws StatException {
-		if (rowinertia == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "row$contrib"); //$NON-NLS-1$
-				rowinertia = RWorkspace.toDouble(sv);
-				// Arrays.sort(rowinertia);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return rowinertia;
-	}
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows mass
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getRowsMass() throws StatException {
-		if (rowmass == null) {
-			try {
-				REXP sv = rw.extractItemFromListByName(symbol, "call$marge.row"); //$NON-NLS-1$
-				rowmass = RWorkspace.toDouble(sv);
-				// Arrays.sort(rowmass);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return rowmass;
-	}
-
-	/**
-	 * Get the singular values.
-	 *
-	 * @return the singular values
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getSingularValues() throws StatException {
-		if (singularValues == null) {
-			getValeursPropres();
-			singularValues = new double[valeursPropres.length];
-			for(int i = 0 ; i < valeursPropres.length ; i++)
-				singularValues[i] = Math.pow(valeursPropres[i], 0.5);
-		}
-		return singularValues;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#getSymbol()
-	 */
-	@Override
-	public String getSymbol() {
-		return symbol;
-	}
-
-	/**
-	 * Gets the valeurs propres.
-	 *
-	 * @return the singular values pow 2
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	public double[] getValeursPropres() throws StatException {
-		if (valeursPropres == null) {
-			try {
-				REXP sv = rw.eval(symbol+"$eig$eigenvalue"); //$NON-NLS-1$
-				valeursPropres = RWorkspace.toDouble(sv);
-				// remove last singular value
-				if (valeursPropres.length == table.getNColumns())
-					valeursPropres = Arrays.copyOfRange(valeursPropres, 0, valeursPropres.length -1);
-				// Arrays.sort(singularValues);
-			} catch (RWorkspaceException e) {
-				throw new StatException(Messages.CA_4 + e.getMessage(), e);
-			}
-		}
-		return valeursPropres;
-		
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#loadLibrary()
-	 */
-	@Override
-	public boolean loadLibrary(){
-		try {
-			rw.voidEval("library(FactoMineR)"); //$NON-NLS-1$
-		} catch (RWorkspaceException e) {
-			System.out.println(Messages.CA_16+ e);
-			return false;
-		}
-		return true;
-	}
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param showIndividual the show individual
-	 * @param showVariable the show variable
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showIndividual,
-			boolean showVariable, String colfilter, String rowfilter, float cex) throws StatException {
-		toSVGFactorialMap(file, showIndividual, showVariable, 1, 2, __RDevice.SVG, colfilter, rowfilter, cex);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.txm.stat.engine.r.function.ICA#toSVGFactorialMap(java.io.File, boolean, boolean, int, int)
-	 */
-	@Override
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showCol,
-			boolean showLine, int firstdim, int seconddim, __RDevice device, String colfilter, String rowfilter, float cex)
-	throws StatException {
-		try {
-			/*double[] sv = this.getSingularValues();
-			double tot = 0;
-			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			for (int i = 0; i < sv.length; i++)
-				tot += (sv[i] * sv[i]);
-				
-			String cmd = "plot(" + symbol + ", dim=c(" + firstdim + ", " + seconddim + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			cmd += ", what=c(" + (showLine ? "\"all\"" : "\"none\"") + ", " + (showCol ? "\"all\"" : "\"none\"") + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
-			// cmd +=
-			// ", mass = c(TRUE, TRUE), contrib = c(\"relative\", \"relative\")";
-			cmd += ", col = c(\"#0000FF\", \"#FF0000\")"; //$NON-NLS-1$
-			cmd += ");"; //$NON-NLS-1$
-			cmd += "mtext(\"" + contrib1 + "\", side = 1, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-			cmd += "mtext(\"" + contrib2 + "\", side = 2, line = 2);"; //$NON-NLS-1$ //$NON-NLS-2$
-			 */
-			
-			String label = ""; //$NON-NLS-1$
-			String invisible = ""; //$NON-NLS-1$
-			if (showCol)
-				label +=", \"col\""; //$NON-NLS-1$
-			else
-				invisible +=", \"col\""; //$NON-NLS-1$
-			
-			if (showLine)
-				label +=", \"row\""; //$NON-NLS-1$
-			else
-				invisible +=", \"row\""; //$NON-NLS-1$
-			
-			if (label.length() > 0)
-				label = "c("+label.substring(1)+")"; //$NON-NLS-1$ //$NON-NLS-2$
-			else
-				label = "c(\"all\")"; //$NON-NLS-1$
-			
-			if (invisible.length() > 0)
-				invisible = "c("+invisible.substring(1)+")"; //$NON-NLS-1$ //$NON-NLS-2$
-			else
-				invisible = "c()"; //$NON-NLS-1$
-			
-			String axes = "c(" + firstdim + ", " + seconddim + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			
-			String filter = ", shadow=FALSE, selectCol=\""+colfilter+"\", selectRow=\""+rowfilter+"\"";
-			//String cex = ".6";
-			
-			rw.plot(file, "plot.CA("+symbol+", label="+label+", invisible="+invisible+", axes="+axes+", title=\"\", cex="+cex+""+filter+")", device); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		} catch (REXPMismatchException e) {
-			throw new StatException(e);
-		}
-	}
-
-	/**
-	 * Draw in the given file a barplot of the singular values in SVG format.a
-	 *
-	 * @param file the file
-	 * @throws StatException the stat exception
-	 */
-	@Override
-	@Deprecated
-	public void toSVGSingularValues(File file) throws StatException {
-		try {
-			rw.plot(file, "barplot(" + symbol + "$eig$eigenvalue)", __RDevice.SVG); //$NON-NLS-1$ //$NON-NLS-2$
-		} catch (REXPMismatchException e) {
-			throw new StatException(e);
-		}
-	}
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param encoding the encoding
-	 * @param colseparator the colseparator
-	 * @param txtseparator the txtseparator
-	 * @return true, if successful
-	 */
-	@Override
-	public boolean toTxt(File file, String encoding, String colseparator, String txtseparator) {
-		try {
-			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-			rw.eval("sink(file=\"" + file.getAbsolutePath().replace("\\", "\\\\")+"\")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			rw.eval("print("+symbol+")"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$eig)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$col)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$col$coord)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$col$cos2)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$col$contrib)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$row)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$row$coord)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$row$cos2)"); //$NON-NLS-1$ //$NON-NLS-2$
-			
-			rw.eval("print("+symbol+"$row$contrib)"); //$NON-NLS-1$ //$NON-NLS-2$
-//			rw.eval("print("+symbol+"$call)"); //$NON-NLS-1$ //$NON-NLS-2$
-//			rw.eval("print("+symbol+"$call$marge.col)"); //$NON-NLS-1$ //$NON-NLS-2$
-//			rw.eval("print("+symbol+"$call$marge.row)"); //$NON-NLS-1$ //$NON-NLS-2$
-			rw.eval("sink()"); //$NON-NLS-1$
-		} catch (StatException e) {
-			org.txm.utils.logger.Log.printStackTrace(e);
-			return false;
-		}
-		return true;
-	}
-	
-	
-	@Override
-	public int getRowsCount() {
-		return this.table.getRowsCount();
-	}
-
-	@Override
-	public int getColumnsCount() {
-		return this.table.getColumnsCount();
-	}
-}
Index: tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/ICA.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/ICA.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/stat/engine/r/function/ICA.java	(revision 137)
@@ -1,225 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.stat.engine.r.function;
-
-import java.io.File;
-
-import org.txm.core.chartsengine.r.__RDevice;
-import org.txm.stat.StatException;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Interface ICA.
- */
-public interface ICA {
-	
-	/**
-	 * Gets the col contrib.
-	 *
-	 * @return the col contrib
-	 * @throws StatException the stat exception
-	 */
-	public double[][] getColContrib() throws StatException;
-
-	/**
-	 * Gets the col cos2.
-	 *
-	 * @return the col cos2
-	 * @throws StatException the stat exception
-	 */
-	public double[][] getColCos2() throws StatException;
-
-	/**
-	 * Gets the col dist.
-	 *
-	 * @return the col dist
-	 * @throws StatException the stat exception
-	 */
-	public double[] getColDist() throws StatException;
-
-	/**
-	 * Gets the cols coords.
-	 *
-	 * @return the cols coords
-	 */
-	public double[][] getColsCoords();
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols inertia
-	 * @throws StatException the stat exception
-	 */
-	public double[] getColsInertia() throws StatException;
-
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the cols mass
-	 * @throws StatException the stat exception
-	 */
-	public double[] getColsMass() throws StatException;
-
-	/**
-	 * Gets the row contrib.
-	 *
-	 * @return the row contrib
-	 * @throws StatException the stat exception
-	 */
-	public double[][] getRowContrib() throws StatException;
-
-	/**
-	 * Gets the row cos2.
-	 *
-	 * @return the row cos2
-	 * @throws StatException the stat exception
-	 */
-	public double[][] getRowCos2() throws StatException;
-	
-	/**
-	 * Gets the row dist.
-	 *
-	 * @return the row dist
-	 * @throws StatException the stat exception
-	 */
-	public double[] getRowDist() throws StatException;
-	
-	/**
-	 * Gets the rows coords.
-	 *
-	 * @return the rows coords
-	 */
-	public double[][] getRowsCoords();
-	
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows inertia
-	 * @throws StatException the stat exception
-	 */
-	public double[] getRowsInertia() throws StatException;
-	
-	/**
-	 * Get the rows mass.
-	 *
-	 * @return the rows mass
-	 * @throws StatException the stat exception
-	 */
-	public double[] getRowsMass() throws StatException;
-	
-	/**
-	 * Get the singular values.
-	 *
-	 * @return the singular values
-	 * @throws StatException the stat exception
-	 */
-	public double[] getSingularValues() throws StatException;
-	
-	
-	/**
-	 * Gets the number of rows.
-	 * @return the number of rows
-	 */
-	public int getRowsCount();
-
-	
-	/**
-	 * Gets the number of columns.
-	 * @return the number of columns
-	 */
-	public int getColumnsCount();
-
-	
-	/**
-	 * Gets the symbol.
-	 *
-	 * @return the symbol
-	 */
-	public String getSymbol();
-
-	/**
-	 * Gets the valeurs propres.
-	 *
-	 * @return the valeurs propres
-	 * @throws StatException the stat exception
-	 */
-	public double[] getValeursPropres() throws StatException;
-
-	/**
-	 * Load library.
-	 *
-	 * @return true, if successful
-	 */
-	public boolean loadLibrary();
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param showIndividual the show individual
-	 * @param showVariable the show variable
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showIndividual,
-			boolean showVariable, String colfilter, String rowfilter, float cex) throws StatException;
-
-	/**
-	 * To svg factorial map.
-	 *
-	 * @param file the file
-	 * @param showCol the show col
-	 * @param showLine the show line
-	 * @param firstdim the firstdim
-	 * @param seconddim the seconddim
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	public void toSVGFactorialMap(File file, boolean showCol,
-			boolean showLine, int firstdim, int seconddim, __RDevice device, String colfilter, String rowfilter, float cex) throws StatException;
-
-	/**
-	 * Draw in the given file a barplot of the singular values in SVG format.
-	 *
-	 * @param file the file
-	 * @throws StatException the stat exception
-	 */
-	@Deprecated
-	public void toSVGSingularValues(File file) throws StatException;
-
-	/**
-	 * Draw in the given file a plot of the factorial map.
-	 *
-	 * @param file the file
-	 * @param encoding the encoding
-	 * @param colseparator the colseparator
-	 * @param txtseparator the txtseparator
-	 * @return true, if successful
-	 */
-	public boolean toTxt(File file, String encoding, String colseparator, String txtseparator);
-}
Index: tmp/org.txm.core/src/java/org/txm/Messages.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/Messages.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/Messages.java	(revision 137)
@@ -1,7 +1,7 @@
 package org.txm;
 
 import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMMessages;
+import org.txm.core.messages.TXMCoreMessages;
 
 /**
  * The keys of all messages in the Toolbox
@@ -558,7 +558,7 @@
 
 	static {
 		// initialize resource bundle
-		TXMMessages.initializeMessages(BUNDLE_NAME, Messages.class);
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, Messages.class);
 		//NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
 
Index: tmp/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java	(revision 137)
@@ -41,6 +41,7 @@
 	public static final String[] alternativeNodesQualifiers = new String[]{ChartsEnginePreferences.PREFERENCES_NODE};
 	
 	
+	
 	/**
 	 * 
 	 * @param result
Index: tmp/org.txm.core/src/java/org/txm/core/messages/TXMMessages.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/messages/TXMMessages.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/messages/TXMMessages.java	(revision 137)
@@ -1,44 +0,0 @@
-package org.txm.core.messages;
-
-import java.lang.reflect.Field;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Class that manages UTF-8 encoding for .properties messages files.
- * @author sjacquot
- *
- */
-public class TXMMessages {
-
-	
-	
-	/**
-	 * Initializes messages using UTF-8 encoding.
-	 * @param baseName
-	 * @param clazz
-	 */
-	public static void initializeMessages(final String baseName, final Class<?> clazz) {
-		// initialize resource bundle
-		NLS.initializeMessages(baseName, clazz);
-
-		// reencode the fields
-		final Field[] fieldArray = clazz.getDeclaredFields();
-		final int len = fieldArray.length;
-		for(int i = 0; i < len; i++) {
-			final Field field = (Field) fieldArray[i];
-			if(field.getType() == java.lang.String.class) {
-				if(!field.isAccessible())
-					field.setAccessible(true);
-				try {
-					final String rawValue = (String) field.get(null);
-					field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8"));
-				}
-				catch(Exception e) {
-				//	e.printStackTrace();
-				}
-			}
-		}
-	}
-	
-	
-}
Index: tmp/org.txm.core/src/java/org/txm/core/messages/TXMCoreMessages.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/messages/TXMCoreMessages.java	(revision 0)
+++ tmp/org.txm.core/src/java/org/txm/core/messages/TXMCoreMessages.java	(revision 137)
@@ -0,0 +1,44 @@
+package org.txm.core.messages;
+
+import java.lang.reflect.Field;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Class that manages UTF-8 encoding for .properties messages files.
+ * @author sjacquot
+ *
+ */
+public class TXMCoreMessages {
+
+	
+	
+	/**
+	 * Initializes messages using UTF-8 encoding.
+	 * @param baseName
+	 * @param clazz
+	 */
+	public static void initializeMessages(final String baseName, final Class<?> clazz) {
+		// initialize resource bundle
+		NLS.initializeMessages(baseName, clazz);
+
+		// reencode the fields
+		final Field[] fieldArray = clazz.getDeclaredFields();
+		final int len = fieldArray.length;
+		for(int i = 0; i < len; i++) {
+			final Field field = (Field) fieldArray[i];
+			if(field.getType() == java.lang.String.class) {
+				if(!field.isAccessible())
+					field.setAccessible(true);
+				try {
+					final String rawValue = (String) field.get(null);
+					field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8"));
+				}
+				catch(Exception e) {
+				//	e.printStackTrace();
+				}
+			}
+		}
+	}
+	
+	
+}

Property changes on: tmp/org.txm.core/src/java/org/txm/core/messages/TXMCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/__RDevice.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/__RDevice.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/__RDevice.java	(revision 137)
@@ -1,118 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate:$
-// $LastChangedRevision:$
-// $LastChangedBy:$ 
-//
-package org.txm.core.chartsengine.r;
-
-import org.txm.Toolbox;
-
-// TODO: Auto-generated Javadoc
-/**
- * The Enum RDevice.
- */
-// FIXME : voir le problème lié au stockage de la pref export_rdevice au niveau de la RCP qu'il faudrait renommer et amener au niveau TBX
-// FIXME : en fait non ? car l'appel du device utilise ceci : ex : svg(), postscript(), donc le device peut être différent de l'extension du fichier (file format)
-public enum __RDevice {
-	
-	/** The SVG. */
-	SVG,
-	
-	/** The JPEG. */
-	JPEG,
-	
-	/** The PDF. */
-	PDF,
-	
-	/** The PNG. */
-	PNG,
-	
-	/** The PS. */
-	PS;
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 */
-	public String getName() {
-		if (this.name().equals("SVG")) //$NON-NLS-1$
-			return getCurrentSVGDevice(); //$NON-NLS-1$
-		else if (this.name().equals("PDF")) //$NON-NLS-1$
-			return "pdf"; //$NON-NLS-1$
-		else if (this.name().equals("PS")) //$NON-NLS-1$
-			return "postscript"; //$NON-NLS-1$
-		else if (this.name().equals("PNG")) //$NON-NLS-1$
-			return "png"; //$NON-NLS-1$
-		else if (this.name().equals("JPEG")) //$NON-NLS-1$
-			return "jpeg"; //$NON-NLS-1$
-		return "svg"; //$NON-NLS-1$
-	}
-	
-	public String getCurrentSVGDevice() {
-		String dev = Toolbox.getParam("r_svg_device");
-		if (dev == null || dev.length() == 0) dev = "svg";
-		return dev;
-	}
-	
-	/**
-	 * Gets the ext.
-	 *
-	 * @return the ext
-	 */
-	public String getExt() {
-		if (this.name().equals("SVG")) //$NON-NLS-1$
-			return ".svg"; //$NON-NLS-1$
-		else if (this.name().equals("PDF")) //$NON-NLS-1$
-			return ".pdf"; //$NON-NLS-1$
-		else if (this.name().equals("PS")) //$NON-NLS-1$
-			return ".ps"; //$NON-NLS-1$
-		else if (this.name().equals("PNG")) //$NON-NLS-1$
-			return ".png"; //$NON-NLS-1$
-		else if (this.name().equals("JPEG")) //$NON-NLS-1$
-			return ".jpeg"; //$NON-NLS-1$
-		return ".svg"; //$NON-NLS-1$
-	}
-	
-	/**
-	 * Ext2 device.
-	 *
-	 * @return the r device
-	 */
-	public __RDevice ext2Device()
-	{
-		if (this.name().equals(".svg")) //$NON-NLS-1$
-			return SVG;
-		else if (this.name().equals(".pdf")) //$NON-NLS-1$
-			return PDF;
-		else if (this.name().equals(".ps")) //$NON-NLS-1$
-			return PS;
-		else if (this.name().equals(".png")) //$NON-NLS-1$
-			return PNG;
-		else if (this.name().equals(".jpeg")) //$NON-NLS-1$
-			return JPEG;
-		return SVG;
-	}
-}
Index: tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/___RChartsEngine.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/___RChartsEngine.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/chartsengine/r/___RChartsEngine.java	(revision 137)
@@ -5,25 +5,18 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.lang.StringEscapeUtils;
 import org.rosuda.REngine.REXPMismatchException;
+import org.txm.ca.core.functions.CA;
+import org.txm.ca.core.statsengine.r.functions.FactoMineRCA;
+import org.txm.cah.core.functions.CAH;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.core.chartsengine.base.___ChartsEngine;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.core.chartsengine.r.messages.RChartsEngineMessages;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.stat.StatException;
-import org.txm.stat.data.Matrix;
-import org.txm.stat.data.Vector;
+import org.txm.stat.engine.r.RDevice;
 import org.txm.stat.engine.r.RWorkspace;
 import org.txm.stat.engine.r.RWorkspaceException;
-import org.txm.stat.engine.r.data.DoubleMatrix;
-import org.txm.stat.engine.r.data.VectorImpl;
-import org.txm.stat.engine.r.function.FactoMineRCA;
 import org.txm.utils.logger.Log;
 
 /**
@@ -69,7 +62,7 @@
 	/**
 	 * The charts engine description.
 	 */
-	public final static String DESCRIPTION = RChartsEngineMessages.RChartsEngine_ENGINE_DESCRIPTION;
+	public final static String DESCRIPTION = "R";
 
 
 	/**
@@ -82,7 +75,7 @@
 	/**
 	 * The R device to use for generating charts.
 	 */
-	protected __RDevice rDevice;
+	protected RDevice rDevice;
 
 
 	/**
@@ -173,7 +166,7 @@
 			RWorkspace.getRWorkspaceInstance().plot(destFile, "plot.CA("+ ca.getSymbol() +", label=" + label + ", invisible=" + invisible + ", axes=" + axes + ", title=\"" + title + "\", cex=.8)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 		}
 		catch(Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
+			Log.severe(ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
 		}
 
 		return destFile;
@@ -216,7 +209,7 @@
 			RWorkspace.getRWorkspaceInstance().plot(destFile, cmd, this.rDevice);
 		}
 		catch(Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
+			Log.severe(ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_CA_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
 		}
 
 		return destFile;
@@ -260,20 +253,20 @@
 				if(i > 0)	 {
 					xLabels.append(", "); //$NON-NLS-1$
 				}
-				xLabels.append("\"" + ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + (i + 1) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
+				xLabels.append("\"" + ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + (i + 1) + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			xLabels.append(")"); //$NON-NLS-1$
 
 			String cmd = "tmpY <- " + ca.getSymbol() + "$eig$eigenvalue[1:length(" + ca.getSymbol() + "$eig$eigenvalue) - 1];\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			cmd += "barplot(tmpY, main=\"" //$NON-NLS-1$
-					+ ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE + "\", ylab=\"" + //$NON-NLS-1$
-					ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL + "\", xlab=\"" + //$NON-NLS-1$
-					ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL + "\", names.arg=" + xLabels + ");\n"; //$NON-NLS-1$ //$NON-NLS-2$
+					+ ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE + "\", ylab=\"" + //$NON-NLS-1$
+					ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL + "\", xlab=\"" + //$NON-NLS-1$
+					ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL + "\", names.arg=" + xLabels + ");\n"; //$NON-NLS-1$ //$NON-NLS-2$
 
 			RWorkspace.getRWorkspaceInstance().plot(file, cmd, this.rDevice);
 		}
 		catch (Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
+			Log.severe(ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - FactoMineR package", DESCRIPTION) + e); //$NON-NLS-1$
 		}
 
 		return file;
@@ -291,7 +284,7 @@
 			RWorkspace.getRWorkspaceInstance().plot(file, "barplot(" +  ca.getSymbol() + "$sv)", this.rDevice); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		catch (Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
+			Log.severe(ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_CA_SINGULAR_VALUES_FILE_CHART + " - CA package", DESCRIPTION) + e); //$NON-NLS-1$
 		}
 
 		return file;
@@ -349,7 +342,7 @@
 			// Create chart title
 			String title = this.createPartitionDimensionsChartTitle(partition, sortPartsBySize);
 
-			String ylab = ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
+			String ylab = ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
 
 			String cmd = "barplot("+ssizes+", names.arg="+snames+ //$NON-NLS-1$ //$NON-NLS-2$
 					", main=\""+title+"\", horiz=F, las=2, ylab=\""+ylab+"\")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -357,7 +350,7 @@
 			r.plot(file, cmd, this.rDevice);
 		}
 		catch(Exception e) {
-			Log.severe(ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, DESCRIPTION) + e);
+			Log.severe(ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, DESCRIPTION) + e);
 		}
 
 		return file;
@@ -709,7 +702,7 @@
 	 * Gets the current R device.
 	 * @return the rDevice
 	 */
-	public __RDevice getRDevice() {
+	public RDevice getRDevice() {
 		return rDevice;
 	}
 
@@ -718,7 +711,7 @@
 	 * Sets the R Device to use for generating charts.
 	 * @param rDevice the rDevice to set
 	 */
-	public void setRDevice(__RDevice rDevice) {
+	public void setRDevice(RDevice rDevice) {
 		this.rDevice = rDevice;
 	}
 
@@ -730,19 +723,19 @@
 
 		// FIXME : voir comment gérer cela autrement + supprimer certaines méthodes du RDevice devenues inutiles depuis qu'on stocke outputFormat ?
 		if(outputFormat == ___ChartsEngine.OUTPUT_FORMAT_JPEG)	{
-			this.rDevice = __RDevice.JPEG;
+			this.rDevice = RDevice.JPEG;
 		}
 		else if(outputFormat == ___ChartsEngine.OUTPUT_FORMAT_PDF)	{
-			this.rDevice = __RDevice.PDF;
+			this.rDevice = RDevice.PDF;
 		}
 		else if(outputFormat == ___ChartsEngine.OUTPUT_FORMAT_PNG)	{
-			this.rDevice = __RDevice.PNG;
+			this.rDevice = RDevice.PNG;
 		}
 		else if(outputFormat == ___ChartsEngine.OUTPUT_FORMAT_PS)	{
-			this.rDevice = __RDevice.PS;
+			this.rDevice = RDevice.PS;
 		}
 		else if(outputFormat == ___ChartsEngine.OUTPUT_FORMAT_SVG)	{
-			this.rDevice = __RDevice.SVG;
+			this.rDevice = RDevice.SVG;
 		}
 	}
 
Index: tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartCreator.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartCreator.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartCreator.java	(revision 137)
@@ -1,41 +0,0 @@
-package org.txm.core.chartsengine.base;
-
-import java.io.File;
-
-
-/**
- * Abstract base for chart creation in command plugins.
- * @author sjacquot
- *
- */
-public abstract class ___ChartCreator {
-
-	
-	protected ___ChartsEngine ___ChartsEngine;
-	
-	
-	public ___ChartCreator() {
-	}
-
-	
-	public void setChartsEngine(___ChartsEngine ___ChartsEngine)	{
-		this.___ChartsEngine = ___ChartsEngine;
-	}
-	
-	public abstract Object createChart(Object resultData, Object... params);
-	
-	public Object createChart(Object resultData)	{
-		return this.createChart(resultData, null);
-	}
-	
-	
-	
-	
-	public abstract File createChartFile(Object resultData, File file, Object... params);
-	
-	
-	public File createChartFile(Object resultData, File file)	{
-		return this.createChartFile(resultData, file, null);
-	}
-	
-}
Index: tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartsEngine.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartsEngine.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/chartsengine/base/___ChartsEngine.java	(revision 137)
@@ -7,15 +7,13 @@
 import java.util.Map;
 import java.util.Properties;
 
-import org.txm.Messages;
 import org.txm.Toolbox;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
+import org.txm.chartsengine.core.ChartCreator;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.core.chartsengine.jfreechart.___JFCChartsEngine;
 import org.txm.core.chartsengine.r.___RChartsEngine;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.utils.logger.Log;
 
@@ -132,7 +130,7 @@
 
 	
 	
-	protected HashMap<Class, ___ChartCreator> ___ChartCreators;
+	protected HashMap<Class, ChartCreator> chartCreators;
 
 	/**
 	 * Creates a charts engine.
@@ -164,7 +162,7 @@
 		this.description = description;
 		this.setOutputFormat(outputFormat);
 		
-		this.___ChartCreators = new HashMap<Class, ___ChartCreator>();
+		this.chartCreators = new HashMap<Class, ChartCreator>();
 	}
 
 
@@ -174,22 +172,22 @@
 	 * @param type
 	 * @return
 	 */
-	public ___ChartCreator getChartCreator(Class resultDataType)	{
-		return this.___ChartCreators.get(resultDataType);
+	public ChartCreator getChartCreator(Class resultDataType)	{
+		return this.chartCreators.get(resultDataType);
 	}
 	
 
-	/**
-	 * 
-	 * @param ___ChartCreator
-	 */
-	public void addChartCreator(Class resultDataType, ___ChartCreator ___ChartCreator)	{
-		this.___ChartCreators.put(resultDataType, ___ChartCreator);
-		___ChartCreator.setChartsEngine(this);
-	}
+//	/**
+//	 * 
+//	 * @param ___ChartCreator
+//	 */
+//	public void addChartCreator(Class resultDataType, ChartCreator chartCreator)	{
+//		this.chartCreators.put(resultDataType, chartCreator);
+//		chartCreator.setChartsEngine(this);
+//	}
+//	
+//	
 	
-	
-	
 //	/**
 //	 * Creates a charts engine with the specified output format;
 //	 * @param outputFormat
@@ -246,12 +244,12 @@
 			//tmpFile = File.createTempFile(prefix, this.rDevice.getExt(), resultsDir);
 		}
 		catch (IOException e) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CANT_CREATE_TMP_FILE_CHART + e);
+			Log.severe(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_TMP_FILE_CHART + e);
 		}
 
 		// TODO : old code, useful ? and/or return null instead of the file if canWrite() return false ?
 		if(!file.canWrite()) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CANT_WRITE_IN_FILE + file);
+			Log.severe(ChartsEngineCoreMessages.ChartsEngine_CANT_WRITE_IN_FILE + file);
 		}
 
 
@@ -329,32 +327,32 @@
 	}
 
 
-	/**
-	 * Creates a string title, shared by charts engine implementations, for the CA factorial map chart from the specified result.
-	 * @param ca
-	 * @return
-	 */
-	public String createCAFactorialMapChartTitle(CA ca)	{
+//	/**
+//	 * Creates a string title, shared by charts engine implementations, for the CA factorial map chart from the specified result.
+//	 * @param ca
+//	 * @return
+//	 */
+//	public String createCAFactorialMapChartTitle(CA ca)	{
+//
+//		String partitionName;
+//		if (ca.getPartition() == null) {
+//			partitionName = "<no partition>";
+//		}
+//		else	{
+//			partitionName = ca.getPartition().getName();
+//		}
+//
+//		String corpusName;
+//		if (ca.getCorpus() == null) {
+//			corpusName = "<no corpus>";
+//		}
+//		else	{
+//			corpusName = ca.getCorpus().getName();
+//		}
+//
+//		return ChartsEngineMessages.bind(CAC.ChartsEngine_CA_FACTORIAL_MAP_TITLE, partitionName, corpusName);
+//	}
 
-		String partitionName;
-		if (ca.getPartition() == null) {
-			partitionName = "<no partition>";
-		}
-		else	{
-			partitionName = ca.getPartition().getName();
-		}
-
-		String corpusName;
-		if (ca.getCorpus() == null) {
-			corpusName = "<no corpus>";
-		}
-		else	{
-			corpusName = ca.getCorpus().getName();
-		}
-
-		return ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TITLE, partitionName, corpusName);
-	}
-
 	/**
 	 * Creates a bar plot with singular values of the specified CA result.
 	 * @param ca
@@ -568,51 +566,51 @@
 	public abstract File createPartitionDimensionsChartFile(Partition partition, boolean sortPartsBySize, File file);
 
 
-	/**
-	 * Creates a dimensions partition bar chart from the specified <code>Partition</code> result and writes it in a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
-	 * @param partition
-	 * @param sortPartsBySize
-	 * @return
-	 */
-	public File createDimensionsPartitionChartFile(Partition partition, boolean sortPartsBySize)	{
-		return this.createPartitionDimensionsChartFile(partition, sortPartsBySize, this.createTmpFile(___ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS));
-	}
+//	/**
+//	 * Creates a dimensions partition bar chart from the specified <code>Partition</code> result and writes it in a temporary file in USER_TXM_HOME\results.
+//	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
+//	 * @param partition
+//	 * @param sortPartsBySize
+//	 * @return
+//	 */
+//	public File createDimensionsPartitionChartFile(Partition partition, boolean sortPartsBySize)	{
+//		return this.createPartitionDimensionsChartFile(partition, sortPartsBySize, this.createTmpFile(___ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS));
+//	}
+//
+//	/**
+//	 *
+//	 * @param partition
+//	 * @param file
+//	 * @return
+//	 */
+//	public File createDimensionsPartitionChartFile(Partition partition, File file)	{
+//		return this.createPartitionDimensionsChartFile(partition, (Boolean) ___ChartsEngine.properties.get(___ChartsEngine.PROP_PARTITION_DIMENSIONS_SORTED_BY_SIZE), file);
+//	}
+//
+//
+//	/**
+//	 * Creates a string title, shared by charts engine implementations, for the dimensions partition chart from the specified result.
+//	 * @param the partition result
+//	 * @param sortPartsBySize the sort parts by size state
+//	 * @return the title string
+//	 */
+//	public String createPartitionDimensionsChartTitle(Partition partition, boolean sortPartsBySize)	{
+//
+//		String title = ChartsEngineCoreMessages.bind(ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION, partition.getName(), partition.getCorpus().getName());
+//
+//		if((Boolean) ___ChartsEngine.properties.get(PROP_PARTITION_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE))	{
+//			title += "\n(" +  partition.getParts().size() + " parts" + ")"; //$NON-NLS-1$ //$NON-NLS-3$
+//		}
+//
+//		if(sortPartsBySize) {
+//			title += ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
+//		}
+//
+//		return title;
+//	}
 
-	/**
-	 *
-	 * @param partition
-	 * @param file
-	 * @return
-	 */
-	public File createDimensionsPartitionChartFile(Partition partition, File file)	{
-		return this.createPartitionDimensionsChartFile(partition, (Boolean) ___ChartsEngine.properties.get(___ChartsEngine.PROP_PARTITION_DIMENSIONS_SORTED_BY_SIZE), file);
-	}
 
 
-	/**
-	 * Creates a string title, shared by charts engine implementations, for the dimensions partition chart from the specified result.
-	 * @param the partition result
-	 * @param sortPartsBySize the sort parts by size state
-	 * @return the title string
-	 */
-	public String createPartitionDimensionsChartTitle(Partition partition, boolean sortPartsBySize)	{
-
-		String title = ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION, partition.getName(), partition.getCorpus().getName());
-
-		if((Boolean) ___ChartsEngine.properties.get(PROP_PARTITION_DIMENSIONS_DISPLAY_PARTS_COUNT_IN_TITLE))	{
-			title += "\n(" +  partition.getParts().size() + " parts" + ")"; //$NON-NLS-1$ //$NON-NLS-3$
-		}
-
-		if(sortPartsBySize) {
-			title += ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
-		}
-
-		return title;
-	}
-
-
-
 //	/**
 //	 * Creates a progression chart from the specified <code>Progression</code> result and writes it in the specified file.
 //	 * @param progression
@@ -689,58 +687,58 @@
 
 
 
-	/**
-	 * Creates a chart according to the specified result and current output format and writes it in the specified file.
-	 * @param result
-	 * @param file
-	 * @return
-	 */
-	public File createChartFile(Object result, File file)	{
-
-		// Partition dimensions
-		if(result instanceof Partition)	{
-			return this.createDimensionsPartitionChartFile((Partition)result, file);
-		}
-		// Specificities
-//		else if(result instanceof SpecificitesResult)	{
-//			// FIXME : need to get the rendering properties
-//			return this.createSpecificitiesChartFile((SpecificitesResult)result, false, true, false, 2, false, file);
+//	/**
+//	 * Creates a chart according to the specified result and current output format and writes it in the specified file.
+//	 * @param result
+//	 * @param file
+//	 * @return
+//	 */
+//	public File createChartFile(Object result, File file)	{
+//
+//		// Partition dimensions
+//		if(result instanceof Partition)	{
+//			return this.createDimensionsPartitionChartFile((Partition)result, file);
 //		}
-		// CA factorial map
-		else if(result instanceof CA)	{
-			return this.createCAFactorialMapChartFile((CA) result, file);
-		}
-		// CA singular values bar plot
-		// FIXME : j'ai besoin de connaître le type du graphe ici vu que résultat stockée est une CA pour les singular values bar plot
-		// Ajouter un champ int graphType dans ChartEditorPart ??? FAIT : le champ a été ajouté dans le ItemSelectionRenderer mais donc uniquement dispo pour JFC
-//		else if(result instanceof Integer && (Integer)result == ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES)	{
-//			return this.createCASingularValuesBarChartFile(((CA) result, file);
+//		// Specificities
+////		else if(result instanceof SpecificitesResult)	{
+////			// FIXME : need to get the rendering properties
+////			return this.createSpecificitiesChartFile((SpecificitesResult)result, false, true, false, 2, false, file);
+////		}
+//		// CA factorial map
+//		else if(result instanceof CA)	{
+//			return this.createCAFactorialMapChartFile((CA) result, file);
 //		}
+//		// CA singular values bar plot
+//		// FIXME : j'ai besoin de connaître le type du graphe ici vu que résultat stockée est une CA pour les singular values bar plot
+//		// Ajouter un champ int graphType dans ChartEditorPart ??? FAIT : le champ a été ajouté dans le ItemSelectionRenderer mais donc uniquement dispo pour JFC
+////		else if(result instanceof Integer && (Integer)result == ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES)	{
+////			return this.createCASingularValuesBarChartFile(((CA) result, file);
+////		}
+//
+//
+//		return null;
+//	}
+//
+//
+//	/**
+//	 * Creates a chart according to the specified result and output format and writes it in the specified file.
+//	 * @param result
+//	 * @param file
+//	 * @param outputFormat
+//	 * @return
+//	 */
+//	public File createChartFile(Object result, File file, String outputFormat)	{
+//		// FIXME : bad ? Switch the current charts engine output format, export the chart, and then roll back the output format
+//		int oldOutputFormat = this.outputFormat;
+//		this.setOutputFormat(outputFormat);
+//		file = this.createChartFile(result, file);
+//		this.setOutputFormat(oldOutputFormat);
+//
+//		return file;
+//	}
 
 
-		return null;
-	}
-
-
 	/**
-	 * Creates a chart according to the specified result and output format and writes it in the specified file.
-	 * @param result
-	 * @param file
-	 * @param outputFormat
-	 * @return
-	 */
-	public File createChartFile(Object result, File file, String outputFormat)	{
-		// FIXME : bad ? Switch the current charts engine output format, export the chart, and then roll back the output format
-		int oldOutputFormat = this.outputFormat;
-		this.setOutputFormat(outputFormat);
-		file = this.createChartFile(result, file);
-		this.setOutputFormat(oldOutputFormat);
-
-		return file;
-	}
-
-
-	/**
 	 * Exports the chart to the specified file. Also crops the image according to the specified drawing area values.
 	 * @param chart
 	 * @param file
Index: tmp/org.txm.core/src/java/org/txm/core/chartsengine/jfreechart/___JFCChartsEngine.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/core/chartsengine/jfreechart/___JFCChartsEngine.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/core/chartsengine/jfreechart/___JFCChartsEngine.java	(revision 137)
@@ -23,9 +23,7 @@
 import org.jfree.chart.axis.NumberAxis;
 import org.jfree.chart.axis.ValueAxis;
 import org.jfree.chart.plot.CategoryPlot;
-import org.jfree.chart.plot.Marker;
 import org.jfree.chart.plot.PlotOrientation;
-import org.jfree.chart.plot.ValueMarker;
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.data.category.CategoryDataset;
 import org.jfree.data.category.DefaultCategoryDataset;
@@ -35,27 +33,21 @@
 import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jfree.graphics2d.svg.SVGGraphics2D;
-import org.jfree.ui.RectangleAnchor;
-import org.jfree.ui.TextAnchor;
-import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
+import org.txm.ca.core.chartsengine.jfreechart.datasets.FCAXYDataset;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.FCAItemSelectionRenderer;
+import org.txm.ca.core.functions.CA;
+import org.txm.cah.core.functions.CAH;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
 import org.txm.chartsengine.jfreechart.core.themes.base.SymbolAxisBetweenTicks;
 import org.txm.chartsengine.jfreechart.core.themes.base.Theme;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.HighchartsDefaultTheme;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
 import org.txm.core.chartsengine.base.___ChartsEngine;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.core.chartsengine.jfreechart.messages.JFreeChartsEngineMessages;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.progression.Progression;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
-import org.txm.searchengine.cqp.corpus.query.Query;
 import org.txm.stat.StatException;
 import org.txm.utils.logger.Log;
 
@@ -120,7 +112,7 @@
 	/**
 	 * The charts engine description.
 	 */
-	public final static String DESCRIPTION = JFreeChartsEngineMessages.JFCChartsEngine_ENGINE_DESCRIPTION;
+	public final static String DESCRIPTION = "Java";
 
 	/**
 	 * The rendering theme.
@@ -521,59 +513,59 @@
 	}
 
 
-	/**
-	 * Creates an XY bar chart from the specified dataset
-	 * @param dataset
-	 * @param title
-	 * @param xAxisLabel
-	 * @param yAxisLabel
-	 * @param showLegends
-	 * @return
-	 */
-	public JFreeChart createXYBarChart(IntervalXYDataset dataset, String title, String xAxisLabel, String yAxisLabel, boolean showLegends, boolean rangeAxisIntegerTicks, boolean applyTheme, String[] domainAxisSymbols) {
+//	/**
+//	 * Creates an XY bar chart from the specified dataset
+//	 * @param dataset
+//	 * @param title
+//	 * @param xAxisLabel
+//	 * @param yAxisLabel
+//	 * @param showLegends
+//	 * @return
+//	 */
+//	public JFreeChart createXYBarChart(IntervalXYDataset dataset, String title, String xAxisLabel, String yAxisLabel, boolean showLegends, boolean rangeAxisIntegerTicks, boolean applyTheme, String[] domainAxisSymbols) {
+//
+//		JFreeChart chart = ChartFactory.createXYBarChart(title, xAxisLabel, false, yAxisLabel, dataset, PlotOrientation.VERTICAL, showLegends, true, false);
+//
+//
+//    	// Custom renderer
+//    	chart.getXYPlot().setRenderer(this.theme.createXYBarRenderer());
+//
+//
+//    	// Range axis integer tick units
+//    	if(rangeAxisIntegerTicks)	{
+//    		chart.getXYPlot().getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
+//     	}
+//
+//    	// Domain axis symbols instead of values
+//    	if(domainAxisSymbols != null)	{
+//            chart.getXYPlot().setDomainAxis(new SymbolAxisBetweenTicks(ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_X_AXIS_LABEL, domainAxisSymbols));
+//    	}
+//
+//		// Apply theme to the chart
+//    	if(applyTheme)	{
+//    		this.theme.apply(chart);
+//    	}
+//
+//		return chart;
+//	}
 
-		JFreeChart chart = ChartFactory.createXYBarChart(title, xAxisLabel, false, yAxisLabel, dataset, PlotOrientation.VERTICAL, showLegends, true, false);
 
+//	/**
+//	 * Creates an XY bar chart from the specified dataset
+//	 * @param dataset
+//	 * @param title
+//	 * @param xAxisLabel
+//	 * @param yAxisLabel
+//	 * @param showLegends
+//	 * @param rangeAxisIntegerTicks
+//	 * @return
+//	 */
+//	public JFreeChart createXYBarChart(IntervalXYDataset dataset, String title, String xAxisLabel, String yAxisLabel, boolean showLegends, boolean rangeAxisIntegerTicks) {
+//		return this.createXYBarChart(dataset, title, xAxisLabel, yAxisLabel, showLegends, rangeAxisIntegerTicks, true, null);
+//	}
+//
 
-    	// Custom renderer
-    	chart.getXYPlot().setRenderer(this.theme.createXYBarRenderer());
-
-
-    	// Range axis integer tick units
-    	if(rangeAxisIntegerTicks)	{
-    		chart.getXYPlot().getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
-     	}
-
-    	// Domain axis symbols instead of values
-    	if(domainAxisSymbols != null)	{
-            chart.getXYPlot().setDomainAxis(new SymbolAxisBetweenTicks(ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_X_AXIS_LABEL, domainAxisSymbols));
-    	}
-
-		// Apply theme to the chart
-    	if(applyTheme)	{
-    		this.theme.apply(chart);
-    	}
-
-		return chart;
-	}
-
-
 	/**
-	 * Creates an XY bar chart from the specified dataset
-	 * @param dataset
-	 * @param title
-	 * @param xAxisLabel
-	 * @param yAxisLabel
-	 * @param showLegends
-	 * @param rangeAxisIntegerTicks
-	 * @return
-	 */
-	public JFreeChart createXYBarChart(IntervalXYDataset dataset, String title, String xAxisLabel, String yAxisLabel, boolean showLegends, boolean rangeAxisIntegerTicks) {
-		return this.createXYBarChart(dataset, title, xAxisLabel, yAxisLabel, showLegends, rangeAxisIntegerTicks, true, null);
-	}
-
-
-	/**
 	 * Creates a FCA scatter plot from the specified dataset.
 	 * @param dataset
 	 * @return the JFreeChart chart
@@ -592,34 +584,34 @@
 	}
 
 
-	@Override
-	public JFreeChart createCAFactorialMapChart(CA ca) {
+//	@Override
+//	public JFreeChart createCAFactorialMapChart(CA ca) {
+//
+//		JFreeChart chart  = null;
+//
+//		try {
+//			FCAXYDataset dataset = new FCAXYDataset(ca);
+//
+//			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
+//			double singularValuesSum = ca.getValeursPropresSum();
+//
+//			String percent1 = f.format(100 * ca.getValeursPropres()[ca.getFirstDimension() - 1] / singularValuesSum);
+//			String axis1 = ChartsEngineCoreMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + ca.getFirstDimension() + " (" + percent1 + "%)";
+//			String percent2 = f.format(100 * ca.getValeursPropres()[ca.getSecondDimension() - 1] / singularValuesSum);
+//			String axis2 = ChartsEngineCoreMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX  + " " + ca.getSecondDimension() + " (" + percent2 + "%)";
+//			chart = this.createCAFactorialMapChart(dataset, this.createCAFactorialMapChartTitle(ca), axis1, axis2);
+//
+//		}
+//		catch(StatException e) {
+//			Log.severe("Can't create CA factorial map scatter plot" + e);
+//		}
+//
+//		// Apply theme to the chart
+//		this.theme.apply(chart);
+//
+//		return chart;
+//	}
 
-		JFreeChart chart  = null;
-
-		try {
-			FCAXYDataset dataset = new FCAXYDataset(ca);
-
-			DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			double singularValuesSum = ca.getValeursPropresSum();
-
-			String percent1 = f.format(100 * ca.getValeursPropres()[ca.getFirstDimension() - 1] / singularValuesSum);
-			String axis1 = ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + ca.getFirstDimension() + " (" + percent1 + "%)";
-			String percent2 = f.format(100 * ca.getValeursPropres()[ca.getSecondDimension() - 1] / singularValuesSum);
-			String axis2 = ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX  + " " + ca.getSecondDimension() + " (" + percent2 + "%)";
-			chart = this.createCAFactorialMapChart(dataset, this.createCAFactorialMapChartTitle(ca), axis1, axis2);
-
-		}
-		catch(StatException e) {
-			Log.severe("Can't create CA factorial map scatter plot" + e);
-		}
-
-		// Apply theme to the chart
-		this.theme.apply(chart);
-
-		return chart;
-	}
-
 	@Override
 	public File createCAFactorialMapChartFile(CA ca, File file) {
 		return this.export(this.createCAFactorialMapChart(ca), file);
@@ -637,11 +629,11 @@
 			double[] singularValues = ca.getValeursPropres();
 
 			for(int i = 0; i < singularValues.length; i++) {
-				dataset.setValue(singularValues[i], ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_Y_LABEL, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + String.valueOf(i + 1));
+				dataset.setValue(singularValues[i], ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_TOOLTIP_Y_LABEL, ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_X_LABELS_PREFIX + String.valueOf(i + 1));
 			}
 
 			// Create the chart
-			chart = this.createCategoryBarChart(dataset, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL, ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL, false, false, false);
+			chart = this.createCategoryBarChart(dataset, ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE, ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL, ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL, false, false, false);
 
 			// Custom renderer
 			chart.getCategoryPlot().setRenderer(this.theme.createCASingularValuesRenderer());
@@ -652,7 +644,7 @@
 
 		}
 		catch(StatException e) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CA_SINGULAR_VALUES_CANT_CREATE_CHART + e);
+			Log.severe(ChartsEngineCoreMessages.ChartsEngine_CA_SINGULAR_VALUES_CANT_CREATE_CHART + e);
 		}
 
 		// Apply theme to the chart
@@ -1351,7 +1343,7 @@
 			// Creating the data set from the partition result
 			XYSeriesCollection dataset = new XYSeriesCollection();
 
-			XYSeries series = new XYSeries(ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_CATEGORY);
+			XYSeries series = new XYSeries(ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_CATEGORY);
 			dataset.addSeries(series);
 
 			List<Part> parts;
@@ -1380,7 +1372,7 @@
 			String title = this.createPartitionDimensionsChartTitle(partition, sortPartsBySize);
 
 			// Create the chart
-	        chart = this.createXYBarChart(dataset, title, ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_X_AXIS_LABEL, ChartsEngineMessages.ChartsEngine_PARTITION_DIMENSIONS_Y_AXIS_LABEL, false, true, false, xAxisSymbols);
+	        chart = this.createXYBarChart(dataset, title, ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_X_AXIS_LABEL, ChartsEngineCoreMessages.ChartsEngine_PARTITION_DIMENSIONS_Y_AXIS_LABEL, false, true, false, xAxisSymbols);
 	        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(___ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS);
 
 
@@ -2241,8 +2233,8 @@
 		 try {
 			 double sinuglarValuesSum = ca.getValeursPropresSum();
 			 DecimalFormat f = new DecimalFormat("###.00"); //$NON-NLS-1$
-			 ((JFreeChart) chart).getXYPlot().getDomainAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension1 + " (" + f.format(100 * ca.getValeursPropres()[dimension1 - 1] / sinuglarValuesSum) + "%)");
-			 ((JFreeChart) chart).getXYPlot().getRangeAxis().setLabel(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension2 + " (" + f.format(100 * ca.getValeursPropres()[dimension2 - 1] / sinuglarValuesSum) + "%)");
+			 ((JFreeChart) chart).getXYPlot().getDomainAxis().setLabel(ChartsEngineCoreMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension1 + " (" + f.format(100 * ca.getValeursPropres()[dimension1 - 1] / sinuglarValuesSum) + "%)");
+			 ((JFreeChart) chart).getXYPlot().getRangeAxis().setLabel(ChartsEngineCoreMessages.ChartsEngine_CA_FACTORIAL_MAP_AXIS_LABEL_PREFIX + " " + dimension2 + " (" + f.format(100 * ca.getValeursPropres()[dimension2 - 1] / sinuglarValuesSum) + "%)");
 
 			 // Refresh data set
 			 // FIXME : any way to fire a data set event rather than reassign the same data set ?
Index: tmp/org.txm.core/src/java/org/txm/objects/Edition.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/objects/Edition.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/objects/Edition.java	(revision 137)
@@ -196,7 +196,7 @@
 	 * @return the page for word id
 	 */
 	public Page getPageForWordId(String idx) {
-		Log.info("getPageForWordId "+idx);
+		Log.info("Page.getPageForWordId(): "+idx);
 		Page lastpage = null;
 		for (Page p : pages) {
 			String s = p.getWordId();
Index: tmp/org.txm.core/src/java/org/txm/searchengine/cqp/corpus/Lexicon.java
===================================================================
--- tmp/org.txm.core/src/java/org/txm/searchengine/cqp/corpus/Lexicon.java	(revision 136)
+++ tmp/org.txm.core/src/java/org/txm/searchengine/cqp/corpus/Lexicon.java	(revision 137)
@@ -36,15 +36,15 @@
 import java.util.Arrays;
 import java.util.Map;
 
-import org.txm.core.chartsengine.r.__RDevice;
+import org.txm.HasResults;
+import org.txm.Messages;
 import org.txm.functions.Function;
 import org.txm.searchengine.cqp.CqpDataProxy;
 import org.txm.stat.StatException;
 import org.txm.stat.data.Vector;
+import org.txm.stat.engine.r.RDevice;
 import org.txm.stat.engine.r.RWorkspace;
 import org.txm.stat.engine.r.data.VectorImpl;
-import org.txm.HasResults;
-import org.txm.Messages;
 
 // TODO: Auto-generated Javadoc
 //  TODO should be put into stat.data package ?
@@ -266,7 +266,7 @@
 		String rName = asVector().getSymbol();
 		String expr = "pareto(" + rName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 		try {
-			RWorkspace.getRWorkspaceInstance().plot(file, expr, __RDevice.SVG);
+			RWorkspace.getRWorkspaceInstance().plot(file, expr, RDevice.SVG);
 		} catch (Exception e) {
 			throw new StatException(e);
 		}
Index: tmp/org.txm.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.core/META-INF/MANIFEST.MF	(revision 137)
@@ -4,7 +4,12 @@
 Bundle-SymbolicName: org.txm.core;singleton:=true
 Bundle-Version: 0.7.0.qualifier
 Bundle-Activator: org.txm.toolbox.Activator
-Require-Bundle: org.eclipse.core.runtime,
+Require-Bundle: org.txm.progression.core;bundle-version="1.0.0",
+ org.txm.ca.core;bundle-version="1.0.0",
+ org.txm.cah.core;bundle-version="1.0.0",
+ org.txm.specificities.core;bundle-version="1.0.0",
+ org.txm.partition.core;bundle-version="1.0.0",
+ org.eclipse.core.runtime,
  org.txm.chartsengine.core,
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
  org.eclipse.osgi.util;bundle-version="3.2.0",
@@ -354,11 +359,8 @@
  org.txm.annotation.temporary,
  org.txm.ant,
  org.txm.core.chartsengine.base,
- org.txm.core.chartsengine.base.messages,
  org.txm.core.chartsengine.jfreechart,
- org.txm.core.chartsengine.jfreechart.messages,
  org.txm.core.chartsengine.r,
- org.txm.core.chartsengine.r.messages,
  org.txm.core.messages,
  org.txm.core.preferences,
  org.txm.doc,
@@ -366,8 +368,6 @@
  org.txm.export.conll2009,
  org.txm.export.ts,
  org.txm.functions,
- org.txm.functions.ca,
- org.txm.functions.classification,
  org.txm.functions.concordances,
  org.txm.functions.concordances.comparators,
  org.txm.functions.contrasts,
@@ -381,10 +381,8 @@
  org.txm.functions.parabrowser,
  org.txm.functions.parallelcontexts,
  org.txm.functions.preview,
- org.txm.functions.progression,
  org.txm.functions.referencer,
  org.txm.functions.selection,
- org.txm.functions.specificities,
  org.txm.functions.summary,
  org.txm.importer,
  org.txm.importer.RGAQCJ,
Index: tmp/org.txm.progression.rcp/plugin.xml
===================================================================
--- tmp/org.txm.progression.rcp/plugin.xml	(revision 136)
+++ tmp/org.txm.progression.rcp/plugin.xml	(revision 137)
@@ -77,8 +77,8 @@
          point="org.txm.chartsengine.eventcallback">
       <EventCallBack
             chartsEngineName="jfreechart_charts_engine"
-            class="org.txm.progression.rcp.chartsengine.jfreechart.events.ProgressionEventCallBack"
-            resultDataClass="org.txm.progression.core.functions.Progression2">
+            class="org.txm.progression.rcp.chartsengine.events.ProgressionEventCallBack"
+            resultDataClass="org.txm.progression.core.functions.Progression">
       </EventCallBack>
    </extension>
    <extension
@@ -97,7 +97,7 @@
             class="org.txm.chartsengine.rcp.editors.ChartEditorPart"
             default="false"
             icon="icons/functions/progression.png"
-            id="org.txm.progression.core.functions.Progression2"
+            id="org.txm.progression.core.functions.Progression"
             name="Progression">
       </editor>
    </extension>
Index: tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF	(revision 137)
@@ -14,6 +14,7 @@
  org.txm.chartsengine.r.core;bundle-version="1.0.0",
  org.eclipse.core.runtime;bundle-version="3.10.0",
  org.txm.chartsengine.svgbatik.rcp;bundle-version="1.0.0",
- org.txm.progression.core;bundle-version="1.0.0"
+ org.txm.progression.core;bundle-version="1.0.0",
+ org.txm.synopticeditor.rcp
 Export-Package: org.txm.progression.rcp.adapters,
  org.txm.progression.rcp.dialogs
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java	(revision 136)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java	(revision 137)
@@ -33,7 +33,7 @@
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.progression.rcp.adapters.ProgressionAdapterFactory;
-import org.txm.progression.rcp.messages.RCPProgressionMessages;
+import org.txm.progression.rcp.messages.ProgressionUIMessages;
 import org.txm.rcp.preferences.TXMPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
 import org.txm.rcpapplication.TxmPreferences;
@@ -53,24 +53,8 @@
 public class ProgressionPreferencePage extends TXMPreferencePage {
 
 
-	/**
-	 * Instantiates a new progression preference page.
-	 */
-	public ProgressionPreferencePage() {
-		super();
-	}
-
 	
 	/**
-	 * 
-	 * @return
-	 */
-	public static TXMPreferenceStore getNewPreferenceStore()	{
-		return new TXMPreferenceStore(ProgressionPreferences.PREFERENCES_NODE);
-	}
-
-	
-	/**
 	 * Creates the field editors. Field editors are abstractions of the common
 	 * GUI blocks needed to manipulate various types of preferences. Each field
 	 * editor knows how to save and restore itself.
@@ -82,16 +66,16 @@
 		// Charts rendering
 		Composite chartsTab = SWTChartsComponentsProvider.createChartsRenderingPreferencesTabFolderComposite(this.getFieldEditorParent());
 		
-		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_CUMULATIVE, RCPProgressionMessages.ProgressionPreferencePage_3, chartsTab));
-		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_MONO_STYLE, RCPProgressionMessages.ProgressionPreferencePage_5, chartsTab));
-		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_REPEAT_VALUES, RCPProgressionMessages.ProgressionPreferencePage_6, chartsTab));
+		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_CUMULATIVE, ProgressionUIMessages.ProgressionPreferencePage_3, chartsTab));
+		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_MONO_STYLE, ProgressionUIMessages.ProgressionPreferencePage_5, chartsTab));
+		this.addField(new BooleanFieldEditor(ProgressionPreferences.CHART_REPEAT_VALUES, ProgressionUIMessages.ProgressionPreferencePage_6, chartsTab));
 		
 		float test = TxmPreferences.getFloat(ProgressionPreferences.CHART_BANDE_MULTIPLIER, 999f);
 		if (test == 999f)	{
 			TxmPreferences.set(ProgressionPreferences.CHART_BANDE_MULTIPLIER, 1.0f);
 		}
 		
-		DoubleFieldEditor bandemultiplierfield = new DoubleFieldEditor(ProgressionPreferences.CHART_BANDE_MULTIPLIER, RCPProgressionMessages.ProgressionPreferencePage_7, chartsTab);
+		DoubleFieldEditor bandemultiplierfield = new DoubleFieldEditor(ProgressionPreferences.CHART_BANDE_MULTIPLIER, ProgressionUIMessages.ProgressionPreferencePage_7, chartsTab);
 		this.addField(bandemultiplierfield);
 		// FIXME: valid range
 		//if (bandemultiplierfield.getIntValue() == 0)
@@ -100,18 +84,14 @@
 		
 		// other shared preferences
 		SWTChartsComponentsProvider.createChartsRenderingPreferencesFields(this, chartsTab);
-		
-		
-		
-		
 
 	}
 
 	@Override
 	public void init(IWorkbench workbench) {
-		this.setPreferenceStore(getNewPreferenceStore());
+		this.setPreferenceStore(new TXMPreferenceStore(ProgressionPreferences.PREFERENCES_NODE));
 		//setDescription("Progression");
-		this.setTitle(RCPProgressionMessages.ProgressionPreferencePage_2);
+		this.setTitle(ProgressionUIMessages.ProgressionPreferencePage_2);
 		this.setImageDescriptor(ProgressionAdapterFactory.ICON);
 	}
 
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/dialogs/ProgressionDialog.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/dialogs/ProgressionDialog.java	(revision 136)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/dialogs/ProgressionDialog.java	(revision 137)
@@ -53,11 +53,11 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.rcp.messages.SWTComponentsProviderMessages;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.progression.core.functions.Progression2;
+import org.txm.progression.core.functions.Progression;
 import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.progression.rcp.preferences.ProgressionPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
@@ -151,7 +151,7 @@
 	Button styleButton;
 	
 	/** The colors. */
-	String[] colors = Progression2.colors;
+	String[] colors = Progression.colors;
 	
 	/** The self. */
 	ProgressionDialog self;
@@ -211,7 +211,7 @@
 			this.parent = p;
 
 			// get preferences values
-			TXMPreferenceStore store = ProgressionPreferencePage.getNewPreferenceStore();
+			TXMPreferenceStore store = new TXMPreferenceStore(ProgressionPreferences.PREFERENCES_NODE);
 			
 			this.blackAndWhite = (TXMPreferences.getInt(ProgressionPreferences.PREFERENCES_NODE, ChartsEnginePreferences.RENDERING_COLORS_MODE) == ChartsEngine.RENDERING_MONOCHROME_MODE);
 			
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/adapters/ProgressionAdapterFactory.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/adapters/ProgressionAdapterFactory.java	(revision 136)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/adapters/ProgressionAdapterFactory.java	(revision 137)
@@ -5,7 +5,7 @@
 import org.eclipse.ui.model.IWorkbenchAdapter;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.FrameworkUtil;
-import org.txm.progression.core.functions.Progression2;
+import org.txm.progression.core.functions.Progression;
 import org.txm.rcp.adapters.BaseAdapterFactory;
 
 
@@ -34,7 +34,7 @@
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
 		
 		if(adapterType == IWorkbenchAdapter.class)	{
-			if(adaptableObject instanceof Progression2)	{
+			if(adaptableObject instanceof Progression)	{
 				return new IWorkbenchAdapter() {
 					@Override
 					public Object[] getChildren(Object resultData) {
@@ -48,12 +48,12 @@
 	
 					@Override
 					public String getLabel(Object resultData) {
-						return ((Progression2) resultData).getDetails(); 
+						return ((Progression) resultData).getDetails(); 
 					}
 	
 					@Override
 					public Object getParent(Object resultData) {
-						return ((Progression2) resultData).getCorpus();
+						return ((Progression) resultData).getCorpus();
 					}
 				};
 			}
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/RCPProgressionMessages.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/RCPProgressionMessages.java	(revision 136)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/RCPProgressionMessages.java	(revision 137)
@@ -1,26 +0,0 @@
-package org.txm.progression.rcp.messages;
-
-import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMMessages;
-
-public class RCPProgressionMessages extends NLS {
-
-	// FIXME: use the same properties file than the bundle
-	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
-
-	public static String ProgressionPreferencePage_2;
-	public static String ProgressionPreferencePage_3;
-	public static String ProgressionPreferencePage_4;
-	public static String ProgressionPreferencePage_5;
-	public static String ProgressionPreferencePage_6;
-	public static String ProgressionPreferencePage_7;
-
-	static {
-		// initializes resource bundle
-		TXMMessages.initializeMessages(BUNDLE_NAME, RCPProgressionMessages.class);
-		//NLS.initializeMessages(BUNDLE_NAME, RCPProgressionMessages.class);
-	}
-	
-	private RCPProgressionMessages() {
-	}
-}
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/ProgressionUIMessages.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/ProgressionUIMessages.java	(revision 0)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/ProgressionUIMessages.java	(revision 137)
@@ -0,0 +1,26 @@
+package org.txm.progression.rcp.messages;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
+
+public class ProgressionUIMessages extends NLS {
+
+	// FIXME: use the same properties file than the bundle
+	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
+
+	public static String ProgressionPreferencePage_2;
+	public static String ProgressionPreferencePage_3;
+	public static String ProgressionPreferencePage_4;
+	public static String ProgressionPreferencePage_5;
+	public static String ProgressionPreferencePage_6;
+	public static String ProgressionPreferencePage_7;
+
+	static {
+		// initializes resource bundle
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, ProgressionUIMessages.class);
+		//NLS.initializeMessages(BUNDLE_NAME, RCPProgressionMessages.class);
+	}
+	
+	private ProgressionUIMessages() {
+	}
+}

Property changes on: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/messages/ProgressionUIMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/editors/___ProgressionEditorInput.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/editors/___ProgressionEditorInput.java	(revision 0)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/editors/___ProgressionEditorInput.java	(revision 137)
@@ -0,0 +1,136 @@
+// Copyright © 2010-2013 ENS de Lyon.
+// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
+// Lyon 2, University of Franche-Comté, University of Nice
+// Sophia Antipolis, University of Paris 3.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// The TXM platform is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE. See the GNU General Public License for more
+// details.
+// 
+// You should have received a copy of the GNU General
+// Public License along with the TXM platform. If not, see
+// http://www.gnu.org/licenses.
+// 
+// 
+// 
+// $LastChangedDate:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.progression.rcp.editors;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.txm.progression.core.functions.Progression;
+import org.txm.rcpapplication.Application;
+import org.txm.rcpapplication.IImageKeys;
+import org.txm.rcpapplication.Messages;
+// TODO: Auto-generated Javadoc
+/**
+ * The Class ProgressionEditorInput.
+ *
+ * @author mdecorde
+ */
+public class ___ProgressionEditorInput implements IEditorInput {
+	
+	/** The progression. */
+	private Progression progression;
+
+	/**
+	 * Instantiates a new progression editor input.
+	 *
+	 * @param progression the progression
+	 */
+	public ___ProgressionEditorInput(Progression progression) {
+		super();
+		this.progression = progression;
+	}
+
+	/**
+	 * Exists.
+	 *
+	 * @return true, if successful
+	 * @see org.eclipse.ui.IEditorInput#exists()
+	 */
+	@Override
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * Gets the image descriptor.
+	 *
+	 * @return the image descriptor
+	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+	 */
+	@Override
+	public ImageDescriptor getImageDescriptor() {
+		return AbstractUIPlugin.imageDescriptorFromPlugin(
+				Application.PLUGIN_ID, IImageKeys.ACTION_PROGRESSION);
+	}
+
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 * @see org.eclipse.ui.IEditorInput#getName()
+	 */
+	@Override
+	public String getName() {
+		return Messages.ProgressionEditorInput_0;
+	}
+
+	/**
+	 * Gets the persistable.
+	 *
+	 * @return the persistable
+	 * @see org.eclipse.ui.IEditorInput#getPersistable()
+	 */
+	@Override
+	public IPersistableElement getPersistable() {
+		return null;
+	}
+
+	/**
+	 * Gets the tool tip text.
+	 *
+	 * @return the tool tip text
+	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
+	 */
+	@Override
+	public String getToolTipText() {
+		return this.progression.getQueries().toString();
+	}
+
+	/**
+	 * Gets the adapter.
+	 *
+	 * @param arg0 the arg0
+	 * @return the adapter
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	@Override
+	@SuppressWarnings("unchecked") //$NON-NLS-1$
+	public Object getAdapter(Class arg0) {
+		return null;
+	}
+
+	/**
+	 * Gets the progression.
+	 *
+	 * @return the progression
+	 */
+	public Progression getProgression() {
+		return progression;
+	}
+}

Property changes on: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/editors/___ProgressionEditorInput.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionSelectionListener.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionSelectionListener.java	(revision 0)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionSelectionListener.java	(revision 137)
@@ -0,0 +1,103 @@
+package org.txm.progression.rcp.chartsengine.events;
+
+import org.eclipse.swt.events.SelectionEvent;
+import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.chartsengine.rcp.events.BaseSelectionListener;
+
+/**
+ * Progression selection listener.
+ * @author sjacquot
+ *
+ */
+public class ProgressionSelectionListener extends BaseSelectionListener {
+
+
+	/**
+	 * 
+	 * @param chartEditor
+	 * @param commandId
+	 */
+	public ProgressionSelectionListener(ChartEditorPart chartEditor, int commandId) {
+		super(chartEditor, commandId);
+	}
+
+
+
+	@Override
+	public void widgetSelected(SelectionEvent e) {
+		
+		
+		// FIXME: to discuss
+		// Send to other command
+//		if(this.commandId == ProgressionSelectionListener.SEND_TO_INDEX || this.commandId == ProgressionSelectionListener.SEND_TO_CONCORDANCE
+//				|| this.commandId == ProgressionSelectionListener.SEND_TO_COOCCURRENCE)	{
+//
+//
+//			Progression progression = (Progression) this.chartEditor.getResultData();
+//			// gets the progression queries from the current selected chart series
+//			String query = progression.getQueriesString(chartEditor.getEditorInput().getSWTChartComponentsProvider().getChartsEngine().getProgressionChartSelectedSeries(chartEditor.getChart()));
+//			
+//			// Send to index
+//			if(this.commandId == ProgressionSelectionListener.SEND_TO_INDEX)	{
+//	
+//				IndexEditorInput editorInput = new IndexEditorInput(progression.getCorpus());
+//	
+//				try {
+//					IWorkbenchPage page = this.chartEditor.getEditorSite().getWorkbenchWindow().getActivePage();
+//					IndexEditor editor = (IndexEditor) page.openEditor(editorInput, IndexEditor.ID);
+//					editor.setFocus(query);
+//					editor.compute();
+//				}
+//				catch(PartInitException e1) {
+//					e1.printStackTrace();
+//				}
+//			}
+//			// Send to concordance
+//			else if(this.commandId == ProgressionSelectionListener.SEND_TO_CONCORDANCE)	{
+//	
+//				ConcordancesEditorInput editorInput = new ConcordancesEditorInput(progression.getCorpus(), null);
+//	
+//				try {
+//					IWorkbenchPage page = this.chartEditor.getEditorSite().getWorkbenchWindow().getActivePage();
+//					ConcordancesEditor editor = (ConcordancesEditor) page.openEditor(editorInput, "org.txm.rcpapplication.editors.ConcordancesEditor"); //$NON-NLS-1$
+//					editor.setQuery(query);
+//					editor.compute();
+//					
+//					// move in the concordance to the line of the selected progression point
+//					final ArrayList<Integer> selectedPointPositions = chartEditor.getEditorInput().getSWTChartComponentsProvider().getChartsEngine().getProgressionChartSelectedPointPositions(chartEditor.getChart());
+//					ArrayList<EditorPart> linkedEditors = new ArrayList<EditorPart>(); 
+//					linkedEditors.add(editor);
+//					new ProgressionEventCallBack(this.chartEditor).updateLinkedConcordanceEditor(linkedEditors, selectedPointPositions);
+//
+//					
+//				}
+//				catch(PartInitException e1) {
+//					e1.printStackTrace();
+//				}
+//			}
+//			// Send to cooccurrence
+//			else if(this.commandId == ProgressionSelectionListener.SEND_TO_COOCCURRENCE)	{
+//	
+//				CooccurrenceEditorInput editorInput = new CooccurrenceEditorInput(progression.getCorpus());
+//	
+//				try {
+//					IWorkbenchPage page = this.chartEditor.getEditorSite().getWorkbenchWindow().getActivePage();
+//					CooccurrencesEditor editor = (CooccurrencesEditor) page.openEditor(editorInput, CooccurrencesEditor.ID);
+//					editor.setFocus(query);
+//					editor.compute();
+//				}
+//				catch(PartInitException e1) {
+//					e1.printStackTrace();
+//				}
+//			}
+//		}
+		
+	}
+
+	@Override
+	public void widgetDefaultSelected(SelectionEvent e) {
+		// TODO Auto-generated method stub
+
+	}
+
+}

Property changes on: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionSelectionListener.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java	(revision 0)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java	(revision 137)
@@ -0,0 +1,611 @@
+package org.txm.progression.rcp.chartsengine.events;
+
+import java.awt.AWTEvent;
+import java.awt.Color;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.EditorPart;
+import org.jfree.chart.ChartMouseEvent;
+import org.jfree.chart.entity.ChartEntity;
+import org.txm.chartsengine.rcp.events.EventCallBack;
+import org.txm.chartsengine.rcp.events.ZoomAndPanCallBack;
+import org.txm.functions.concordances.comparators.LineComparator;
+import org.txm.objects.Edition;
+import org.txm.objects.Page;
+import org.txm.objects.Text;
+import org.txm.progression.core.chartsengine.base.ProgressionChartCreator;
+import org.txm.progression.core.chartsengine.base.Utils;
+import org.txm.progression.core.functions.Progression;
+import org.txm.rcp.synoptic.commands.OpenEdition;
+import org.txm.rcp.synoptic.editor.EditionPanel.RGBA;
+import org.txm.rcp.synoptic.editor.SynopticEditionEditor;
+import org.txm.rcpapplication.Messages;
+import org.txm.rcpapplication.editors.concordances.ConcordancesEditor;
+import org.txm.rcpapplication.editors.input.ConcordancesEditorInput;
+import org.txm.rcpapplication.utils.SWTEditorsUtils;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.utils.logger.Log;
+
+/**
+ * Progression chart mixed mouse and key user entries call back.
+ * 
+ * @author sjacquot
+ *
+ */
+public class ProgressionEventCallBack extends EventCallBack {
+
+	/**
+	 * To keep track of the concordance lines and recomputing only if the selected item is out of this range.
+	 */
+	protected int lastConcordanceTopLine = -1;
+	protected int lastConcordanceBottomLine = -1;
+	
+	/**
+	 * To keep track of the concordance lines sort and recomputing only if the sorting order has changed.
+	 */
+	protected LineComparator lastSortingComparator = null;
+	
+	
+
+//FIXME: version with TXMBroser old system edition
+//	@Override
+//	public void processEvent(final AWTEvent event, final int eventArea, final Object o) {
+//		
+//		// Need to run this in the SWT UI thread because it's called from the AWT UI thread in TBX charts engine layer
+//		chartEditor.getComposite().getDisplay().asyncExec(new Runnable() {
+//			public void run() {
+//
+//				// Mouse event
+//				if(event instanceof MouseEvent)	{
+//				
+//					MouseEvent mouseEvent = (MouseEvent)event;
+//					
+//					//return if it's not the left mouse button
+//					if(mouseEvent.getButton() != MouseEvent.BUTTON1)	{
+//						return;
+//					}
+//					
+//					
+//					ChartMouseEvent chartEvent = (ChartMouseEvent) o;
+//					ChartEntity entity = chartEvent.getEntity();
+//					final ArrayList<Integer> selectedPointPositions = Utils.getChartCreator(chartEditor.getChartsEngine()).getSelectedPointPositions(chartEditor.getChart());
+//	
+//					if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 2 && eventArea == EventCallBack.AREA_ITEM && !selectedPointPositions.isEmpty()) {
+//	
+//						// Linked edition (CTRL/CMD + double click)
+//						if((mouseEvent.getModifiers() & ZoomAndPanCallBack.keyboardZoomModifierKeyMask) != 0) {
+//							// Updates the linked editor
+//							updateLinkedEditionEditor((TXMBrowser) chartEditor.getLinkedEditor(TXMBrowser.class), selectedPointPositions);
+//						}
+//						// Linked concordance
+//						else	{
+//							// Updates the linked editor
+//							updateLinkedConcordanceEditor(chartEditor.getLinkedEditors(ConcordancesEditor.class), selectedPointPositions);
+//						}
+//					}
+//					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 1 && eventArea == EventCallBack.AREA_ITEM) {
+//
+//						// Get the linked concordance editors and update the one linked to the progression curve if it exists
+//						ArrayList<EditorPart> linkedConcordancesEditors = chartEditor.getLinkedEditors(ConcordancesEditor.class);
+//						if(!linkedConcordancesEditors.isEmpty())	{
+//							updateLinkedConcordanceEditor(linkedConcordancesEditors, selectedPointPositions);
+//						}
+//						
+//						
+//						// Get the linked edition editor and update it if exists
+//						TXMBrowser linkedEditionEditor = (TXMBrowser)chartEditor.getLinkedEditor(TXMBrowser.class);
+//						if(linkedEditionEditor != null)	{
+//							updateLinkedEditionEditor(linkedEditionEditor, selectedPointPositions);
+//						}
+//						
+//					}
+//					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 2 && eventArea == EventCallBack.AREA_EMPTY) {
+//						// FIXME: debug
+//						//System.err.println("ProgressionMouseClickedCallBack.processEvent(...).new Runnable() {...}.run(): double click in empty area");
+//					}
+//					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 1 && eventArea == EventCallBack.AREA_EMPTY) {
+//						// FIXME: debug
+//						//System.err.println("ProgressionMouseClickedCallBack.processEvent(...).new Runnable() {...}.run(): single click in empty area");
+//					}
+//				}
+//				// Key event
+//				else if(event instanceof KeyEvent)	{
+//					KeyEvent keyEvent = (KeyEvent)event;
+//					
+//					// return if zoom and pan modifier
+//					if((keyEvent.getModifiers() & ZoomAndPanCallBack.keyboardZoomModifierKeyMask) != 0) {
+//						return;
+//					}
+//					
+//					// Arrow keys
+//					if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT || keyEvent.getKeyCode() == KeyEvent.VK_RIGHT)	{
+//					
+//						final ArrayList<Integer> selectedPointPositions = Utils.getChartCreator(chartEditor.getChartsEngine()).getSelectedPointPositions(chartEditor.getChart());
+//	
+//						// Get the linked concordance editors and update the one linked to the progression curve if it exists
+//						ArrayList<EditorPart> linkedConcordancesEditors = chartEditor.getLinkedEditors(ConcordancesEditor.class);
+//						if(!linkedConcordancesEditors.isEmpty())	{
+//							updateLinkedConcordanceEditor(linkedConcordancesEditors, selectedPointPositions);
+//						}
+//						
+//						// Get the linked edition editor and update it if exists
+//						TXMBrowser linkedEditionEditor = (TXMBrowser)chartEditor.getLinkedEditor(TXMBrowser.class);
+//						if(linkedEditionEditor != null)	{
+//							updateLinkedEditionEditor(linkedEditionEditor, selectedPointPositions);
+//						}
+//					}
+//				}
+//			}
+//		});
+//
+//	}
+
+	//FIXME: version with new SynopticEditionEditor system edition
+	@Override
+	public void processEvent(final AWTEvent event, final int eventArea, final Object o) {
+		
+		// Need to run this in the SWT UI thread because it's called from the AWT UI thread in TBX charts engine layer
+		chartEditor.getComposite().getDisplay().asyncExec(new Runnable() {
+			public void run() {
+
+				// Mouse event
+				if(event instanceof MouseEvent)	{
+				
+					MouseEvent mouseEvent = (MouseEvent)event;
+					
+					//return if it's not the left mouse button
+					if(mouseEvent.getButton() != MouseEvent.BUTTON1)	{
+						return;
+					}
+					
+					
+					ChartMouseEvent chartEvent = (ChartMouseEvent) o;
+					ChartEntity entity = chartEvent.getEntity();
+					final ArrayList<Integer> selectedPointPositions = Utils.getChartCreator(chartEditor.getChartsEngine()).getSelectedPointPositions(chartEditor.getChart());
+	
+					if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 2 && eventArea == EventCallBack.AREA_ITEM && !selectedPointPositions.isEmpty()) {
+	
+						// Linked edition (CTRL/CMD + double click)
+						if((mouseEvent.getModifiers() & ZoomAndPanCallBack.keyboardZoomModifierKeyMask) != 0) {
+							// Updates the linked editor
+							updateLinkedEditionEditor((SynopticEditionEditor) chartEditor.getLinkedEditor(SynopticEditionEditor.class), selectedPointPositions);
+						}
+						// Linked concordance
+						else	{
+							// Updates the linked editor
+							updateLinkedConcordanceEditor(chartEditor.getLinkedEditors(ConcordancesEditor.class), selectedPointPositions);
+						}
+					}
+					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 1 && eventArea == EventCallBack.AREA_ITEM) {
+
+						// Get the linked concordance editors and update the one linked to the progression curve if it exists
+						ArrayList<EditorPart> linkedConcordancesEditors = chartEditor.getLinkedEditors(ConcordancesEditor.class);
+						if(!linkedConcordancesEditors.isEmpty())	{
+							updateLinkedConcordanceEditor(linkedConcordancesEditors, selectedPointPositions);
+						}
+						
+						
+						// Get the linked edition editor and update it if exists
+						SynopticEditionEditor linkedEditionEditor = (SynopticEditionEditor)chartEditor.getLinkedEditor(SynopticEditionEditor.class);
+						if(linkedEditionEditor != null)	{
+							updateLinkedEditionEditor(linkedEditionEditor, selectedPointPositions);
+						}
+						
+					}
+					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 2 && eventArea == EventCallBack.AREA_EMPTY) {
+						// FIXME: debug
+						//System.err.println("ProgressionMouseClickedCallBack.processEvent(...).new Runnable() {...}.run(): double click in empty area");
+					}
+					else if(event.getID() == MouseEvent.MOUSE_CLICKED && mouseEvent.getClickCount() == 1 && eventArea == EventCallBack.AREA_EMPTY) {
+						// FIXME: debug
+						//System.err.println("ProgressionMouseClickedCallBack.processEvent(...).new Runnable() {...}.run(): single click in empty area");
+					}
+				}
+				// Key event
+				else if(event instanceof KeyEvent)	{
+					KeyEvent keyEvent = (KeyEvent)event;
+					
+					// return if zoom and pan modifier
+					if((keyEvent.getModifiers() & ZoomAndPanCallBack.keyboardZoomModifierKeyMask) != 0) {
+						return;
+					}
+					
+					// Arrow keys
+					if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT || keyEvent.getKeyCode() == KeyEvent.VK_RIGHT)	{
+					
+						final ArrayList<Integer> selectedPointPositions = Utils.getChartCreator(chartEditor.getChartsEngine()).getSelectedPointPositions(chartEditor.getChart());
+	
+						// Get the linked concordance editors and update the one linked to the progression curve if it exists
+						ArrayList<EditorPart> linkedConcordancesEditors = chartEditor.getLinkedEditors(ConcordancesEditor.class);
+						if(!linkedConcordancesEditors.isEmpty())	{
+							updateLinkedConcordanceEditor(linkedConcordancesEditors, selectedPointPositions);
+						}
+						
+						// Get the linked edition editor and update it if exists
+						SynopticEditionEditor linkedEditionEditor = (SynopticEditionEditor)chartEditor.getLinkedEditor(SynopticEditionEditor.class);
+						if(linkedEditionEditor != null)	{
+							updateLinkedEditionEditor(linkedEditionEditor, selectedPointPositions);
+						}
+					}
+				}
+			}
+		});
+
+	}
+	
+	
+	
+	/**
+	 * Updates the linked concordance editor.
+	 * If the editor doesn't exist it will be created.
+	 * @param editor
+	 */
+	public void updateLinkedConcordanceEditor(ArrayList<EditorPart> linkedEditors, ArrayList<Integer> selectedPointPositions)	{
+
+		// FIXME: Debug
+		//System.err.println("ProgressionEventCallBack.updateLinkedConcordanceEditor(): linked editors count: " + linkedEditors.size());
+		
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		IWorkbenchPage page = window.getActivePage();
+
+		// Get and format the progression query from the selected chart series
+		// FIXME: case 1, the query is the query of the selected chart series
+//		ArrayList<Integer> selectedSeries = chartEditor.getEditorInput().getSWTChartComponentsProvider().getChartsEngine().getProgressionChartSelectedSeries(chartEditor.getChart());
+//		String query = ((Progression) chartEditor.getResultData()).getQueries().get(selectedSeries.get(selectedSeries.size() - 1).intValue()).getQueryString();
+		
+		int lastSelectedSeries = Utils.getChartCreator(chartEditor.getChartsEngine()).getLastSelectedSeries(chartEditor.getChart());
+		String query = ((Progression) chartEditor.getResultData()).getQueries().get(lastSelectedSeries).getQueryString();
+
+		// Remove "[" and "]" only if it's a simple query as "[faire]" 
+		if(query.startsWith("[") && !query.contains("="))	{
+			int length = query.length();
+			if(query.endsWith("]"))	{
+				length--;
+			}
+			query = query.substring(1, length);
+		}
+
+		// FIXME: case 2, the query is the combination of all the queries of the progression
+//		String query = ((Progression) chartEditor.getResultData()).getQueriesString();
+		
+		
+		// gets the linked editor according to the query if it exists
+		ConcordancesEditor linkedEditor = null;
+		for(int i = 0; i < linkedEditors.size(); i++) {
+			if(query.equals(((ConcordancesEditor) linkedEditors.get(i)).getConcordance().getQuery().getQueryString()))	{
+				linkedEditor = ((ConcordancesEditor) linkedEditors.get(i));
+				break;
+			}
+		}
+		
+		
+		
+		ConcordancesEditorInput editorInput;
+		boolean newEditor = false;
+		// Create the linked editor input if needed
+		if(linkedEditor == null) {
+			editorInput = new ConcordancesEditorInput(((Progression) chartEditor.getResultData()).getCorpus(), null);
+			newEditor = true;
+		}
+		else	{
+			editorInput = (ConcordancesEditorInput) linkedEditor.getEditorInput();
+		}
+
+		try {
+			boolean wasOpenEditor = SWTEditorsUtils.isOpenEditor(editorInput);
+			
+			linkedEditor = (ConcordancesEditor) page.openEditor(editorInput, "org.txm.rcpapplication.editors.ConcordancesEditor", false); //$NON-NLS-1$
+			if(newEditor)	{
+				chartEditor.addLinkedEditor(linkedEditor);
+			}
+			
+			// Split the area and insert the new editor
+			if(!wasOpenEditor)	{
+				
+				int position = EModelService.BELOW;
+				EditorPart parentEditor = chartEditor;
+				
+				// Split vertically if there is already a concordance or an edition editor otherwise split horizontally
+				if(linkedEditors != null && !linkedEditors.isEmpty())	 {
+					position = EModelService.RIGHT_OF;
+					parentEditor = linkedEditors.get(linkedEditors.size() - 1);
+					
+					System.err.println("ProgressionEventCallBack.updateLinkedConcordanceEditor(): parent editor for splitting: " + parentEditor);
+				}
+				// Split and add linked editor
+				SWTEditorsUtils.addEditor(parentEditor, linkedEditor, position);
+			}
+			
+		}
+		catch (PartInitException e) {
+			System.err.println(NLS.bind(Messages.GetConcordances_4, e));
+		}
+
+		linkedEditor.setQuery(query);
+		// Compute the concordance if the query has changed or if the concordance has never been computed
+		if(linkedEditor.getConcordance() == null || newEditor)	{
+			linkedEditor.compute(false);
+			// initialize range change tracking variables
+			this.lastConcordanceTopLine = 0;
+			this.lastConcordanceBottomLine = linkedEditor.getLinePerPage();
+			this.lastSortingComparator = linkedEditor.getCurrentComparator();
+		}
+
+
+	
+		
+		final TableViewer tableViewer = linkedEditor.getLineTableViewer();
+		if(selectedPointPositions.size() > 0)	{
+
+			// Get the index of the last selected point in concordance according to the global token position and concordance sorting order
+			int lineIndex = linkedEditor.getConcordance().indexOf(selectedPointPositions.get(selectedPointPositions.size() - 1));
+			
+			int top = lineIndex - (lineIndex % linkedEditor.getLinePerPage());
+			int bottom = top + linkedEditor.getLinePerPage() - 1;
+			
+			
+			// Manage the lazy loading of new lines range in the concordance
+			boolean loadLines = false;
+			// not open editor (or new editor)
+			if(!SWTEditorsUtils.isOpenEditor(editorInput))	{
+				loadLines = true;
+			}
+			// page change
+			else if(this.lastConcordanceTopLine != top || this.lastConcordanceBottomLine != bottom)	{
+				loadLines = true;
+			}
+			// sort change
+			else if(this.lastSortingComparator != linkedEditor.getCurrentComparator())	{
+				loadLines = true;
+			}
+			
+			
+			// Loads new lines, fill the display area and select the table row
+			if(loadLines)	{
+				linkedEditor.fillDisplayArea(top, bottom);
+			}
+
+			// update range change tracking variables
+			this.lastConcordanceTopLine = top;
+			this.lastConcordanceBottomLine = bottom;
+			this.lastSortingComparator = linkedEditor.getCurrentComparator();
+
+			
+			
+			final int selectedPointInTableRange = lineIndex - top;						
+	
+			tableViewer.getControl().getDisplay().asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					tableViewer.getTable().deselectAll();
+					
+					Object line = tableViewer.getElementAt(selectedPointInTableRange);
+					if(line != null)	{
+						tableViewer.setSelection(new StructuredSelection(line), true);
+						// FIXME: commented because the set top index makes the read of the table difficult
+						//tableViewer.getTable().setTopIndex(selectedPointInTableRange);
+					}
+					else	{
+						Log.info("Selected progression point doesn't exist in the linked Concordance.");
+					}
+				}
+			});
+		}
+		else	{
+			tableViewer.getTable().deselectAll();
+		}
+		
+		// give back the focus to chart editor
+		chartEditor.setFocus();
+	}
+
+	//FIXME: version with new SynopticEditionEditor system edition
+	/**
+	 * Updates the linked edition editor.
+	 * If the editor doesn't exist it will be created.
+	 * @param editor
+	 */
+	public void updateLinkedEditionEditor(SynopticEditionEditor linkedEditor, ArrayList<Integer> selectedPointPositions)	{
+		
+		
+		
+		
+		try {
+		
+			ArrayList<Color> seriesColors = chartEditor.getChartsEngine().getChartCreator(Progression.class).getSeriesShapesColors(chartEditor.getChart());
+			RGBA selectedWordColor = new RGBA(255, 10, 10);
+
+			//FIXME: old color
+			//RGBA lightred = new RGBA(249,208,208);
+			
+			// Unhighlight all tokens
+			if(linkedEditor != null)	{
+				linkedEditor.removeHighlightWords();
+			}
+			
+			Corpus corpus = ((Progression) chartEditor.getResultData()).getCorpus();
+			StructuralUnit textS = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+			Property textP = textS.getProperty("id"); //$NON-NLS-1$
+			Match selectedWordMatch = new Match(selectedPointPositions.get(selectedPointPositions.size() - 1), selectedPointPositions.get(selectedPointPositions.size() - 1));
+			String textId = selectedWordMatch.getValueForProperty(textP);
+
+			Text text = corpus.getText(textId);
+			if(text == null) {
+				Log.severe("Text " + textId + " is missing.");
+				return;
+			}
+
+			Edition edition = text.getEdition(corpus.getMainCorpus().getDefaultEdition());
+
+			if(edition == null) {
+				Log.severe("Default edition is missing.");
+				return;
+			}
+
+			// Get the current selected word to highlight more
+			List<String> selectedWordIds = selectedWordMatch.getValuesForProperty(corpus.getProperty("id")); //$NON-NLS-1$;
+
+			// Get all words to highlight from the progression chart data set
+			ArrayList<ArrayList<Integer>> allPointPositionsBySeries = ((ProgressionChartCreator)chartEditor.getEditorInput().getChartsEngine().getChartCreator(Progression.class)).getAllPointPositionsBySeries(chartEditor.getChart());
+			
+			ArrayList<ArrayList<String>> allWordIds = new ArrayList<ArrayList<String>>(allPointPositionsBySeries.size());
+			for(int i = 0; i < allPointPositionsBySeries.size(); i++) {
+				ArrayList<Integer> positions = allPointPositionsBySeries.get(i);
+				ArrayList<String> wordsIds = new ArrayList<String>(); 
+				for(int j = 0; j < positions.size(); j++) {
+					Match match = new Match(positions.get(j), positions.get(j));					
+					if(match.getValueForProperty(textP).equals(textId)) {
+						wordsIds.add(match.getValueForProperty(corpus.getProperty("id"))); //$NON-NLS-1$;
+					}
+				}
+				allWordIds.add(wordsIds);
+			}
+
+			Page openPage = edition.getPageForWordId(selectedWordIds.get(0));
+
+			if(openPage != null) {
+
+				// Create the linked editor if needed
+				if(linkedEditor == null || linkedEditor.isDisposed()) {
+					linkedEditor = OpenEdition.openEdition(corpus, OpenEdition.getDefaultEditions(corpus));
+					chartEditor.addLinkedEditor(linkedEditor);
+					
+					
+					int position = EModelService.BELOW;;
+					EditorPart parentEditor = chartEditor;
+					// Split vertically if there is already a concordance editor otherwise split horizontally
+					ConcordancesEditor linkedConcordanceEditor = (ConcordancesEditor)chartEditor.getLinkedEditor(ConcordancesEditor.class);
+					if(linkedConcordanceEditor != null)	{
+						position = EModelService.RIGHT_OF;
+						parentEditor = linkedConcordanceEditor;
+					}
+					
+					// Split and add linked editor
+					SWTEditorsUtils.addEditor(parentEditor, linkedEditor, position);
+				}
+
+				linkedEditor.setText(text, true);
+				linkedEditor.goToPage(openPage.getName());
+				
+				// Highlight tokens by series
+				for(int i = 0; i < allWordIds.size(); i++) {
+					linkedEditor.addHighlightWordsById(new RGBA(seriesColors.get(i).getRed(), seriesColors.get(i).getGreen(), seriesColors.get(i).getBlue()), allWordIds.get(i));
+				}
+				// Highlight selected curve token
+				linkedEditor.addHighlightWordsById(selectedWordColor, selectedWordIds);
+				linkedEditor.setFocusedWordID(selectedWordIds.get(0)); // to scroll to the selected word
+				
+				IWorkbenchPage attachedPage = linkedEditor.getEditorSite().getPage();
+				attachedPage.activate(linkedEditor);
+			}
+		}
+		catch(Exception e) {
+			Log.printStackTrace(e);
+		}
+	}
+
+	//FIXME: version with TXMBroser old system edition
+//	/**
+//	 * Updates the linked edition editor.
+//	 * If the editor doesn't exist it will be created.
+//	 * @param editor
+//	 */
+//	public void updateLinkedEditionEditor(TXMBrowser linkedEditor, ArrayList<Integer> selectedPointPositions)	{
+//		
+//		try {
+//			
+//			// Unhighlight all tokens if no selected points
+//			if(selectedPointPositions.size() < 1)	{
+//				linkedEditor.setWordsIds(new ArrayList<String>(), new ArrayList<String>());
+//				linkedEditor.showPage(linkedEditor.getCurrentPage());
+//				return;
+//			}
+//			
+//			Corpus corpus = ((Progression2) chartEditor.getResultData()).getCorpus();
+//			StructuralUnit textS = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+//			Property textP = textS.getProperty("id"); //$NON-NLS-1$
+//			Match selectedWordMatch = new Match(selectedPointPositions.get(selectedPointPositions.size() - 1), selectedPointPositions.get(selectedPointPositions.size() - 1));
+//			String textId = selectedWordMatch.getValueForProperty(textP);
+//
+//			Text text = corpus.getText(textId);
+//			if(text == null) {
+//				Log.severe("Text " + textId + " is missing.");
+//				return;
+//			}
+//
+//			Edition edition = text.getEdition(corpus.getMainCorpus().getDefaultEdition());
+//			if(edition == null) {
+//				Log.severe("Default edition is missing.");
+//				return;
+//			}
+//
+//			// Get the current selected word to highlight more
+//			List<String> selectedWordIds = selectedWordMatch.getValuesForProperty(corpus.getProperty("id")); //$NON-NLS-1$;
+//
+//			// Get all words to highlight from the progression chart data set
+//			ArrayList<Integer> allPointPositions = ((ProgressionChartCreator)chartEditor.getEditorInput().getChartsEngine().getChartCreator(Progression2.class)).getAllPointPositions(chartEditor.getChart());
+//			
+//			ArrayList<String> wordIds = new ArrayList<String>(allPointPositions.size());
+//			for(int i = 0; i < allPointPositions.size(); i++) {
+//				Match match = new Match(allPointPositions.get(i), allPointPositions.get(i));
+//				if(match.getValueForProperty(textP).equals(textId)) {
+//					wordIds.add(match.getValueForProperty(corpus.getProperty("id"))); //$NON-NLS-1$;
+//				}
+//			}
+//
+//			Page openPage = edition.getPageForWordId(selectedWordIds.get(0));
+//
+//			if(openPage != null) {
+//
+//				// Create the linked editor if needed
+//				if(linkedEditor == null || linkedEditor.isDisposed()) {
+//					linkedEditor = OpenBrowser.openEdition(openPage.getFile().getAbsolutePath(), openPage.getFile().getName());
+//					linkedEditor.setEdition(edition);
+//					chartEditor.addLinkedEditor(linkedEditor);
+//					
+//					
+//					int position = EModelService.BELOW;;
+//					EditorPart parentEditor = chartEditor;
+//					// Split vertically if there is already a concordance editor otherwise split horizontally
+//					ConcordancesEditor linkedConcordanceEditor = (ConcordancesEditor)chartEditor.getLinkedEditor(ConcordancesEditor.class);
+//					if(linkedConcordanceEditor != null)	{
+//						position = EModelService.RIGHT_OF;
+//						parentEditor = linkedConcordanceEditor;
+//					}
+//					
+//					// Split and add linked editor
+//					SWTEditorsUtils.addEditor(parentEditor, linkedEditor, position);
+//				}
+//
+//				linkedEditor.showPage(openPage);
+//				// Highlight tokens
+//				linkedEditor.setWordsIds(wordIds, selectedWordIds);
+//
+//				IWorkbenchPage attachedPage = linkedEditor.getEditorSite().getPage();
+//				attachedPage.activate(linkedEditor);
+//			}
+//		}
+//		catch(Exception e) {
+//			Log.printStackTrace(e);
+//		}
+//	}
+
+
+
+	
+	    
+}

Property changes on: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/handlers/ComputeProgression.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/handlers/ComputeProgression.java	(revision 136)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/handlers/ComputeProgression.java	(revision 137)
@@ -47,8 +47,8 @@
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
 import org.txm.chartsengine.svgbatik.rcp.SVGSWTChartsComponentsProvider;
 import org.txm.core.preferences.TXMPreferences;
-import org.txm.progression.core.functions.Progression2;
-import org.txm.progression.core.messages.TBXProgressionMessages;
+import org.txm.progression.core.functions.Progression;
+import org.txm.progression.core.messages.ProgressionCoreMessages;
 import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.progression.rcp.dialogs.ProgressionDialog;
 import org.txm.progression.rcp.forms.ProgressionParametersComposite;
@@ -72,7 +72,7 @@
 	// FIXME: should be put in an Activator? or better in an extension point loaded by the corpora view? or in a method called here as initTreeDoubleClickListener(Class resultDataType, String commandId)?
 	// adds a double click listener to the Corpus View
 	static	{
-		CorporaView.addDoubleClickListener(Progression2.class, "ComputeProgression"); //$NON-NLS-1$
+		CorporaView.addDoubleClickListener(Progression.class, "ComputeProgression"); //$NON-NLS-1$
 	}
 	
 	
@@ -85,7 +85,7 @@
 		if (!Toolbox.isSearchEngineInitialized()) return false;
 		
 		if (!Toolbox.isStatEngineInitialized()) {
-			Log.severe(TBXProgressionMessages.ComputeProgression_5);
+			Log.severe(ProgressionCoreMessages.ComputeProgression_5);
 			return null;
 		}
 		
@@ -97,8 +97,8 @@
 		if(selection.getFirstElement() instanceof Corpus)	{
 			Corpus corpus = (Corpus) selection.getFirstElement();
 
-			if (!Progression2.canRunProgression(corpus)) {
-				Log.severe(TBXProgressionMessages.ComputeProgression_0);
+			if (!Progression.canRunProgression(corpus)) {
+				Log.severe(ProgressionCoreMessages.ComputeProgression_0);
 				// La fonctionnalité Progression n'est pas encore disponible pour les sous-corpus discontinus.
 				return null;
 			}
@@ -114,8 +114,8 @@
 
 		}
 		// Reopens a progression result with default preferences
-		else if(selection.getFirstElement() instanceof Progression2)	{
-			openEditor((Progression2) selection.getFirstElement());
+		else if(selection.getFirstElement() instanceof Progression)	{
+			openEditor((Progression) selection.getFirstElement());
 		}
 		
 		return null;
@@ -132,7 +132,7 @@
 	 * @param cumulative
 	 * @return
 	 */
-	public static ChartEditorPart openEditor(Progression2 progression) {
+	public static ChartEditorPart openEditor(Progression progression) {
 		
 		
 		
@@ -210,7 +210,7 @@
 	public static Object computeProgression(final ProgressionDialog dialog) {
 		if (!Toolbox.isSearchEngineInitialized()) return false;
 		
-		JobHandler jobhandler = new JobHandler(NLS.bind(TBXProgressionMessages.ComputeProgression_2, dialog.getQueries(), dialog.getCorpus().getName())) {
+		JobHandler jobhandler = new JobHandler(NLS.bind(ProgressionCoreMessages.ComputeProgression_2, dialog.getQueries(), dialog.getCorpus().getName())) {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -218,12 +218,12 @@
 				try {
 					final Corpus corpus = dialog.getCorpus();
 					if (dialog.getQueries().size() == 0) {
-						Log.severe(TBXProgressionMessages.ComputeProgression_6);
+						Log.severe(ProgressionCoreMessages.ComputeProgression_6);
 						return Status.CANCEL_STATUS;
 					}
 
 					
-					final Progression2 progression = new Progression2(dialog.getCorpus(), dialog.getQueries(), dialog.getStructuralUnit(), dialog.getStructuralProperty(), dialog.getPropertyregex(),
+					final Progression progression = new Progression(dialog.getCorpus(), dialog.getQueries(), dialog.getStructuralUnit(), dialog.getStructuralProperty(), dialog.getPropertyregex(),
 							dialog.isCumulativeType(), dialog.getLineWidth(), dialog.isRepeatvalues(), dialog.getBandeMultiplier());
 
 					
@@ -236,7 +236,7 @@
 					
 					
 					
-					Log.info(NLS.bind(TBXProgressionMessages.ComputeProgression_4, 
+					Log.info(NLS.bind(ProgressionCoreMessages.ComputeProgression_4, 
 							new Object[]{dialog.getCorpus(), dialog.getQueries(), dialog.getStructuralUnit(), dialog.getStructuralProperty(), dialog.isCumulativeType()}));
 					
 					
@@ -247,7 +247,7 @@
 					boolean success = true;//progression.process();
 
 					if (!progression.stepQueries()) {
-						System.out.println(TBXProgressionMessages.ComputeProgression_3);
+						System.out.println(ProgressionCoreMessages.ComputeProgression_3);
 						return Status.CANCEL_STATUS;
 					}
 					if (monitor.isCanceled()) return Status.CANCEL_STATUS;
@@ -269,7 +269,7 @@
 								
 								openEditor(progression);
 									
-								StatusLine.setMessage(TBXProgressionMessages.ComputeProgression_10);
+								StatusLine.setMessage(ProgressionCoreMessages.ComputeProgression_10);
 								
 							}
 						});
@@ -280,16 +280,16 @@
 					CorporaView.storeResult(corpus, progression);
 					
 					monitor.worked(5);
-					System.out.println(NLS.bind(TBXProgressionMessages.ComputeProgression_12, progression.getPositionsCounts()));
+					System.out.println(NLS.bind(ProgressionCoreMessages.ComputeProgression_12, progression.getPositionsCounts()));
 				} catch (ThreadDeath td) { 
 					return Status.CANCEL_STATUS;
 				} catch (Exception e) {
-					System.out.println(NLS.bind(TBXProgressionMessages.ComputeProgression_13, e));
-					Log.severe(TBXProgressionMessages.ComputeProgression_13 + Log.toString(e));
+					System.out.println(NLS.bind(ProgressionCoreMessages.ComputeProgression_13, e));
+					Log.severe(ProgressionCoreMessages.ComputeProgression_13 + Log.toString(e));
 					try {
 						System.out.println(Messages.LastCQPError + Toolbox.getCqiClient().getLastCQPError());
 					} catch (Exception e1) {
-						System.out.println(TBXProgressionMessages.ComputeProgression_1 + e1);
+						System.out.println(ProgressionCoreMessages.ComputeProgression_1 + e1);
 						Log.printStackTrace(e1);
 					}
 				} finally {
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorInput.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorInput.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorInput.java	(revision 137)
@@ -3,11 +3,11 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IPersistableElement;
+import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.functions.TXMResult;
-import org.txm.functions.specificities.SpecificitesResult;
 import org.txm.searchengine.cqp.corpus.Partition;
 
 /**
@@ -208,7 +208,15 @@
 		return this.swtChartsComponentsProvider;
 	}
 
+	/**
+	 * Gets the charts engine linked to this editor input.
+	 * @return
+	 */
+	public ChartsEngine getChartsEngine()	{
+		return this.swtChartsComponentsProvider.getChartsEngine();
+	}
 	
+	
 	@Override
 	public boolean equals(Object obj)	{
 		if(obj instanceof ChartEditorInput)	{
@@ -217,9 +225,9 @@
 //				return true;
 //			};
 			// Always recreate an editor for specificites result
-			if(((ChartEditorInput) obj).getResultData() instanceof SpecificitesResult)	{
-				return false;
-			}
+//			if(((ChartEditorInput) obj).getResultData() instanceof SpecificitesResult)	{
+//				return false;
+//			}
 			// Always recreate an editor for partition dimension result
 			if(((ChartEditorInput) obj).getResultData() instanceof Partition)	{
 				return false;
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorPart.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorPart.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditorPart.java	(revision 137)
@@ -4,7 +4,10 @@
 import java.io.File;
 import java.util.ArrayList;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -24,7 +27,10 @@
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.MultiPageEditorPart;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
+import org.txm.chartsengine.rcp.events.EventCallBack;
+import org.txm.chartsengine.rcp.events.EventCallBackHandler;
 import org.txm.chartsengine.rcp.swt.ChartComposite;
 import org.txm.chartsengine.rcp.swt.ChartEditorToolBar;
 import org.txm.functions.TXMResult;
@@ -42,7 +48,7 @@
 	/**
 	 * The <code>EditorPart</code> ID constant. 
 	 */
-	protected static final String ID =  ChartEditorPart.class.getCanonicalName();
+	//protected static final String ID =  ChartEditorPart.class.getCanonicalName();
 	 
 	/**
 	 * The tool bar.
@@ -118,15 +124,7 @@
 //	public abstract String getID();
 
 
-	/**
-	 * Gets the <code>EditorPart</code> ID.
-	 * @return the ID
-	 */
-	public String getID()	{
-		return ID;
-	}
 
-
 	@Override
 	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
 		this.setSite(site);
@@ -249,7 +247,7 @@
 		//this.toolBar.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
 
 		// Chart composite
-		ChartComposite composite = this.getEditorInput().getSWTChartsComponentsProvider().createComposite(this, parent);
+		ChartComposite composite = this.getSWTChartsComponentsProvider().createComposite(this, parent);
 
 //		FormData formData2 = new FormData();
 //		formData2.top = new FormAttachment(toolBarsComposite, 10);
@@ -266,6 +264,52 @@
 		//parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
 
 		
+		
+		// initialize the default shared context menus as Export, etc.
+		SWTChartsComponentsProvider.initDefaultContextMenus(composite);
+
+		
+		// registers user entries event call back extensions
+		String extensionPointId = "org.txm.chartsengine.eventcallback"; //$NON-NLS-1$
+		IConfigurationElement[] contributions = Platform.getExtensionRegistry().getConfigurationElementsFor(extensionPointId);
+		
+		for(int i = 0; i < contributions.length; i++) {
+			if(
+				(
+						contributions[i].getAttribute("chartsEngineName") == null || //$NON-NLS-1$ // for callback that can be used for all charts engine implementations 
+						contributions[i].getAttribute("chartsEngineName").equals(this.getChartsEngine().getName()) //$NON-NLS-1$
+				)
+				&&
+				contributions[i].getAttribute("resultDataClass") != null //$NON-NLS-1$
+				&& contributions[i].getAttribute("resultDataClass").equals(this.getResultData().getClass().getName()) //$NON-NLS-1$
+				
+				&& (contributions[i].getAttribute("chartType") == null && this.getChartType().equals(this.getResultData().getClass().getName())  //$NON-NLS-1$
+					||
+					contributions[i].getAttribute("chartType") != null && contributions[i].getAttribute("chartType").equals(this.getChartType())  //$NON-NLS-1$  //$NON-NLS-2$
+				)
+				
+			)	{
+				try {
+					EventCallBack eventCallBack = (EventCallBack)contributions[i].createExecutableExtension("class");  //$NON-NLS-1$
+					
+					eventCallBack.setChartEditor(this);
+					
+					EventCallBackHandler mouseHandler = composite.getMouseCallBackHandler();
+					if(mouseHandler != null && mouseHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+						mouseHandler.registerEventCallBack(eventCallBack);
+					}
+					EventCallBackHandler keyboardHandler = composite.getKeyCallBackHandler();
+					if(keyboardHandler != null && keyboardHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+						keyboardHandler.registerEventCallBack(eventCallBack);
+					}
+				}
+				catch(CoreException e) {
+					e.printStackTrace();
+				}
+				break;
+			}
+		}
+		
 	}
 
 	
@@ -487,13 +531,21 @@
 	}
 
 	/**
-	 * Returns the chart components provider associated with the editor.
+	 * Returns the chart components provider associated with the editor (through its <code>ChartEditorInput</code>).
 	 * @return
 	 */
 	public SWTChartsComponentsProvider getSWTChartsComponentsProvider()	{
 		return this.getEditorInput().getSWTChartsComponentsProvider();
 	}
 
+	/**
+	 * Gets the charts engine associated with the editor (through its <code>ChartEditorInput</code>).
+	 * @return
+	 */
+	public ChartsEngine getChartsEngine()	{
+		return this.getEditorInput().getChartsEngine();
+	}
+	
 
 	/**
 	 * Exports the current view of the chart editor in the specified file.
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ResetChartView.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ResetChartView.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ResetChartView.java	(revision 137)
@@ -3,8 +3,10 @@
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.ToolItem;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
+import org.txm.chartsengine.rcp.swt.ChartEditorToolBar;
 
 /**
  * Resets the chart view of the active chart editor part.
@@ -13,18 +15,16 @@
  */
 public class ResetChartView extends AbstractHandler {
 
-	/**
-	 * 
-	 */
-	public ResetChartView() {
-	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		ChartEditorPart chartEditor = (ChartEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		ChartEditorPart chartEditor = ((ChartEditorToolBar)((ToolItem)((Event)event.getTrigger()).widget).getParent()).getEditorPart();
+		// for information the code below can not be used because it doesn't work in multi page editor, eg. for Singular Values editor in CA editor
+		//ChartEditorPart chartEditor = (ChartEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		
 		chartEditor.resetView();
 		chartEditor.forceFocus();
 		return null;
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ExportChartEditorView.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ExportChartEditorView.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/handlers/ExportChartEditorView.java	(revision 137)
@@ -31,12 +31,6 @@
 import java.io.IOException;
 //import java.nio.file.Files;
 
-
-
-
-
-
-
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -45,13 +39,15 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolItem;
 import org.eclipse.ui.PlatformUI;
 import org.txm.chartsengine.core.ChartsEngine;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
-import org.txm.rcpapplication.Application;
+import org.txm.chartsengine.rcp.swt.ChartEditorToolBar;
 import org.txm.rcpapplication.JobsTimer;
 import org.txm.rcpapplication.Messages;
 import org.txm.rcpapplication.StatusLine;
@@ -73,28 +69,16 @@
 
 	public static final String ID = "org.txm.chartsengine.rcp.handlers.ExportChartEditorView"; //$NON-NLS-1$
 
-	/**
-	 * The chart editor source of the event.
-	 */
-	protected ChartEditorPart chartEditorPart;
 
 	
-	public ExportChartEditorView() {
-		this.chartEditorPart = (ChartEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
-	}
-
-	
-	/**
-	 *
-	 * @param chartEditorPart
-	 */
-	public ExportChartEditorView(ChartEditorPart chartEditorPart) {
-		this.chartEditorPart = chartEditorPart;
-	}
-
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 
+		final ChartEditorPart chartEditorPart = ((ChartEditorToolBar)((ToolItem)((Event)event.getTrigger()).widget).getParent()).getEditorPart();
+		// for information the code below can not be used because it doesn't work in multi page editor, eg. for Singular Values editor in CA editor
+		//final ChartEditorPart chartEditorPart = (ChartEditorPart) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+		
 		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
 		final FileDialog dialog = new FileDialog(shell, SWT.SAVE);
 
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/SWTChartsComponentsProvider.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/SWTChartsComponentsProvider.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/SWTChartsComponentsProvider.java	(revision 137)
@@ -159,8 +159,28 @@
 	}
 
 	
+	/**
+	 * Creates and return a SWT EditorPart filled with a new chart for the specified result.
+	 * @param editorInputName
+	 * @param resultData
+	 * @param preferencesNode
+	 * @return
+	 */
+	public ChartEditorPart createChartEditor(String editorInputName, TXMResult resultData, String preferencesNode) {
+		return this.createChartEditor(editorInputName, resultData, preferencesNode, resultData.getClass().getName());
+	}
 	
 	/**
+	 * Creates and return a SWT EditorPart filled with a new chart for the specified result.
+	 * @param resultData
+	 * @param preferencesNode
+	 * @return
+	 */
+	public ChartEditorPart createChartEditor(TXMResult resultData, String preferencesNode, String chartType) {
+		return this.createChartEditor(this.getChartsEngine().getChartCreator(resultData.getClass(), chartType).getFileNamePrefix(), resultData, preferencesNode, chartType);
+	}
+	
+	/**
 	 * Creates a new chart for the specified result data and save it in the specified editor input.
 	 * A chart editor created with the editor input will be filled with chart.
 	 * @param chartEditorInput
@@ -632,39 +652,45 @@
 				
 				
 				// initialize the default shared context menus as Export, etc.
-				initDefaultContextMenus(openedChartEditorPart.getComposite());
+//				initDefaultContextMenus(openedChartEditorPart.getComposite());
 				
 				
 				
-				// registers user entries event call back extensions
-				String extensionPointId = "org.txm.chartsengine.eventcallback"; //$NON-NLS-1$
-				IConfigurationElement[] contributions = Platform.getExtensionRegistry().getConfigurationElementsFor(extensionPointId);
+//				// registers user entries event call back extensions
+//				String extensionPointId = "org.txm.chartsengine.eventcallback"; //$NON-NLS-1$
+//				IConfigurationElement[] contributions = Platform.getExtensionRegistry().getConfigurationElementsFor(extensionPointId);
+//				
+//				for(int i = 0; i < contributions.length; i++) {
+//					if(
+//							(
+//							contributions[i].getAttribute("chartsEngineName") == null || //$NON-NLS-1$ // for callback that can be used for all charts engine implementations 
+//							contributions[i].getAttribute("chartsEngineName").equals(this.chartsEngine.getName()) //$NON-NLS-1$
+//							)
+//							&&
+//							contributions[i].getAttribute("resultDataClass") != null &&
+//							contributions[i].getAttribute("resultDataClass").equals(openedChartEditorPart.getResultData().getClass().getName()) //$NON-NLS-1$
+//							)	{
+//						try {
+//							EventCallBack eventCallBack = (EventCallBack)contributions[i].createExecutableExtension("class");  //$NON-NLS-1$
+//							
+//							eventCallBack.setChartEditor(openedChartEditorPart);
+//							
+//							EventCallBackHandler mouseHandler = openedChartEditorPart.getComposite().getMouseCallBackHandler();
+//							if(mouseHandler != null && mouseHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+//								mouseHandler.registerEventCallBack(eventCallBack);
+//							}
+//							EventCallBackHandler keyboardHandler = openedChartEditorPart.getComposite().getKeyCallBackHandler();
+//							if(keyboardHandler != null && keyboardHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
+//								keyboardHandler.registerEventCallBack(eventCallBack);
+//							}
+//						}
+//						catch(CoreException e) {
+//							e.printStackTrace();
+//						}
+//						break;
+//					}
+//				}
 				
-				for(int i = 0; i < contributions.length; i++) {
-					if(contributions[i].getAttribute("chartsEngineName").equals(this.chartsEngine.getName()) //$NON-NLS-1$
-							&& contributions[i].getAttribute("resultDataClass").equals(openedChartEditorPart.getResultData().getClass().getName()) //$NON-NLS-1$
-							)	{
-						try {
-							EventCallBack eventCallBack = (EventCallBack)contributions[i].createExecutableExtension("class");  //$NON-NLS-1$
-							
-							eventCallBack.setChartEditor(openedChartEditorPart);
-							
-							EventCallBackHandler mouseHandler = openedChartEditorPart.getComposite().getMouseCallBackHandler();
-							if(mouseHandler != null && mouseHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
-								mouseHandler.registerEventCallBack(eventCallBack);
-							}
-							EventCallBackHandler keyboardHandler = openedChartEditorPart.getComposite().getKeyCallBackHandler();
-							if(keyboardHandler != null && keyboardHandler.getEventCallBack(eventCallBack.getClass()) == null)	 {
-								keyboardHandler.registerEventCallBack(eventCallBack);
-							}
-						}
-						catch(CoreException e) {
-							e.printStackTrace();
-						}
-						break;
-					}
-				}
-				
 				openedChartEditorPart.forceFocus();
 				
 			}
@@ -681,7 +707,7 @@
 			for(int i = 0; i < ChartsEngine.getChartsEngines().size() && !canCreate; i++) {
 				if(ChartsEngine.getChartsEngines().get(i) != this.chartsEngine)	{
 					ChartsEngine chartsEngine = ChartsEngine.getChartsEngines().get(i);
-					canCreate = chartsEngine.canCreateChart(chartEditorInput.getResultData().getClass());
+					canCreate = chartsEngine.canCreateChart(chartEditorInput.getResultData().getClass(), chartType);
 					// get a provider that can manage the charts engine
 					if(canCreate)	{
 						SWTChartsComponentsProvider provider = SWTChartsComponentsProvider.getComponentsProvider(chartsEngine);
@@ -689,7 +715,7 @@
 							provider.setChartsEngine(chartsEngine);
 							chartEditorInput.setSWTChartsComponentsProvider(provider);
 							Log.warning(provider.toString());
-							return provider.openEditor(chartEditorInput, editorPartId);
+							return provider.openEditor(chartEditorInput, editorPartId, chartType);
 						}
 					}
 				}
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/BaseSelectionListener.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/BaseSelectionListener.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/BaseSelectionListener.java	(revision 137)
@@ -51,7 +51,7 @@
 		// Export view
 		else if(this.commandId == BaseSelectionListener.EXPORT_VIEW)	{
 
-			ExportChartEditorView exportChartEditorView = new ExportChartEditorView(this.chartEditor);
+			ExportChartEditorView exportChartEditorView = new ExportChartEditorView();
 			try {
 				// FIXME : can null argument make trouble ?
 				// FIXME: yes the problem here is that you can't get the application context from the ExecutionEvent in the command
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/EventCallBackHandler.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/EventCallBackHandler.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/events/EventCallBackHandler.java	(revision 137)
@@ -45,9 +45,9 @@
 	}
 	
 	/**
-	 * Registers a call back linked to the mouse clicked event.
+	 * Registers an event callback.
 	 * Only one event callback is allowed for a same class type.
-	 * @param mouseClickedCallBack the mouseClickedCallBack to set
+	 * @param eventCallBack
 	 */
 	public void registerEventCallBack(EventCallBack eventCallBack) {
 		// Do not add to event call backs of same type
@@ -57,6 +57,7 @@
 				return;
 			}
 		}
+		System.out.println("EventCallBackHandler.registerEventCallBack(): call back of type " + eventCallBack.getClass() + " registered.");
 		this.eventCallBacks.add(eventCallBack);
 		eventCallBack.setSwtChartsComponentProvider(this.swtChartsComponentProvider);
 	}
Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/messages/SWTComponentsProviderMessages.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/messages/SWTComponentsProviderMessages.java	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/messages/SWTComponentsProviderMessages.java	(revision 137)
@@ -1,7 +1,7 @@
 package org.txm.chartsengine.rcp.messages;
 
 import org.eclipse.osgi.util.NLS;
-import org.txm.core.messages.TXMMessages;
+import org.txm.core.messages.TXMCoreMessages;
 
 public class SWTComponentsProviderMessages extends NLS {
 	
@@ -49,7 +49,7 @@
 	
 	static {
 		// initialize resource bundle
-		TXMMessages.initializeMessages(BUNDLE_NAME, SWTComponentsProviderMessages.class);
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, SWTComponentsProviderMessages.class);
 	}
 
 	private SWTComponentsProviderMessages() {
Index: tmp/org.txm.chartsengine.rcp/schema/org.txm.chartsengine.eventcallback.exsd
===================================================================
--- tmp/org.txm.chartsengine.rcp/schema/org.txm.chartsengine.eventcallback.exsd	(revision 136)
+++ tmp/org.txm.chartsengine.rcp/schema/org.txm.chartsengine.eventcallback.exsd	(revision 137)
@@ -73,6 +73,13 @@
                </documentation>
             </annotation>
          </attribute>
+         <attribute name="chartType" type="string">
+            <annotation>
+               <documentation>
+                  The chart type linked to this callback. It&apos;s dedicated to manage callbacks for most that one chart type, eg. CA Factorial Map and Singular Values Bar Chart. Can be left empty if only one chart type exists for the result data class.
+               </documentation>
+            </annotation>
+         </attribute>
       </complexType>
    </element>
 
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsPieChartCreator.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsPieChartCreator.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsPieChartCreator.java	(revision 137)
@@ -7,7 +7,7 @@
 import org.txm.chartsengine.r.core.RChartsEngine;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.partition.core.chartsengine.base.Utils;
-import org.txm.partition.core.messages.TBXPartitionMessages;
+import org.txm.partition.core.messages.PartitionCoreMessages;
 import org.txm.partition.core.preferences.PartitionDimensionsPreferences;
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
@@ -79,7 +79,7 @@
 			// Create chart title
 			String title = Utils.createPartitionDimensionsChartTitle(partition, sortPartsBySize, displayPartsCountInTitle);
 
-			String ylab = TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
+			String ylab = PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
 
 			String cmd = "pie(" + ssizes + ", labels=" + snames + //$NON-NLS-1$ //$NON-NLS-2$
 					", main=\"" + title + "\", horiz=F, las=2, ylab=\"" + ylab + "\")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -88,7 +88,7 @@
 			((RChartsEngine) this.chartsEngine).plot(file, cmd);
 		}
 		catch(Exception e) {
-			Log.severe(TBXPartitionMessages.bind(TBXPartitionMessages.CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, RChartsEngine.DESCRIPTION) + e);
+			Log.severe(PartitionCoreMessages.bind(PartitionCoreMessages.CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, RChartsEngine.DESCRIPTION) + e);
 		}
 
 		return file;
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsBarChartCreator.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsBarChartCreator.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/r/RPartitionDimensionsBarChartCreator.java	(revision 137)
@@ -7,7 +7,7 @@
 import org.txm.chartsengine.r.core.RChartsEngine;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.partition.core.chartsengine.base.Utils;
-import org.txm.partition.core.messages.TBXPartitionMessages;
+import org.txm.partition.core.messages.PartitionCoreMessages;
 import org.txm.partition.core.preferences.PartitionDimensionsPreferences;
 import org.txm.searchengine.cqp.corpus.Part;
 import org.txm.searchengine.cqp.corpus.Partition;
@@ -80,7 +80,7 @@
 			// Create chart title
 			String title = Utils.createPartitionDimensionsChartTitle(partition, sortPartsBySize, displayPartsCountInTitle);
 
-			String ylab = TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
+			String ylab = PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
 
 			String cmd = "barplot(" + ssizes + ", names.arg=" + snames + //$NON-NLS-1$ //$NON-NLS-2$
 					", main=\"" + title + "\", horiz=F, las=2, ylab=\"" + ylab + "\")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
@@ -88,7 +88,7 @@
 			((RChartsEngine) this.chartsEngine).plot(file, cmd);
 		}
 		catch(Exception e) {
-			Log.severe(TBXPartitionMessages.bind(TBXPartitionMessages.CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, RChartsEngine.DESCRIPTION) + e);
+			Log.severe(PartitionCoreMessages.bind(PartitionCoreMessages.CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART, RChartsEngine.DESCRIPTION) + e);
 			Log.printStackTrace(e);
 		}
 
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/base/Utils.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/base/Utils.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/base/Utils.java	(revision 137)
@@ -1,6 +1,6 @@
 package org.txm.partition.core.chartsengine.base;
 
-import org.txm.partition.core.messages.TBXPartitionMessages;
+import org.txm.partition.core.messages.PartitionCoreMessages;
 import org.txm.searchengine.cqp.corpus.Partition;
 
 /**
@@ -24,14 +24,14 @@
 	 */
 	public static String createPartitionDimensionsChartTitle(Partition partition, boolean sortPartsBySize, boolean displayPartsCountInTitle)	{
 
-		String title = TBXPartitionMessages.bind(TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION, partition.getName(), partition.getCorpus().getName());
+		String title = PartitionCoreMessages.bind(PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION, partition.getName(), partition.getCorpus().getName());
 
 		if(displayPartsCountInTitle)	{
-			title += "\n(" +  partition.getParts().size() + " " + TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_PARTS + ")"; //$NON-NLS-1$ //$NON-NLS-3$
+			title += "\n(" +  partition.getParts().size() + " " + PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_PARTS + ")"; //$NON-NLS-1$ //$NON-NLS-3$
 		}
 
 		if(sortPartsBySize) {
-			title += TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
+			title += PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
 		}
 
 		return title;
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsPieChartCreator.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsPieChartCreator.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsPieChartCreator.java	(revision 137)
@@ -7,7 +7,7 @@
 import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.partition.core.chartsengine.base.Utils;
-import org.txm.partition.core.messages.TBXPartitionMessages;
+import org.txm.partition.core.messages.PartitionCoreMessages;
 import org.txm.partition.core.preferences.PartitionDimensionsPreferences;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Part;
@@ -40,7 +40,7 @@
 			// Creating the data set from the partition result
 			DefaultPieDataset dataset = new DefaultPieDataset();
 
-			XYSeries series = new XYSeries(TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY);
+			XYSeries series = new XYSeries(PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY);
 
 			List<Part> parts;
 
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsBarChartCreator.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsBarChartCreator.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/chartsengine/jfreechart/JFCPartitionDimensionsBarChartCreator.java	(revision 137)
@@ -14,7 +14,7 @@
 import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.partition.core.chartsengine.base.Utils;
-import org.txm.partition.core.messages.TBXPartitionMessages;
+import org.txm.partition.core.messages.PartitionCoreMessages;
 import org.txm.partition.core.preferences.PartitionDimensionsPreferences;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Part;
@@ -47,7 +47,7 @@
 			// Creating the data set from the partition result
 			XYSeriesCollection dataset = new XYSeriesCollection();
 
-			XYSeries series = new XYSeries(TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY);
+			XYSeries series = new XYSeries(PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY);
 			dataset.addSeries(series);
 
 			List<Part> parts;
@@ -76,7 +76,7 @@
 			String title = Utils.createPartitionDimensionsChartTitle(partition, sortPartsBySize, displayPartsCountInTitle);
 
 			// Create the chart
-	        chart = this.getChartsEngine().createXYBarChart(dataset, title, TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_X_AXIS_LABEL, TBXPartitionMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL, false, true, false, xAxisSymbols);
+	        chart = this.getChartsEngine().createXYBarChart(dataset, title, PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_X_AXIS_LABEL, PartitionCoreMessages.CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL, false, true, false, xAxisSymbols);
 	        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS);
 
 
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/messages/TBXPartitionMessages.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/messages/TBXPartitionMessages.java	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/messages/TBXPartitionMessages.java	(revision 137)
@@ -1,26 +0,0 @@
-package org.txm.partition.core.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-
-
-public class TBXPartitionMessages extends NLS {
-
-	private static final String BUNDLE_NAME = "org.txm.partition.core.messages.messages"; //$NON-NLS-1$
-
-	public static String CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_PARTS;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_X_AXIS_LABEL;
-	public static String CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
-
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, TBXPartitionMessages.class);
-	}
-
-	private TBXPartitionMessages() {
-	}
-}
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/messages/messages_fr.properties	(revision 137)
@@ -1,7 +1,7 @@
-CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART=Impossible de cr�er le fichier du graphique des dimensions de la partition (moteur de production de graphiques: {0})
+CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART=Impossible de créer le fichier du graphique des dimensions de la partition (moteur de production de graphiques: {0})
 CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY=t
 CHARTSENGINE_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION=Dimensions de la partition {0} du corpus {1}
-CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE=\n Tri�es par taille
+CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE=\n Triées par taille
 CHARTSENGINE_PARTITION_DIMENSIONS_X_AXIS_LABEL=Partie
 CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL=Nombre de mots
 CHARTSENGINE_PARTITION_DIMENSIONS_PARTS=Partie(s)
\ No newline at end of file
Index: tmp/org.txm.partition.core/src/org/txm/partition/core/messages/PartitionCoreMessages.java
===================================================================
--- tmp/org.txm.partition.core/src/org/txm/partition/core/messages/PartitionCoreMessages.java	(revision 0)
+++ tmp/org.txm.partition.core/src/org/txm/partition/core/messages/PartitionCoreMessages.java	(revision 137)
@@ -0,0 +1,26 @@
+package org.txm.partition.core.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+
+
+public class PartitionCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.txm.partition.core.messages.messages"; //$NON-NLS-1$
+
+	public static String CHARTSENGINE_CANT_CREATE_PARTITION_DIMENSIONS_FILE_CHART;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_SORTED_BY_SIZE;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_DIMENSIONS_OF_PARTITION;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_PARTS;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_CATEGORY;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_X_AXIS_LABEL;
+	public static String CHARTSENGINE_PARTITION_DIMENSIONS_Y_AXIS_LABEL;
+
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, PartitionCoreMessages.class);
+	}
+
+	private PartitionCoreMessages() {
+	}
+}

Property changes on: tmp/org.txm.partition.core/src/org/txm/partition/core/messages/PartitionCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.textsbalance.rcp/src/org/txm/textsbalance/rcp/editors/BalanceEditor.java
===================================================================
--- tmp/org.txm.textsbalance.rcp/src/org/txm/textsbalance/rcp/editors/BalanceEditor.java	(revision 136)
+++ tmp/org.txm.textsbalance.rcp/src/org/txm/textsbalance/rcp/editors/BalanceEditor.java	(revision 137)
@@ -16,9 +16,6 @@
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.PartInitException;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
 import org.txm.core.preferences.TXMPreferences;
 import org.txm.rcpapplication.views.CorporaView;
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/TBXProgressionMessages.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/messages/TBXProgressionMessages.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/messages/TBXProgressionMessages.java	(revision 137)
@@ -1,40 +0,0 @@
-package org.txm.progression.core.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-public class TBXProgressionMessages extends NLS {
-
-	private static final String BUNDLE_NAME = "org.txm.progression.core.messages.messages"; //$NON-NLS-1$
-
-	public static String ChartsEngine_PROGRESSION_X_AXIS_LABEL;
-	public static String ChartsEngine_PROGRESSION_Y_AXIS_CUMULATIVE_LABEL;
-	public static String ChartsEngine_PROGRESSION_Y_AXIS_NOT_CUMULATIVE_LABEL;
-
-	public static String ChartsEngine_PROGRESSION_TITLE_PROGRESSION_OF;
-	public static String ChartsEngine_PROGRESSION_TITLE_IN;
-	public static String ChartsEngine_PROGRESSION_TITLE_DENSITY;
-	public static String ChartsEngine_PROGRESSION_TITLE_STRUCT;
-	public static String ChartsEngine_PROGRESSION_TITLE_PROPERTY;
-	public static String ChartsEngine_PROGRESSION_TITLE_VALUE;
-
-	public static String ComputeProgression_0;
-	public static String ComputeProgression_1;
-	public static String ComputeProgression_2;
-	public static String ComputeProgression_3;
-	public static String ComputeProgression_4;
-	public static String ComputeProgression_5;
-	public static String ComputeProgression_6;
-	public static String ComputeProgression_9;
-	public static String ComputeProgression_10;
-	public static String ComputeProgression_12;
-	public static String ComputeProgression_13;
-
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, TBXProgressionMessages.class);
-	}
-
-	private TBXProgressionMessages() {
-	}
-}
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/ProgressionCoreMessages.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/messages/ProgressionCoreMessages.java	(revision 0)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/messages/ProgressionCoreMessages.java	(revision 137)
@@ -0,0 +1,40 @@
+package org.txm.progression.core.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+public class ProgressionCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.txm.progression.core.messages.messages"; //$NON-NLS-1$
+
+	public static String ChartsEngine_PROGRESSION_X_AXIS_LABEL;
+	public static String ChartsEngine_PROGRESSION_Y_AXIS_CUMULATIVE_LABEL;
+	public static String ChartsEngine_PROGRESSION_Y_AXIS_NOT_CUMULATIVE_LABEL;
+
+	public static String ChartsEngine_PROGRESSION_TITLE_PROGRESSION_OF;
+	public static String ChartsEngine_PROGRESSION_TITLE_IN;
+	public static String ChartsEngine_PROGRESSION_TITLE_DENSITY;
+	public static String ChartsEngine_PROGRESSION_TITLE_STRUCT;
+	public static String ChartsEngine_PROGRESSION_TITLE_PROPERTY;
+	public static String ChartsEngine_PROGRESSION_TITLE_VALUE;
+
+	public static String ComputeProgression_0;
+	public static String ComputeProgression_1;
+	public static String ComputeProgression_2;
+	public static String ComputeProgression_3;
+	public static String ComputeProgression_4;
+	public static String ComputeProgression_5;
+	public static String ComputeProgression_6;
+	public static String ComputeProgression_9;
+	public static String ComputeProgression_10;
+	public static String ComputeProgression_12;
+	public static String ComputeProgression_13;
+
+	
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, ProgressionCoreMessages.class);
+	}
+
+	private ProgressionCoreMessages() {
+	}
+}

Property changes on: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/ProgressionCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages.properties
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages.properties	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages.properties	(revision 137)
@@ -17,4 +17,4 @@
 ComputeProgression_4=Computing progression of {0} with queries\: {1}, structural unit\: {2}, property\: {3}, cumulative\: {4}
 ComputeProgression_5=StatEngine is not ready. Canceling command.
 ComputeProgression_6=Error: the Progression needs at least one CQL to work. Aborting
-ComputeProgression_9={0} is not writable
+ComputeProgression_9={0} is not writable
\ No newline at end of file
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_ru.properties
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_ru.properties	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_ru.properties	(revision 137)
@@ -6,4 +6,4 @@
 ComputeProgression_2=Расчет прогрессии <{0}> в корпусе {1}
 ComputeProgression_3=N/A_Done: no match found.
 ComputeProgression_4=Расчет прогрессии {0} по запросу: {1}, структура: {2}, свойство: {3}, кумулятивность: {4}
-ComputeProgression_9=** {0} недоступен для записи
+ComputeProgression_9=** {0} недоступен для записи
\ No newline at end of file
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_fr.properties	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/messages/messages_fr.properties	(revision 137)
@@ -15,4 +15,4 @@
 ComputeProgression_2=Calcul de la progression de <{0}> dans le corpus {1}
 ComputeProgression_3=Terminé\: pas de match trouvé.
 ComputeProgression_4=Calcul de la progression de {0} avec la requête \: {1}, la structure \: {2}, la propriété \: {3}, cumulatif\: {4}
-ComputeProgression_9=** {0} n''est pas accessible en écriture
+ComputeProgression_9=** {0} n''est pas accessible en écriture
\ No newline at end of file
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression2.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression2.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression2.java	(revision 137)
@@ -1,666 +0,0 @@
-// Copyright © 2010-2013 ENS de Lyon.
-// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
-// Lyon 2, University of Franche-Comté, University of Nice
-// Sophia Antipolis, University of Paris 3.
-// 
-// The TXM platform is free software: you can redistribute it
-// and/or modify it under the terms of the GNU General Public
-// License as published by the Free Software Foundation,
-// either version 2 of the License, or (at your option) any
-// later version.
-// 
-// The TXM platform is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied
-// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-// PURPOSE. See the GNU General Public License for more
-// details.
-// 
-// You should have received a copy of the GNU General
-// Public License along with the TXM platform. If not, see
-// http://www.gnu.org/licenses.
-// 
-// 
-// 
-// $LastChangedDate: 2016-09-19 10:31:00 +0200 (Mon, 19 Sep 2016) $
-// $LastChangedRevision: 3298 $
-// $LastChangedBy: mdecorde $ 
-//
-package org.txm.progression.core.functions;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.txm.HasResults;
-import org.txm.Messages;
-import org.txm.functions.Function;
-import org.txm.functions.TXMResult;
-import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
-import org.txm.searchengine.cqp.corpus.Corpus;
-import org.txm.searchengine.cqp.corpus.CorpusManager;
-import org.txm.searchengine.cqp.corpus.Property;
-import org.txm.searchengine.cqp.corpus.QueryResult;
-import org.txm.searchengine.cqp.corpus.StructuralUnit;
-import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
-import org.txm.searchengine.cqp.corpus.Subcorpus;
-import org.txm.searchengine.cqp.corpus.query.Match;
-import org.txm.searchengine.cqp.corpus.query.Query;
-import org.txm.searchengine.cqp.serverException.CqiServerError;
-
-/**
- * Computes a progression similar to the progression of Weblex software.
- *  
- * @author mdecorde
- * @author sjacquot
- */
-public class Progression2 extends Function implements TXMResult  {
-
-	/** The corpus. */
-	Corpus corpus;
-
-	/** The queries. */
-	List<Query> queries;
-
-	/** The structure. */
-	StructuralUnit structure;
-
-	/** The property. */
-	StructuralUnitProperty property;
-
-	/** The propertyregex. */
-	String propertyRegex;
-
-	/** The Xmin corpus. */
-	int XminCorpus;
-
-	/** The Xmax corpus. */
-	int XmaxCorpus;
-	
-	/** The writer. */
-	private BufferedWriter writer;
-
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static String black = "black"; //$NON-NLS-1$
-
-	/** The colors. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static String[] colors = {"red","blue","green3","gold", "deeppink1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		"firebrick","navyblue","green4", "darkgoldenrod1","magenta1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		"deepskyblue","green","yellow","cyan","greenyellow", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-		"seagreen1", black, "grey" }; //$NON-NLS-1$ //$NON-NLS-2$ 
-	//int[] colors16 = {552, 26, 257, 142, 117,133 ,491, 258, 76, 451, 121, 254, 652, 68 ,259, 575};
-
-	/** The monocolors. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static String[] monocolors = {black, black, black, black, black,
-		black, black, black, black, black,
-		black, black, black, black, black, black }; 
-	//int[] monocolors = {24, 24, 24, 24, 24, 24 ,24, 24, 24, 24, 24, 24, 24, 24 ,24, 24};
-
-	// jeu de 16 couleurs :
-
-	// jeu de 10 couleurs :
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static String[] colors10 = {"red","blue","green4","gold","deeppink1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-			"firebrick", "deepskyblue","greenyellow", "darkgoldenrod1","magenta1"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-
-	// jeu de 5 couleurs :
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static String[] colors5 = {"red", "blue", "green4", "gold", "deeppink1"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-
-	/** The styles. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static int[] styles = {
-		1, 2, 3, 4, 5, 6, 1, 2, 3, 4 ,5, 6 ,1 ,2 ,3, 4 }; 
-
-	/** The monostyles. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static int[] monostyles = {
-		1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1 ,1, 1, 1, 1 }; 
-
-
-	/** The widths. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static int[] widths = {
-		1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 }; 
-
-	/** The monowidths. */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated, related to rendering system
-	public static int[] monowidths = {
-		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 
-
-
-	/** List of token position in the text. */
-	List<int[]> allPositions = new ArrayList<int[]>();
-
-	/** The structurepositions. */
-	int[] structurePositions = new int[0];
-
-	/** The structurenames. */
-	String[] structureNames = new String[0];
-
-	/** graph boundaries. */
-	int maxY;
-
-	/** The max x. */
-	int maxX;
-
-	/** The name. */
-	String name;
-
-	/** The repeatvalues. */
-	private boolean repeatvalues;
-
-	/** The bande. */
-	private float bande = 0.0f;
-
-	/** The bandemultiplier. */
-	private float bandemultiplier;
-
-	/**
-	 * Instantiates a new progression.
-	 *
-	 * @param corpus the corpus
-	 * @param queries , a curve per query
-	 * @param structure , the structural unit to show
-	 * @param property , the value to display
-	 * @param propertyregex , a selection of the values to display
-	 * @param doCumulative , if true do a cumulative graph, if not compute the density (R
-	 * function)
-	 * @param monochrome the monochrome
-	 * @param monostyle the monostyle
-	 * @param linewidth the linewidth
-	 * @param repeat the repeat
-	 * @param bandemultiplier the bandemultiplier
-	 */
-	@Deprecated
-	// FIXME : to remove when charts engine will be validated
-	// FIXME : all parameters related to rendering should removed from this class and centralized in the charts engine system
-	public Progression2(Corpus corpus, List<Query> queries,
-			StructuralUnit structure, StructuralUnitProperty property,
-			String propertyregex, boolean doCumulative, int linewidth, boolean repeat, float bandemultiplier) {
-		//System.out.println("monochrome: "+monochrome+" monostyle: "+monostyle+" width: "+linewidth);
-		this.corpus = corpus; // the corpus which we compute on
-		this.queries = queries; // the query of the selection
-		this.structure = structure;
-		this.property = property;
-		this.propertyRegex = propertyregex;
-		this.repeatvalues = repeat;
-		this.bandemultiplier = bandemultiplier;
-
-		for (int i = 0 ; i < monowidths.length ; i++) {
-			monowidths[i] = linewidth;
-		}
-	}
-
-	/**
-	 * Compute.
-	 *
-	 * @return true, if successful
-	 * @throws CqiClientException the cqi client exception
-	 * @throws CqiServerError 
-	 * @throws IOException 
-	 */
-	public boolean process() throws CqiClientException, IOException, CqiServerError {
-		return stepQueries() && stepStructuralUnits() && stepFinalize();
-	}
-
-	/**
-	 * Test discontinuity of a corpus. If the corpus is a subcorpus then test if the start-end of matches make no hole
-	 * @param corpus
-	 * @return
-	 */
-	public static boolean canRunProgression(Corpus corpus) {
-		//System.out.println(corpus.getMatches());
-		if (corpus.getMatches().size() == 1) return true;
-		else {
-			Match previousMatch = null;
-			for (Match m : corpus.getMatches()) {
-				if (previousMatch == null) {
-					previousMatch = m;
-					continue;
-				}
-				
-				if (m.getStart() == previousMatch.getEnd()+1) {
-					previousMatch = m;
-					continue;
-				} else {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Step queries.
-	 *
-	 * @throws CqiClientException the cqi client exception
-	 */
-	public boolean stepQueries() throws CqiClientException
-	{
-		maxX = corpus.getSize();
-		int npositions = 0;
-		for (Query query : queries) {
-			// System.out.println("query  "+query.getQueryString());
-			QueryResult result = corpus.query(query, query.getQueryString()
-					.replace(" ", "_") + "_progression", true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$			
-			int nLines = result.getNMatch();
-			if (maxY < nLines)
-				maxY = nLines;
-
-			List<Match> matches = null;
-			if (nLines > 0) {
-				matches = result.getMatches(0, nLines - 1); // get the indexes
-				// sequences of result's tokens
-			} else {
-				matches = new ArrayList<Match>();
-			}
-			//System.out.println("matches: "+matches);
-			int[] positions = new int[matches.size()];
-			// System.out.println("nb positions "+matches.size());
-			// if (matches.size() > 0)
-			allPositions.add(positions);
-			int i = 0;
-			for (Match m : matches) {
-				positions[i++] = m.getStart();
-				npositions++;
-			}
-			result.drop();
-		}
-		return npositions > 0;
-	}
-
-	/**
-	 * Step structural units.
-	 *
-	 * @throws CqiClientException the cqi client exception
-	 * @throws CqiServerError 
-	 * @throws IOException 
-	 */
-	public boolean stepStructuralUnits() throws CqiClientException, IOException, CqiServerError
-	{
-		// structure query
-		if (structure != null) {
-			Query query = new Query("<" + structure.getName() + ">[]"); //$NON-NLS-1$ //$NON-NLS-2$
-			if (property != null) {
-				query = new Query("<" + property.getFullName() + ">[]"); //$NON-NLS-1$ //$NON-NLS-2$
-				if (propertyRegex != null)
-					query = new Query(
-							"<"	+ property.getFullName() + "=\"" + propertyRegex + "\">[]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			}
-
-			// System.out.println("Struct: "+ structure+" property: "+property);
-			// System.out.println(query.getQueryString());
-			QueryResult result = corpus.query(query, query.getQueryString()
-					.replace(" ", "_") + "_progression", true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			int[] starts = result.getStarts();
-			result.drop();
-			int nLines = starts.length;
-			
-//			List<Match> matches = new ArrayList<Match>();
-//			if (nLines > 0)
-//				matches = result.getMatches(0, nLines - 1); // get the indexes
-			// sequences of result's tokens
-
-			structurePositions = new int[nLines];
-			structureNames = new String[nLines];
-
-			
-			
-			Map<Property, List<String>> refValues = new HashMap<Property, List<String>>();
-			if (property != null) {
-				List<String> values = CorpusManager.getCorpusManager().getCqiClient().getSingleData(property, starts);
-				refValues.put(property, values);
-			}
-
-			int i = 0;
-			String previousname = ""; //$NON-NLS-1$
-			String currentname = ""; //$NON-NLS-1$
-			int previousposition = -99999;
-			int distmin = 999999;
-			for (int m : starts) {
-				if (property != null)
-					currentname = refValues.get(property).get(i);
-				else
-					currentname = structure.getName() + i;
-
-				if (repeatvalues) {
-					structureNames[i] = currentname;
-					structurePositions[i] = m;
-				} else {
-					if (!previousname.equals(currentname)) {
-						structureNames[i] = currentname;
-						structurePositions[i] = m;
-					}
-				}
-				if (i == 0)
-					structurePositions[i] += 1; 
-
-				if (m - previousposition < distmin) {
-					distmin = m - previousposition;
-				}
-
-				previousname = ""+currentname; //$NON-NLS-1$
-				previousposition = m;
-
-				i++;
-			}
-			this.bande = distmin*bandemultiplier;
-		}
-		return true;
-	}
-
-	/**
-	 * Step finalize.
-	 *
-	 * @throws CqiClientException the cqi client exception
-	 */
-	public boolean stepFinalize() throws CqiClientException
-	{
-		if (corpus instanceof Subcorpus) {
-			List<Match> matches = ((Subcorpus) corpus).getMatches();
-			if (matches.size() == 0) {
-				System.out.println(Messages.Progression_1);
-				return false;
-			}
-			
-			XminCorpus = matches.get(0).getStart();
-			XmaxCorpus = matches.get(matches.size()-1).getEnd();		
-		} else {
-			XminCorpus = 0;
-			XmaxCorpus = corpus.getSize();
-		}
-		//System.out.println("min: "+XminCorpus+ "max: "+XmaxCorpus);
-
-		if (bande <= 0) {
-			bande = ((XmaxCorpus - XminCorpus)/100)*bandemultiplier;
-			if (bande == 0)
-				bande = 1.0f;
-		}
-		return true;
-	}
-
-	/** The norep. */
-	public static int norep = 1;
-
-	/** The prefix r. */
-	public static String prefixR = "Progression"; //$NON-NLS-1$
-
-
-	/**
-	 * 
-	 * @param outfile
-	 * @param encoding
-	 * @return
-	 * @throws IOException
-	 */
-	public boolean toTxt(File outfile, String encoding) throws IOException {
-		// NK: writer declared as class attribute to perform a clean if the operation is interrupted
-		tryAcquireSemaphore();
-		this.writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),
-				encoding)); 
-		for (int i = 0 ; i < queries.size() ; i++) {
-			writer.write("* "+queries.get(i)+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			for (int p : allPositions.get(i)) {
-				writer.write(""+p+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			}
-		}
-		writer.close();
-		releaseSemaphore();
-		return true;
-	}
-	
-
-
-
-
-	/**
-	 * Gets the max x.
-	 *
-	 * @return the max x
-	 */
-	public int getMaxX() {
-		return maxX;
-	}
-
-	/**
-	 * Gets the max y.
-	 *
-	 * @return the max y
-	 */
-	public int getMaxY() {
-		return maxY;
-	}
-
-	/**
-	 * Gets the corpus.
-	 *
-	 * @return the corpus
-	 */
-	public Corpus getCorpus() {
-		return corpus;
-	}
-
-	/**
-	 * Gets the queries.
-	 *
-	 * @return the queries
-	 */
-	public List<Query> getQueries() {
-		return queries;
-	}
-
-	/**
-	 * Gets the allpositions.
-	 *
-	 * @return the allpositions
-	 */
-	public List<int[]> getAllpositions() {
-		return allPositions;
-	}
-
-	/**
-	 * Gets the positions counts.
-	 *
-	 * @return the positions counts
-	 */
-	public List<Integer> getPositionsCounts() {
-		ArrayList<Integer> counts = new ArrayList<Integer>();
-		for (int[] list : allPositions)
-			counts.add(list.length);
-		return counts;
-	}
-
-	/**
-	 * Gets the name.
-	 *
-	 * @return the name
-	 */
-	public String getName() {
-		return this.queries.toString();
-	}
-
-	/**
-	 * Gets the details.
-	 *
-	 * @return the details
-	 */
-	public String getDetails() {
-		return this.queries.toString();
-	}
-
-	
-	/**
-	 * Checks if is repeatvalues.
-	 *
-	 * @return true, if is repeatvalues
-	 */
-	public boolean isRepeatvalues() {
-		return repeatvalues;
-	}
-
-
-
-	@Override
-	public void clean() {
-		try {
-			this.writer.flush();
-			this.writer.close();	
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			org.txm.utils.logger.Log.printStackTrace(e);
-		}
-	}
-
-	@Override
-	public boolean toTxt(File outfile, String encoding, String colseparator,
-			String txtseparator) throws Exception {
-		return toTxt(outfile, encoding);
-	}
-
-	/**
-	 * @return the allPositions
-	 */
-	public List<int[]> getAllPositions() {
-		return allPositions;
-	}
-
-	/**
-	 * @return the structurePositions
-	 */
-	public int[] getStructurePositions() {
-		return structurePositions;
-	}
-
-	/**
-	 * @return the structureNames
-	 */
-	public String[] getStructureNames() {
-		return structureNames;
-	}
-
-	/**
-	 * @return the structure
-	 */
-	public StructuralUnit getStructure() {
-		return structure;
-	}
-
-	/**
-	 * @return the property
-	 */
-	public StructuralUnitProperty getProperty() {
-		return property;
-	}
-
-	/**
-	 * @return the propertyRegex
-	 */
-	public String getPropertyRegex() {
-		return propertyRegex;
-	}
-
-	/**
-	 * @return the bande
-	 */
-	public float getBande() {
-		return bande;
-	}
-
-	/**
-	 * @return the xminCorpus
-	 */
-	public int getXminCorpus() {
-		return XminCorpus;
-	}
-
-	/**
-	 * @return the xmaxCorpus
-	 */
-	public int getXmaxCorpus() {
-		return XmaxCorpus;
-	}
-
-
-
-	/**
-	 * @param name the name to set
-	 */
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Override
-	public String[] getExportTXTExtensions() {
-		return new String[]{"*.txt"};
-	}
-
-	@Override
-	public boolean delete() {
-		return corpus.removeResult(this);
-	}
-
-	@Override
-	public HasResults getParent() {
-		return corpus;
-	}
-
-	/**
-	 * Computes and gets a query constructed from all the queries in alternative mode (with pipe |).
-	 * @return
-	 */
-	public String getQueriesString()	{
-		ArrayList<Integer> allQueriesIndexes = new ArrayList<Integer>(this.queries.size());
-		for(int i = 0; i < this.queries.size(); i++) {
-			allQueriesIndexes.add(i);
-		}
-		return this.getQueriesString(allQueriesIndexes) ;
-	}
-	
-	/**
-	 * Computes and gets a query constructed from all the queries specified by their index in alternative mode (with pipe |).
-	 * @param queriesIndexes
-	 * @return
-	 */
-	public String getQueriesString(ArrayList<Integer> queriesIndexes)	{
-		
-		String query = "";
-		
-		for(int i = 0; i < this.queries.size(); i++) {
-			if(queriesIndexes.contains(i))	{
-				String tmpQuery = this.queries.get(i).getQueryString();
-				// Remove "[" and "]" only if it's a simple query as "[look]" 
-				if(tmpQuery.startsWith("[") && !tmpQuery.contains("="))	{
-					int length = tmpQuery.length();
-					if(tmpQuery.endsWith("]"))	{
-						length--;
-					}
-					tmpQuery = tmpQuery.substring(1, length);
-				}
-				if(query.length() > 0)	{
-					query += " | ";
-				}
-				query += tmpQuery;
-			}
-		}
-
-		return query;
-		
-	}
-}
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java	(revision 0)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java	(revision 137)
@@ -0,0 +1,665 @@
+// Copyright © 2010-2013 ENS de Lyon.
+// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
+// Lyon 2, University of Franche-Comté, University of Nice
+// Sophia Antipolis, University of Paris 3.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// The TXM platform is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied
+// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+// PURPOSE. See the GNU General Public License for more
+// details.
+// 
+// You should have received a copy of the GNU General
+// Public License along with the TXM platform. If not, see
+// http://www.gnu.org/licenses.
+// 
+// 
+// 
+// $LastChangedDate: 2016-09-19 10:31:00 +0200 (Mon, 19 Sep 2016) $
+// $LastChangedRevision: 3298 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.progression.core.functions;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.txm.HasResults;
+import org.txm.Messages;
+import org.txm.functions.Function;
+import org.txm.functions.TXMResult;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.CorpusManager;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.QueryResult;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.searchengine.cqp.serverException.CqiServerError;
+
+/**
+ * Computes a progression similar to the progression of Weblex software.
+ *  
+ * @author mdecorde
+ * @author sjacquot
+ */
+public class Progression extends Function implements TXMResult  {
+
+	/** The corpus. */
+	Corpus corpus;
+
+	/** The queries. */
+	List<Query> queries;
+
+	/** The structure. */
+	StructuralUnit structure;
+
+	/** The property. */
+	StructuralUnitProperty property;
+
+	/** The propertyregex. */
+	String propertyRegex;
+
+	/** The Xmin corpus. */
+	int XminCorpus;
+
+	/** The Xmax corpus. */
+	int XmaxCorpus;
+	
+	/** The writer. */
+	private BufferedWriter writer;
+
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static String black = "black"; //$NON-NLS-1$
+
+	/** The colors. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static String[] colors = {"red","blue","green3","gold", "deeppink1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+		"firebrick","navyblue","green4", "darkgoldenrod1","magenta1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+		"deepskyblue","green","yellow","cyan","greenyellow", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+		"seagreen1", black, "grey" }; //$NON-NLS-1$ //$NON-NLS-2$ 
+	//int[] colors16 = {552, 26, 257, 142, 117,133 ,491, 258, 76, 451, 121, 254, 652, 68 ,259, 575};
+
+	/** The monocolors. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static String[] monocolors = {black, black, black, black, black,
+		black, black, black, black, black,
+		black, black, black, black, black, black }; 
+	//int[] monocolors = {24, 24, 24, 24, 24, 24 ,24, 24, 24, 24, 24, 24, 24, 24 ,24, 24};
+
+	// jeu de 16 couleurs :
+
+	// jeu de 10 couleurs :
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static String[] colors10 = {"red","blue","green4","gold","deeppink1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+			"firebrick", "deepskyblue","greenyellow", "darkgoldenrod1","magenta1"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+	// jeu de 5 couleurs :
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static String[] colors5 = {"red", "blue", "green4", "gold", "deeppink1"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+	/** The styles. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static int[] styles = {
+		1, 2, 3, 4, 5, 6, 1, 2, 3, 4 ,5, 6 ,1 ,2 ,3, 4 }; 
+
+	/** The monostyles. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static int[] monostyles = {
+		1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1 ,1 ,1, 1, 1, 1 }; 
+
+
+	/** The widths. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static int[] widths = {
+		1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 }; 
+
+	/** The monowidths. */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated, related to rendering system
+	public static int[] monowidths = {
+		1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 
+
+
+	/** List of token position in the text. */
+	List<int[]> allPositions = new ArrayList<int[]>();
+
+	/** The structurepositions. */
+	int[] structurePositions = new int[0];
+
+	/** The structurenames. */
+	String[] structureNames = new String[0];
+
+	/** graph boundaries. */
+	int maxY;
+
+	/** The max x. */
+	int maxX;
+
+	/** The name. */
+	String name;
+
+	/** The repeatvalues. */
+	private boolean repeatvalues;
+
+	/** The bande. */
+	private float bande = 0.0f;
+
+	/** The bandemultiplier. */
+	private float bandemultiplier;
+
+	/**
+	 * Instantiates a new progression.
+	 *
+	 * @param corpus the corpus
+	 * @param queries , a curve per query
+	 * @param structure , the structural unit to show
+	 * @param property , the value to display
+	 * @param propertyregex , a selection of the values to display
+	 * @param doCumulative , if true do a cumulative graph, if not compute the density (R
+	 * function)
+	 * @param monochrome the monochrome
+	 * @param monostyle the monostyle
+	 * @param linewidth the linewidth
+	 * @param repeat the repeat
+	 * @param bandemultiplier the bandemultiplier
+	 */
+	@Deprecated
+	// FIXME : to remove when charts engine will be validated
+	// FIXME : all parameters related to rendering should removed from this class and centralized in the charts engine system
+	public Progression(Corpus corpus, List<Query> queries, StructuralUnit structure, StructuralUnitProperty property, String propertyregex,
+			boolean doCumulative, int linewidth, boolean repeat, float bandemultiplier) {
+		//System.out.println("monochrome: "+monochrome+" monostyle: "+monostyle+" width: "+linewidth);
+		this.corpus = corpus; // the corpus which we compute on
+		this.queries = queries; // the query of the selection
+		this.structure = structure;
+		this.property = property;
+		this.propertyRegex = propertyregex;
+		this.repeatvalues = repeat;
+		this.bandemultiplier = bandemultiplier;
+
+		for (int i = 0 ; i < monowidths.length ; i++) {
+			monowidths[i] = linewidth;
+		}
+	}
+
+	/**
+	 * Compute.
+	 *
+	 * @return true, if successful
+	 * @throws CqiClientException the cqi client exception
+	 * @throws CqiServerError 
+	 * @throws IOException 
+	 */
+	public boolean process() throws CqiClientException, IOException, CqiServerError {
+		return stepQueries() && stepStructuralUnits() && stepFinalize();
+	}
+
+	/**
+	 * Test discontinuity of a corpus. If the corpus is a subcorpus then test if the start-end of matches make no hole
+	 * @param corpus
+	 * @return
+	 */
+	public static boolean canRunProgression(Corpus corpus) {
+		//System.out.println(corpus.getMatches());
+		if (corpus.getMatches().size() == 1) return true;
+		else {
+			Match previousMatch = null;
+			for (Match m : corpus.getMatches()) {
+				if (previousMatch == null) {
+					previousMatch = m;
+					continue;
+				}
+				
+				if (m.getStart() == previousMatch.getEnd()+1) {
+					previousMatch = m;
+					continue;
+				} else {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * Step queries.
+	 *
+	 * @throws CqiClientException the cqi client exception
+	 */
+	public boolean stepQueries() throws CqiClientException
+	{
+		maxX = corpus.getSize();
+		int npositions = 0;
+		for (Query query : queries) {
+			// System.out.println("query  "+query.getQueryString());
+			QueryResult result = corpus.query(query, query.getQueryString()
+					.replace(" ", "_") + "_progression", true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$			
+			int nLines = result.getNMatch();
+			if (maxY < nLines)
+				maxY = nLines;
+
+			List<Match> matches = null;
+			if (nLines > 0) {
+				matches = result.getMatches(0, nLines - 1); // get the indexes
+				// sequences of result's tokens
+			} else {
+				matches = new ArrayList<Match>();
+			}
+			//System.out.println("matches: "+matches);
+			int[] positions = new int[matches.size()];
+			// System.out.println("nb positions "+matches.size());
+			// if (matches.size() > 0)
+			allPositions.add(positions);
+			int i = 0;
+			for (Match m : matches) {
+				positions[i++] = m.getStart();
+				npositions++;
+			}
+			result.drop();
+		}
+		return npositions > 0;
+	}
+
+	/**
+	 * Step structural units.
+	 *
+	 * @throws CqiClientException the cqi client exception
+	 * @throws CqiServerError 
+	 * @throws IOException 
+	 */
+	public boolean stepStructuralUnits() throws CqiClientException, IOException, CqiServerError
+	{
+		// structure query
+		if (structure != null) {
+			Query query = new Query("<" + structure.getName() + ">[]"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (property != null) {
+				query = new Query("<" + property.getFullName() + ">[]"); //$NON-NLS-1$ //$NON-NLS-2$
+				if (propertyRegex != null)
+					query = new Query(
+							"<"	+ property.getFullName() + "=\"" + propertyRegex + "\">[]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			}
+
+			// System.out.println("Struct: "+ structure+" property: "+property);
+			// System.out.println(query.getQueryString());
+			QueryResult result = corpus.query(query, query.getQueryString()
+					.replace(" ", "_") + "_progression", true); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			int[] starts = result.getStarts();
+			result.drop();
+			int nLines = starts.length;
+			
+//			List<Match> matches = new ArrayList<Match>();
+//			if (nLines > 0)
+//				matches = result.getMatches(0, nLines - 1); // get the indexes
+			// sequences of result's tokens
+
+			structurePositions = new int[nLines];
+			structureNames = new String[nLines];
+
+			
+			
+			Map<Property, List<String>> refValues = new HashMap<Property, List<String>>();
+			if (property != null) {
+				List<String> values = CorpusManager.getCorpusManager().getCqiClient().getSingleData(property, starts);
+				refValues.put(property, values);
+			}
+
+			int i = 0;
+			String previousname = ""; //$NON-NLS-1$
+			String currentname = ""; //$NON-NLS-1$
+			int previousposition = -99999;
+			int distmin = 999999;
+			for (int m : starts) {
+				if (property != null)
+					currentname = refValues.get(property).get(i);
+				else
+					currentname = structure.getName() + i;
+
+				if (repeatvalues) {
+					structureNames[i] = currentname;
+					structurePositions[i] = m;
+				} else {
+					if (!previousname.equals(currentname)) {
+						structureNames[i] = currentname;
+						structurePositions[i] = m;
+					}
+				}
+				if (i == 0)
+					structurePositions[i] += 1; 
+
+				if (m - previousposition < distmin) {
+					distmin = m - previousposition;
+				}
+
+				previousname = ""+currentname; //$NON-NLS-1$
+				previousposition = m;
+
+				i++;
+			}
+			this.bande = distmin*bandemultiplier;
+		}
+		return true;
+	}
+
+	/**
+	 * Step finalize.
+	 *
+	 * @throws CqiClientException the cqi client exception
+	 */
+	public boolean stepFinalize() throws CqiClientException
+	{
+		if (corpus instanceof Subcorpus) {
+			List<Match> matches = ((Subcorpus) corpus).getMatches();
+			if (matches.size() == 0) {
+				System.out.println(Messages.Progression_1);
+				return false;
+			}
+			
+			XminCorpus = matches.get(0).getStart();
+			XmaxCorpus = matches.get(matches.size()-1).getEnd();		
+		} else {
+			XminCorpus = 0;
+			XmaxCorpus = corpus.getSize();
+		}
+		//System.out.println("min: "+XminCorpus+ "max: "+XmaxCorpus);
+
+		if (bande <= 0) {
+			bande = ((XmaxCorpus - XminCorpus)/100)*bandemultiplier;
+			if (bande == 0)
+				bande = 1.0f;
+		}
+		return true;
+	}
+
+	/** The norep. */
+	public static int norep = 1;
+
+	/** The prefix r. */
+	public static String prefixR = "Progression"; //$NON-NLS-1$
+
+
+	/**
+	 * 
+	 * @param outfile
+	 * @param encoding
+	 * @return
+	 * @throws IOException
+	 */
+	public boolean toTxt(File outfile, String encoding) throws IOException {
+		// NK: writer declared as class attribute to perform a clean if the operation is interrupted
+		tryAcquireSemaphore();
+		this.writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),
+				encoding)); 
+		for (int i = 0 ; i < queries.size() ; i++) {
+			writer.write("* "+queries.get(i)+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			for (int p : allPositions.get(i)) {
+				writer.write(""+p+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+		}
+		writer.close();
+		releaseSemaphore();
+		return true;
+	}
+	
+
+
+
+
+	/**
+	 * Gets the max x.
+	 *
+	 * @return the max x
+	 */
+	public int getMaxX() {
+		return maxX;
+	}
+
+	/**
+	 * Gets the max y.
+	 *
+	 * @return the max y
+	 */
+	public int getMaxY() {
+		return maxY;
+	}
+
+	/**
+	 * Gets the corpus.
+	 *
+	 * @return the corpus
+	 */
+	public Corpus getCorpus() {
+		return corpus;
+	}
+
+	/**
+	 * Gets the queries.
+	 *
+	 * @return the queries
+	 */
+	public List<Query> getQueries() {
+		return queries;
+	}
+
+	/**
+	 * Gets the allpositions.
+	 *
+	 * @return the allpositions
+	 */
+	public List<int[]> getAllpositions() {
+		return allPositions;
+	}
+
+	/**
+	 * Gets the positions counts.
+	 *
+	 * @return the positions counts
+	 */
+	public List<Integer> getPositionsCounts() {
+		ArrayList<Integer> counts = new ArrayList<Integer>();
+		for (int[] list : allPositions)
+			counts.add(list.length);
+		return counts;
+	}
+
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 */
+	public String getName() {
+		return this.queries.toString();
+	}
+
+	/**
+	 * Gets the details.
+	 *
+	 * @return the details
+	 */
+	public String getDetails() {
+		return this.queries.toString();
+	}
+
+	
+	/**
+	 * Checks if is repeatvalues.
+	 *
+	 * @return true, if is repeatvalues
+	 */
+	public boolean isRepeatvalues() {
+		return repeatvalues;
+	}
+
+
+
+	@Override
+	public void clean() {
+		try {
+			this.writer.flush();
+			this.writer.close();	
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+	}
+
+	@Override
+	public boolean toTxt(File outfile, String encoding, String colseparator,
+			String txtseparator) throws Exception {
+		return toTxt(outfile, encoding);
+	}
+
+	/**
+	 * @return the allPositions
+	 */
+	public List<int[]> getAllPositions() {
+		return allPositions;
+	}
+
+	/**
+	 * @return the structurePositions
+	 */
+	public int[] getStructurePositions() {
+		return structurePositions;
+	}
+
+	/**
+	 * @return the structureNames
+	 */
+	public String[] getStructureNames() {
+		return structureNames;
+	}
+
+	/**
+	 * @return the structure
+	 */
+	public StructuralUnit getStructure() {
+		return structure;
+	}
+
+	/**
+	 * @return the property
+	 */
+	public StructuralUnitProperty getProperty() {
+		return property;
+	}
+
+	/**
+	 * @return the propertyRegex
+	 */
+	public String getPropertyRegex() {
+		return propertyRegex;
+	}
+
+	/**
+	 * @return the bande
+	 */
+	public float getBande() {
+		return bande;
+	}
+
+	/**
+	 * @return the xminCorpus
+	 */
+	public int getXminCorpus() {
+		return XminCorpus;
+	}
+
+	/**
+	 * @return the xmaxCorpus
+	 */
+	public int getXmaxCorpus() {
+		return XmaxCorpus;
+	}
+
+
+
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@Override
+	public String[] getExportTXTExtensions() {
+		return new String[]{"*.txt"};
+	}
+
+	@Override
+	public boolean delete() {
+		return corpus.removeResult(this);
+	}
+
+	@Override
+	public HasResults getParent() {
+		return corpus;
+	}
+
+	/**
+	 * Computes and gets a query constructed from all the queries in alternative mode (with pipe |).
+	 * @return
+	 */
+	public String getQueriesString()	{
+		ArrayList<Integer> allQueriesIndexes = new ArrayList<Integer>(this.queries.size());
+		for(int i = 0; i < this.queries.size(); i++) {
+			allQueriesIndexes.add(i);
+		}
+		return this.getQueriesString(allQueriesIndexes) ;
+	}
+	
+	/**
+	 * Computes and gets a query constructed from all the queries specified by their index in alternative mode (with pipe |).
+	 * @param queriesIndexes
+	 * @return
+	 */
+	public String getQueriesString(ArrayList<Integer> queriesIndexes)	{
+		
+		String query = "";
+		
+		for(int i = 0; i < this.queries.size(); i++) {
+			if(queriesIndexes.contains(i))	{
+				String tmpQuery = this.queries.get(i).getQueryString();
+				// Remove "[" and "]" only if it's a simple query as "[look]" 
+				if(tmpQuery.startsWith("[") && !tmpQuery.contains("="))	{
+					int length = tmpQuery.length();
+					if(tmpQuery.endsWith("]"))	{
+						length--;
+					}
+					tmpQuery = tmpQuery.substring(1, length);
+				}
+				if(query.length() > 0)	{
+					query += " | ";
+				}
+				query += tmpQuery;
+			}
+		}
+
+		return query;
+		
+	}
+}

Property changes on: tmp/org.txm.progression.core/src/org/txm/progression/core/functions/Progression.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.core/src/org/txm/progression/core/functions/package.html
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/functions/package.html	(revision 0)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/functions/package.html	(revision 137)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Progression - inspired by Weblex.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.progression.core/src/org/txm/progression/core/functions/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/r/RProgressionChartCreator.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/r/RProgressionChartCreator.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/r/RProgressionChartCreator.java	(revision 137)
@@ -1,6 +1,8 @@
 package org.txm.progression.core.chartsengine.r;
 
+import java.awt.Color;
 import java.io.File;
+import java.util.ArrayList;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.rosuda.REngine.REXPMismatchException;
@@ -9,8 +11,9 @@
 import org.txm.chartsengine.r.core.RChartCreator;
 import org.txm.chartsengine.r.core.RChartsEngine;
 import org.txm.core.preferences.TXMPreferences;
+import org.txm.progression.core.chartsengine.base.ProgressionChartCreator;
 import org.txm.progression.core.chartsengine.base.Utils;
-import org.txm.progression.core.functions.Progression2;
+import org.txm.progression.core.functions.Progression;
 import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.stat.StatException;
 import org.txm.stat.engine.r.RWorkspace;
@@ -23,7 +26,7 @@
  * @author sjacquot
  *
  */
-public class RProgressionChartCreator extends RChartCreator {
+public class RProgressionChartCreator extends RChartCreator implements ProgressionChartCreator {
 
 	public RProgressionChartCreator() {
 		// TODO Auto-generated constructor stub
@@ -40,7 +43,7 @@
 
 		try {
 			
-			Progression2 progression = (Progression2) resultData;
+			Progression progression = (Progression) resultData;
 			
 			// parameters
 			boolean monochrome = (TXMPreferences.getInt(preferencesNode, resultData, ChartsEnginePreferences.RENDERING_COLORS_MODE) == ChartsEngine.RENDERING_MONOCHROME_MODE);
@@ -81,35 +84,35 @@
 			// System.out.println("create colors vector");
 			rw.eval("rm(colors)"); //$NON-NLS-1$
 			if(monochrome) {
-				rw.addVectorToWorkspace("colors", Progression2.monocolors); //$NON-NLS-1$
+				rw.addVectorToWorkspace("colors", Progression.monocolors); //$NON-NLS-1$
 			}
 			else {
 				if(progression.getQueries().size() <= 5) {
 					// System.out.println("uses colors5");
-					rw.addVectorToWorkspace("colors", Progression2.colors5); //$NON-NLS-1$
+					rw.addVectorToWorkspace("colors", Progression.colors5); //$NON-NLS-1$
 				}
 				else if(progression.getQueries().size() <= 10) {
 					// System.out.println("uses colors10");
-					rw.addVectorToWorkspace("colors", Progression2.colors10); //$NON-NLS-1$
+					rw.addVectorToWorkspace("colors", Progression.colors10); //$NON-NLS-1$
 				}
 				else {
 					// System.out.println("uses colors16");
-					rw.addVectorToWorkspace("colors", Progression2.colors); //$NON-NLS-1$
+					rw.addVectorToWorkspace("colors", Progression.colors); //$NON-NLS-1$
 				}
 			}
 
 			// System.out.println("create styles vector");
 			rw.eval("rm(styles)"); //$NON-NLS-1$
 			if(monostyle) {
-				rw.addVectorToWorkspace("styles", Progression2.monostyles); //$NON-NLS-1$
+				rw.addVectorToWorkspace("styles", Progression.monostyles); //$NON-NLS-1$
 			}
 			else {
-				rw.addVectorToWorkspace("styles", Progression2.styles); //$NON-NLS-1$
+				rw.addVectorToWorkspace("styles", Progression.styles); //$NON-NLS-1$
 			}
 
 			// System.out.println("create styles vector");
 			rw.eval("rm(widths)"); //$NON-NLS-1$
-			rw.addVectorToWorkspace("widths", Progression2.monowidths); //$NON-NLS-1$
+			rw.addVectorToWorkspace("widths", Progression.monowidths); //$NON-NLS-1$
 
 			// System.out.println("create names vector");
 			String[] queriesstring = new String[progression.getQueries().size()];
@@ -128,20 +131,16 @@
 
 			// System.out.println("BANDE="+bande);
 			String cmd = "progression(positions, names, colors, styles, widths, \"" + name + "\"," + progression.getXminCorpus() + "," + progression.getXmaxCorpus() + ",\"" + cumulative + "\",structurepositions,structurenames, \"" + title + "\", " + progression.getBande() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
-			rw.plot(file, cmd, ((RChartsEngine) this.chartsEngine).getRDevice());
+			this.getChartsEngine().plot(file, cmd);
 
-			RWorkspace.getRWorkspaceInstance().eval(Progression2.prefixR + Progression2.norep + " <- list(positions=positions, names=names, xmin=" + progression.getXminCorpus() + ",xmax=" + progression.getXmaxCorpus() + ", structpositions=structurepositions, structnames=structurenames)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			Progression2.norep++;
+			RWorkspace.getRWorkspaceInstance().eval(Progression.prefixR + Progression.norep + " <- list(positions=positions, names=names, xmin=" + progression.getXminCorpus() + ",xmax=" + progression.getXmaxCorpus() + ", structpositions=structurepositions, structnames=structurenames)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			Progression.norep++;
 			Log.info("R exec : " + cmd);
 		}
 		catch(RWorkspaceException e) {
 			// TODO Auto-generated catch block
 			org.txm.utils.logger.Log.printStackTrace(e);
 		}
-		catch(REXPMismatchException e) {
-			// TODO Auto-generated catch block
-			org.txm.utils.logger.Log.printStackTrace(e);
-		}
 		catch(StatException e) {
 			// TODO Auto-generated catch block
 			org.txm.utils.logger.Log.printStackTrace(e);
@@ -152,9 +151,45 @@
 
 
 	@Override
+	public ArrayList<Integer> getSelectedPointPositions(Object chart) {
+		// FIXME: not implemented
+		Log.severe(this.getClass() + ".getProgressionChartSelectedPointPositions(): Not yet implemented."); //$NON-NLS-1$
+		return new ArrayList<Integer>(0);
+	}
+
+
+
+	@Override
+	public ArrayList<Integer> getSelectedSeries(Object chart) {
+		Log.severe(this.getClass() + ".getProgressionChartSelectedSeries(): Not yet implemented."); //$NON-NLS-1$
+		return new ArrayList<Integer>(0);
+	}
+
+
+	@Override
+	public ArrayList<Integer> getSelectedPointNumbers(Object chart) {
+		Log.severe(this.getClass() + ".getProgressionChartSelectedPointNumber(): Not yet implemented."); //$NON-NLS-1$
+		return new ArrayList<Integer>(0);
+	}
+
+
+	@Override
+	public int getLastSelectedSeries(Object chart) {
+		Log.severe(this.getClass() + ".getProgressionChartLastSelectedSeries(): Not yet implemented."); //$NON-NLS-1$
+		return -1;
+	}
+
+
+	@Override
 	public Class getResultDataClass() {
-		return Progression2.class;
+		return Progression.class;
 	}
 
+	@Override
+	public ArrayList<ArrayList<Integer>> getAllPointPositionsBySeries(Object chart) {
+		Log.severe(this.getClass() + ".getAllPointPositionsBySeries(): Not yet implemented."); //$NON-NLS-1$
+		return null;
+	}
 
+
 }
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/Utils.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/Utils.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/Utils.java	(revision 137)
@@ -1,15 +1,15 @@
 package org.txm.progression.core.chartsengine.base;
 
-import org.txm.chartsengine.core.ChartCreator;
-import org.txm.progression.core.functions.Progression2;
-import org.txm.progression.core.messages.TBXProgressionMessages;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.progression.core.functions.Progression;
+import org.txm.progression.core.messages.ProgressionCoreMessages;
 
 /**
- * Creates a progression chart from the specified <code>Progression</code> result.
+ * Progression chart utility class.
  * @author sjacquot
  *
  */
-public abstract class Utils extends ChartCreator {
+public abstract class Utils {
 
 	public Utils() {
 		// TODO Auto-generated constructor stub
@@ -22,9 +22,9 @@
 	 * @param doCumulative
 	 * @return the titles string
 	 */
-	public static String createProgressionChartTitle(Progression2 progression, boolean doCumulative)	{
+	public static String createProgressionChartTitle(Progression progression, boolean doCumulative)	{
 
-		String title = TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_PROGRESSION_OF + " "; //$NON-NLS-1$
+		String title = ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_PROGRESSION_OF + " "; //$NON-NLS-1$
 
 		// Put queries in title
 		for(int i = 0; i < progression.getQueries().size(); i++) {
@@ -35,10 +35,10 @@
 		}
 
 
-		title += " " + TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_IN + " " + progression.getCorpus().getName(); //$NON-NLS-1$ //$NON-NLS-2$
+		title += " " + ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_IN + " " + progression.getCorpus().getName(); //$NON-NLS-1$ //$NON-NLS-2$
 
 		if(!doCumulative)	{
-			title += " " + TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_DENSITY; //$NON-NLS-1$
+			title += " " + ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_DENSITY; //$NON-NLS-1$
 		}
 
 
@@ -46,11 +46,11 @@
 		progression.setName(title);
 
 		if (progression.getStructure() != null) {
-			title += "\n(" + TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_STRUCT + progression.getStructure().getName();
+			title += "\n(" + ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_STRUCT + progression.getStructure().getName();
 			if (progression.getProperty() != null) {
-				title += TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_PROPERTY + progression.getProperty().getName();
+				title += ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_PROPERTY + progression.getProperty().getName();
 				if (progression.getPropertyRegex() != null)	{
-					title += TBXProgressionMessages.ChartsEngine_PROGRESSION_TITLE_VALUE + progression.getPropertyRegex();
+					title += ProgressionCoreMessages.ChartsEngine_PROGRESSION_TITLE_VALUE + progression.getPropertyRegex();
 				}
 			}
 			title += ")";
@@ -59,4 +59,13 @@
 		return title;
 	}
 	
+	/**
+	 * Gets a chart creator from the specified charts engine.
+	 * @param chartsEngine
+	 * @return
+	 */
+	public static ProgressionChartCreator getChartCreator(ChartsEngine chartsEngine)	{
+		return (ProgressionChartCreator) chartsEngine.getChartCreator(Progression.class);
+	}
+	
 }
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/ProgressionChartCreator.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/ProgressionChartCreator.java	(revision 0)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/ProgressionChartCreator.java	(revision 137)
@@ -0,0 +1,53 @@
+/**
+ * 
+ */
+package org.txm.progression.core.chartsengine.base;
+
+import java.util.ArrayList;
+
+/**
+ * Progression chart creator interface.
+ * @author sjacquot
+ *
+ */
+public interface ProgressionChartCreator {
+
+	/**
+	 * Gets the positions of the points currently selected in the Progression step chart.
+	 * @param chart
+	 * @return
+	 */
+	public abstract ArrayList<Integer> getSelectedPointPositions(Object chart);
+	
+	/**
+	 * Gets the numbers of item in series of the selected points.
+	 * @param chart
+	 * @return
+	 */
+	public abstract ArrayList<Integer> getSelectedPointNumbers(Object chart);
+	
+	
+	/**
+	 * Gets the positions of all the points in the Progression step chart grouped by series.
+	 * @param chart
+	 * @return
+	 */
+	public abstract ArrayList<ArrayList<Integer>> getAllPointPositionsBySeries(Object chart);
+
+	
+	/**
+	 * Gets the selected series indexes.
+	 * @param chart
+	 * @return
+	 */
+	public abstract ArrayList<Integer> getSelectedSeries(Object chart);
+	
+	/**
+	 * Gets the last selected series.
+	 * @param chart
+	 * @return
+	 */
+	public abstract int getLastSelectedSeries(Object chart);
+
+	
+}

Property changes on: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/base/ProgressionChartCreator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/JFCProgressionChartCreator.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/JFCProgressionChartCreator.java	(revision 0)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/JFCProgressionChartCreator.java	(revision 137)
@@ -0,0 +1,327 @@
+package org.txm.progression.core.chartsengine.jfreechart;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.axis.NumberAxis;
+import org.jfree.chart.plot.Marker;
+import org.jfree.chart.plot.ValueMarker;
+import org.jfree.data.xy.XYDataset;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+import org.jfree.ui.RectangleAnchor;
+import org.jfree.ui.TextAnchor;
+import org.txm.chartsengine.core.ChartsEngine;
+import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
+import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
+import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
+import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
+import org.txm.core.preferences.TXMPreferences;
+import org.txm.progression.core.chartsengine.base.ProgressionChartCreator;
+import org.txm.progression.core.chartsengine.base.Utils;
+import org.txm.progression.core.chartsengine.jfreechart.themes.highcharts.renderers.ProgressionItemSelectionRenderer;
+import org.txm.progression.core.functions.Progression;
+import org.txm.progression.core.messages.ProgressionCoreMessages;
+import org.txm.progression.core.preferences.ProgressionPreferences;
+import org.txm.searchengine.cqp.corpus.query.Query;
+
+/**
+ * JFC progression chart creator.
+ * 
+ * @author sjacquot
+ *
+ */
+public class JFCProgressionChartCreator extends JFCChartCreator implements ProgressionChartCreator {
+
+	public JFCProgressionChartCreator() {
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public JFreeChart createChart(Object resultData, String preferencesNode) {
+
+		
+		Progression progression = (Progression) resultData;
+		
+		// parameters
+//		boolean monochrome = (TXMPreferences.getInt(preferencesNode, resultData, ChartsEnginePreferences.RENDERING_COLORS_MODE, ChartsEnginePreferences.PREFERENCES_NODE)
+//				== ChartsEngine.RENDERING_MONOCHROME_MODE);
+		boolean monostyle = TXMPreferences.getBoolean(preferencesNode, resultData, ProgressionPreferences.CHART_MONO_STYLE);
+		boolean cumulative = TXMPreferences.getBoolean(preferencesNode, resultData, ProgressionPreferences.CHART_CUMULATIVE);
+		
+		
+		JFreeChart chart = null;
+
+		// Create the dataset
+		XYSeriesCollection dataset = new XYSeriesCollection();
+		List<int[]> positions = progression.getAllpositions();
+		List<Query> queries = progression.getQueries();
+		// Y axis label
+		String yAxisLabel;
+
+		// Cumulative
+		if(cumulative)	{
+			for(int i = 0; i < progression.getAllpositions().size(); i++) {
+				int[] list = positions.get(i);
+				Query query = queries.get(i);
+				XYSeries series = new XYSeries(query.toString() + " " + list.length);
+				int c = 1;
+				for(int j = 0; j < list.length; j++) {
+					// Add a first point to draw a vertical line
+					if(j == 0)	{
+						series.add(list[j], 0);
+					}
+					series.add(list[j], c++);
+				}
+
+				// FIXME: add a dummy point to draw horizontal line between last point and max X corpus
+				series.add(progression.getXmaxCorpus(), --c);
+				dataset.addSeries(series);
+			}
+
+			// Create the chart
+			yAxisLabel = ProgressionCoreMessages.ChartsEngine_PROGRESSION_Y_AXIS_CUMULATIVE_LABEL;
+			chart = this.getChartsEngine().createXYStepChart(dataset, Utils.createProgressionChartTitle(progression, cumulative),
+					ProgressionCoreMessages.bind(ProgressionCoreMessages.ChartsEngine_PROGRESSION_X_AXIS_LABEL, progression.getXmaxCorpus()), yAxisLabel, true, true, true, true, true);
+
+
+			// Custom renderer
+			chart.getXYPlot().setRenderer(new ProgressionItemSelectionRenderer());
+
+		}
+		// FIXME : Density, to implement when textometry R package will store the result in the Progression class
+		else	{
+
+			// FIXME : density not yet implemented
+			System.err.println("JFCChartsEngine.createProgressionChart(): density mode not yet implemented.");
+
+			for(int i = 0; i < progression.getAllpositions().size(); i++) {
+				int[] liste = positions.get(i);
+				Query query = queries.get(i);
+				XYSeries series = new XYSeries(query.toString() + " " + liste.length);
+
+				for(int j = 0; j <  liste.length; j++) {
+
+					// FIXME : tests y
+					// y <- c( c(0), y , c(y[[length(x)]]) ) // R code
+					// FIXME : random Y value
+					double y = progression.getAllpositions().get(i)[j] * Math.random();
+	//				double y = progression.getAllpositions().get(i)[j];
+					series.add(liste[j], y);
+				}
+				dataset.addSeries(series);
+			}
+
+			// Create the chart
+			yAxisLabel =  ProgressionCoreMessages.ChartsEngine_PROGRESSION_Y_AXIS_NOT_CUMULATIVE_LABEL;
+			chart = this.getChartsEngine().createXYLineChart(dataset, Utils.createProgressionChartTitle(progression, cumulative),
+					ProgressionCoreMessages.bind(ProgressionCoreMessages.ChartsEngine_PROGRESSION_X_AXIS_LABEL, progression.getXmaxCorpus()), yAxisLabel,
+					true, true, true, false, true, false, true, null);
+		}
+
+
+
+        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_PROGRESSION);
+        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).getItemsSelector().setResultData(progression);
+
+
+		// Add the limit markers
+		BasicStroke dashedStroke = new BasicStroke(0.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f, new float[] {2f}, 0f);
+		Marker marker = new ValueMarker(progression.getXminCorpus());
+        marker.setPaint(Color.gray);
+        marker.setStroke(dashedStroke);
+        chart.getXYPlot().addDomainMarker(marker);
+		marker = new ValueMarker(progression.getXmaxCorpus());
+        marker.setPaint(Color.gray);
+        marker.setStroke(dashedStroke);
+        chart.getXYPlot().addDomainMarker(marker);
+
+
+//        // FIXME : limit with annotations rather than markers (marker height is dynamically adapted to the real chart height.
+        // Annotation have a fixed height)
+//        XYLineAnnotation annotation = new XYLineAnnotation(0, 0, 0, dataset.getRangeUpperBound(true), dashedStroke, Color.gray);
+//        chart.getXYPlot().addAnnotation(annotation, true);
+
+		// Add the part markers
+		if(progression.getStructurePositions().length > 0)	{
+			for(int i = 0; i < progression.getStructurePositions().length; i++) {
+				if(progression.getStructurePositions()[i] != 0)	{
+					marker = new ValueMarker(progression.getStructurePositions()[i]);
+			        marker.setPaint(Color.black);
+			        marker.setLabel(progression.getStructureNames()[i]);
+			        marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
+			        marker.setLabelTextAnchor(TextAnchor.HALF_ASCENT_LEFT);
+
+
+			        // FIXME: test of rotated annotations rather than using marker label. The problem with this is that the position of annotation is not adjusted when zooming/dezooming.
+			        // FIXME: the best approach is to redefine the drawing method of
+////			        double start = marker.getStartValue();
+////			        double end = TempIntervalMarker.getEndValue();
+////			        double middle = (end - start)/2;
+//			        XYTextAnnotation updateLabel = new XYTextAnnotation("Update", progression.getStructurePositions()[i], 0);
+//			        updateLabel.setFont(new Font("Sans Serif", Font.BOLD, 10));
+//			        updateLabel.setRotationAnchor(TextAnchor.BASELINE_CENTER);
+//			        updateLabel.setTextAnchor(TextAnchor.BASELINE_CENTER);
+//			        updateLabel.setRotationAngle(3.14 / 2);
+//			        updateLabel.setPaint(Color.black);
+//			        chart.getXYPlot().addAnnotation(updateLabel);
+
+
+
+			        chart.getXYPlot().addDomainMarker(marker);
+				}
+			}
+		}
+
+		// Custom domain axis for ticks drawing options
+		chart.getXYPlot().setDomainAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getDomainAxis(), true, true, progression.getXminCorpus(), progression.getXmaxCorpus()));
+
+		// Custom range axis for ticks drawing options
+		chart.getXYPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getRangeAxis(), false, true, 0, progression.getMaxY()));
+
+		// Match the X-axis origin value to the min x corpus (for subcorpus case)
+		chart.getXYPlot().getDomainAxis().setLowerBound(progression.getXminCorpus());
+
+
+//        int itemsColorsRenderingMode = Theme.ITEMS_RENDERING_COLORS_MODE;
+//		// Grayscale
+//        if(grayscale)	{
+//        	itemsColorsRenderingMode = Theme.ITEMS_RENDERING_GRAYSCALE_MODE;
+//        }
+
+        // Re-apply theme to the chart to match the colors rendering mode
+        // FIXME : the rendering mode should be pass to all methods, even base methods as createXYLineChart(), createBarChart(), etc.
+        // or better, to be stocked into a member variable in the theme ?
+      //  this.getChartsEngine().getTheme().applyThemeToChart(chart, TXMPreferences.getInt(ProgressionPreferences.PREFERENCES_NODE, resultData, ChartsEnginePreferences.RENDERING_COLORS_MODE, ChartsEnginePreferences.PREFERENCES_NODE), monostyle);
+
+		// synchronizes the chart with the shared preferences 
+		//super.syncChart(chart, resultData, ProgressionPreferences.PREFERENCES_NODE);
+		
+		return chart;
+		
+	}
+
+
+	
+
+	@Override
+	public ArrayList<Integer> getSelectedPointPositions(Object chart) {
+
+		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
+		ArrayList<Integer> pointPositionsInCorpora = new ArrayList<Integer>();
+
+
+		// FIXME: returns all the point positions
+		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
+		for(int i = 0; i < selector.getSelectedSeries().length; i++) {
+			int selectedSeries = selector.getSelectedSeries()[i];
+			int[] selectedItemsInSeries = selector.getSelectedItems(selectedSeries) ;
+			for(int j = 0; j < selectedItemsInSeries.length; j++) {
+				// if it's the dummy last chart point, get the previous point position instead of ther last one
+				if(selectedItemsInSeries[j] == dataset.getItemCount(selectedSeries) - 1)	{
+					pointPositionsInCorpora.add((int) (dataset.getXValue(selectedSeries, selectedItemsInSeries[j] - 1)));
+				}
+				else	{
+					pointPositionsInCorpora.add((int) (dataset.getXValue(selectedSeries, selectedItemsInSeries[j])));
+				}
+			}
+			
+		}
+
+		// put the last selected point at the end of the list
+		if(selector.getLastSelectedSeries() != -1 && selector.getLastSelectedItem() != -1)	{
+			int item = selector.getLastSelectedItem();
+			// if it's the dummy last chart point, get the previous point position instead of ther last one
+			if(item == dataset.getItemCount(selector.getLastSelectedSeries()) - 1)	{
+				item--;
+			}
+			
+			Integer lastSelectedPointPosition = (int) (dataset.getXValue(selector.getLastSelectedSeries(), item));
+			pointPositionsInCorpora.remove(lastSelectedPointPosition);
+			pointPositionsInCorpora.add(lastSelectedPointPosition);
+		}
+		return pointPositionsInCorpora;
+	}
+
+	@Override
+	public ArrayList<Integer> getSelectedPointNumbers(Object chart) {
+
+		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
+		ArrayList<Integer> pointNumbers = new ArrayList<Integer>();
+		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
+		
+		for(int i = 0; i < selector.getSelectedSeriesCount(); i++) {
+			int series = selector.getSelectedSeries()[i];
+			int[] items = selector.getSelectedItems(series);
+			int lastDummyItem = dataset.getItemCount(series) - 1; 
+			for(int j = 0; j < items.length; j++) {
+				int item = items[j];
+				// manage the first dummy point
+				if(item == 0)	{
+					item++;
+				}
+				// manage the last dummy point
+				else if(item == lastDummyItem)	 {
+					item--;
+				}
+				
+				pointNumbers.add(item);
+			}
+		}
+		
+		return pointNumbers;
+	}
+	
+
+	
+	@Override
+	public ArrayList<ArrayList<Integer>> getAllPointPositionsBySeries(Object chart) {
+
+		ArrayList<ArrayList<Integer>> pointPositionsBySeries = new ArrayList<ArrayList<Integer>>();
+		
+		XYDataset dataset = ((JFreeChart) chart).getXYPlot().getDataset();
+
+		for(int i = 0; i < dataset.getSeriesCount(); i++) {
+			ArrayList<Integer> pointPositionsInCorpora = new ArrayList<Integer>();
+			for(int j = 0; j < dataset.getItemCount(i) - 1; j++) { // -1 to skip the last dummy point of the step chart
+				pointPositionsInCorpora.add((int) dataset.getXValue(i, j));
+			}
+			pointPositionsBySeries.add(pointPositionsInCorpora);
+		}
+
+		return pointPositionsBySeries;
+	}
+
+	
+	
+	@Override
+	public ArrayList<Integer> getSelectedSeries(Object chart) {
+		ArrayList<Integer> selectedSeries = new ArrayList<Integer>();
+		MultipleItemsSelector selector = (MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
+		Integer[] multipleSelectedSeries = selector.getSelectedSeries();
+		for(int i = 0; i < multipleSelectedSeries.length; i++) {
+			selectedSeries.add(multipleSelectedSeries[i]);
+		}
+		return selectedSeries;
+	}
+
+
+	@Override
+	public int getLastSelectedSeries(Object chart) {
+		return ((MultipleItemsSelector) ((IItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector()).getLastSelectedSeries();
+	}
+
+	
+	
+	@Override
+	public Class getResultDataClass() {
+		return Progression.class;
+	}
+
+
+	
+
+}

Property changes on: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/JFCProgressionChartCreator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/JFCProgressionChartCreator.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/JFCProgressionChartCreator.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/JFCProgressionChartCreator.java	(revision 137)
@@ -1,213 +0,0 @@
-package org.txm.progression.core.chartsengine.jfreechart.themes.highcharts;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.util.List;
-
-import org.jfree.chart.JFreeChart;
-import org.jfree.chart.axis.NumberAxis;
-import org.jfree.chart.plot.Marker;
-import org.jfree.chart.plot.ValueMarker;
-import org.jfree.data.xy.XYSeries;
-import org.jfree.data.xy.XYSeriesCollection;
-import org.jfree.ui.RectangleAnchor;
-import org.jfree.ui.TextAnchor;
-import org.txm.chartsengine.core.ChartsEngine;
-import org.txm.chartsengine.core.preferences.ChartsEnginePreferences;
-import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
-import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
-import org.txm.core.preferences.TXMPreferences;
-import org.txm.progression.core.chartsengine.base.Utils;
-import org.txm.progression.core.chartsengine.jfreechart.themes.highcharts.renderers.ProgressionItemSelectionRenderer;
-import org.txm.progression.core.functions.Progression2;
-import org.txm.progression.core.messages.TBXProgressionMessages;
-import org.txm.progression.core.preferences.ProgressionPreferences;
-import org.txm.searchengine.cqp.corpus.query.Query;
-
-/**
- * JFC progression chart creator.
- * 
- * @author sjacquot
- *
- */
-public class JFCProgressionChartCreator extends JFCChartCreator {
-
-	public JFCProgressionChartCreator() {
-		// TODO Auto-generated constructor stub
-	}
-
-	@Override
-	public JFreeChart createChart(Object resultData, String preferencesNode) {
-
-		
-		Progression2 progression = (Progression2) resultData;
-		
-		// parameters
-//		boolean monochrome = (TXMPreferences.getInt(preferencesNode, resultData, ChartsEnginePreferences.RENDERING_COLORS_MODE, ChartsEnginePreferences.PREFERENCES_NODE)
-//				== ChartsEngine.RENDERING_MONOCHROME_MODE);
-		boolean monostyle = TXMPreferences.getBoolean(preferencesNode, resultData, ProgressionPreferences.CHART_MONO_STYLE);
-		boolean cumulative = TXMPreferences.getBoolean(preferencesNode, resultData, ProgressionPreferences.CHART_CUMULATIVE);
-		
-		
-		JFreeChart chart = null;
-
-		// Create the dataset
-		XYSeriesCollection dataset = new XYSeriesCollection();
-		List<int[]> positions = progression.getAllpositions();
-		List<Query> queries = progression.getQueries();
-		// Y axis label
-		String yAxisLabel;
-
-		// Cumulative
-		if(cumulative)	{
-			for(int i = 0; i < progression.getAllpositions().size(); i++) {
-				int[] list = positions.get(i);
-				Query query = queries.get(i);
-				XYSeries series = new XYSeries(query.toString() + " " + list.length);
-				int c = 1;
-				for(int j = 0; j < list.length; j++) {
-					// Add a first point to draw a vertical line
-					if(j == 0)	{
-						series.add(list[j], 0);
-					}
-					series.add(list[j], c++);
-				}
-
-				// FIXME: add a dummy point to draw horizontal line between last point and max X corpus
-				series.add(progression.getXmaxCorpus(), --c);
-				dataset.addSeries(series);
-			}
-
-			// Create the chart
-			yAxisLabel = TBXProgressionMessages.ChartsEngine_PROGRESSION_Y_AXIS_CUMULATIVE_LABEL;
-			chart = this.getChartsEngine().createXYStepChart(dataset, Utils.createProgressionChartTitle(progression, cumulative),
-					TBXProgressionMessages.bind(TBXProgressionMessages.ChartsEngine_PROGRESSION_X_AXIS_LABEL, progression.getXmaxCorpus()), yAxisLabel, true, true, true, true, true);
-
-
-			// Custom renderer
-			chart.getXYPlot().setRenderer(new ProgressionItemSelectionRenderer());
-
-		}
-		// FIXME : Density, to implement when textometry R package will store the result in the Progression class
-		else	{
-
-			// FIXME : density not yet implemented
-			System.err.println("JFCChartsEngine.createProgressionChart(): density mode not yet implemented.");
-
-			for(int i = 0; i < progression.getAllpositions().size(); i++) {
-				int[] liste = positions.get(i);
-				Query query = queries.get(i);
-				XYSeries series = new XYSeries(query.toString() + " " + liste.length);
-
-				for(int j = 0; j <  liste.length; j++) {
-
-					// FIXME : tests y
-					// y <- c( c(0), y , c(y[[length(x)]]) ) // R code
-					// FIXME : random Y value
-					double y = progression.getAllpositions().get(i)[j] * Math.random();
-	//				double y = progression.getAllpositions().get(i)[j];
-					series.add(liste[j], y);
-				}
-				dataset.addSeries(series);
-			}
-
-			// Create the chart
-			yAxisLabel =  TBXProgressionMessages.ChartsEngine_PROGRESSION_Y_AXIS_NOT_CUMULATIVE_LABEL;
-			chart = this.getChartsEngine().createXYLineChart(dataset, Utils.createProgressionChartTitle(progression, cumulative),
-					TBXProgressionMessages.bind(TBXProgressionMessages.ChartsEngine_PROGRESSION_X_AXIS_LABEL, progression.getXmaxCorpus()), yAxisLabel,
-					true, true, true, false, true, false, true, null);
-		}
-
-
-
-        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_PROGRESSION);
-        ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).getItemsSelector().setResultData(progression);
-
-
-		// Add the limit markers
-		BasicStroke dashedStroke = new BasicStroke(0.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f, new float[] {2f}, 0f);
-		Marker marker = new ValueMarker(progression.getXminCorpus());
-        marker.setPaint(Color.gray);
-        marker.setStroke(dashedStroke);
-        chart.getXYPlot().addDomainMarker(marker);
-		marker = new ValueMarker(progression.getXmaxCorpus());
-        marker.setPaint(Color.gray);
-        marker.setStroke(dashedStroke);
-        chart.getXYPlot().addDomainMarker(marker);
-
-
-//        // FIXME : limit with annotations rather than markers (marker height is dynamically adapted to the real chart height.
-        // Annotation have a fixed height)
-//        XYLineAnnotation annotation = new XYLineAnnotation(0, 0, 0, dataset.getRangeUpperBound(true), dashedStroke, Color.gray);
-//        chart.getXYPlot().addAnnotation(annotation, true);
-
-		// Add the part markers
-		if(progression.getStructurePositions().length > 0)	{
-			for(int i = 0; i < progression.getStructurePositions().length; i++) {
-				if(progression.getStructurePositions()[i] != 0)	{
-					marker = new ValueMarker(progression.getStructurePositions()[i]);
-			        marker.setPaint(Color.black);
-			        marker.setLabel(progression.getStructureNames()[i]);
-			        marker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
-			        marker.setLabelTextAnchor(TextAnchor.HALF_ASCENT_LEFT);
-
-
-			        // FIXME: test of rotated annotations rather than using marker label. The problem with this is that the position of annotation is not adjusted when zooming/dezooming.
-			        // FIXME: the best approach is to redefine the drawing method of
-////			        double start = marker.getStartValue();
-////			        double end = TempIntervalMarker.getEndValue();
-////			        double middle = (end - start)/2;
-//			        XYTextAnnotation updateLabel = new XYTextAnnotation("Update", progression.getStructurePositions()[i], 0);
-//			        updateLabel.setFont(new Font("Sans Serif", Font.BOLD, 10));
-//			        updateLabel.setRotationAnchor(TextAnchor.BASELINE_CENTER);
-//			        updateLabel.setTextAnchor(TextAnchor.BASELINE_CENTER);
-//			        updateLabel.setRotationAngle(3.14 / 2);
-//			        updateLabel.setPaint(Color.black);
-//			        chart.getXYPlot().addAnnotation(updateLabel);
-
-
-
-			        chart.getXYPlot().addDomainMarker(marker);
-				}
-			}
-		}
-
-		// Custom domain axis for ticks drawing options
-		chart.getXYPlot().setDomainAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getDomainAxis(), true, true, progression.getXminCorpus(), progression.getXmaxCorpus()));
-
-		// Custom range axis for ticks drawing options
-		chart.getXYPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getRangeAxis(), false, true, 0, progression.getMaxY()));
-
-		// Match the X-axis origin value to the min x corpus (for subcorpus case)
-		chart.getXYPlot().getDomainAxis().setLowerBound(progression.getXminCorpus());
-
-
-//        int itemsColorsRenderingMode = Theme.ITEMS_RENDERING_COLORS_MODE;
-//		// Grayscale
-//        if(grayscale)	{
-//        	itemsColorsRenderingMode = Theme.ITEMS_RENDERING_GRAYSCALE_MODE;
-//        }
-
-        // Re-apply theme to the chart to match the colors rendering mode
-        // FIXME : the rendering mode should be pass to all methods, even base methods as createXYLineChart(), createBarChart(), etc.
-        // or better, to be stocked into a member variable in the theme ?
-      //  this.getChartsEngine().getTheme().applyThemeToChart(chart, TXMPreferences.getInt(ProgressionPreferences.PREFERENCES_NODE, resultData, ChartsEnginePreferences.RENDERING_COLORS_MODE, ChartsEnginePreferences.PREFERENCES_NODE), monostyle);
-
-		// synchronizes the chart with the shared preferences 
-		//super.syncChart(chart, resultData, ProgressionPreferences.PREFERENCES_NODE);
-		
-		return chart;
-		
-	}
-
-
-	@Override
-	public Class getResultDataClass() {
-		return Progression2.class;
-	}
-
-
-	
-
-}
Index: tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/renderers/ProgressionItemSelectionRenderer.java
===================================================================
--- tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/renderers/ProgressionItemSelectionRenderer.java	(revision 136)
+++ tmp/org.txm.progression.core/src/org/txm/progression/core/chartsengine/jfreechart/themes/highcharts/renderers/ProgressionItemSelectionRenderer.java	(revision 137)
@@ -14,7 +14,7 @@
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionXYStepRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.swing.CustomHTMLToolTip;
-import org.txm.progression.core.functions.Progression2;
+import org.txm.progression.core.functions.Progression;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.searchengine.cqp.corpus.query.Match;
@@ -67,7 +67,7 @@
 //
 //				// FIXME: test affichage des concordances des occurrences directement dans le tooltip
 //				// Progression
-				String concordanceStr = "";
+//				String concordanceStr = "";
 
 //				if(renderer.getChartType() == ChartsEngine.CHART_TYPE_PROGRESSION)	{
 //					try {
@@ -251,10 +251,10 @@
 			Property prop;
 			
 			// Ref
-			prop = ((Progression2)this.multipleItemsSelector.getResultData()).getCorpus().getProperty("ref"); //$NON-NLS-1$
+			prop = ((Progression)this.multipleItemsSelector.getResultData()).getCorpus().getProperty("ref"); //$NON-NLS-1$
 			// Text id
 			if(prop == null)	{
-				prop = ((Progression2)this.multipleItemsSelector.getResultData()).getCorpus().getStructuralUnit("text").getProperty("id"); //$NON-NLS-1$ //$NON-NLS-2$
+				prop = ((Progression)this.multipleItemsSelector.getResultData()).getCorpus().getStructuralUnit("text").getProperty("id"); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			
 			Match selectedWordMatch = new Match(globalPosition, globalPosition);
Index: tmp/org.txm.progression.core/plugin.xml
===================================================================
--- tmp/org.txm.progression.core/plugin.xml	(revision 136)
+++ tmp/org.txm.progression.core/plugin.xml	(revision 137)
@@ -5,7 +5,7 @@
          point="org.txm.chartsengine.chartcreator">
       <ChartCreator
             chartsEngineName="jfreechart_charts_engine"
-            class="org.txm.progression.core.chartsengine.jfreechart.themes.highcharts.JFCProgressionChartCreator"
+            class="org.txm.progression.core.chartsengine.jfreechart.JFCProgressionChartCreator"
             fileNamePrefix="progression">
       </ChartCreator>
       <ChartCreator
Index: tmp/org.txm.progression.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.progression.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.progression.core/META-INF/MANIFEST.MF	(revision 137)
@@ -10,7 +10,7 @@
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
  org.txm.chartsengine.r.core;bundle-version="1.0.0"
 Export-Package: org.txm.progression.core.chartsengine.base,
- org.txm.progression.core.chartsengine.jfreechart.themes.highcharts,
+ org.txm.progression.core.chartsengine.jfreechart,
  org.txm.progression.core.chartsengine.jfreechart.themes.highcharts.renderers,
  org.txm.progression.core.chartsengine.r,
  org.txm.progression.core.functions,
Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java	(revision 136)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartsEngine.java	(revision 137)
@@ -4,15 +4,12 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Properties;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
 import org.txm.Toolbox;
-import org.txm.core.chartsengine.base.messages.ChartsEngineMessages;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
+import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
 import org.txm.utils.logger.Log;
 
 
@@ -423,131 +420,53 @@
 			file = File.createTempFile(prefix, "." + this.outputFormat, resultsDir);
 		}
 		catch (IOException e) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CANT_CREATE_TMP_FILE_CHART + e);
+			Log.severe(ChartsEngineCoreMessages.ChartsEngine_CANT_CREATE_TMP_FILE_CHART + e);
 		}
 
 		// TODO : old code, useful ? and/or return null instead of the file if canWrite() return false ?
 		if(!file.canWrite()) {
-			Log.severe(ChartsEngineMessages.ChartsEngine_CANT_WRITE_IN_FILE + file);
+			Log.severe(ChartsEngineCoreMessages.ChartsEngine_CANT_WRITE_IN_FILE + file);
 		}
 		return file;
 	}
 
 
-	/**
-	 * Creates a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the specified chart type and the current output format of the charts engine.
-	 * @param chartType
-	 * @return
-	 */
-	// FIXME: stop to use and remove the chart static types in ChartsEngine? Cause this is now delegate to the chart creator extensions? 
-	public File createTmpFile(int chartType)	{
-		if(chartType == ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS)	{
-			return this.createTmpFile("info");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_SPECIFICITIES)	{
-			return this.createTmpFile("specif");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES)	{
-			return this.createTmpFile("casingularvalues");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_CA_FACTORIAL_MAP)	{
-			return this.createTmpFile("cafactorialmap");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_PROGRESSION)	{
-			return this.createTmpFile("progression");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_CAH_2D)	{
-			return this.createTmpFile("cah2d");
-		}
-		else if(chartType == ChartsEngine.CHART_TYPE_CAH_3D)	{
-			return this.createTmpFile("cah3d");
-		}
+//	/**
+//	 * Creates a temporary file in USER_TXM_HOME\results.
+//	 * The prefix and the suffix are computed according to the specified chart type and the current output format of the charts engine.
+//	 * @param chartType
+//	 * @return
+//	 */
+//	// FIXME: stop to use and remove the chart static types in ChartsEngine? Cause this is now delegate to the chart creator extensions? 
+//	public File createTmpFile(int chartType)	{
+//		if(chartType == ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS)	{
+//			return this.createTmpFile("info");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_SPECIFICITIES)	{
+//			return this.createTmpFile("specif");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES)	{
+//			return this.createTmpFile("casingularvalues");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_CA_FACTORIAL_MAP)	{
+//			return this.createTmpFile("cafactorialmap");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_PROGRESSION)	{
+//			return this.createTmpFile("progression");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_CAH_2D)	{
+//			return this.createTmpFile("cah2d");
+//		}
+//		else if(chartType == ChartsEngine.CHART_TYPE_CAH_3D)	{
+//			return this.createTmpFile("cah3d");
+//		}
+//
+//		return this.createTmpFile("unknown");
+//	}
 
-		return this.createTmpFile("unknown");
-	}
 
 
-	/**
-	 * Creates a factorial map chart from the specified CA result.
-	 * @param ca
-	 * @return the factorial map chart object
-	 */
-	public abstract Object createCAFactorialMapChart(CA ca);
 
-
-	/**
-	 * Creates a factorial map chart from the specified CA result and writes it in the specified file.
-	 * @param ca
-	 * @param file
-	 * @return the generated file containing the chart
-	 */
-	public abstract File createCAFactorialMapChartFile(CA ca, File file);
-
-
-	/**
-	 * Creates a factorial map chart from the specified CA result and writes it in a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
-	 * @param ca
-	 * @return
-	 */
-	public File createCAFactorialMapChartFile(CA ca)	{
-		return this.createCAFactorialMapChartFile(ca, this.createTmpFile(ChartsEngine.CHART_TYPE_CA_FACTORIAL_MAP));
-	}
-
-
-	/**
-	 * Creates a string title, shared by charts engine implementations, for the CA factorial map chart from the specified result.
-	 * @param ca
-	 * @return
-	 */
-	public String createCAFactorialMapChartTitle(CA ca)	{
-
-		String partitionName;
-		if (ca.getPartition() == null) {
-			partitionName = "<no partition>";
-		}
-		else	{
-			partitionName = ca.getPartition().getName();
-		}
-
-		String corpusName;
-		if (ca.getCorpus() == null) {
-			corpusName = "<no corpus>";
-		}
-		else	{
-			corpusName = ca.getCorpus().getName();
-		}
-
-		return ChartsEngineMessages.bind(ChartsEngineMessages.ChartsEngine_CA_FACTORIAL_MAP_TITLE, partitionName, corpusName);
-	}
-
-	/**
-	 * Creates a bar plot with singular values of the specified CA result.
-	 * @param ca
-	 * @return the singular values bar plot object
-	 */
-	public abstract Object createCASingularValuesBarChart(CA ca);
-
-	/**
-	 * Creates a bar plot with singular values of the specified CA result and writes it in the specified file.
-	 * @param ca
-	 * @return
-	 */
-	public abstract File createCASingularValuesBarChartFile(CA ca, File file);
-
-
-	/**
-	 * Creates a bar plot with singular values of the specified CA result and writes it in a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
-	 * @param ca
-	 * @return
-	 */
-	public File createCASingularValuesBarChartFile(CA ca)	{
-		return this.createCASingularValuesBarChartFile(ca, this.createTmpFile(ChartsEngine.CHART_TYPE_CA_SINGULAR_VALUES));
-	}
-
-
 // FIXME
 //	/**
 //	 * Creates a chart from the specified CAH result.
@@ -559,19 +478,19 @@
 //	}
 //
 
-	/**
-	 * Creates a chart from the specified CAH result.
-	 * @param cah
-	 * @return
-	 */
-	public Object createCAHChart(CAH cah, boolean chart2d)	{
-		if(chart2d)	{
-			return this.createCAH2dChart(cah);
-		}
-		else	{
-			return this.createCAH3dChart(cah);
-		}
-	}
+//	/**
+//	 * Creates a chart from the specified CAH result.
+//	 * @param cah
+//	 * @return
+//	 */
+//	public Object createCAHChart(CAH cah, boolean chart2d)	{
+//		if(chart2d)	{
+//			return this.createCAH2dChart(cah);
+//		}
+//		else	{
+//			return this.createCAH3dChart(cah);
+//		}
+//	}
 
 // FIXME
 //
@@ -596,90 +515,90 @@
 //	}
 
 
-	/**
-	 * Creates a chart from the specified CAH result and writes it in the specified file.
-	 * @param cah
-	 * @param file
-	 * @return
-	 */
-	public File createCAHChartFile(CAH cah, boolean display2D, File file)	{
-		if(display2D)	{
-			return this.createCAH2dChartFile(cah, file);
-		}
-		else	{
-			return this.createCAH3dChartFile(cah, file);
-		}
-	}
+//	/**
+//	 * Creates a chart from the specified CAH result and writes it in the specified file.
+//	 * @param cah
+//	 * @param file
+//	 * @return
+//	 */
+//	public File createCAHChartFile(CAH cah, boolean display2D, File file)	{
+//		if(display2D)	{
+//			return this.createCAH2dChartFile(cah, file);
+//		}
+//		else	{
+//			return this.createCAH3dChartFile(cah, file);
+//		}
+//	}
+//
+//	/**
+//	 * Creates a chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results
+//	 * @param cah
+//	 * @param display2D
+//	 * @return
+//	 */
+//	public File createCAHChartFile(CAH cah, boolean display2D)	{
+//		if(display2D)	{
+//			return this.createCAH2dChartFile(cah);
+//		}
+//		else	{
+//			return this.createCAH3dChartFile(cah);
+//		}
+//	}
+//
+//	/**
+//	 * Creates a 2d chart from the specified CAH result.
+//	 * @param cah
+//	 * @return
+//	 */
+//	public abstract Object createCAH2dChart(CAH cah);
+//
+//
+//	/**
+//	 * Creates a 2d chart from the specified CAH result and writes it in the specified file.
+//	 * @param cah
+//	 * @param file
+//	 * @return
+//	 */
+//	public abstract File createCAH2dChartFile(CAH cah, File file);
+//
+//
+//	/**
+//	 * Creates a 2d chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results.
+//	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
+//	 * @param cah
+//	 * @return
+//	 */
+//	public File createCAH2dChartFile(CAH cah)	{
+//		return this.createCAH2dChartFile(cah, this.createTmpFile(ChartsEngine.CHART_TYPE_CAH_2D));
+//	}
+//
+//	/**
+//	 * Creates a 3d chart from the specified CAH result.
+//	 * @param cah
+//	 * @return
+//	 */
+//	public abstract Object createCAH3dChart(CAH cah);
+//
+//
+//	/**
+//	 * Creates a 3d chart from the specified CAH result and writes it in the specified file.
+//	 * @param cah
+//	 * @param file
+//	 * @return
+//	 */
+//	public abstract File createCAH3dChartFile(CAH cah, File file);
+//
+//
+//	/**
+//	 * Creates a 3d chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results.
+//	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
+//	 * @param cah
+//	 * @return
+//	 */
+//	public File createCAH3dChartFile(CAH cah)	{
+//		return this.createCAH3dChartFile(cah, this.createTmpFile(ChartsEngine.CHART_TYPE_CAH_3D));
+//	}
 
-	/**
-	 * Creates a chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results
-	 * @param cah
-	 * @param display2D
-	 * @return
-	 */
-	public File createCAHChartFile(CAH cah, boolean display2D)	{
-		if(display2D)	{
-			return this.createCAH2dChartFile(cah);
-		}
-		else	{
-			return this.createCAH3dChartFile(cah);
-		}
-	}
-
-	/**
-	 * Creates a 2d chart from the specified CAH result.
-	 * @param cah
-	 * @return
-	 */
-	public abstract Object createCAH2dChart(CAH cah);
-
-
-	/**
-	 * Creates a 2d chart from the specified CAH result and writes it in the specified file.
-	 * @param cah
-	 * @param file
-	 * @return
-	 */
-	public abstract File createCAH2dChartFile(CAH cah, File file);
-
-
-	/**
-	 * Creates a 2d chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
-	 * @param cah
-	 * @return
-	 */
-	public File createCAH2dChartFile(CAH cah)	{
-		return this.createCAH2dChartFile(cah, this.createTmpFile(ChartsEngine.CHART_TYPE_CAH_2D));
-	}
-
-	/**
-	 * Creates a 3d chart from the specified CAH result.
-	 * @param cah
-	 * @return
-	 */
-	public abstract Object createCAH3dChart(CAH cah);
-
-
-	/**
-	 * Creates a 3d chart from the specified CAH result and writes it in the specified file.
-	 * @param cah
-	 * @param file
-	 * @return
-	 */
-	public abstract File createCAH3dChartFile(CAH cah, File file);
-
-
-	/**
-	 * Creates a 3d chart from the specified CAH result and writes it in a temporary file in USER_TXM_HOME\results.
-	 * The prefix and the suffix are computed according to the chart type and the current output format of the charts engine.
-	 * @param cah
-	 * @return
-	 */
-	public File createCAH3dChartFile(CAH cah)	{
-		return this.createCAH3dChartFile(cah, this.createTmpFile(ChartsEngine.CHART_TYPE_CAH_3D));
-	}
-
 //	/**
 //	 * Creates a chart from the specified specificities result.
 //	 * @param specificitesResult the specificities result
@@ -1090,100 +1009,11 @@
 		return supportedOutputFileFormats;
 	}
 
-	/**
-	 * Sets the CA factorial map rows visibility and refreshes the chart.
-	 * @param ca
-	 * @param visible
-	 */
-	public void updateChartCAFactorialMapSetRowsVisible(Object chart, CA ca, boolean visible)	{
-		ca.setShown(ca.isShowIndividuals(), visible);
-	}
 
-	/**
-	 * Sets the CA factorial map columns visibility and refreshes the chart.
-	 * @param ca
-	 * @param visible
-	 */
-	public void updateChartCAFactorialMapSetColumnsVisible(Object chart, CA ca, boolean visible)	{
-		ca.setShown(visible, ca.isShowVariables());
-	}
 
 
-	/**
-	 * Sets the CA factorial map dimensions.
-	 * @param editorPart
-	 * @param dimension1
-	 * @param dimension2
-	 */
-	public void updateChartCAFactorialMapSetDimensions(Object chart, CA ca, int dimension1, int dimension2)	{
-		ca.setDimensions(dimension1, dimension2);
-	}
-
-	/**
-	 * Highlights points in the CA factorial map chart according to the specified labels.
-	 * @param chart
-	 * @param rows
-	 * @param labels
-	 */
-	public abstract void updateChartCAFactorialMapHighlightPoints(Object chart, boolean rows, String[] labels);
-
-	/**
-	 * Sets the items selection order on label.
-	 * @param chart
-	 * @param itemsSelectionOrder
-	 */
-	public abstract void updateChartCAFactorialMapSetLabelItemsSelectionOrder(Object chart, String[] rowLabels, String[] colLabels);
 	
-	/**
-	 * Gets the rows points currently selected in the CA factorial map chart.
-	 * @return
-	 */
-	public abstract ArrayList<String> getCAFactorialMapChartSelectedRowPoints(Object chart);
 
-	/**
-	 * Gets the columns points currently selected in the CA factorial map chart.
-	 * @return
-	 */
-	public abstract ArrayList<String> getCAFactorialMapChartSelectedColumnPoints(Object chart);
-	
-	
-	/**
-	 * Gets the positions of the points currently selected in the Progression step chart.
-	 * @param chart
-	 * @return
-	 */
-	public abstract ArrayList<Integer> getProgressionChartSelectedPointPositions(Object chart);
-	
-	/**
-	 * Gets the numbers of item in series of the selected points.
-	 * @param chart
-	 * @return
-	 */
-	public abstract ArrayList<Integer> getProgressionChartSelectedPointNumbers(Object chart);
-	
-	
-	/**
-	 * Gets the positions of all the points in the Progression step chart. 
-	 * @param chart
-	 * @return
-	 */
-	public abstract ArrayList<Integer> getProgressionChartAllPointPositions(Object chart);
-	
-	/**
-	 * Gets the selected series indexes.
-	 * @param chart
-	 * @return
-	 */
-	public abstract ArrayList<Integer> getProgressionChartSelectedSeries(Object chart);
-	
-	/**
-	 * Gets the last selected series.
-	 * @param chart
-	 * @return
-	 */
-	public abstract int getProgressionChartLastSelectedSeries(Object chart);
-
-	
 	@Override
 	public String toString() {
 		String str = this.name + " (description: " + this.description + ", output format: " + this.outputFormat;
Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartCreator.java
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartCreator.java	(revision 136)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/ChartCreator.java	(revision 137)
@@ -1,6 +1,8 @@
 package org.txm.chartsengine.core;
 
+import java.awt.Color;
 import java.io.File;
+import java.util.ArrayList;
 
 
 /**
@@ -133,4 +135,19 @@
 		this.fileNamePrefix = fileNamePrefix;
 	}
 	
+	/**
+	 * Gets the color used to draw the shapes of the series.
+	 * @param chart
+	 * @param index
+	 * @return
+	 */
+	public abstract ArrayList<Color> getSeriesShapesColors(Object chart);
+
+
+	/**
+	 * @return the fileNamePrefix
+	 */
+	public String getFileNamePrefix() {
+		return fileNamePrefix;
+	}
 }
Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages.properties
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages.properties	(revision 0)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages.properties	(revision 137)
@@ -0,0 +1,3 @@
+ChartsEngine_CANT_CREATE_TMP_FILE_CHART=Can't create temporary chart file
+ChartsEngine_CANT_WRITE_IN_FILE=Can't write in file
+ChartsEngine_LABEL_VALUE_SEPARATORS=\u0020
\ No newline at end of file

Property changes on: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages_fr.properties	(revision 0)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages_fr.properties	(revision 137)
@@ -0,0 +1,3 @@
+ChartsEngine_CANT_CREATE_TMP_FILE_CHART=Impossible de créer le fichier temporaire du graphique
+ChartsEngine_CANT_WRITE_IN_FILE=Impossible d'écrire dans le fichier
+ChartsEngine_LABEL_VALUE_SEPARATORS=\u0020
\ No newline at end of file

Property changes on: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/messages_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/ChartsEngineCoreMessages.java
===================================================================
--- tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/ChartsEngineCoreMessages.java	(revision 0)
+++ tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/ChartsEngineCoreMessages.java	(revision 137)
@@ -0,0 +1,25 @@
+package org.txm.chartsengine.core.messages;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
+
+
+
+public class ChartsEngineCoreMessages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.txm.chartsengine.core.messages.messages"; //$NON-NLS-1$
+
+	public static String ChartsEngine_CANT_CREATE_TMP_FILE_CHART;
+	public static String ChartsEngine_CANT_WRITE_IN_FILE;
+
+	public static String ChartsEngine_LABEL_VALUE_SEPARATORS;
+
+
+	static {
+		// initialize resource bundle
+		TXMCoreMessages.initializeMessages(BUNDLE_NAME, ChartsEngineCoreMessages.class);
+	}
+
+	private ChartsEngineCoreMessages() {
+	}
+}

Property changes on: tmp/org.txm.chartsengine.core/src/org/txm/chartsengine/core/messages/ChartsEngineCoreMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.chartsengine.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.chartsengine.core/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.chartsengine.core/META-INF/MANIFEST.MF	(revision 137)
@@ -8,4 +8,5 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.txm.chartsengine.core,
+ org.txm.chartsengine.core.messages,
  org.txm.chartsengine.core.preferences
Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/RCPSpecificitiesMessages.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/RCPSpecificitiesMessages.java	(revision 136)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/RCPSpecificitiesMessages.java	(revision 137)
@@ -1,47 +0,0 @@
-package org.txm.specificities.rcp.messages;
-
-import org.eclipse.osgi.util.NLS;
-
-public class RCPSpecificitiesMessages extends NLS {
-	
-
-	//private static final String BUNDLE_NAME = "org.txm.rcp.wordcloud.messages.messages"; //$NON-NLS-1$
-	// FIXME: use the same properties file than the bundle	
-	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
-	
-	
-	
-	public static String SpecificitiesPreferencePage_0;
-	public static String SpecificitiesPreferencePage_1;
-	public static String SpecificitiesPreferencePage_2;
-	public static String SpecificitiesPreferencePage_3;
-	public static String SpecificitiesPreferencePage_4;
-	public static String SpecificitiesPreferencePage_5;
-	public static String SpecificitiesPreferencePage_6;
-	public static String SpecificitiesPreferencePage_7;
-
-	public static String SpecificitiesPreferencePage_8;
-	public static String SpecificitiesResultEditorInput_0;
-	public static String SpecificitiesResultEditorInput_1;
-	public static String SpecificitiesResultEditorInput_11;
-	public static String SpecificitiesResultEditorInput_2;
-	public static String SpecificitiesResultEditorInput_5;
-	public static String SpecificitiesResultEditorInput_6;
-	public static String SpecificitiesResultEditorInput_7;
-	public static String SpecificitiesTableEditor_0;
-	public static String SpecificitiesTableEditor_1;
-	public static String SpecificitiesTableEditor_11;
-	public static String SpecificitiesTableEditor_16;
-	public static String SpecificitiesTableEditor_17;
-	public static String SpecificitiesTableEditor_5;
-	public static String SpecificitiesTableEditor_8;
-	
-	
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, RCPSpecificitiesMessages.class);
-	}
-
-	private RCPSpecificitiesMessages() {
-	}
-}
Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/SpecificitiesUIMessages.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/SpecificitiesUIMessages.java	(revision 0)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/SpecificitiesUIMessages.java	(revision 137)
@@ -0,0 +1,47 @@
+package org.txm.specificities.rcp.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+public class SpecificitiesUIMessages extends NLS {
+	
+
+	//private static final String BUNDLE_NAME = "org.txm.rcp.wordcloud.messages.messages"; //$NON-NLS-1$
+	// FIXME: use the same properties file than the bundle	
+	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
+	
+	
+	
+	public static String SpecificitiesPreferencePage_0;
+	public static String SpecificitiesPreferencePage_1;
+	public static String SpecificitiesPreferencePage_2;
+	public static String SpecificitiesPreferencePage_3;
+	public static String SpecificitiesPreferencePage_4;
+	public static String SpecificitiesPreferencePage_5;
+	public static String SpecificitiesPreferencePage_6;
+	public static String SpecificitiesPreferencePage_7;
+
+	public static String SpecificitiesPreferencePage_8;
+	public static String SpecificitiesResultEditorInput_0;
+	public static String SpecificitiesResultEditorInput_1;
+	public static String SpecificitiesResultEditorInput_11;
+	public static String SpecificitiesResultEditorInput_2;
+	public static String SpecificitiesResultEditorInput_5;
+	public static String SpecificitiesResultEditorInput_6;
+	public static String SpecificitiesResultEditorInput_7;
+	public static String SpecificitiesTableEditor_0;
+	public static String SpecificitiesTableEditor_1;
+	public static String SpecificitiesTableEditor_11;
+	public static String SpecificitiesTableEditor_16;
+	public static String SpecificitiesTableEditor_17;
+	public static String SpecificitiesTableEditor_5;
+	public static String SpecificitiesTableEditor_8;
+	
+	
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, SpecificitiesUIMessages.class);
+	}
+
+	private SpecificitiesUIMessages() {
+	}
+}

Property changes on: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/messages/SpecificitiesUIMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesTableEditor.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesTableEditor.java	(revision 136)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesTableEditor.java	(revision 137)
@@ -65,7 +65,7 @@
 import org.txm.rcpapplication.editors.TableKeyListener;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.specificities.core.functions.SpecificitesResult;
-import org.txm.specificities.rcp.messages.RCPSpecificitiesMessages;
+import org.txm.specificities.rcp.messages.SpecificitiesUIMessages;
 import org.txm.stat.StatException;
 // TODO: Auto-generated Javadoc
 /**
@@ -134,7 +134,7 @@
 		try {
 			composeDisplayArea(displayArea);
 		} catch (StatException e) {
-			System.err.println(NLS.bind(RCPSpecificitiesMessages.SpecificitiesTableEditor_0, e.getMessage()));
+			System.err.println(NLS.bind(SpecificitiesUIMessages.SpecificitiesTableEditor_0, e.getMessage()));
 		}
 	}
 
@@ -154,7 +154,7 @@
 				StatusLine.setMessage(Messages.IndexEditor_37);
 				fillDisplay();
 			} catch (Exception e) {
-				System.err.println(NLS.bind(RCPSpecificitiesMessages.SpecificitiesTableEditor_1, e)); 
+				System.err.println(NLS.bind(SpecificitiesUIMessages.SpecificitiesTableEditor_1, e)); 
 			}
 		}
 	}
@@ -274,10 +274,10 @@
 		typeFrequencyColumn = new TableColumn(viewer
 				.getTable(), SWT.NONE);
 		typeFrequencyColumn.setText(Messages.FrequencyListEditorInput_4
-				+ " "+RCPSpecificitiesMessages.SpecificitiesTableEditor_11+" "
+				+ " "+SpecificitiesUIMessages.SpecificitiesTableEditor_11+" "
 				+ specificitiesResult.getCorpusSize()); 
 		typeFrequencyColumn.setToolTipText(Messages.FrequencyListEditorInput_4
-				+ RCPSpecificitiesMessages.SpecificitiesTableEditor_11
+				+ SpecificitiesUIMessages.SpecificitiesTableEditor_11
 				+ specificitiesResult.getCorpusSize()); 
 		typeFrequencyColumn.setAlignment(SWT.RIGHT);
 		typeFrequencyColumn.pack();
@@ -324,7 +324,7 @@
 			partNames = specificitiesResult.getPartShortNames();
 			partSize = specificitiesResult.getPartSize();
 		} catch (StatException e) {
-			System.err.println(NLS.bind(RCPSpecificitiesMessages.SpecificitiesTableEditor_5, e));
+			System.err.println(NLS.bind(SpecificitiesUIMessages.SpecificitiesTableEditor_5, e));
 			return;
 		}
 		// System.out.println("partnames: "+Arrays.toString(partNames));
@@ -491,7 +491,7 @@
 	 */
 	@Override
 	public void setFocus() {
-		StatusLine.setMessage(RCPSpecificitiesMessages.SpecificitiesTableEditor_17);
+		StatusLine.setMessage(SpecificitiesUIMessages.SpecificitiesTableEditor_17);
 		specificitesTable.setFocus();
 	}
 
Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesResultEditorInput.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesResultEditorInput.java	(revision 136)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/editors/SpecificitiesResultEditorInput.java	(revision 137)
@@ -51,7 +51,7 @@
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Partition;
 import org.txm.specificities.core.functions.SpecificitesResult;
-import org.txm.specificities.rcp.messages.RCPSpecificitiesMessages;
+import org.txm.specificities.rcp.messages.SpecificitiesUIMessages;
 import org.txm.stat.StatException;
 // TODO: Auto-generated Javadoc
 /**
@@ -76,8 +76,8 @@
 	
 	/** The names. */
 	private List<String> names = Arrays.asList(new String[] {
-			RCPSpecificitiesMessages.SpecificitiesResultEditorInput_0,
-			RCPSpecificitiesMessages.SpecificitiesResultEditorInput_1 });
+			SpecificitiesUIMessages.SpecificitiesResultEditorInput_0,
+			SpecificitiesUIMessages.SpecificitiesResultEditorInput_1 });
 	
 	/** The subcorpus. */
 	private Corpus subcorpus;
@@ -141,7 +141,7 @@
 					org.txm.rcpapplication.utils.Logger.printStackTrace(e);
 				}
 				if (freq[0].length > 1)
-					throw new IllegalStateException(RCPSpecificitiesMessages.SpecificitiesResultEditorInput_2);
+					throw new IllegalStateException(SpecificitiesUIMessages.SpecificitiesResultEditorInput_2);
 				for (int i = 0; i < freq.length; i++) {
 					List<Object> node = new ArrayList<Object>();
 					node.add(names[i]);
@@ -159,7 +159,7 @@
 				}
 				if (freq.length != 1)
 					throw new IllegalStateException(
-							RCPSpecificitiesMessages.SpecificitiesResultEditorInput_2);
+							SpecificitiesUIMessages.SpecificitiesResultEditorInput_2);
 				for (int i = 0; i < freq[0].length; i++) {
 					List<Object> node = new ArrayList<Object>();
 					node.add(names[i]);
@@ -246,9 +246,9 @@
 			public String[] getColumnTitles() {
 				return new String[] {
 						Messages.FrequencyListEditorInput_3,
-						RCPSpecificitiesMessages.SpecificitiesResultEditorInput_5,
-						RCPSpecificitiesMessages.SpecificitiesResultEditorInput_6,
-						RCPSpecificitiesMessages.SpecificitiesResultEditorInput_7 };
+						SpecificitiesUIMessages.SpecificitiesResultEditorInput_5,
+						SpecificitiesUIMessages.SpecificitiesResultEditorInput_6,
+						SpecificitiesUIMessages.SpecificitiesResultEditorInput_7 };
 			}
 
 			@Override
@@ -257,7 +257,7 @@
 						Messages.FrequencyListEditorInput_5,
 						Messages.FrequencyListEditorInput_6,
 						Messages.FrequencyListEditorInput_6,
-						RCPSpecificitiesMessages.SpecificitiesResultEditorInput_11 };
+						SpecificitiesUIMessages.SpecificitiesResultEditorInput_11 };
 			}
 
 			@Override
Index: tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/preferences/SpecificitiesPreferencePage.java
===================================================================
--- tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/preferences/SpecificitiesPreferencePage.java	(revision 136)
+++ tmp/org.txm.specificities.rcp/src/org/txm/specificities/rcp/preferences/SpecificitiesPreferencePage.java	(revision 137)
@@ -40,7 +40,7 @@
 import org.txm.rcpapplication.jface.DoubleFieldEditor;
 import org.txm.specificities.core.preferences.SpecificitiesPreferences;
 import org.txm.specificities.rcp.adapters.SpecificitiesAdapterFactory;
-import org.txm.specificities.rcp.messages.RCPSpecificitiesMessages;
+import org.txm.specificities.rcp.messages.SpecificitiesUIMessages;
 /**
  * Specificities preferences page.
  * @author mdecorde
@@ -66,10 +66,10 @@
 	protected void createFieldEditors() {
 				
 		
-		this.addField(new StringFieldEditor(SpecificitiesPreferences.FORMAT, RCPSpecificitiesMessages.SpecificitiesPreferencePage_3, this.getFieldEditorParent()));
+		this.addField(new StringFieldEditor(SpecificitiesPreferences.FORMAT, SpecificitiesUIMessages.SpecificitiesPreferencePage_3, this.getFieldEditorParent()));
 
 		
-		IntegerFieldEditor maxScoreField = new IntegerFieldEditor(SpecificitiesPreferences.MAX_SCORE, RCPSpecificitiesMessages.SpecificitiesPreferencePage_8, this.getFieldEditorParent()); 
+		IntegerFieldEditor maxScoreField = new IntegerFieldEditor(SpecificitiesPreferences.MAX_SCORE, SpecificitiesUIMessages.SpecificitiesPreferencePage_8, this.getFieldEditorParent()); 
 		maxScoreField.setTextLimit(4);
 		maxScoreField.setValidRange(10, 1000);
 		this.addField(maxScoreField);
@@ -78,7 +78,7 @@
 		// Charts rendering
 		Composite chartsTab = SWTChartsComponentsProvider.createChartsRenderingPreferencesTabFolderComposite(this.getFieldEditorParent());
 		
-		this.addField(new DoubleFieldEditor(SpecificitiesPreferences.CHART_BANALITY, RCPSpecificitiesMessages.SpecificitiesPreferencePage_7, chartsTab));
+		this.addField(new DoubleFieldEditor(SpecificitiesPreferences.CHART_BANALITY, SpecificitiesUIMessages.SpecificitiesPreferencePage_7, chartsTab));
 		
 		// Create a group for columns management of mixed boolean fields and field/text input fields
 		Composite booleansGroup = new Composite(chartsTab, SWT.NONE);
@@ -86,9 +86,9 @@
 		gridData.horizontalSpan = 2;
 		booleansGroup.setLayoutData(gridData);
 		
-		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_TRANSPOSE, RCPSpecificitiesMessages.SpecificitiesPreferencePage_4, booleansGroup));
-		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_DRAW_LINES, RCPSpecificitiesMessages.SpecificitiesPreferencePage_5, booleansGroup));
-		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_DRAW_BARS, RCPSpecificitiesMessages.SpecificitiesPreferencePage_6, booleansGroup));
+		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_TRANSPOSE, SpecificitiesUIMessages.SpecificitiesPreferencePage_4, booleansGroup));
+		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_DRAW_LINES, SpecificitiesUIMessages.SpecificitiesPreferencePage_5, booleansGroup));
+		this.addField(new BooleanFieldEditor(SpecificitiesPreferences.CHART_DRAW_BARS, SpecificitiesUIMessages.SpecificitiesPreferencePage_6, booleansGroup));
 		
 		// other shared preferences
 		SWTChartsComponentsProvider.createChartsRenderingPreferencesFields(this, chartsTab);
@@ -103,7 +103,7 @@
 	@Override
 	public void init(IWorkbench workbench) {
 		this.setPreferenceStore(getNewPreferenceStore());
-		this.setTitle(RCPSpecificitiesMessages.SpecificitiesPreferencePage_2);
+		this.setTitle(SpecificitiesUIMessages.SpecificitiesPreferencePage_2);
 		this.setImageDescriptor(SpecificitiesAdapterFactory.ICON);
 	}
 
Index: tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/META-INF/MANIFEST.MF	(revision 137)
@@ -4,7 +4,8 @@
 Bundle-SymbolicName: org.txm.chartsengine.jfreechart.rcp;singleton:=true
 Bundle-Version: 1.0.0.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: jfreechart,
+Require-Bundle: org.txm.ca.core;bundle-version="1.0.0",
+ jfreechart,
  org.txm.chartsengine.core,
  org.txm.core;bundle-version="0.7.0",
  org.txm.chartsengine.rcp;bundle-version="1.0.0";visibility:=reexport,
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCChartsSwingComponentsProvider.java	(revision 137)
@@ -22,12 +22,8 @@
 import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
 import org.txm.chartsengine.jfreechart.core.themes.base.ExtendedNumberAxis;
 import org.txm.chartsengine.jfreechart.core.themes.base.Theme;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.ItemSelectionCategoryLineAndShapeRenderer;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.functions.ca.CA;
-import org.txm.functions.classification.CAH;
-import org.txm.functions.specificities.SpecificitesResult;
 
 /**
  * Swing components provider.
@@ -286,69 +282,69 @@
 
 
 
-	/**
-	 * Creates a chart panel containing a CA scatter plot from the specified CA result.
-	 * @param ca
-	 * @return the chart panel
-	 */
-	public ChartPanel createCAFactorialMapChartPanel(CA ca)	{
+//	/**
+//	 * Creates a chart panel containing a CA scatter plot from the specified CA result.
+//	 * @param ca
+//	 * @return the chart panel
+//	 */
+//	public ChartPanel createCAFactorialMapChartPanel(CA ca)	{
+//
+//		ChartPanel chartPanel;
+//
+//		// Creating the chart from the current charts engine
+//		JFreeChart chart = this.chartsEngine.createCAFactorialMapChart(ca);
+//
+//		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//
+//		// Need to be called after the theme is applied to the chart else the legends of not visible series aren't created
+//		chart.getXYPlot().getRenderer().setSeriesVisible(0, ca.isShowVariables()); // Rows
+//		chart.getXYPlot().getRenderer().setSeriesVisible(1, ca.isShowIndividuals()); // Columns
+//
+//		((FCAItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartPanel(chartPanel);
+//
+//
+//        return chartPanel;
+//	}
+//
+//
+//
+//	/**
+//	 * Creates a chart panel containing a bar chart with the singular values of the specified CA result.
+//	 * @param ca
+//	 * @return
+//	 */
+//	public ChartPanel createCASingularValuesBarChartChartPanel(CA ca)	{
+//
+//		ChartPanel chartPanel;
+//
+//		// Creating the chart from the current charts engine
+//        JFreeChart chart = this.chartsEngine.createCASingularValuesBarChart(ca);
+//
+//        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//
+//        return chartPanel;
+//	}
 
-		ChartPanel chartPanel;
 
-		// Creating the chart from the current charts engine
-		JFreeChart chart = this.chartsEngine.createCAFactorialMapChart(ca);
 
-		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//	/**
+//	 * Creates a chart panel containing a CAH plot from the specified CAH result.
+//	 * @param cah
+//	 * @return the chart panel
+//	 */
+//	public ChartPanel createCAHChartPanel(CAH cah, boolean display2D)	{
+//
+//		ChartPanel chartPanel;
+//
+//		// Creating the chart from the current charts engine
+//		JFreeChart chart = (JFreeChart) this.chartsEngine.createCAHChart(cah, display2D);
+//
+//		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
+//
+//        return chartPanel;
+//	}
 
-		// Need to be called after the theme is applied to the chart else the legends of not visible series aren't created
-		chart.getXYPlot().getRenderer().setSeriesVisible(0, ca.isShowVariables()); // Rows
-		chart.getXYPlot().getRenderer().setSeriesVisible(1, ca.isShowIndividuals()); // Columns
 
-		((FCAItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartPanel(chartPanel);
-
-
-        return chartPanel;
-	}
-
-
-
-	/**
-	 * Creates a chart panel containing a bar chart with the singular values of the specified CA result.
-	 * @param ca
-	 * @return
-	 */
-	public ChartPanel createCASingularValuesBarChartChartPanel(CA ca)	{
-
-		ChartPanel chartPanel;
-
-		// Creating the chart from the current charts engine
-        JFreeChart chart = this.chartsEngine.createCASingularValuesBarChart(ca);
-
-        chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
-
-        return chartPanel;
-	}
-
-
-
-	/**
-	 * Creates a chart panel containing a CAH plot from the specified CAH result.
-	 * @param cah
-	 * @return the chart panel
-	 */
-	public ChartPanel createCAHChartPanel(CAH cah, boolean display2D)	{
-
-		ChartPanel chartPanel;
-
-		// Creating the chart from the current charts engine
-		JFreeChart chart = (JFreeChart) this.chartsEngine.createCAHChart(cah, display2D);
-
-		chartPanel = this.getTheme().createChartPanel(this.swtChartsComponentProvider, chart);
-
-        return chartPanel;
-	}
-
-
 //	/**
 //	 * Creates a chart panel containing a bar chart with the dimensions of the specified partition result.
 //	 * @param partition
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/events/DefaultChartMouseListener.java	(revision 137)
@@ -19,7 +19,7 @@
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.data.category.CategoryDataset;
 import org.jfree.data.xy.XYSeriesCollection;
-import org.txm.chartsengine.jfreechart.core.datasets.FCAXYDataset;
+import org.txm.ca.core.chartsengine.jfreechart.datasets.FCAXYDataset;
 import org.txm.chartsengine.jfreechart.core.renderers.MultipleItemsSelector;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
 import org.txm.chartsengine.rcp.IChartComponent;
@@ -151,7 +151,7 @@
 						}
 					}
 
-
+					// FIXME: this code must be extract in each plugin (CA, Progression, etc.) and stored in some EventCallBack extensions
 					// update text menu according to the current selection
 					if(renderer.getItemsSelector() instanceof MultipleItemsSelector && ((MultipleItemsSelector) renderer.getItemsSelector()).getSelectedSeriesCount() > 0)	{
 						// XY plot
@@ -195,6 +195,7 @@
 
 						}
 					}
+					// End of FIXME
 				}
 			}
 		}
@@ -241,6 +242,7 @@
 	@Override
 	public void chartMouseMoved(ChartMouseEvent event) {
 
+		
 		// Mouse over selection
 		ChartEntity entity = event.getEntity();
 
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/themes/base/swing/ItemSelectionChartPanel.java	(revision 137)
@@ -19,9 +19,9 @@
 import org.jfree.chart.plot.Pannable;
 import org.jfree.chart.plot.Plot;
 import org.jfree.chart.plot.XYPlot;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.core.JFCChartsEngine;
 import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.rcp.events.DefaultChartMouseListener;
 import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events.FCAChartMouseListener;
 import org.txm.chartsengine.jfreechart.rcp.themes.highcharts.events.JFCItemsKeyboardSelectionCallBack;
@@ -147,6 +147,8 @@
 			Plot plot = this.getChart().getPlot();
 			// XY plots
 			if(plot instanceof XYPlot)	{
+
+				// FIXME: this code must be moved to the CA plugin
 				// FCA
 				if(((XYPlot)plot).getRenderer() instanceof FCAItemSelectionRenderer)	{
 
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/JFCSWTChartsComponentsProvider.java	(revision 137)
@@ -88,7 +88,16 @@
 			JFreeChart chart = (JFreeChart) chartCreator.createChart(resultData, preferencesNode); 
 			ChartPanel chartPanel = ((JFCChartsEngine) chartsEngine).getTheme().createChartPanel(this, chart);
 			chartEditorInput.setChartContainer(chartPanel);
+
+			// Store the chart panel in the renderer (eg. can be needed to get the Graphics2D object to use in getItemShape() to compute the label text bounds and draw a background rectangle.)
+			if(chart.getPlot() instanceof XYPlot && chart.getXYPlot().getRenderer() instanceof IItemSelectionRenderer)	{
+				((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).getItemsSelector().setChartPanel(chartPanel);
+			}
+			else if(chart.getPlot() instanceof CategoryPlot && chart.getCategoryPlot().getRenderer() instanceof IItemSelectionRenderer)	{
+				((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).getItemsSelector().setChartPanel(chartPanel);
+			}
 			
+			
 			// update for shared preferences, show title, show legend, colors rendering mode, etc.
 			chartCreator.updateChart(chart, resultData, preferencesNode);
 
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/editors/___JFCChartEditorPart.java	(revision 137)
@@ -44,7 +44,7 @@
 	}
 	
 	
-	@Override
+	
 	public String getID()	{
 		return ID;
 	}
Index: tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java
===================================================================
--- tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java	(revision 136)
+++ tmp/org.txm.chartsengine.jfreechart.rcp/src/org/txm/chartsengine/jfreechart/rcp/swt/JFCComposite.java	(revision 137)
@@ -13,7 +13,7 @@
 import org.jfree.chart.ChartPanel;
 import org.jfree.chart.JFreeChart;
 import org.jfree.chart.plot.XYPlot;
-import org.txm.chartsengine.jfreechart.core.themes.highcharts.defaulttheme.renderers.FCAItemSelectionRenderer;
+import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.FCAItemSelectionRenderer;
 import org.txm.chartsengine.jfreechart.rcp.themes.base.swing.ItemSelectionChartPanel;
 import org.txm.chartsengine.rcp.IChartComponent;
 import org.txm.chartsengine.rcp.editors.ChartEditorPart;
