Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.view3d / org.gvsig.view3d.vector / org.gvsig.view3d.vector.lib / org.gvsig.view3d.vector.lib.impl / src / main / java / org / gvsig / view3d / vector / lib / impl / AbstractRenderableLayer.java @ 762

History | View | Annotate | Download (3.53 KB)

1
package org.gvsig.view3d.vector.lib.impl;
2

    
3
import java.util.List;
4
import java.util.concurrent.ExecutorService;
5
import java.util.concurrent.Executors;
6

    
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9

    
10
import org.gvsig.fmap.dal.exception.DataException;
11
import org.gvsig.fmap.dal.feature.Feature;
12
import org.gvsig.fmap.dal.feature.FeatureQuery;
13
import org.gvsig.fmap.dal.feature.FeatureSet;
14
import org.gvsig.fmap.dal.feature.FeatureStore;
15
import org.gvsig.tools.dispose.DisposableIterator;
16
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
17
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
18

    
19
import gov.nasa.worldwind.WorldWind;
20
import gov.nasa.worldwind.layers.RenderableLayer;
21
import gov.nasa.worldwind.render.Renderable;
22

    
23
public abstract class AbstractRenderableLayer extends RenderableLayer {
24

    
25
    private static final Logger LOG = LoggerFactory.getLogger(AbstractRenderableLayer.class);
26

    
27
    protected FeatureStore featureStore;
28

    
29
    protected VectorLoaderParameters parameters;
30

    
31
    public AbstractRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore) {
32
        this.featureStore = featureStore;
33
        this.parameters = parameters;
34
        ExecutorService executor = Executors.newSingleThreadExecutor();
35
        executor.execute(addRenderableObjects());
36
    }
37

    
38
    protected Runnable addRenderableObjects() {
39
        
40
        return new Runnable() {
41
            
42
            @Override
43
            public void run() {
44
                FeatureQuery featureQuery;
45
                try {
46
                    featureQuery = getFeatureQuery();
47
                } catch (DataException e) {
48
                    LOG.error(String.format("Can not access to feature type of %1s", featureStore.getFullName()), e);
49
                    removeAllRenderables();
50
                    return;
51
                }
52

    
53
                FeatureSet featureSet = null;
54
                DisposableIterator it = null;
55
                try {
56
                    featureSet = featureStore.getFeatureSet(featureQuery);
57
                    it = featureSet.fastIterator();
58
                    while (it.hasNext()) {
59
                        Feature feature = (Feature) it.next();
60
                        List<Renderable> renderables = getRenderable(feature);
61
                        for (Renderable renderable : renderables) {
62
                            addRenderable(renderable);
63
                        }
64
                    }
65
                } catch (DataException e) {
66
                    LOG.error(String.format("Can not access to %1s data", featureStore.getFullName()), e);
67
                    removeAllRenderables();
68
                    return;
69
                } finally {
70
                    if (it != null) {
71
                        it.dispose();
72
                    }
73
                    if (featureSet != null) {
74
                        featureSet.dispose();
75
                    }
76
                }
77
            }
78
        };
79
    }
80

    
81
    protected int getAltitudeMode(VectorElevationMode mode) {
82
        switch (mode) {
83
        case CLAMP_TO_GROUND:
84
            return WorldWind.CLAMP_TO_GROUND;
85
        case ABSOLUTE:
86
            return WorldWind.ABSOLUTE;
87
        case RELATIVE_TO_GROUND:
88
            return WorldWind.RELATIVE_TO_GROUND;
89
        default:
90
            throw new IllegalArgumentException(
91
                "Vector elevation mode not reconized. Only CLAMP_TO_GROUND, ABSOLUTE and RELATIVE_TO_GROUND are valid");
92
        }
93
    }
94

    
95
    protected abstract List<Renderable> getRenderable(Feature feature);
96

    
97
    protected abstract FeatureQuery getFeatureQuery() throws DataException;
98
}