Statistics
| Revision:

gvsig-3d / 2.1 / trunk / org.gvsig.view3d / org.gvsig.view3d.swing / org.gvsig.view3d.swing.impl / src / main / java / org / gvsig / view3d / swing / impl / data / DefaultElevationModel.java @ 496

History | View | Annotate | Download (4.6 KB)

1
package org.gvsig.view3d.swing.impl.data;
2

    
3
import gov.nasa.worldwind.avlist.AVKey;
4
import gov.nasa.worldwind.avlist.AVList;
5
import gov.nasa.worldwind.cache.FileStore;
6
import gov.nasa.worldwind.data.RasterServer;
7
import gov.nasa.worldwind.retrieve.RetrievalPostProcessor;
8
import gov.nasa.worldwind.retrieve.Retriever;
9
import gov.nasa.worldwind.retrieve.RetrieverFactory;
10
import gov.nasa.worldwind.terrain.BasicElevationModel;
11
import gov.nasa.worldwind.util.WWUtil;
12

    
13
import org.gvsig.fmap.mapcontext.MapContext;
14
import org.gvsig.fmap.mapcontext.layers.FLayer;
15
import org.gvsig.view3d.swing.impl.DefaultMapControl3D;
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18
import org.w3c.dom.Element;
19

    
20
/**
21
 * 
22
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
23
 *
24
 */
25
public class DefaultElevationModel extends BasicElevationModel {
26

    
27
    private static final Logger LOG = LoggerFactory
28
        .getLogger(DefaultElevationModel.class);
29
    
30
    /**
31
     * 
32
     * @param params
33
     */
34
    public DefaultElevationModel(AVList params) {
35
        super(params);
36

    
37
        this.createRasterServer(params);
38
    }
39
    
40
    /**
41
     * 
42
     * @param domElement
43
     * @param params
44
     */
45
    public DefaultElevationModel(Element domElement, AVList params) {
46
        super(domElement, params);
47

    
48
        this.createRasterServer(params != null ? params : (AVList) this
49
            .getValue(AVKey.CONSTRUCTION_PARAMETERS));
50
    }
51

    
52
    private void createRasterServer(AVList params) {
53

    
54
        if (params == null) {
55
            LOG.error("Can not create raster server, parameters is null");
56
            throw new IllegalArgumentException();
57
        }
58

    
59
        if (params.getValue(AVKey.FILE_STORE) == null) {
60
            LOG.error("Can not create raster server, file store is null");
61
            throw new IllegalArgumentException();
62
        }
63
        
64
        setDataFileStore((FileStore) params.getValue(AVKey.FILE_STORE));
65

    
66
        String datasetName = params.getStringValue(AVKey.DATASET_NAME);
67
        if (WWUtil.isEmpty(datasetName)) {
68
            LOG.error(
69
                "Can not create raster server, missing required parameter: {}",
70
                AVKey.DATASET_NAME);
71
            throw new IllegalArgumentException();
72
        }
73

    
74
        String dataCacheName = params.getStringValue(AVKey.DATA_CACHE_NAME);
75
        if (WWUtil.isEmpty(dataCacheName)) {
76
            LOG.error(
77
                "Can not create raster server, missing required parameter: {}",
78
                AVKey.DATA_CACHE_NAME);
79
            throw new IllegalArgumentException();
80
        }
81

    
82
        MapContext mapContext =
83
            (MapContext) params.getValue(DefaultMapControl3D.GVSIG_MAPCONTROL3D);
84

    
85
        if (mapContext == null) {
86
            LOG.error(
87
                "Can not create raster server, missing required parameter: {}",
88
                DefaultMapControl3D.GVSIG_MAPCONTROL3D);
89
            throw new IllegalArgumentException();
90
        }
91

    
92
        FLayer layer =
93
            (FLayer) params.getValue(DefaultMapControl3D.GVSIG_LAYER);
94

    
95
        if (layer == null) {
96
            LOG.error(
97
                "Can not create raster server, missing required parameter: {}",
98
                "GVSIG_LAYER");
99
            throw new IllegalArgumentException();
100
        }
101

    
102
        final AVList rasterServerParams = params.copy();
103

    
104
        RetrieverFactory retrieverFactory = new RetrieverFactory() {
105

    
106
            final protected RasterServer rasterServer =
107
                new DefaultRasterServer(rasterServerParams);
108

    
109
            public Retriever createRetriever(AVList tileParams,
110
                RetrievalPostProcessor postProcessor) {
111
                DefaultRasterServerRetriever retriever =
112
                    new DefaultRasterServerRetriever(tileParams, rasterServer,
113
                        postProcessor);
114

    
115
                // copy only values that do not exist in destination AVList
116
                // from rasterServerParams (source) to retriever (destination)
117
                String[] keysToCopy =
118
                    new String[] { AVKey.DATASET_NAME, AVKey.DISPLAY_NAME,
119
                        AVKey.FILE_STORE, AVKey.BYTE_ORDER, AVKey.IMAGE_FORMAT,
120
                        AVKey.DATA_TYPE, AVKey.FORMAT_SUFFIX,
121
                        AVKey.MISSING_DATA_SIGNAL,
122
                        AVKey.MISSING_DATA_REPLACEMENT, AVKey.ELEVATION_MIN,
123
                        AVKey.ELEVATION_MAX, };
124

    
125
                WWUtil.copyValues(rasterServerParams, retriever, keysToCopy,
126
                    false);
127

    
128
                return retriever;
129
            }
130
        };
131

    
132
        params.setValue(AVKey.RETRIEVER_FACTORY_LOCAL, retrieverFactory);
133
        this.setValue(AVKey.RETRIEVER_FACTORY_LOCAL, retrieverFactory);
134
    }
135
}