Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2021 / extensions / org.gvsig.symbology / src / test / java / org / gvsig / symbology / fmap / mapcontext / rendering / legend / TestAbstractIntervalLegend.java @ 34111

History | View | Annotate | Download (19.3 KB)

1
 /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package org.gvsig.symbology.fmap.mapcontext.rendering.legend;
42

    
43
import java.awt.Dimension;
44
import java.awt.Rectangle;
45
import java.util.ArrayList;
46
import java.util.Hashtable;
47
import java.util.Iterator;
48
import java.util.List;
49
import java.util.Set;
50

    
51
import org.cresques.cts.IProjection;
52
import org.gvsig.fmap.dal.DataQuery;
53
import org.gvsig.fmap.dal.DataServerExplorer;
54
import org.gvsig.fmap.dal.DataServerExplorerParameters;
55
import org.gvsig.fmap.dal.DataSet;
56
import org.gvsig.fmap.dal.DataStoreParameters;
57
import org.gvsig.fmap.dal.exception.DataException;
58
import org.gvsig.fmap.dal.exception.ReadException;
59
import org.gvsig.fmap.dal.feature.EditableFeature;
60
import org.gvsig.fmap.dal.feature.EditableFeatureType;
61
import org.gvsig.fmap.dal.feature.Feature;
62
import org.gvsig.fmap.dal.feature.FeatureCache;
63
import org.gvsig.fmap.dal.feature.FeatureIndex;
64
import org.gvsig.fmap.dal.feature.FeatureIndexes;
65
import org.gvsig.fmap.dal.feature.FeatureLocks;
66
import org.gvsig.fmap.dal.feature.FeatureQuery;
67
import org.gvsig.fmap.dal.feature.FeatureReference;
68
import org.gvsig.fmap.dal.feature.FeatureSelection;
69
import org.gvsig.fmap.dal.feature.FeatureSet;
70
import org.gvsig.fmap.dal.feature.FeatureStore;
71
import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
72
import org.gvsig.fmap.dal.feature.FeatureType;
73
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
74
import org.gvsig.fmap.dal.feature.exception.NeedEditingModeException;
75
import org.gvsig.fmap.geom.GeometryLocator;
76
import org.gvsig.fmap.geom.GeometryManager;
77
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
78
import org.gvsig.fmap.geom.Geometry.TYPES;
79
import org.gvsig.fmap.geom.primitive.Curve;
80
import org.gvsig.fmap.geom.primitive.Envelope;
81
import org.gvsig.fmap.geom.primitive.GeneralPathX;
82
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
83
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
84
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
85
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractIntervalLegend;
86
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.FInterval;
87
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.TestISymbol;
88
import org.gvsig.tools.dynobject.DynClass;
89
import org.gvsig.tools.dynobject.DynObject;
90
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
91
import org.gvsig.tools.dynobject.exception.DynMethodException;
92
import org.gvsig.tools.exception.BaseException;
93
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
94
import org.gvsig.tools.observer.Observer;
95
import org.gvsig.tools.persistence.PersistentState;
96
import org.gvsig.tools.persistence.exception.PersistenceException;
97
import org.gvsig.tools.undo.RedoException;
98
import org.gvsig.tools.undo.UndoException;
99
import org.gvsig.tools.visitor.Visitor;
100

    
101
/**
102
 * Integration test to ensure that the legends which implements the
103
 * IVectorialIntervalLegend interface follow the rules that follow the managing
104
 * of them by the application.
105
 *
106
 * @author pepe vidal salvador - jose.vidal.salvador@iver.es
107
 */
108
public class TestAbstractIntervalLegend extends AbstractLibraryAutoInitTestCase {
109

    
110
        private static final Integer v0 = new Integer(0);
111
        private static final Integer v1 = new Integer(1);
112
        private static final Integer v2 = new Integer(2);
113
        private static final Integer v3 = new Integer(3);
114

    
115
        private static final String FIELD3 = "field3";
116
        private static final String FIELD2 = "field2";
117
        private static final String FIELD1 = "field1";
118
        private static final String FIELD0 = "field0";
119
        private static final int FIELDID = 0;
120

    
121
        private static final Integer[] feature0Values = new Integer[] { v0, v1, v2, v3, };
122
        private static final Integer[] feature1Values = new Integer[] { v3, v0, v1, v2, };
123
        private static final Integer[] feature2Values = new Integer[] { v2, v3, v0, v1, };
124
        private static final Integer[] feature3Values = new Integer[] { v1, v2, v3, v0, };
125

    
126
        private static final Integer[][] featureValues = new Integer[][] {
127
                feature0Values,
128
                feature1Values,
129
                feature2Values,
130
                feature3Values,};
131

    
132
        private static String[] fieldNames = new String[] {FIELD0,FIELD1,FIELD2,FIELD3,};
133

    
134

    
135
        // private static final Value v4 = (Value)ValueFactory.createValue(4);
136
        // private static final Value v5 = (Value)ValueFactory.createValue(5);
137
        // private static final Value v6 = (Value)ValueFactory.createValue(6);
138
        // private static final Value v7 = (Value)ValueFactory.createValue(7);
139
        // private static final Value v8 = (Value)ValueFactory.createValue(8);
140
        // private static final Value v9 = (Value)ValueFactory.createValue(9);
141

    
142
        private AbstractIntervalLegend[] intervalLegends;
143
        private MockDataSource mockDataSource = new MockDataSource();
144

    
145
        /**
146
         * To avoid duplicated validation logic in the test a mock object is created
147
         * to use a DataSource for this test.
148
         *
149
         */
150
        private class MockDataSource implements FeatureStore {
151

    
152
                public boolean allowWrite() {
153

    
154
                        return false;
155
                }
156

    
157
                public void beginEditingGroup(String description)
158
                                throws NeedEditingModeException {
159

    
160

    
161
                }
162

    
163
                public boolean canWriteGeometry(int gvSIGgeometryType)
164
                                throws DataException {
165

    
166
                        return false;
167
                }
168

    
169
                public void cancelEditing() throws DataException {
170

    
171

    
172
                }
173

    
174
                public FeatureSelection createFeatureSelection() throws DataException {
175

    
176
                        return null;
177
                }
178

    
179
                public FeatureIndex createIndex(FeatureType featureType,
180
                                String attributeName, String indexName) throws DataException {
181

    
182
                        return null;
183
                }
184

    
185
                public EditableFeature createNewFeature() throws DataException {
186

    
187
                        return null;
188
                }
189

    
190
                public EditableFeature createNewFeature(FeatureType type,
191
                                Feature defaultValues) throws DataException {
192

    
193
                        return null;
194
                }
195

    
196
                public EditableFeature createNewFeature(FeatureType type,
197
                                boolean defaultValues) throws DataException {
198

    
199
                        return null;
200
                }
201

    
202
                public EditableFeature createNewFeature(boolean defaultValues)
203
                                throws DataException {
204

    
205
                        return null;
206
                }
207

    
208
                public void delete(Feature feature) throws DataException {
209

    
210

    
211
                }
212

    
213
                public void edit() throws DataException {
214

    
215

    
216
                }
217

    
218
                public void edit(int mode) throws DataException {
219

    
220

    
221
                }
222

    
223
                public void endEditingGroup() throws NeedEditingModeException {
224

    
225

    
226
                }
227

    
228
                public void finishEditing() throws DataException {
229

    
230

    
231
                }
232

    
233
                public FeatureType getDefaultFeatureType() throws DataException {
234

    
235
                        return null;
236
                }
237

    
238
                public Envelope getEnvelope() {
239

    
240
                        return null;
241
                }
242

    
243
                public Feature getFeatureByReference(FeatureReference reference)
244
                                throws DataException {
245

    
246
                        return null;
247
                }
248

    
249
                public Feature getFeatureByReference(FeatureReference reference,
250
                                FeatureType featureType) throws DataException {
251

    
252
                        return null;
253
                }
254

    
255
                public FeatureSelection getFeatureSelection() throws DataException {
256

    
257
                        return null;
258
                }
259

    
260
                public FeatureSet getFeatureSet() throws DataException {
261

    
262
                        return null;
263
                }
264

    
265
                public FeatureSet getFeatureSet(FeatureQuery featureQuery)
266
                                throws DataException {
267

    
268
                        return null;
269
                }
270

    
271
                public void getFeatureSet(FeatureQuery featureQuery, Observer observer)
272
                                throws DataException {
273

    
274

    
275
                }
276

    
277
                public void getFeatureSet(Observer observer) throws DataException {
278

    
279

    
280
                }
281

    
282
                public List getFeatureTypes() throws DataException {
283

    
284
                        return null;
285
                }
286

    
287
                public FeatureIndexes getIndexes() {
288

    
289
                        return null;
290
                }
291

    
292
                public FeatureLocks getLocks() throws DataException {
293

    
294
                        return null;
295
                }
296

    
297
                public DataStoreParameters getParameters() {
298

    
299
                        return null;
300
                }
301

    
302
                public IProjection getSRSDefaultGeometry() throws DataException {
303

    
304
                        return null;
305
                }
306

    
307
                public FeatureStoreTransforms getTransforms() {
308

    
309
                        return null;
310
                }
311

    
312
                public void insert(EditableFeature feature) throws DataException {
313

    
314

    
315
                }
316

    
317
                public boolean isAppendModeSupported() {
318

    
319
                        return false;
320
                }
321

    
322
                public boolean isAppending() {
323

    
324
                        return false;
325
                }
326

    
327
                public boolean isEditing() {
328

    
329
                        return false;
330
                }
331

    
332
                public boolean isLocksSupported() {
333

    
334
                        return false;
335
                }
336

    
337

    
338
                public void setSelection(FeatureSet selection) throws DataException {
339

    
340

    
341
                }
342
                public void update(EditableFeatureType featureType)
343
                                throws DataException {
344

    
345

    
346
                }
347

    
348
                public void update(EditableFeature feature) throws DataException {
349

    
350

    
351
                }
352

    
353
                public void validateFeatures(int mode) throws DataException {
354

    
355

    
356
                }
357

    
358
                public DataSet createSelection() throws DataException {
359

    
360
                        return null;
361
                }
362

    
363
                public void dispose() {
364

    
365

    
366
                }
367

    
368
                public Iterator getChildren() {
369

    
370
                        return null;
371
                }
372

    
373
                public DataSet getDataSet() throws DataException {
374

    
375
                        return null;
376
                }
377

    
378
                public DataSet getDataSet(DataQuery dataQuery) throws DataException {
379

    
380
                        return null;
381
                }
382

    
383
                public void getDataSet(Observer observer) throws DataException {
384

    
385

    
386
                }
387

    
388
                public void getDataSet(DataQuery dataQuery, Observer observer)
389
                                throws DataException {
390

    
391

    
392
                }
393

    
394
                public DataServerExplorer getExplorer() throws DataException {
395

    
396
                        return null;
397
                }
398

    
399
                public String getName() {
400

    
401
                        return null;
402
                }
403

    
404
                public DataSet getSelection() throws DataException {
405

    
406
                        return null;
407
                }
408

    
409
                public void refresh() throws DataException {
410

    
411

    
412
                }
413

    
414
                public void setSelection(DataSet selection) throws DataException {
415

    
416

    
417
                }
418

    
419
                public void beginComplexNotification() {
420

    
421

    
422
                }
423

    
424
                public void disableNotifications() {
425

    
426

    
427
                }
428

    
429
                public void enableNotifications() {
430

    
431

    
432
                }
433

    
434
                public void endComplexNotification() {
435

    
436

    
437
                }
438

    
439
                public void addObserver(Observer o) {
440

    
441

    
442
                }
443

    
444
                public void deleteObserver(Observer o) {
445

    
446

    
447
                }
448

    
449
                public void deleteObservers() {
450

    
451

    
452
                }
453

    
454
                public void saveToState(PersistentState state)
455
                                throws PersistenceException {
456

    
457

    
458
                }
459

    
460
                public void loadFromState(PersistentState state) throws PersistenceException {
461

    
462

    
463
                }
464

    
465
                public FeatureQuery createFeatureQuery() {
466

    
467
                        return null;
468
                }
469

    
470
                public boolean canRedo() {
471

    
472
                        return false;
473
                }
474

    
475
                public boolean canUndo() {
476

    
477
                        return false;
478
                }
479

    
480
                public List getRedoInfos() {
481

    
482
                        return null;
483
                }
484

    
485
                public List getUndoInfos() {
486

    
487
                        return null;
488
                }
489

    
490
                public void redo() throws RedoException {
491

    
492

    
493
                }
494

    
495
                public void redo(int num) throws RedoException {
496

    
497

    
498
                }
499

    
500
                public void undo() throws UndoException {
501

    
502

    
503
                }
504

    
505
                public void undo(int num) throws UndoException {
506

    
507

    
508
                }
509

    
510
                public FeatureIndex createIndex(FeatureType featureType,
511
                                String attributeName, String indexName, Observer observer)
512
                                throws DataException {
513

    
514
                        return null;
515
                }
516

    
517
                public Object getMetadataID() {
518

    
519
                        return null;
520
                }
521

    
522
                public void delegate(DynObject dynObject) {
523

    
524

    
525
                }
526

    
527
                public DynClass getDynClass() {
528

    
529
                        return null;
530
                }
531

    
532
                public Object getDynValue(String name) throws DynFieldNotFoundException {
533

    
534
                        return null;
535
                }
536

    
537
                public boolean hasDynValue(String name) {
538

    
539
                        return false;
540
                }
541

    
542
                public void implement(DynClass dynClass) {
543

    
544

    
545
                }
546

    
547
                public Object invokeDynMethod(String name, DynObject context)
548
                                throws DynMethodException {
549

    
550
                        return null;
551
                }
552

    
553
                public Object invokeDynMethod(int code, DynObject context)
554
                                throws DynMethodException {
555

    
556
                        return null;
557
                }
558

    
559
                public void setDynValue(String name, Object value)
560
                                throws DynFieldNotFoundException {
561

    
562

    
563
                }
564

    
565
                /*
566
                 * (non-Javadoc)
567
                 *
568
                 * @see org.gvsig.metadata.Metadata#getMetadataChildren()
569
                 */
570
                public Set getMetadataChildren() {
571

    
572
                        return null;
573
                }
574

    
575
                /*
576
                 * (non-Javadoc)
577
                 *
578
                 * @see org.gvsig.metadata.Metadata#getMetadataName()
579
                 */
580
                public String getMetadataName() {
581

    
582
                        return null;
583
                }
584

    
585
                public FeatureType getFeatureType(String featureTypeId)
586
                                throws DataException {
587

    
588
                        return null;
589
                }
590

    
591
                public DataQuery createQuery() {
592

    
593
                        return null;
594
                }
595

    
596
                public long getFeatureCount() throws DataException {
597

    
598
                        return 0;
599
                }
600

    
601
                public void accept(Visitor visitor, DataQuery dataQuery)
602
                                throws BaseException {
603
                }
604

    
605
                public void accept(Visitor visitor) throws BaseException {
606
                }
607

    
608
                public void createCache(String name,
609
                                DynObject parameters) throws DataException {
610
                        // Do nothing
611
                }
612

    
613
                public FeatureCache getCache() {
614
                        return null;
615
                }
616

    
617
                public void clear() {
618
                        // Nothing to do
619
                }
620

    
621
                public void export(DataServerExplorer explorer, String provider,
622
                                NewFeatureStoreParameters params) throws DataException {
623
                        // Nothing to do
624
                }
625

    
626
                public String getProviderName() {
627
                        return null;
628
                }
629

    
630
                public String getFullName() {
631
                        // TODO Auto-generated method stub
632
                        return null;
633
                }
634
        }
635

    
636
         private static final FInterval interval0=new FInterval(0,2);
637
         private static final FInterval interval1=new FInterval(3,5);
638
         private static final FInterval interval2=new FInterval(6,8);
639
         private static final FInterval interval3=new FInterval(9,11);
640
        // private static final Value interval4;
641
        // private static final Value interval5;
642
        // private static final Value interval6;
643
        // private static final Value interval7;
644
        // private static final Value interval8;
645
        // private static final Value interval9;
646

    
647
        Hashtable symTable;
648

    
649
        private ISymbol[] symbols;
650
        private FInterval[] sampleIntervals = new FInterval[] { interval0, interval1, interval2, interval3, };
651
        private Feature[] features;
652

    
653
        // private FInterval[] intervals = new FInterval[] {
654
        // interval0,
655
        // interval1,
656
        // interval2,
657
        // interval3,
658
        // interval4,
659
        // interval5,
660
        // interval6,
661
        // interval7,
662
        // interval8,
663
        // interval9,
664
        // };
665

    
666
        protected void doSetUp() throws Exception {
667
                features = new Feature[4];
668

    
669
                // initialize test values
670
                for (int i = 0; i < features.length; i++) {
671

    
672
                        // create the geometry associated to the feature
673
                        int size = 200;
674
                        Dimension d = new Dimension(size, size);
675
                        Rectangle aShape = new Rectangle(i * size, i * size, d.width,
676
                                        d.height);
677
                        GeometryManager geomManager = GeometryLocator.getGeometryManager();
678
                        Curve curve = (Curve)geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
679
                        curve.setGeneralPath(new GeneralPathX(aShape.getPathIterator(null)));
680

    
681
                        /*
682
                         * create a full-featured Feature with randomed values at its fields
683
                         * to avoid testing over the same values each time
684
                         */
685
                        //TODO
686
//                        features[i] = new MemoryFeature(geom, featureValues[i], "[" + i
687
//                                        + "]");
688
                }
689

    
690
                // initialize the symbol subset for this test
691
                TestISymbol.addSymbols();
692
                symbols = TestISymbol.getNewSymbolInstances();
693

    
694
                // initialize the legends for this test
695
                ILegend[] allLegends = TestILegend.getNewLegendInstances();
696
                ArrayList intervalLegends = new ArrayList();
697
                for (int i = 0; i < allLegends.length; i++) {
698

    
699
                        if (allLegends[i] instanceof AbstractIntervalLegend) {
700
                                intervalLegends.add(allLegends[i]);
701
                        }
702

    
703
                        if (allLegends[i] instanceof IClassifiedVectorLegend) {
704
                                IClassifiedVectorLegend cvl = (IClassifiedVectorLegend) allLegends[i];
705
                                cvl.setClassifyingFieldNames(new String[] { fieldNames[FIELDID] });
706
//                                cvl.setFeatureStore(mockDataSource);
707

    
708
                        }
709
                }
710

    
711
                this.intervalLegends = (AbstractIntervalLegend[]) intervalLegends
712
                                .toArray(new AbstractIntervalLegend[intervalLegends.size()]);
713
        }
714

    
715
        /**
716
         * This method is used to add symbols to a legend.That is, it takes an array
717
         * of AbstractIntervalLegend which is empty and, using a second array
718
         * of FIntervals(values), the first one is filled.Also, a hash table is filled
719
         * using the array of FIntervals (it will be useful in some tests to check
720
         * that a symbol can be taken using a feature) .
721
         *
722
         * @param legend
723
         * @return
724
         */
725
        private void fillClassifiedLegend(AbstractIntervalLegend legend,
726
                        FInterval[] values) {
727
                // initialize the hash table
728
                symTable = new Hashtable();
729

    
730
                // to add symbols to the legend and the hash table
731
                for (int j = 0; j < values.length; j++) {
732

    
733
                        ISymbol sym = symbols[j % symbols.length];
734
                        legend.addSymbol(values[j], sym);
735
                        symTable.put(values[j], sym);
736
                }
737
        }
738

    
739
        /**
740
         * This test ensures that when a legend is filled, the number of symbols
741
         * added is correct. To do it, is checked that the number of symbols of a
742
         * legend is the same as the length of the array of example values that we
743
         * have.
744
         *
745
         * @throws ReadDriverException
746
         */
747
        public void testICLAdittion() throws ReadException {
748

    
749
                // Fills the legend
750
                for (int i = 0; i < intervalLegends.length; i++) {
751
                        fillClassifiedLegend(intervalLegends[i], sampleIntervals);
752
                }
753

    
754
                for (int i = 0; i < intervalLegends.length; i++) {
755
                        assertEquals(intervalLegends[i].getClass().getName()
756
                                        + " fails with the comparation of the number of symbols",
757
                                        intervalLegends[i].getSymbols().length,
758
                                        sampleIntervals.length);
759
                }
760

    
761
        }
762

    
763
        /**
764
         * This test ensures that the symbols that we have previously added to a
765
         * legend are accessible using its features.To do it, this test compares the
766
         * symbol taken from the legend with the symbol taken from the hashTable
767
         * (using the same feature).
768
         * @throws Exception 
769
         */
770
        public void testICLCheckValueSymbols() throws Exception {
771

    
772
                ISymbol tableSym =null;
773

    
774
                // fills the legends
775
                for (int i = 0; i < intervalLegends.length; i++) {
776
                        fillClassifiedLegend(intervalLegends[i], sampleIntervals);
777
                }
778

    
779
                for (int i = 0; i < intervalLegends.length; i++) {
780
                        // For each feature
781
                        for (int j = 0; j < features.length; j++) {
782
                                Feature myFeature = features[i];
783
                                // takes the value of the field that identifies the feature
784
                                Object val = myFeature.get(FIELDID);
785
                                // the last value is used to access to the hash table to obtain
786
                                // a symbol
787

    
788
                                if(interval0.isInInterval(val)) {
789
                                        tableSym = (ISymbol) symTable.get(interval0);
790
                                } else if(interval1.isInInterval(val)) {
791
                                        tableSym = (ISymbol) symTable.get(interval1);
792
                                } else if(interval2.isInInterval(val)) {
793
                                        tableSym = (ISymbol) symTable.get(interval2);
794
                                } else if(interval3.isInInterval(val)) {
795
                                        tableSym = (ISymbol) symTable.get(interval3);
796
                                }
797

    
798
                                AbstractIntervalLegend leg = intervalLegends[i];
799
                                // takes the symbol from a legend using the feature
800
                                ISymbol legendSym = leg.getSymbolByFeature(myFeature);
801
                                // compares that both symbols are the same
802
                                assertEquals(legendSym.getClass().getName()
803
                                                + " fails with the comparation of the class symbols",
804
                                                legendSym, tableSym);
805
                        }
806
                }
807
        }
808

    
809
}
810

    
811