Revision 8700 org.gvsig.raster/branches/org.gvsig.raster.2.4/org.gvsig.wmts/org.gvsig.wmts.provider/src/main/java/org/gvsig/wmts/provider/WMTSRasterServerExplorer.java

View differences:

WMTSRasterServerExplorer.java
1
package org.gvsig.wmts.provider;
2 1
/* gvSIG. Desktop Geographic Information System.
3 2
 *
4 3
 * Copyright ? 2007-2016 gvSIG Association
......
21 20
 * For any additional information, do not hesitate to contact us
22 21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23 22
 */
23
package org.gvsig.wmts.provider;
24 24

  
25

  
26
import java.io.IOException;
27
import java.net.ConnectException;
28
import java.net.URL;
29
import java.util.ArrayList;
30
import java.util.HashSet;
31
import java.util.Iterator;
32 25
import java.util.List;
33
import java.util.Set;
34 26

  
35
import org.cresques.cts.IProjection;
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

  
39
import org.gvsig.fmap.crs.CRSFactory;
40
import org.gvsig.fmap.dal.DataServerExplorer;
41
import org.gvsig.fmap.dal.DataServerExplorerParameters;
42
import org.gvsig.fmap.dal.DataStoreParameters;
43
import org.gvsig.fmap.dal.NewDataStoreParameters;
44
import org.gvsig.fmap.dal.exception.DataException;
45
import org.gvsig.fmap.dal.exception.InitializeException;
46
import org.gvsig.fmap.dal.spi.AbstractDataServerExplorer;
47 27
import org.gvsig.fmap.dal.spi.DataServerExplorerProvider;
48
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
49
import org.gvsig.raster.wmts.ogc.WMTSClient;
50
import org.gvsig.raster.wmts.ogc.WMTSOGCLocator;
51
import org.gvsig.raster.wmts.ogc.struct.WMTSLayer;
52
import org.gvsig.raster.wmts.ogc.struct.WMTSStyle;
53
import org.gvsig.raster.wmts.ogc.struct.WMTSTheme;
54
import org.gvsig.raster.wmts.ogc.struct.WMTSThemes;
28
import org.gvsig.wmts.provider.tree.WMTSNode;
55 29

  
56

  
57 30
/**
58 31
 * @author fdiaz
59 32
 *
60 33
 */
61
public class WMTSRasterServerExplorer extends AbstractDataServerExplorer implements DataServerExplorerProvider {
34
public interface WMTSRasterServerExplorer extends DataServerExplorerProvider {
62 35

  
63
    private static final Logger logger =
64
        LoggerFactory.getLogger(WMTSRasterServerExplorer.class);
65 36

  
66
    public static final String NAME = "WMTSRasterServerExplorer";
37
    public static final String NAME = "WMTS";
67 38
    public static String DESCRIPTION = "WMTS Raster Server Explorer";
68 39

  
69
    private URL service = null;
40
    /**
41
     * @param params
42
     * @return list of available srs for the params
43
     */
44
    public abstract List<String> getSrss(WMTSRasterProviderParameters params);
70 45

  
71
    //WMS Parameters
72
    private WMTSClient wmtsClient = null;
46
    /**
47
     * @return Service information
48
     */
49
    public abstract String getInfoString();
73 50

  
74
    protected WMTSRasterServerExplorer(DataServerExplorerParameters parameters,
75
        DataServerExplorerProviderServices providerServices) throws InitializeException {
76
        super(parameters, providerServices);
77
        // TODO Auto-generated constructor stub
78
        boolean override = false;
79 51

  
80
        this.service = (URL)(parameters.getDynValue(WMTSRasterServerExplorerParameters.WMTS_SERVICE_PARAMETER_NAME));
81
        if (wmtsClient == null){
82
            try {
83
                WMTSOGCLocator.getManager().createWMTSClient(service.toString());
84
                wmtsClient = WMTSOGCLocator.getManager().createWMTSClient(service.toString());
52
    /**
53
     * @return
54
     */
55
    public boolean hasThemes();
85 56

  
86
//                wmtsClient.setForceChangeAxisOrder(getParameters().isLongitudeFirst());
87
                if (!wmtsClient.connect(override, null)) {
88
                    throw new ConnectException("Error connecting");
89
                }
57
    /**
58
     * @return root node of a WMTS tree
59
     */
60
    public WMTSNode getListAsTree();
90 61

  
91
//                if (status == null){
92
//                    status = wmtsClient.createStatus();
93
//                }
94
//
95
//                wmtsClient.getCapabilities(status, true, null);
96
            } catch (ConnectException e) {
97
                throw new InitializeException("Not possible to connect with " + service, e);
98
            } catch (IOException e) {
99
                throw new InitializeException("Not possible to connect with " + service, e);
100
            }
101
        }
102

  
103
    }
104

  
105
    @Override
106
    public String getProviderName() {
107
        return WMTSRasterProvider.NAME;
108
    }
109

  
110
    @Override
111
    public boolean canAdd() {
112
        return false;
113
    }
114

  
115
    @Override
116
    public boolean canAdd(String storeName) throws DataException {
117
        return false;
118
    }
119

  
120
    @Override
121
    public List<WMTSRasterProviderParameters> list() throws DataException {
122
        List<WMTSRasterProviderParameters> result = new ArrayList<WMTSRasterProviderParameters>();
123
        @SuppressWarnings("unchecked")
124
        WMTSThemes themes = wmtsClient.getLayerListAsThemes();
125

  
126
        List<WMTSLayer> wmtsLayers = new ArrayList<WMTSLayer>();
127
        for (int i = 0; i < themes.getChildCount(); i++) {
128
            WMTSTheme theme = themes.getChildren(i);
129
            wmtsLayers.add(theme.getLayer());
130
        }
131

  
132
        for (Iterator<WMTSLayer> iterator = wmtsLayers.iterator(); iterator.hasNext();) {
133
            WMTSLayer wmtsLayer = (WMTSLayer) iterator.next();
134

  
135
            WMTSRasterProviderParameters params =  new WMTSRasterProviderParameters();
136
            params.setService(this.service);
137
            params.setLayer(wmtsLayer.getTitle());
138

  
139
            @SuppressWarnings("unchecked")
140
            List<WMTSStyle> styles = wmtsLayer.getStyle();
141
            if (styles != null && styles.size() > 0) {
142
                params.setStyle(((WMTSStyle) (styles.get(0))).getIdentifier());
143
            }
144

  
145

  
146
            @SuppressWarnings("unchecked")
147
            List<String> formats = wmtsLayer.getFormat();
148
            if(formats!=null && formats.size()>0){
149
                params.setFormat((String)(formats.get(0)));
150
            }
151

  
152
            @SuppressWarnings("unchecked")
153
             List<String> infoFormats = wmtsLayer.getInfoFormat();
154
            if(infoFormats!=null && infoFormats.size()>0){
155
                params.setInfoFormat((String)infoFormats.get(0));
156
            }
157

  
158
            @SuppressWarnings("unchecked")
159
            List<String> allSrs = wmtsLayer.getSrsList();
160
            if(allSrs!=null && allSrs.size()>0){
161
                int i=0;
162
                while(i<allSrs.size()){
163
                    String srs = allSrs.get(i);
164
                    if(isValidSrs(srs)){
165
                        params.setCRS(srs);
166
                        IProjection crs=CRSFactory.getCRS(srs);
167
                        //FIXME: ?Qu? condiciones se deben cumplir para que este par?metro se deba poner a true?
168
//                        params.setXYAxisOrder(crs.isProjected());
169
//                        params.setXYAxisOrder(false);
170
                        break;
171
                    }
172
                    i++;
173
                }
174
                if(i>=allSrs.size()){
175
                    throw new IllegalArgumentException(this.getProviderName()
176
                            + ": The server does not provide any valid srs.'");
177
                }
178
            }
179

  
180
            result.add(params);
181
        }
182

  
183
        return result;
184
    }
185

  
186
    @Override
187
    public List<WMTSRasterProviderParameters> list(int mode) throws DataException {
188
        if(mode!=DataServerExplorer.MODE_RASTER){
189
            return null;
190
        }
191
        return list();
192
    }
193

  
194
    @Override
195
    public boolean add(String provider, NewDataStoreParameters parameters, boolean overwrite) throws DataException {
196
        return false;
197
    }
198

  
199
    @Override
200
    public void remove(DataStoreParameters parameters) throws DataException {
201
        throw new UnsupportedOperationException("Can't remove a WMTS provider.");
202

  
203
    }
204

  
205
    @Override
206
    public NewDataStoreParameters getAddParameters(String storeName) throws DataException {
207
        return null;
208
    }
209

  
210
    @Override
211
    public List<String> getDataStoreProviderNames() {
212
        List<String> x = new ArrayList<String>();
213
        x.add(WMTSRasterProvider.NAME);
214
        return x;
215
    }
216

  
217 62
    /**
218
     * @param params
219
     * @return list of available srs for the params
63
     * @param clone Force create a new tree
64
     *
65
     * @return root node of a WMTS tree
220 66
     */
221
    @SuppressWarnings("unchecked")
222
    public List<String> getSrss(WMTSRasterProviderParameters params) {
223
        String layer = params.getLayer();
224
        Set<String> setSrs = new HashSet<String>();
225
        WMTSLayer wmtsLayer = wmtsClient.getLayer(layer);
226
        List<String> allSrs = wmtsLayer.getSrsList();
227
        for (Iterator<String> iterator2 = allSrs.iterator(); iterator2.hasNext();) {
228
            String srs = iterator2.next();
229
            if (isValidSrs(srs)) {
230
                setSrs.add(srs);
231
            }
232
        }
233
        return new ArrayList<String>(setSrs);
234
    }
67
    public WMTSNode getListAsTree(boolean clone);
235 68

  
236
    private boolean isValidSrs(String srs){
237
        try{
238
            IProjection crs=CRSFactory.getCRS(srs);
239
            if(crs!=null){
240
                return true;
241
            }
242
        }catch(Exception e){
243
            logger.info("Can't get crs from: '"+srs+"' code", e);
244
            return false;
245
        }
246
        return false;
247
    }
248 69
}

Also available in: Unified diff