Révision 190

tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/chartcreators/JFCSingularValueChartCreator.java (revision 190)
4 4
import org.jfree.chart.axis.NumberAxis;
5 5
import org.jfree.data.category.DefaultCategoryDataset;
6 6
import org.jfree.data.general.DatasetUtilities;
7
import org.txm.ca.core.chartsengine.jfreechart.themes.highcharts.renderers.CASingularValuesItemSelectionRenderer;
7 8
import org.txm.ca.core.functions.CA;
8 9
import org.txm.ca.core.messages.CACoreMessages;
9 10
import org.txm.chartsengine.jfreechart.core.JFCChartCreator;
......
48 49
			chart = this.getChartsEngine().createCategoryBarChart(dataset, CACoreMessages.ChartsEngine_CA_SINGULAR_VALUES_TITLE, CACoreMessages.ChartsEngine_CA_SINGULAR_VALUES_X_AXIS_LABEL, CACoreMessages.ChartsEngine_CA_SINGULAR_VALUES_Y_AXIS_LABEL, false, false, false);
49 50

  
50 51
			// Custom renderer
51
			chart.getCategoryPlot().setRenderer(this.getChartsEngine().getTheme().createCASingularValuesRenderer());
52
			chart.getCategoryPlot().setRenderer(new CASingularValuesItemSelectionRenderer());
52 53
	        ((IItemSelectionRenderer) chart.getCategoryPlot().getRenderer()).getItemsSelector().setResultData(ca);
53 54

  
54 55
	        // Custom range axis for ticks drawing options
tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/chartcreators/JFCCAChartCreator.java (revision 190)
2 2

  
3 3
import java.awt.BasicStroke;
4 4
import java.awt.Color;
5
import java.text.Collator;
5 6
import java.text.DecimalFormat;
6 7
import java.util.ArrayList;
8
import java.util.HashMap;
9
import java.util.TreeMap;
7 10

  
8 11
import org.jfree.chart.ChartFactory;
9 12
import org.jfree.chart.JFreeChart;
......
15 18
import org.jfree.chart.plot.XYPlot;
16 19
import org.jfree.chart.renderer.xy.XYItemRenderer;
17 20
import org.jfree.chart.title.LegendTitle;
21
import org.jfree.data.xy.XYDataset;
18 22
import org.jfree.ui.TextAnchor;
19 23
import org.txm.ca.core.chartsengine.base.CAChartCreator;
20 24
import org.txm.ca.core.chartsengine.base.Utils;
......
292 296
			chart = ChartFactory.createScatterPlot(Utils.createCAFactorialMapChartTitle(ca), "", "", dataset, PlotOrientation.VERTICAL, TXMPreferences.getBoolean(CAPreferences.PREFERENCES_NODE, ChartsEnginePreferences.SHOW_LEGEND), false, false);
293 297

  
294 298
			// Custom renderer
295
			chart.getXYPlot().setRenderer(this.getChartsEngine().getTheme().createFCARenderer());
299
			chart.getXYPlot().setRenderer(new FCAItemSelectionRenderer());
296 300

  
297 301

  
298 302
		}
......
330 334
	public void updateChartCAFactorialMapSetLabelItemsSelectionOrder(Object chart, String[] rowLabels, String[] colLabels) {
331 335
		
332 336
		MultipleItemsSelector selector = (MultipleItemsSelector) ((FCAItemSelectionRenderer)((JFreeChart) chart).getXYPlot().getRenderer()).getItemsSelector();
333
		selector.setCyclicItemsOrder(selector.getItemsAndSeriesOrderedByLabels((FCAXYDataset)((JFreeChart) chart).getXYPlot().getDataset(), rowLabels, colLabels)); 
337
		selector.setCyclicItemsOrder(this.getItemsAndSeriesOrderedByLabels((FCAXYDataset)((JFreeChart) chart).getXYPlot().getDataset(), rowLabels, colLabels)); 
334 338
	}
335 339

  
340
	
341
	/**
342
	 * Gets a map where the values of the dataset are ordered according to the specified label arrays, keeping the order of these arrays and flatten but grouped by series.
343
	 * @param dataset
344
	 * @return
345
	 */
346
	public TreeMap<Object, ArrayList<Integer>> getItemsAndSeriesOrderedByLabels(FCAXYDataset dataset, String[] rowLabels, String[] colLabels)	{
347
		
348
		TreeMap<Object, ArrayList<Integer>> orderedValues = new TreeMap<Object, ArrayList<Integer>>();
349
		
350
		int[] rowIndices = dataset.getOrderedLabelIndices(0, rowLabels);
351
		int[] colIndices = dataset.getOrderedLabelIndices(1, colLabels);
352
		
353
		int i = 0;
354
		for(; i < rowIndices.length; i++) {
355
			ArrayList<Integer> itemData = new ArrayList<Integer>(2);
356
			itemData.add(0); // series
357
			itemData.add(rowIndices[i]); // item
358
			orderedValues.put(i, itemData);
359
		}
360
		for(int j = 0; j < colIndices.length; j++) {
361
			ArrayList<Integer> itemData = new ArrayList<Integer>(2);
362
			itemData.add(1); // series
363
			itemData.add(colIndices[j]); // item
364
			orderedValues.put(j + i, itemData);
365
		}
366
	
367
		return orderedValues;
368
	}
369
	
370
	
371
	/**
372
	 * Gets a map where the values of the dataset are orderer by X item value and flatten despite of the series.
373
	 * @param dataset
374
	 * @return
375
	 */
376
	public TreeMap<Object, ArrayList<Integer>> getItemsAndSeriesOrderedByXValues(XYDataset dataset)	{
377
		HashMap<Object, ArrayList<Integer>> allFlattenValues = new HashMap<Object, ArrayList<Integer>>();
378
		for(int i = 0; i < dataset.getSeriesCount(); i++) {
379
			for(int j = 0; j < dataset.getItemCount(i); j++) {
380
				ArrayList<Integer> itemData = new ArrayList<Integer>(2);
381
				itemData.add(i); // series
382
				itemData.add(j); // item
383
				
384
				// FIXME: tests, navigation clavier sur toutes les courbes en même temps d'une Progression (tri sur la valeur X du dataset, toute séries confondues)
385
//				allFlattenValues.put((int) dataset.getXValue(i, j), itemData);
336 386

  
387

  
388
				// Test FCAXYDataset
389
				
390
				// FIXME: tests, navigation clavier par ordre alphabétique d'une AFC (toute séries confondues)
391
				String label = ((FCAXYDataset)dataset).getLabel(i,  j);
392
				allFlattenValues.put(label, itemData);
393
				
394
				// FIXME: tests, navigation clavier par coord X d'une AFC (toute séries confondues)
395
				//allFlattenValues.put(dataset.getX(i, j), itemData);
396
				
397
			}
398
		}
399

  
400

  
401
		// FIXME: tests, navigation clavier sur toutes les courbes en même temps d'une Progression
402
	//	TreeMap<Object, ArrayList<Integer>> orderedValues = new TreeMap<Object, ArrayList<Integer>>(allFlattenValues);
403

  
404
		// FIXME: tests, navigation clavier par ordre alphabétique d'une AFC
405
		TreeMap<Object, ArrayList<Integer>> orderedValues = new TreeMap<Object, ArrayList<Integer>>(Collator.getInstance());
406
		orderedValues.putAll(allFlattenValues);
407

  
408
		
409
		// FIXME : comparator tests
410
//		TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() {
411
//		    public int compare(String o1, String o2) {
412
//		        return o1.toLowerCase().compareTo(o2.toLowerCase());
413
//		    }
414
//		});
415
		
416
		
417
		// FIXME: DEbug
418
//		Set cles = orderedValues.keySet();
419
//		System.err.println("MultipleItemsSelector.getItemsAndSeriesOrderedByXValues() size: " + orderedValues.size());
420
//		Iterator<Integer> it = cles.iterator();
421
//		while(it.hasNext())	{
422
//			Object key = it.next();
423
//			ArrayList<Integer> value = orderedValues.get(key);
424
//			System.out.println("MultipleItemsSelector.getItemsAndSeriesOrdererByXValues(): item position = " + key + " series = " + value.get(0) + " item = " + value.get(1));
425
//		}
426

  
427
		return orderedValues;
428
	}
429
	
430

  
431
	
432

  
433
	/**
434
	 * Gets a map where the values of the dataset are orderer by label and flatten but grouped by series.
435
	 * @param dataset
436
	 * @return
437
	 */
438
	// FIXME: tests
439
//	public TreeMap<Object, ArrayList<Integer>> getItemsAndSeriesOrderedByLabels(FCAXYDataset dataset)	{
440
//		return this.getItemsAndSeriesOrderedByLabels(dataset, false, false);
441
//	}
442
//	
443
	/**
444
	 *  Gets a map where the values of the dataset are orderer by label and flatten but grouped by series.
445
	 * @param dataset
446
	 * @return
447
	 */
448
	// FIXME: tests, became useless ? (since we can give labels order with getItemsAndSeriesOrderedByLabels(FCAXYDataset dataset, String[] rowLabels, String[] colLabels)) )
449
//	public TreeMap<Object, ArrayList<Integer>> getItemsAndSeriesOrderedByLabels(FCAXYDataset dataset, boolean rowsReverse, boolean colsReverse)	{
450
//		
451
//		Comparator rowsComparator;
452
//		Comparator colsComparator;
453
//		
454
//		if(rowsReverse)	{
455
//			rowsComparator = Collections.reverseOrder(Collator.getInstance());
456
//		}
457
//		else	{
458
//			rowsComparator = Collator.getInstance();
459
//		}
460
//
461
//		if(colsReverse)	{
462
//			colsComparator = Collections.reverseOrder(Collator.getInstance());
463
//		}
464
//		else	{
465
//			colsComparator = Collator.getInstance();
466
//		}
467
//
468
//		
469
//		TreeMap<Object, ArrayList<Integer>> allFlattenRowsValues = new TreeMap<Object, ArrayList<Integer>>(rowsComparator);
470
//		TreeMap<Object, ArrayList<Integer>> allFlattenColsValues = new TreeMap<Object, ArrayList<Integer>>(colsComparator);
471
//
472
//		// sort the rows by label
473
//		for(int i = 0; i < dataset.getItemCount(0); i++) {
474
//			ArrayList<Integer> itemData = new ArrayList<Integer>(2);
475
//			itemData.add(0); // series
476
//			itemData.add(i); // item
477
//			allFlattenRowsValues.put(((FCAXYDataset)dataset).getLabel(0,  i), itemData);
478
//			
479
//			// FIXME: tests, navigation clavier par coord X d'une AFC (toute séries confondues)
480
//			//allFlattenRowsValues.put(dataset.getX(0, j), itemData);
481
//		}
482
//		
483
//		
484
//		// sort the cols by label
485
//		for(int i = 0; i < dataset.getItemCount(1); i++) {
486
//			ArrayList<Integer> itemData = new ArrayList<Integer>(2);
487
//			itemData.add(1); // series
488
//			itemData.add(i); // item
489
//			allFlattenColsValues.put(((FCAXYDataset)dataset).getLabel(1,  i), itemData);
490
//			
491
//			// FIXME: tests, navigation clavier par coord X d'une AFC (toute séries confondues)
492
//			//allFlattenColsValues.put(dataset.getX(1, j), itemData);
493
//		}
494
//
495
//		
496
//		
497
//		// FIXME: tests, navigation clavier par ordre alphabétique d'une AFC
498
//		TreeMap<Object, ArrayList<Integer>> orderedValues = new TreeMap<Object, ArrayList<Integer>>();
499
////		if(revertedOrder)	{
500
////			orderedValues = new TreeMap(Collections.reverseOrder());
501
////		}
502
//		
503
//		
504
//		// put the rows order
505
//		int i = 0;
506
//		Set keys = allFlattenRowsValues.keySet();
507
//		Iterator<Integer> it = keys.iterator();
508
//		while(it.hasNext())	{
509
//			Object key = it.next();
510
//			orderedValues.put(i, allFlattenRowsValues.get(key));
511
//			i++;
512
//		}
513
//		// put the cols order
514
//		keys = allFlattenColsValues.keySet();
515
//		it = keys.iterator();
516
//		while(it.hasNext())	{
517
//			Object key = it.next();
518
//			orderedValues.put(i, allFlattenColsValues.get(key));
519
//			i++;
520
//		}
521
//
522
//		
523
//		
524
//		//orderedValues.putAll(allFlattenRowsValues);
525
//
526
//		
527
//		// FIXME : comparator tests
528
////		TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() {
529
////		    public int compare(String o1, String o2) {
530
////		        return o1.toLowerCase().compareTo(o2.toLowerCase());
531
////		    }
532
////		});
533
//		
534
//		
535
//		// FIXME: DEbug
536
////		keys = orderedValues.keySet();
537
////		System.err.println("MultipleItemsSelector.getItemsAndSeriesOrderedByXValues() size: " + orderedValues.size());
538
////		it = keys.iterator();
539
////		while(it.hasNext())	{
540
////			Object key = it.next();
541
////			ArrayList<Integer> value = orderedValues.get(key);
542
////			System.out.println("MultipleItemsSelector.getItemsAndSeriesOrdererByXValues(): item position = " + key + " series = " + value.get(0) + " item = " + value.get(1));
543
////		}
544
//
545
//		return orderedValues;
546
//	}
547

  
337 548
	@Override
338 549
	public Class getResultDataClass() {
339 550
		return CA.class;
tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/renderers/FCAItemSelectionRenderer.java (revision 190)
12 12
import java.text.DecimalFormat;
13 13
import java.util.ArrayList;
14 14

  
15
import org.jfree.chart.ChartPanel;
16 15
import org.jfree.chart.labels.XYItemLabelGenerator;
17 16
import org.jfree.chart.labels.XYToolTipGenerator;
18 17
import org.jfree.data.xy.XYDataset;
19 18
import org.txm.ca.core.chartsengine.jfreechart.datasets.FCAXYDataset;
20 19
import org.txm.ca.core.messages.CACoreMessages;
21
import org.txm.ca.core.renderers.FCAMultipleItemsSelector;
22 20
import org.txm.chartsengine.core.ChartsEngine;
23 21
import org.txm.chartsengine.core.messages.ChartsEngineCoreMessages;
24 22
import org.txm.chartsengine.jfreechart.core.renderers.interfaces.IItemSelectionRenderer;
......
44 42
	 */
45 43
	public FCAItemSelectionRenderer() {
46 44
		super();
47
		this.multipleItemsSelector = new FCAMultipleItemsSelector(this);
48 45
		this.setChartType(ChartsEngine.CHART_TYPE_CA_FACTORIAL_MAP);
49 46
	}
50 47

  

Formats disponibles : Unified diff