Revision 44073 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.mapcontext/org.gvsig.fmap.mapcontext.api/src/main/java/org/gvsig/fmap/mapcontext/layers/FLayers.java

View differences:

FLayers.java
33 33
import java.util.ListIterator;
34 34
import java.util.Set;
35 35
import java.util.TreeSet;
36
import java.util.function.Predicate;
37
import org.apache.commons.lang3.StringUtils;
36 38

  
37 39
import org.cresques.cts.ICoordTrans;
38 40
import org.cresques.cts.IProjection;
......
43 45
import org.gvsig.fmap.dal.DataStore;
44 46
import org.gvsig.fmap.dal.exception.DataException;
45 47
import org.gvsig.fmap.dal.exception.ReadException;
46
import org.gvsig.fmap.dal.feature.FeatureStore;
47 48
import org.gvsig.fmap.geom.primitive.Envelope;
48 49
import org.gvsig.fmap.mapcontext.MapContext;
49 50
import org.gvsig.fmap.mapcontext.MapContextLocator;
......
57 58
import org.gvsig.fmap.mapcontext.layers.operations.LayerNotFoundInCollectionException;
58 59
import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitable;
59 60
import org.gvsig.fmap.mapcontext.layers.operations.LayersVisitor;
61
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
60 62
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
61 63
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelable;
62 64
import org.gvsig.metadata.exceptions.MetadataException;
63 65
import org.gvsig.tools.ToolsLocator;
64
import org.gvsig.tools.dispose.Disposable;
65 66
import org.gvsig.tools.dynobject.DynObjectSet;
66 67
import org.gvsig.tools.dynobject.DynStruct;
67 68
import org.gvsig.tools.dynobject.impl.MultiDynObjectSet;
......
71 72
import org.gvsig.tools.persistence.exception.PersistenceException;
72 73
import org.gvsig.tools.task.Cancellable;
73 74
import org.gvsig.tools.util.Callable;
74
import org.gvsig.tools.visitor.VisitCanceledException;
75 75
import org.gvsig.tools.visitor.Visitor;
76 76

  
77 77
/**
......
106 106
    /**
107 107
     * Useful for debug the problems during the implementation.
108 108
     */
109
    private static final Logger logger = LoggerFactory.getLogger(FLayers.class);
109
    private static final Logger LOGGER = LoggerFactory.getLogger(FLayers.class);
110 110

  
111 111
    public FLayers() {
112 112
        super();
113 113
        layerCollectionListeners = new ArrayList();
114 114
        layers = Collections.synchronizedList(new ArrayList());
115 115
    }
116
    /*
117
     * (non-Javadoc)
118
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#addLayerCollectionListener(com.iver.cit.gvsig.fmap.layers.LayerCollectionListener)
119
     */
120 116

  
121 117
    @Override
122 118
    public void addLayerCollectionListener(LayerCollectionListener listener) {
......
143 139
        }
144 140
    }
145 141

  
146
    /*
147
     * (non-Javadoc)
148
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayerCollectionListener(com.iver.cit.gvsig.fmap.layers.LayerCollectionListener)
149
     */
150 142
    @Override
151 143
    public void removeLayerCollectionListener(LayerCollectionListener listener) {
152 144
        layerCollectionListeners.remove(listener);
......
177 169
        this.updateDrawVersion();
178 170
    }
179 171

  
180
    /*
181
     * (non-Javadoc)
182
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#addLayer(com.iver.cit.gvsig.fmap.layers.FLayer)
183
     */
184 172
    @Override
185 173
    public void addLayer(FLayer layer) {
186 174

  
......
235 223

  
236 224
            callLayerAdded(LayerCollectionEvent.createLayerAddedEvent(layer));
237 225
        } catch (CancelationException e) {
238
            logger.warn(e.getMessage());
226
            LOGGER.warn(e.getMessage());
239 227
        }
240 228
    }
241 229

  
242
    /*
243
     * (non-Javadoc)
244
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#moveTo(int, int)
245
     */
246 230
    @Override
247 231
    public void moveTo(int from, int to) throws CancelationException {
248 232
        int newfrom = layers.size() - from - 1;
......
269 253
        this.updateDrawVersion();
270 254
    }
271 255

  
272
    /*
273
     * (non-Javadoc)
274
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(com.iver.cit.gvsig.fmap.layers.FLayer)
275
     */
276 256
    @Override
277 257
    public void removeLayer(FLayer lyr) throws CancelationException {
278 258
        callLayerRemoving(LayerCollectionEvent.createLayerRemovingEvent(lyr));
......
280 260
        callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(lyr));
281 261
    }
282 262

  
283
    /*
284
     * (non-Javadoc)
285
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(int)
286
     */
287 263
    @Override
288 264
    public void removeLayer(int idLayer) {
289 265
        FLayer lyr = (FLayer) layers.get(idLayer);
......
294 270
        callLayerRemoved(LayerCollectionEvent.createLayerRemovedEvent(lyr));
295 271
    }
296 272

  
297
    /*
298
     * (non-Javadoc)
299
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#removeLayer(java.lang.String)
300
     */
301 273
    @Override
302 274
    public void removeLayer(String layerName) {
303 275
        FLayer lyr;
......
361 333
        }
362 334
    }
363 335

  
364
    /*
365
     * (non-Javadoc)
366
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getVisibles()
367
     */
368 336
    @Override
369 337
    public FLayer[] getVisibles() {
370 338
        ArrayList array = new ArrayList();
......
383 351
        return (FLayer[]) array.toArray(new FLayer[0]);
384 352
    }
385 353

  
386
    /*
387
     * (non-Javadoc)
388
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayer(int)
389
     */
390 354
    @Override
391 355
    public FLayer getLayer(int index) {
392 356
        return (FLayer) layers.get(index);
393 357
    }
394 358

  
395
    /*
396
     * (non-Javadoc)
397
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayer(java.lang.String)
398
     */
399 359
    @Override
400
    public FLayer getLayer(String layerName) {
401
        for (int i = 0; i < layers.size(); i++) {
402
            FLayer lyr = ((FLayer) layers.get(i));
403
            if (lyr.getName().compareToIgnoreCase(layerName) == 0) {
404
                return lyr;
360
    public FLayer getLayer(final String layerName) {
361
        if( StringUtils.isBlank(layerName) ) {
362
            return null;
363
        }
364
        for (FLayer layer : this.layers) {
365
            if( layer!=null && StringUtils.equalsIgnoreCase(layer.getName(), layerName) ) {
366
                return layer;
405 367
            }
406
            if (lyr instanceof FLayers) {
407
                List layerList = toPlainList(lyr);
408
                for (int j = 0; j < layerList.size(); j++) {
409
                    FLayer lyr2 = ((FLayer) layerList.get(j));
410
                    if (lyr2.getName().compareToIgnoreCase(layerName) == 0) {
411
                        return lyr2;
368
            if( layer instanceof FLayers ) {
369
                List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
370
                    @Override
371
                    public boolean test(FLayer layer) {
372
                        return StringUtils.equalsIgnoreCase(layer.getName(), layerName);                        
412 373
                    }
374
                });
375
                if( theLayers.isEmpty() ) {
376
                    return null;
413 377
                }
378
                return theLayers.get(0);
414 379
            }
415 380
        }
416 381
        return null;
417 382
    }
418 383

  
419
    private List toPlainList(FLayer layer) {
420
        return toPlainList(layer, new ArrayList());
384
    public FLayer getLayer(final DataStore store) {
385
        List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
386
            @Override
387
            public boolean test(FLayer layer) {
388
                return  layer instanceof SingleLayer && store == ((SingleLayer) layer).getDataStore();
389
            }
390
        });
391
        if( theLayers.isEmpty() ) {
392
            return null;
393
        }
394
        return theLayers.get(0);
421 395
    }
396
    
397
    private List<FLayer> toPlainList(FLayer layer) {
398
        return toPlainList(layer, new ArrayList<FLayer>(), null);
399
    }
422 400

  
423
    private List toPlainList(FLayer layer, List result) {
401
    private List<FLayer> toPlainList(FLayer layer, Predicate<FLayer> filter) {
402
        return toPlainList(layer, new ArrayList<FLayer>(), filter);
403
    }
404

  
405
    private List<FLayer> toPlainList(FLayer layer, List<FLayer> result, Predicate<FLayer> filter) {
424 406
        if (layer instanceof FLayers) {
425 407
            FLayers layerGroup = (FLayers) layer;
426 408
            for (int i = 0; i < layerGroup.getLayersCount(); i++) {
427
                toPlainList(layerGroup.getLayer(i), result);
409
                toPlainList(layerGroup.getLayer(i), result, filter);
428 410
            }
429
        } else {
411
        } else if( filter==null || filter.test(layer) ) {
430 412
            result.add(layer);
431 413
        }
432 414
        return result;
433 415
    }
434 416

  
435
    /*
436
     * (non-Javadoc)
437
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getLayersCount()
438
     */
439 417
    @Override
440 418
    public int getLayersCount() {
441 419
        return layers.size();
442 420
    }
443 421

  
444
    /*
445
     * (non-Javadoc)
446
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, com.iver.cit.gvsig.fmap.ViewPort, com.iver.utiles.swing.threads.Cancellable, double)
447
     */
448 422
    @Override
449 423
    public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
450 424
            Cancellable cancel, double scale) throws ReadException {
......
524 498
        double dpi = 72;
525 499

  
526 500
        int resolution = properties.getPrintQuality();
527
        if (resolution == PrintAttributes.PRINT_QUALITY_NORMAL) {
528
            dpi = 300;
529
        } else if (resolution == PrintAttributes.PRINT_QUALITY_HIGH) {
530
            dpi = 600;
531
        } else if (resolution == PrintAttributes.PRINT_QUALITY_DRAFT) {
532
            dpi = 72;
501
        switch (resolution) {
502
            case PrintAttributes.PRINT_QUALITY_NORMAL:
503
                dpi = 300;
504
                break;
505
            case PrintAttributes.PRINT_QUALITY_HIGH:
506
                dpi = 600;
507
                break;
508
            case PrintAttributes.PRINT_QUALITY_DRAFT:
509
                dpi = 72;
510
                break;
511
            default:
512
                break;
533 513
        }
534 514

  
535 515
        // TODO: A la hora de imprimir, isWithinScale falla, porque est?
......
619 599
                if( fmap!=null ) {
620 600
                    fmap.addLayerError(mesg);
621 601
                }
622
                logger.error(mesg, e);
602
                LOGGER.error(mesg, e);
623 603
            }
624 604

  
625 605
        }
......
633 613
        return group;
634 614
    }
635 615

  
636
    /*
637
     * (non-Javadoc)
638
     * @see com.iver.cit.gvsig.fmap.layers.FLayer#getFullExtent()
639
     */
640 616
    @Override
617
    @SuppressWarnings("UseSpecificCatch")
641 618
    public Envelope getFullEnvelope() {
642 619
        Envelope rAux = null;
643 620
        boolean first = true;
644 621

  
645
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
646
            FLayer capa = (FLayer) iter.next();
622
        for (FLayer capa : layers) {
647 623
            try {
648 624
                if (first) {
649 625
                    rAux = (Envelope) capa.getFullEnvelope().clone();
......
652 628
                    rAux.add(capa.getFullEnvelope());
653 629
                }
654 630
            } catch (Exception e) {
655
                logger.warn("Can't calculate the envelope of the layer group '"+this.getName()+"'.",e);
631
                LOGGER.warn("Can't calculate the envelope of the layer group '"+this.getName()+"'.",e);
656 632
            }
657 633
        }
658 634

  
......
757 733
        state.set("mapContext", fmap);
758 734

  
759 735
        List layersToSave = new ArrayList();
760
        Iterator iter = this.layers.iterator();
761
        while (iter.hasNext()) {
762
            FLayer layer = (FLayer) iter.next();
736
        for (FLayer layer : this.layers) {
763 737
            if (!layer.isTemporary()) {
764 738
                layersToSave.add(layer);
765 739
            }
......
784 758
        }
785 759
    }
786 760

  
787
    /*
788
     * (non-Javadoc)
789
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMapContext()
790
     */
791 761
    @Override
792 762
    public MapContext getMapContext() {
793 763
        return fmap;
794 764
    }
795 765

  
796
    /*
797
     * (non-Javadoc)
798
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#setAllActives(boolean)
799
     */
800 766
    @Override
801 767
    public void setAllActives(boolean active) {
802 768
        FLayer lyr;
......
811 777
        }
812 778
    }
813 779

  
814
    /*
815
     * (non-Javadoc)
816
     * @see com.iver.cit.gvsig.fmap.layers.layerOperations.LayerCollection#getActives()
817
     */
780
    public List<FLayer> getLayers(Predicate<FLayer> filter) {
781
        List<FLayer> theLayers = this.toPlainList(this, filter);
782
        return theLayers;
783
    }
784
    
818 785
    @Override
819 786
    public FLayer[] getActives() {
820
        List ret = new ArrayList();
821
        LayersIterator it = new LayersIterator(this) {
822

  
787
        List<FLayer> activeLayers = this.getLayers(new Predicate<FLayer>() {
823 788
            @Override
824
            public boolean evaluate(FLayer layer) {
789
            public boolean test(FLayer layer) {
825 790
                return layer.isActive();
826 791
            }
827

  
828
        };
829

  
830
        while (it.hasNext()) {
831
            ret.add(it.next());
832
        }
833
        return (FLayer[]) ret.toArray(new FLayer[0]);
792
        });
793
        return (FLayer[]) activeLayers.toArray(new FLayer[activeLayers.size()]);
834 794
    }
835 795

  
836
    /*
837
     * (non-Javadoc)
838
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMinScale()
839
     */
840 796
    @Override
841 797
    public double getMinScale() {
842 798
        return -1; // La visibilidad o no la controla cada capa
843 799
        // dentro de una colecci?n
844 800
    }
845
    /*
846
     * (non-Javadoc)
847
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getMaxScale()
848
     */
849 801

  
850 802
    @Override
851 803
    public double getMaxScale() {
852 804
        return -1;
853 805
    }
854
    /*
855
     * (non-Javadoc)
856
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setMinScale(double)
857
     */
858 806

  
859 807
    @Override
860 808
    public void setMinScale(double minScale) {
861
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
862
            FLayer lyr = (FLayer) iter.next();
809
        for (FLayer lyr : layers) {
863 810
            lyr.setMinScale(minScale);
864 811
        }
865 812
    }
866
    /*
867
     * (non-Javadoc)
868
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setMaxScale(double)
869
     */
870 813

  
871 814
    @Override
872 815
    public void setMaxScale(double maxScale) {
873
        for (Iterator iter = layers.iterator(); iter.hasNext();) {
874
            FLayer lyr = (FLayer) iter.next();
816
        for (FLayer lyr : layers) {
875 817
            lyr.setMinScale(maxScale);
876 818
        }
877 819
    }
878
    /*
879
     * (non-Javadoc)
880
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#setActive(boolean)
881
     */
882 820

  
883 821
    @Override
884 822
    public void setActive(boolean b) {
885 823
        super.setActive(b);
886
        for (int i = 0; i < layers.size(); i++) {
887
            ((FLayer) layers.get(i)).setActive(b);
824
        for (FLayer layer : this.layers) {
825
            layer.setActive(b);
888 826
        }
889 827
    }
890
    /* (non-Javadoc)
891
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#addLayerListener(com.iver.cit.gvsig.fmap.layers.LayerListener)
892
     */
893 828

  
894 829
    @Override
895 830
    public boolean addLayerListener(LayerListener o) {
896
        for (int i = 0; i < layers.size(); i++) {
897
            ((FLayer) layers.get(i)).addLayerListener(o);
831
        for (FLayer layer : this.layers) {
832
            layer.addLayerListener(o);
898 833
        }
899 834
        return true;
900 835
    }
......
929 864
        return new MultiDynObjectSet(innerSets);
930 865
    }
931 866

  
932
    /*
933
     * (non-Javadoc)
934
     * @see com.iver.cit.gvsig.fmap.layers.FLyrDefault#getTocImageIcon()
935
     */
936 867
    @Override
937 868
    public String getTocImageIcon() {
938 869
        return "layer-icon-group";
......
977 908
        }
978 909
    }
979 910

  
980
    /*
981
     * (non-Javadoc)
982
     *
983
     * @see org.gvsig.metadata.Metadata#getMetadataID()
984
     */
985 911
    @Override
986 912
    public Object getMetadataID() throws MetadataException {
987 913
        StringBuilder strb = new StringBuilder();
......
998 924

  
999 925
    }
1000 926

  
1001
    /*
1002
     * (non-Javadoc)
1003
     *
1004
     * @see org.gvsig.metadata.Metadata#getMetadataChildren()
1005
     */
1006 927
    @Override
1007 928
    public Set getMetadataChildren() {
1008 929
        Set ret = new TreeSet();
......
1013 934
        return ret;
1014 935
    }
1015 936

  
1016
    /*
1017
     * (non-Javadoc)
1018
     *
1019
     * @see org.gvsig.metadata.Metadata#getMetadataName()
1020
     */
1021 937
    @Override
1022 938
    public String getMetadataName() throws MetadataException {
1023 939
        StringBuilder strb = new StringBuilder();
......
1076 992
    @Override
1077 993
    protected void doDispose() throws BaseException {
1078 994
        if (layers != null) {
1079
            for (int i = 0; i < layers.size(); i++) {
1080
                dispose((Disposable) layers.get(i));
995
            for (FLayer layer : this.layers) {
996
                dispose(layer);
1081 997
            }
1082 998
        }
1083 999
    }
......
1160 1076
    }
1161 1077

  
1162 1078
    public FLayer getFirstActiveLayer() {
1163
        LayersIterator it = new LayersIterator(this) {
1079
        List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
1164 1080
            @Override
1165
            public boolean evaluate(FLayer layer) {
1081
            public boolean test(FLayer layer) {
1166 1082
                return layer.isActive();
1167 1083
            }
1168
        };
1169
        if( it.hasNext() ) {
1170
            return (FLayer) it.next();
1084
        });
1085
        if( theLayers.isEmpty() ) {
1086
            return null;
1171 1087
        }
1172
        return null;
1088
        return theLayers.get(0);
1173 1089
    }
1174 1090

  
1175 1091
    public FLyrVect getFirstActiveVectorLayer() {
1176
        LayersIterator it = new LayersIterator(this) {
1092
        List<FLayer> theLayers = this.getLayers(new Predicate<FLayer>() {
1177 1093
            @Override
1178
            public boolean evaluate(FLayer layer) {
1094
            public boolean test(FLayer layer) {
1179 1095
                return layer.isActive() && layer instanceof FLyrVect;
1180 1096
            }
1181
        };
1182
        if( it.hasNext() ) {
1183
            return (FLyrVect) it.next();
1097
        });
1098
        if( theLayers.isEmpty() ) {
1099
            return null;
1184 1100
        }
1185
        return null;
1101
        return (FLyrVect) theLayers.get(0);
1186 1102
    }
1187 1103
    
1188 1104
    @Override
......
1191 1107
    }
1192 1108

  
1193 1109
    public Iterator<FLayer> deepiterator() {
1194
        List layers = toPlainList(this);
1195
        return layers.iterator();
1110
        List theLayers = toPlainList(this);
1111
        return theLayers.iterator();
1196 1112
    }
1197 1113
    
1198 1114
    @Override

Also available in: Unified diff