Revision 4427

View differences:

trunk/libraries/libRemoteServices/test/org/gvsig/remoteClient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java
41 41
/*
42 42
 * $Id$ 
43 43
 * $Log$
44
 * Revision 1.6  2006-03-06 07:16:08  jaume
44
 * Revision 1.7  2006-03-15 08:54:31  jaume
45 45
 * *** empty log message ***
46 46
 *
47
 * Revision 1.6  2006/03/06 07:16:08  jaume
48
 * *** empty log message ***
49
 *
47 50
 * Revision 1.5  2006/03/02 07:17:08  jaume
48 51
 * *** empty log message ***
49 52
 *
......
64 67
import junit.framework.TestCase;
65 68

  
66 69
public class WCSProtocolHandler_1_0_0Test extends TestCase {
67
	WCSProtocolHandler1_0_0 handler1, handler2, handler3;
70
	WCSProtocolHandler1_0_0 handler1, handler2, handler3, handler4;
68 71
	
69 72
	public void setUp() {
70 73
		System.out.println("Setting up test..");
71 74
		handler1 = new WCSProtocolHandler1_0_0();
72 75
		handler2 = new WCSProtocolHandler1_0_0();
73 76
		handler3 = new WCSProtocolHandler1_0_0();
77
		handler4 = new WCSProtocolHandler1_0_0();
74 78
	}
75 79
	
76 80
	
......
83 87
		assertTrue(handler2.parseDescribeCoverage(new File("test/WCS-simonCITCostasDescribeCoverage.xml")));
84 88
		assertTrue(handler3.parseCapabilities(new File("test/WCS-simonCITSpotGetCapabilities.xml")));
85 89
		assertTrue(handler3.parseDescribeCoverage(new File("test/WCS-simonCITSpotDescribeCoverage.xml")));
90
		assertTrue(handler4.parseCapabilities(new File("test/WCS-ionicGetCapabilities.xml")));
91
		assertTrue(handler4.parseDescribeCoverage(new File("test/WCS-ionicDescribeCoverage.xml")));
86 92
		long t2 = System.currentTimeMillis();
87 93
		System.out.println("Test parsing done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
88 94
	}
trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/wcs/WCSLayer.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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
/**
42
 * 
43
 */
44
package org.gvsig.remoteClient.wcs;
45

  
46
import java.io.IOException;
47
import java.util.ArrayList;
48
import java.util.Hashtable;
49

  
50
import org.gvsig.remoteClient.ILayer;
51
import org.gvsig.remoteClient.utils.BoundaryBox;
52
import org.gvsig.remoteClient.utils.CapabilitiesTags;
53
import org.kxml2.io.KXmlParser;
54
import org.xmlpull.v1.XmlPullParserException;
55

  
56
/**
57
 * @author jaume
58
 *
59
 */
60
public abstract class WCSLayer implements ILayer{
61
	public static final String SEPARATOR = " +"; // separator used to split list of values, usually is just a space
62
    private String name;
63
    private String title;
64
    private String _abstract;
65
    private Hashtable bBoxes = new Hashtable();
66
	private BoundaryBox lonLatBbox;
67
	public RectifiedGrid rg;
68
	public ArrayList timePositions = new ArrayList();
69
	public String timePeriod;
70
	private String rangeSetName;
71
	private String rangeSetLabel;
72
	public Hashtable axisPool = new Hashtable();
73
	private String nativeSRS;
74
	private ArrayList supportedSRSs = new ArrayList();
75
	private String nativeFormat; 
76
	private ArrayList formats = new ArrayList();
77
	
78
	public ArrayList getFormats() {
79
		return formats;
80
	}
81
	
82
	public void addFormat(String format) {
83
		formats.add(format);
84
	}
85
    public void setNativeFormat(String nativeFormat) {
86
    	this.nativeFormat = nativeFormat;
87
    }
88
	
89
    public String getNativeFormat() {
90
    	return nativeFormat;
91
    }
92
    
93
	public String getNativeSRS() {
94
		return nativeSRS;
95
	}
96

  
97
	public void setNativeSRS(String nativeSRS) {
98
		this.nativeSRS = nativeSRS;
99
	}
100

  
101
	public ArrayList getSRSs() {
102
		return supportedSRSs;
103
	}
104

  
105
	public void addSRSs(String srs) {
106
		supportedSRSs.add(srs);
107
	}
108

  
109
	public String getRangeSetLabel() {
110
		return rangeSetLabel;
111
	}
112

  
113
	public void setRangeSetLabel(String rangeSetLabel) {
114
		this.rangeSetLabel = rangeSetLabel;
115
	}
116

  
117
	public String getRangeSetName() {
118
		return rangeSetName;
119
	}
120

  
121
	public void setRangeSetName(String rangeSetName) {
122
		this.rangeSetName = rangeSetName;
123
	}
124

  
125
	/* (non-Javadoc)
126
     * @see org.gvsig.remoteClient.ILayer#getName()
127
     */
128
    public String getName() {
129
        return name;
130
    }
131

  
132
    /* (non-Javadoc)
133
     * @see org.gvsig.remoteClient.ILayer#setName(java.lang.String)
134
     */
135
    public void setName(String _name) {
136
        name = _name;
137
    }
138

  
139
    /* (non-Javadoc)
140
     * @see org.gvsig.remoteClient.ILayer#setTitle(java.lang.String)
141
     */
142
    public void setTitle(String _title) {
143
        title = _title;
144
    }
145

  
146
    /* (non-Javadoc)
147
     * @see org.gvsig.remoteClient.ILayer#getTitle()
148
     */
149
    public String getTitle() {
150
        return title;
151
    }
152

  
153
    /* (non-Javadoc)
154
     * @see org.gvsig.remoteClient.ILayer#getAbstract()
155
     */
156
    public String getAbstract() {
157
        return _abstract;
158
    }
159

  
160
    /* (non-Javadoc)
161
     * @see org.gvsig.remoteClient.ILayer#setAbstract(java.lang.String)
162
     */
163
    public void setAbstract(String _abstract) {
164
     this._abstract = _abstract;
165
    }
166
    
167
    public void addBBox(BoundaryBox bBox) {
168
    	bBoxes.put(bBox.getSrs(), bBox);
169
    }
170
    
171
    /**
172
     * <p>returns the bbox with that id in the Bboxes vector</p> 
173
     * @param id 
174
     */
175
    public BoundaryBox getBbox(String id) {
176
    	if ((id.compareToIgnoreCase( CapabilitiesTags.EPSG_4326 )==0)
177
    		||(id.compareToIgnoreCase( CapabilitiesTags.CRS_84)==0))
178
    	{
179
    		if (lonLatBbox != null)
180
    		return lonLatBbox; 
181
    	}
182
        
183
        return (BoundaryBox)bBoxes.get(id);
184
    } 
185
    
186
    public BoundaryBox getLatLonBox()
187
    {
188
        return lonLatBbox;
189
    }
190
    
191
    public void setLonLatBox(BoundaryBox box)
192
    {
193
        lonLatBbox = box;
194
    }   
195

  
196
    /**
197
     * Parses the fragment of the XML document that describes this layer (or coverage)
198
     * @param parser
199
     * @throws IOException 
200
     * @throws XmlPullParserException 
201
     */
202
    public abstract void parse(KXmlParser parser) throws XmlPullParserException, IOException;
203
    
204
    public class RectifiedGrid {
205
    	private int	       dimensions;
206
    	private String[]   axisNames;
207
    	private int[][]    lowGridEnvelopLimits;
208
    	private int[][]    highGridEnvelopLimits;
209
    	private double[]   origins;
210
    	private double[][] offsetVector;
211

  
212
		public RectifiedGrid(int dimensions) {
213
			this.dimensions = dimensions;
214
		}
215

  
216
		public void addAxisName(String axisName) {
217
			if (axisNames == null) {
218
				axisNames = new String[1];
219
				axisNames[0] = axisName;
220
			} else {
221
				String[] aux = axisNames;
222
				axisNames = new String[axisNames.length+1];
223
				for (int i = 0; i < aux.length; i++) {
224
					axisNames[i] = aux[i];
225
				}
226
				axisNames[axisNames.length-1] = axisName;
227
			}
228
		}
229
		
230
		public String[] getAxisNames() {
231
			return axisNames;
232
		}
233
		
234
		public void addLowGridEnvelopLimit(int[] lowLimit) {
235
			if (lowGridEnvelopLimits == null) {
236
				lowGridEnvelopLimits = new int[1][1];
237
				lowGridEnvelopLimits[0] = lowLimit;
238
			} else {
239
				int[][] aux = lowGridEnvelopLimits;
240
				lowGridEnvelopLimits = new int[lowGridEnvelopLimits.length+1][1];
241
				for (int i = 0; i < aux.length; i++) {
242
					lowGridEnvelopLimits[i] = aux[i];
243
				}
244
				lowGridEnvelopLimits[lowGridEnvelopLimits.length-1] = lowLimit;
245
			}
246
		}
247
		
248
		public int[][] getLowGridEnvelopLimits() {
249
			return lowGridEnvelopLimits;
250
		}
251
		
252
		public void addHighGridEnvelopLimit(int[] highLimit) {
253
			if (highGridEnvelopLimits == null) {
254
				highGridEnvelopLimits = new int[1][1];
255
				highGridEnvelopLimits[0] = highLimit;
256
			} else {
257
				int[][] aux = highGridEnvelopLimits;
258
				highGridEnvelopLimits = new int[highGridEnvelopLimits.length+1][1];
259
				for (int i = 0; i < aux.length; i++) {
260
					highGridEnvelopLimits[i] = aux[i];
261
				}
262
				highGridEnvelopLimits[highGridEnvelopLimits.length-1] = highLimit;
263
			}
264
		}
265
		
266
		public int[][] getHighGridEnvelopLimits() {
267
			return highGridEnvelopLimits;
268
		}
269
		
270
		public void setOrigin(double[] _origins) {
271
			origins = _origins;
272
		}
273
		
274
		public double[] getOrigins() {
275
			return origins;
276
		}
277
		
278
		public void addToOffsetVector(double[] _offsetVector) {
279
			if (offsetVector == null) {
280
				offsetVector = new double[1][1];
281
				offsetVector[0] = _offsetVector;
282
			} else {
283
				double[][] aux = offsetVector;
284
				offsetVector = new double[offsetVector.length+1][1];
285
				for (int i = 0; i < aux.length; i++) {
286
					offsetVector[i] = aux[i];
287
				}
288
				offsetVector[offsetVector.length-1] = _offsetVector;
289
			}
290
		}
291
		
292
		public double[][] getOffsetVector(){
293
			return offsetVector;
294
		}
295
		
296
		public int getDimensionCount() {
297
			return dimensions;
298
		}
299
    }
300

  
301
    public class AxisDescription {
302
    	private String name;
303
    	private String label;
304
    	private ArrayList singleValues = new ArrayList();
305
    	private String interval;
306
    	private String defaultValue;
307
    	
308
		public String getDefaultValue() {
309
			return defaultValue;
310
		}
311
		
312
		public void setDefaultValue(String defaultValue) {
313
			this.defaultValue = defaultValue;
314
		}
315
		
316
		public String getInterval() {
317
			return interval;
318
		}
319
		
320
		public void setInterval(String interval) {
321
			this.interval = interval;
322
		}
323
		
324
		public String getLabel() {
325
			return label;
326
		}
327
		public void setLabel(String label) {
328
			this.label = label;
329
		}
330
		
331
		public String getName() {
332
			return name;
333
		}
334
		
335
		public void setName(String name) {
336
			this.name = name;
337
		}
338
		
339
		public ArrayList getSingleValues() {
340
			return singleValues;
341
		}
342
		
343
		public void addSingleValues(String singleValue) {
344
			this.singleValues.add(singleValue);
345
		}
346
		
347
    	
348
    }
349
}
trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/wcs/WCSCoverage.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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
/**
42
 * 
43
 */
44
package org.gvsig.remoteClient.wcs;
45

  
46
import java.io.IOException;
47
import java.util.ArrayList;
48
import java.util.Hashtable;
49

  
50
import org.gvsig.remoteClient.ILayer;
51
import org.gvsig.remoteClient.utils.BoundaryBox;
52
import org.gvsig.remoteClient.utils.CapabilitiesTags;
53
import org.kxml2.io.KXmlParser;
54
import org.xmlpull.v1.XmlPullParserException;
55

  
56
/**
57
 * @author jaume
58
 *
59
 */
60
public abstract class WCSCoverage implements ILayer{
61
	public static final String SEPARATOR = " +"; // separator used to split list of values, usually is just a space
62
    private	String			name;
63
    private String			title;
64
    private String			_abstract;
65
    private Hashtable		bBoxes = new Hashtable();
66
	private BoundaryBox		lonLatBbox;
67
	public  RectifiedGrid	rg;
68
	private ArrayList 		timePositions = new ArrayList();
69
	public  String 			timePeriod;
70
	private String 			rangeSetName;
71
	private String 			rangeSetLabel;
72
	public  Hashtable 		axisPool = new Hashtable();
73
	private String 			nativeSRS;
74
	private ArrayList 		supportedSRSs = new ArrayList();
75
	private String 			nativeFormat; 
76
	private ArrayList 		formats = new ArrayList();
77
	
78
	public ArrayList getTimePositions() {
79
		return timePositions;
80
	}
81
	
82
	public void addTimePosition(String timeExpr) {
83
		if (timePositions == null)
84
			timePositions = new ArrayList();
85
		timePositions.add(timeExpr);
86
	}
87

  
88
	public ArrayList getFormats() {
89
		return formats;
90
	}
91
	
92
	public void addFormat(String format) {
93
		formats.add(format);
94
	}
95
	
96
    public void setNativeFormat(String nativeFormat) {
97
    	this.nativeFormat = nativeFormat;
98
    }
99
	
100
    public String getNativeFormat() {
101
    	return nativeFormat;
102
    }
103
    
104
	public String getNativeSRS() {
105
		return nativeSRS;
106
	}
107

  
108
	public void setNativeSRS(String nativeSRS) {
109
		this.nativeSRS = nativeSRS;
110
	}
111

  
112
	public ArrayList getSRSs() {
113
		return supportedSRSs;
114
	}
115

  
116
	public void addSRSs(String srs) {
117
		supportedSRSs.add(srs);
118
	}
119

  
120
	public String getRangeSetLabel() {
121
		return rangeSetLabel;
122
	}
123

  
124
	public void setRangeSetLabel(String rangeSetLabel) {
125
		this.rangeSetLabel = rangeSetLabel;
126
	}
127

  
128
	public String getRangeSetName() {
129
		return rangeSetName;
130
	}
131

  
132
	public void setRangeSetName(String rangeSetName) {
133
		this.rangeSetName = rangeSetName;
134
	}
135

  
136
	/* (non-Javadoc)
137
     * @see org.gvsig.remoteClient.ILayer#getName()
138
     */
139
    public String getName() {
140
        return name;
141
    }
142

  
143
    /* (non-Javadoc)
144
     * @see org.gvsig.remoteClient.ILayer#setName(java.lang.String)
145
     */
146
    public void setName(String _name) {
147
        name = _name;
148
    }
149

  
150
    /* (non-Javadoc)
151
     * @see org.gvsig.remoteClient.ILayer#setTitle(java.lang.String)
152
     */
153
    public void setTitle(String _title) {
154
        title = _title;
155
    }
156

  
157
    /* (non-Javadoc)
158
     * @see org.gvsig.remoteClient.ILayer#getTitle()
159
     */
160
    public String getTitle() {
161
        return title;
162
    }
163

  
164
    /* (non-Javadoc)
165
     * @see org.gvsig.remoteClient.ILayer#getAbstract()
166
     */
167
    public String getAbstract() {
168
        return _abstract;
169
    }
170

  
171
    /* (non-Javadoc)
172
     * @see org.gvsig.remoteClient.ILayer#setAbstract(java.lang.String)
173
     */
174
    public void setAbstract(String _abstract) {
175
     this._abstract = _abstract;
176
    }
177
    
178
    public void addBBox(BoundaryBox bBox) {
179
    	bBoxes.put(bBox.getSrs(), bBox);
180
    }
181
    
182
    public ArrayList getAllSrs() {
183
    	ArrayList mySrs = new ArrayList();
184
    	mySrs.addAll(supportedSRSs);
185
    	if (!mySrs.contains(nativeSRS))
186
    		mySrs.add(nativeSRS);
187
    	return mySrs;
188
    }
189
    /**
190
     * <p>returns the bbox with that id in the Bboxes vector</p> 
191
     * @param id 
192
     */
193
    public BoundaryBox getBbox(String id) {
194
    	if ((id.compareToIgnoreCase( CapabilitiesTags.EPSG_4326 )==0)
195
    		||(id.compareToIgnoreCase( CapabilitiesTags.CRS_84)==0))
196
    	{
197
    		if (lonLatBbox != null)
198
    		return lonLatBbox; 
199
    	}
200
        
201
        return (BoundaryBox)bBoxes.get(id);
202
    } 
203
    
204
    public BoundaryBox getLatLonBox()
205
    {
206
        return lonLatBbox;
207
    }
208
    
209
    public void setLonLatBox(BoundaryBox box)
210
    {
211
        lonLatBbox = box;
212
    }   
213

  
214
    /**
215
     * Parses the fragment of the XML document that describes this layer (or coverage)
216
     * @param parser
217
     * @throws IOException 
218
     * @throws XmlPullParserException 
219
     */
220
    public abstract void parse(KXmlParser parser) throws XmlPullParserException, IOException;
221
    
222
    public class RectifiedGrid {
223
    	private int	       dimensions;
224
    	private String[]   axisNames;
225
    	private int[][]    lowGridEnvelopLimits;
226
    	private int[][]    highGridEnvelopLimits;
227
    	private double[]   origins;
228
    	private double[][] offsetVector;
229

  
230
		public RectifiedGrid(int dimensions) {
231
			this.dimensions = dimensions;
232
		}
233

  
234
		public void addAxisName(String axisName) {
235
			if (axisNames == null) {
236
				axisNames = new String[1];
237
				axisNames[0] = axisName;
238
			} else {
239
				String[] aux = axisNames;
240
				axisNames = new String[axisNames.length+1];
241
				for (int i = 0; i < aux.length; i++) {
242
					axisNames[i] = aux[i];
243
				}
244
				axisNames[axisNames.length-1] = axisName;
245
			}
246
		}
247
		
248
		public String[] getAxisNames() {
249
			return axisNames;
250
		}
251
		
252
		public void addLowGridEnvelopLimit(int[] lowLimit) {
253
			if (lowGridEnvelopLimits == null) {
254
				lowGridEnvelopLimits = new int[1][1];
255
				lowGridEnvelopLimits[0] = lowLimit;
256
			} else {
257
				int[][] aux = lowGridEnvelopLimits;
258
				lowGridEnvelopLimits = new int[lowGridEnvelopLimits.length+1][1];
259
				for (int i = 0; i < aux.length; i++) {
260
					lowGridEnvelopLimits[i] = aux[i];
261
				}
262
				lowGridEnvelopLimits[lowGridEnvelopLimits.length-1] = lowLimit;
263
			}
264
		}
265
		
266
		public int[][] getLowGridEnvelopLimits() {
267
			return lowGridEnvelopLimits;
268
		}
269
		
270
		public void addHighGridEnvelopLimit(int[] highLimit) {
271
			if (highGridEnvelopLimits == null) {
272
				highGridEnvelopLimits = new int[1][1];
273
				highGridEnvelopLimits[0] = highLimit;
274
			} else {
275
				int[][] aux = highGridEnvelopLimits;
276
				highGridEnvelopLimits = new int[highGridEnvelopLimits.length+1][1];
277
				for (int i = 0; i < aux.length; i++) {
278
					highGridEnvelopLimits[i] = aux[i];
279
				}
280
				highGridEnvelopLimits[highGridEnvelopLimits.length-1] = highLimit;
281
			}
282
		}
283
		
284
		public int[][] getHighGridEnvelopLimits() {
285
			return highGridEnvelopLimits;
286
		}
287
		
288
		public void setOrigin(double[] _origins) {
289
			origins = _origins;
290
		}
291
		
292
		public double[] getOrigins() {
293
			return origins;
294
		}
295
		
296
		public void addToOffsetVector(double[] _offsetVector) {
297
			if (offsetVector == null) {
298
				offsetVector = new double[1][1];
299
				offsetVector[0] = _offsetVector;
300
			} else {
301
				double[][] aux = offsetVector;
302
				offsetVector = new double[offsetVector.length+1][1];
303
				for (int i = 0; i < aux.length; i++) {
304
					offsetVector[i] = aux[i];
305
				}
306
				offsetVector[offsetVector.length-1] = _offsetVector;
307
			}
308
		}
309
		
310
		public double[][] getOffsetVector(){
311
			return offsetVector;
312
		}
313
		
314
		public int getDimensionCount() {
315
			return dimensions;
316
		}
317
    }
318

  
319
    public class AxisDescription {
320
    	private String name;
321
    	private String label;
322
    	private ArrayList singleValues = new ArrayList();
323
    	private String interval;
324
    	private String defaultValue;
325
    	
326
		public String getDefaultValue() {
327
			return defaultValue;
328
		}
329
		
330
		public void setDefaultValue(String defaultValue) {
331
			this.defaultValue = defaultValue;
332
		}
333
		
334
		public String getInterval() {
335
			return interval;
336
		}
337
		
338
		public void setInterval(String interval) {
339
			this.interval = interval;
340
		}
341
		
342
		public String getLabel() {
343
			return label;
344
		}
345
		public void setLabel(String label) {
346
			this.label = label;
347
		}
348
		
349
		public String getName() {
350
			return name;
351
		}
352
		
353
		public void setName(String name) {
354
			this.name = name;
355
		}
356
		
357
		public ArrayList getSingleValues() {
358
			return singleValues;
359
		}
360
		
361
		public void addSingleValues(String singleValue) {
362
			this.singleValues.add(singleValue);
363
		}
364
    }
365

  
366
	public double getResX() {
367
		return Math.abs(rg.offsetVector[0][0]);
368
	}
369
	
370
	public double getResY() {
371
		return Math.abs(rg.offsetVector[1][1]);
372
	}
373

  
374
}
0 375

  
trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/wcs/wcs_1_0_0/WCSLayer1_0_0.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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
/**
42
 * 
43
 */
44
package org.gvsig.remoteClient.wcs.wcs_1_0_0;
45

  
46

  
47
import java.io.IOException;
48

  
49
import org.gvsig.remoteClient.utils.BoundaryBox;
50
import org.gvsig.remoteClient.utils.DescribeCoverageTags;
51
import org.gvsig.remoteClient.wcs.WCSLayer;
52
import org.kxml2.io.KXmlParser;
53
import org.xmlpull.v1.XmlPullParserException;
54

  
55
/**
56
 * @author jaume
57
 *
58
 */
59
public class WCSLayer1_0_0 extends WCSLayer{
60

  
61
    
62
	/* (non-Javadoc)
63
     * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
64
     */
65
    public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
66
        int currentTag;
67
        String value;
68
        boolean end = false;
69
        
70
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
71
        currentTag = parser.next();
72
        
73
        while (!end) 
74
        {
75
             switch(currentTag)
76
             {
77
                case KXmlParser.START_TAG:
78
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
79
                    {
80
                        value = parser.nextText();
81
                        if (value != null) setName(value);  
82
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){
83
                        value = parser.nextText();
84
                        if (value != null) setTitle(value);
85
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){
86
                    	BoundaryBox bBox = parseLonLatGMLEnvelope(parser);
87
                        bBox.setSrs(DescribeCoverageTags.WGS84);
88
                        addBBox(bBox);
89
                        setLonLatBox(bBox);
90
                    } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) {
91
                    	parseDomainSet(parser);
92
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) {
93
                    	parseRangeSet(parser);
94
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTEDCRSS) == 0) {
95
                    	parseSupportedCRSS(parser);
96
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTEDFORMATS) == 0) {
97
                    	setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVEFORMAT));
98
                    	parser.nextTag();
99
                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
100
                    	String[] formats = parser.nextText().split(SEPARATOR);
101
                    	for (int i = 0; i < formats.length; i++) {
102
							addFormat(formats[i]);
103
						}
104
                    } else {
105
                    	if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages
106
                    		System.out.println("Skiped "+parser.getName());
107
                    }
108
                    
109
                    break;
110
                case KXmlParser.END_TAG:
111
                    if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0)
112
                        end = true;
113
                    break;
114
                case KXmlParser.TEXT:
115
                	if (parser.getName()!=null)
116
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
117
                	break;
118
             }
119
             currentTag = parser.next();
120
        }
121
        
122
        
123
    }
124

  
125
    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
126
    	int currentTag;
127
    	boolean end = false;
128
    	
129
    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTEDCRSS);
130
    	currentTag = parser.next();
131
    	
132
    	while (!end) 
133
    	{
134
    		switch(currentTag)
135
    		{
136
	    		case KXmlParser.START_TAG:
137
	    			if (parser.getName().compareTo(DescribeCoverageTags.REQUESTRESPONSECRSS)==0) {
138
	    				String[] values = parser.nextText().split(SEPARATOR);
139
	    				for (int i = 0; i < values.length; i++) {
140
							addSRSs(values[i]);
141
						}
142
	    			}
143
	    			else if (parser.getName().compareTo(DescribeCoverageTags.NATIVECRS) == 0) {
144
	    				setNativeSRS(parser.nextText());
145
	    			} else if (parser.getName().compareTo(DescribeCoverageTags.REQUESTCRSS) == 0) {
146
	    				// TODO
147
                    	System.out.println("Skiped "+parser.getName());
148
	    			} else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSECRSS) == 0) {
149
	    				// TODO
150
                    	System.out.println("Skiped "+parser.getName());
151
                    } else {
152
                    	System.out.println("Unrecognized "+parser.getName());
153
	    			}
154
	    				
155
	    			break;
156
	    		case KXmlParser.END_TAG:
157
	    			if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTEDCRSS) == 0)
158
	    				end = true;
159
	    			break;
160
	    		case KXmlParser.TEXT: 
161
	    			if (parser.getName()!=null)
162
	    				System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
163
	    			break;
164
    		}
165
    		currentTag = parser.next();
166
    	} 
167
    }
168

  
169
	private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
170
		int currentTag;
171
        boolean end = false;
172
        
173
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
174
        currentTag = parser.next();
175
        
176
        while (!end) 
177
        {
178
             switch(currentTag)
179
             {
180
                case KXmlParser.START_TAG:
181
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
182
                    	setRangeSetName(parser.nextText());
183
                    else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0)
184
                    	setRangeSetLabel(parser.nextText());
185
                    else if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) {
186
                    	// Reading all axe description
187
                    	int axisTag = parser.nextTag();
188
                    	boolean endAxe = false;
189
                    	while (!endAxe) {
190
                            switch(axisTag)
191
                            {
192
                               case KXmlParser.START_TAG:
193
                            	   if (parser.getName().compareTo(DescribeCoverageTags.AXISDESCRIPTION)==0) {
194
                            		   AxisDescription as = parseAxisDescription(parser);
195
                            		   axisPool.put(as.getName(), as);
196
                            	   }
197
                            	   break;
198
                               case KXmlParser.END_TAG:
199
                                   if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
200
                                	   endAxe = true;
201
                                   break;
202
                               case KXmlParser.TEXT: 
203
                            	   if (parser.getName()!=null)
204
                            		   System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
205
                            	   break;
206
                            }
207
                            axisTag = parser.next();
208
                    	}	
209
                    } else {
210
                    	System.out.println("Unrecognized "+parser.getName());
211
                    }
212
                    break;
213
                case KXmlParser.END_TAG:
214
                    if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0)
215
                        end = true;
216
                    break;
217
                case KXmlParser.TEXT: 
218
                	if (parser.getName()!=null)
219
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
220
                	break;
221
             }
222
             currentTag = parser.next();
223
        }
224
	}
225

  
226
	private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
227
		int currentTag;
228
        boolean end = false;
229
        
230
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
231
        AxisDescription as = new AxisDescription();
232
        currentTag = parser.next();
233
        
234
        while (!end) 
235
        {
236
             switch(currentTag)
237
             {
238
                case KXmlParser.START_TAG:
239
                	if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
240
                		as.setName(parser.nextText());
241
                	} else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
242
                		as.setLabel(parser.nextText());
243
                	} else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
244
                		int valuesTag = parser.nextTag();
245
                		boolean valuesEnd = false;
246
                		while (!valuesEnd) {
247
                			switch(valuesTag)	{
248
	                			case KXmlParser.START_TAG:
249
	                				if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
250
	                					as.addSingleValues(parser.nextText());
251
	                				} else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
252
	                					as.setInterval(parser.nextText());
253
	                				} else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
254
	                					as.setDefaultValue(parser.nextText());
255
	                				}
256
	                				break;
257
	                			case KXmlParser.END_TAG:
258
	                				if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
259
	                					valuesEnd = true;
260
	                				break;
261
	                			case KXmlParser.TEXT: 
262
	                				if (parser.getName()!=null)
263
	                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
264
	                				break;
265
	                			}
266
                			valuesTag = parser.next();
267
                		}
268
                	} else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
269
                		// TODO
270
                		System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
271
                    } else {
272
                    	System.out.println("Unrecognized "+parser.getName());
273
                	}
274
                		
275
                	break;
276
                case KXmlParser.END_TAG:
277
                    if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
278
                        end = true;
279
                    break;
280
                case KXmlParser.TEXT: 
281
                	if (parser.getName()!=null)
282
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
283
                	break;
284
             }
285
             currentTag = parser.next();
286
        }    
287
        return as;
288
	}
289

  
290
	private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
291
		int currentTag;
292
        boolean end = false;
293
        
294
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
295
        currentTag = parser.next();
296
        
297
        while (!end) 
298
        {
299
             switch(currentTag)
300
             {
301
                case KXmlParser.START_TAG:
302
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0)
303
                    {
304
                    	parseSpatialDomain(parser);
305
                    } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) {
306
                    	parseTemporalDomain(parser);
307
                    }
308
                    break;
309
                case KXmlParser.END_TAG:
310
                    if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0)
311
                        end = true;
312
                    break;
313
                case KXmlParser.TEXT: 
314
                	if (parser.getName()!=null)
315
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
316
                	break;
317
             }
318
             currentTag = parser.next();
319
        }
320
	}
321

  
322
	private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
323
		int currentTag;
324
        boolean end = false;
325
        
326
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
327
        currentTag = parser.next();
328
        
329
        while (!end) 
330
        {
331
             switch(currentTag)
332
             {
333
                case KXmlParser.START_TAG:
334
                	if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) {
335
                		timePositions.add(parser.nextText());
336
                	} else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) {
337
                		boolean timePeriodEnd = false;
338
                		int timePeriodTag = parser.next();
339
                		String[] timePeriod = new String[3];
340
                		while (!timePeriodEnd) {
341
                			switch (timePeriodTag) {
342
                			case KXmlParser.START_TAG:
343
                				if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) {
344
                					timePeriod[0] = parser.nextText();
345
                				} else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) {
346
                					timePeriod[1] = parser.nextText();
347
                				} else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) {
348
                					timePeriod[2] = parser.nextText();
349
                                } else {
350
                                	System.out.println("Unrecognized "+parser.getName());
351
                				}
352
                				break;
353
                			case KXmlParser.END_TAG:
354
                				if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
355
                					end = true;
356
                				break;
357
                			case KXmlParser.TEXT:
358
                				if (parser.getName()!=null)
359
                					System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
360
                				break;
361
                			}
362
                			timePeriodTag = parser.next();
363
                		}
364
                		super.timePeriod = "";
365
                		for (int i = 0; i < timePeriod.length-1; i++) {
366
                			if (timePeriod[i]!=null) {
367
                				super.timePeriod += timePeriod[i];
368
                			}
369
                			if (timePeriod[i+1]!=null) {
370
                				super.timePeriod += "/";
371
                			}
372
						}
373
                    } else {
374
                    	System.out.println("Unrecognized "+parser.getName());
375
                	}
376
                	break;
377
                case KXmlParser.END_TAG:
378
                    if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
379
                        end = true;
380
                    break;
381
                case KXmlParser.TEXT: 
382
                	if (parser.getName()!=null)
383
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
384
                	break;
385
             }
386
             currentTag = parser.next();
387
        }
388
	}
389

  
390
	private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
391
		int currentTag;
392
        boolean end = false;
393
        
394
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
395
        currentTag = parser.next();
396
        
397
        while (!end) 
398
        {
399
             switch(currentTag)
400
             {
401
                case KXmlParser.START_TAG:
402
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) {
403
                    	BoundaryBox bBox = parseGMLEnvelope(parser);
404
                    	addBBox(bBox);
405
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) {
406
                    	parseRectifiedGrid(parser);
407
                    } else {
408
                    	System.out.println("Unrecognized "+parser.getName());
409
                    }
410
                    break;
411
                case KXmlParser.END_TAG:
412
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0)
413
                        end = true;
414
                    break;
415
                case KXmlParser.TEXT: 
416
                	if (parser.getName()!=null)
417
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
418
                	break;
419
             }
420
             currentTag = parser.next();
421
        }
422
 	}
423

  
424
	private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException {
425
		int currentTag;
426
		String value;
427
		boolean end = false;
428
		parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
429
		rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
430
		
431
		currentTag = parser.next();
432
		
433
		while (!end) 
434
		{
435
			switch(currentTag)
436
			{
437
				case KXmlParser.START_TAG:
438
					if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
439
						parser.nextTag();
440
						if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
441
							boolean gridEnd = false;
442
							int gridCurrentTag = parser.next();
443
							while (!gridEnd)
444
							{
445
								switch (gridCurrentTag) {
446
								case KXmlParser.START_TAG:
447
									
448
									if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
449
										value = parser.nextText();
450
										String[] ss = value.split(SEPARATOR);
451
										int[] limits = new int[ss.length];
452
										for (int i = 0; i < limits.length; i++) {
453
											limits[i] = Integer.parseInt(ss[i]);
454
										}
455
										rg.addLowGridEnvelopLimit(limits);
456
									} else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
457
										value = parser.nextText();
458
										String[] ss = value.split(SEPARATOR);
459
										int[] limits = new int[ss.length];
460
										for (int i = 0; i < limits.length; i++) {
461
											limits[i] = Integer.parseInt(ss[i]);
462
										}
463
										rg.addHighGridEnvelopLimit(limits);
464
				                    } else {
465
				                    	System.out.println("Unrecognized "+parser.getName());
466
				                    }
467
									break;
468
								case KXmlParser.END_TAG:
469
									if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
470
										gridEnd = true;
471
									break;
472
								case KXmlParser.TEXT: 
473
									if (parser.getName()!=null)
474
										System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
475
									break;
476
								}
477
								gridCurrentTag = parser.next();
478
							}
479
						} 
480
					} else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
481
						rg.addAxisName(parser.nextText());
482
					} else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) {
483
						parser.nextTag();
484
						if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
485
							value = parser.nextText();
486
							String[] ss = value.split(SEPARATOR);
487
							double[] ori = new double[ss.length];
488
							for (int i = 0; i < ori.length; i++) {
489
								ori[i] = Double.parseDouble(ss[i]);
490
							}
491
							rg.setOrigin(ori);
492
						}
493
					} else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) {
494
						value = parser.nextText();
495
						String[] ss = value.split(SEPARATOR);
496
						double[] offset = new double[ss.length];
497
						for (int i = 0; i < offset.length; i++) {
498
							offset[i] = Double.parseDouble(ss[i]);
499
						}
500
						rg.addToOffsetVector(offset);
501
                    } else {
502
                    	System.out.println("Unrecognized "+parser.getName());
503
					}
504
					break;
505
				case KXmlParser.END_TAG:
506
					if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0)
507
						end = true;
508
					break;
509
				case KXmlParser.TEXT: 
510
					if (parser.getName()!=null)
511
						System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
512
					break;
513
			}
514
			currentTag = parser.next();
515
		}
516
	}   
517

  
518

  
519
	private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
520
		BoundaryBox bBox = new BoundaryBox();
521
		int currentTag;
522
        String value;
523
        boolean end = false;
524
        
525
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
526
        currentTag = parser.next();
527
        
528
        while (!end) 
529
        {
530
             switch(currentTag)
531
             {
532
                case KXmlParser.START_TAG:
533
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
534
                    	bBox.setSrs(DescribeCoverageTags.WGS84);
535
                    	String[] coordinates;
536
                    	double minx, miny, maxx, maxy;
537
                    	value = parser.nextText();
538
                    	coordinates = value.split(SEPARATOR);
539
                    	minx = Double.parseDouble(coordinates[0]);
540
                    	miny = Double.parseDouble(coordinates[1]);
541
                    	
542
                    	parser.nextTag();
543
                    	
544
                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
545
                    	value = parser.nextText();
546
                    	coordinates = value.split(SEPARATOR);
547
                    	maxx = Double.parseDouble(coordinates[0]);
548
                    	maxy = Double.parseDouble(coordinates[1]);
549
                    	
550
                    	bBox.setXmin(minx);
551
                    	bBox.setYmin(miny);
552
                    	bBox.setXmax(maxx);
553
                    	bBox.setYmax(maxy);
554
                    }
555
                    break;
556
                case KXmlParser.END_TAG:
557
                    if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0)
558
                        end = true;
559
                    break;
560
                case KXmlParser.TEXT: 
561
                	if (parser.getName()!=null)
562
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
563
                	break;
564
             }
565
             currentTag = parser.next();
566
        }
567
        return bBox;
568
	}
569

  
570
	private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
571
		BoundaryBox bBox = new BoundaryBox();
572
		int currentTag;
573
        String value;
574
        boolean end = false;
575
        
576
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
577
        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
578
        currentTag = parser.next();
579
        
580
        while (!end) 
581
        {
582
             switch(currentTag)
583
             {
584
                case KXmlParser.START_TAG:
585
                	if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
586
                    	
587
                    	String[] coordinates;
588
                    	double minx, miny, maxx, maxy;
589
                    	value = parser.nextText();
590
                    	coordinates = value.split(SEPARATOR);
591
                    	minx = Double.parseDouble(coordinates[0]);
592
                    	miny = Double.parseDouble(coordinates[1]);
593
                    	
594
                    	parser.nextTag();
595
                    	//parser.nextTag();
596
                    	parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
597
                    	value = parser.nextText();
598
                    	coordinates = value.split(SEPARATOR);
599
                    	maxx = Double.parseDouble(coordinates[0]);
600
                    	maxy = Double.parseDouble(coordinates[1]);
601
                    	
602
                    	bBox.setXmin(minx);
603
                    	bBox.setYmin(miny);
604
                    	bBox.setXmax(maxx);
605
                    	bBox.setYmax(maxy);
606
                    }
607
                    break;
608
                case KXmlParser.END_TAG:
609
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0)
610
                        end = true;
611
                    break;
612
                case KXmlParser.TEXT:
613
                	if (parser.getName()!=null)
614
                		System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");    
615
                	break;
616
             }
617
             currentTag = parser.next();
618
        }
619
        
620
        return bBox;
621
	}
622

  
623
    
624
}
trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/wcs/wcs_1_0_0/WCSProtocolHandler1_0_0.java
49 49
import org.gvsig.remoteClient.utils.CapabilitiesTags;
50 50
import org.gvsig.remoteClient.utils.DescribeCoverageTags;
51 51
import org.gvsig.remoteClient.wcs.WCSProtocolHandler;
52
import org.gvsig.remoteClient.wms.WMSProtocolHandler.ServiceInformation;
52 53
import org.kxml2.io.KXmlParser;
53 54
import org.xmlpull.v1.XmlPullParserException;
54 55

  
......
57 58
 *
58 59
 */
59 60
public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
60
	Hashtable layerPool = new Hashtable();
61
	
62
	public WCSProtocolHandler1_0_0() {
63
		this.version = "1.0.0";
64
		this.name = "WCS1.0.0";
65
		this.serviceInfo = new ServiceInformation(); 
66
	}
67
	
61 68
    /* (non-Javadoc)
62 69
     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
63 70
     */
64 71
    /**
65
     * <p>Parse the xml data retrieved from the WMS, it will parse the WMS Capabilities</p>
72
     * <p>Parse the xml data retrieved from the WCS, it will parse the WCS Capabilities</p>
66 73
     * 
67 74
     */
68 75
    public boolean parseCapabilities(File f)
......
152 159
                    switch (tag){
153 160
                        case KXmlParser.START_TAG:
154 161
                            if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING)==0){
155
                                WCSLayer1_0_0 lyr = new WCSLayer1_0_0();
162
                                WCSCoverage1_0_0 lyr = new WCSCoverage1_0_0();
156 163
                                lyr.parse(parser);
157 164
                                if (lyr!=null){
158 165
                                    layerPool.put(lyr.getName(), lyr);
......
244 251
                    {
245 252
                        serviceInfo.title = parser.nextText(); 
246 253
                    }
247
                    else if (parser.getName().compareTo(CapabilitiesTags.ABSTRACT)==0)
254
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_DESCRIPTION)==0)
248 255
                    {
249 256
                        serviceInfo.abstr = parser.nextText(); 
250 257
                    }
trunk/libraries/libRemoteServices/src/org/gvsig/remoteClient/wcs/wcs_1_0_0/WCSCoverage1_0_0.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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
 *
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff