Revision 40740 branches/v02_desarrollo/libraries/org.gvsig.sldsupport/org.gvsig.sldsupport.lib/org.gvsig.sldsupport.lib.impl/src/main/java/org/gvsig/sldsupport/impl/DefaultSLDSupportManager.java

View differences:

DefaultSLDSupportManager.java
1 1
package org.gvsig.sldsupport.impl;
2 2

  
3
import java.lang.reflect.Constructor;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.HashSet;
7
import java.util.Iterator;
8
import java.util.List;
9
import java.util.Map;
10
import java.util.Set;
11

  
12
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
13
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
3 14
import org.gvsig.sldsupport.SLDSupportManager;
15
import org.gvsig.sldsupport.exception.SLDReadException;
16
import org.gvsig.sldsupport.exception.SLDWriteException;
17
import org.gvsig.sldsupport.io.SLDLegendReader;
18
import org.gvsig.sldsupport.io.SLDLegendWriter;
19
import org.gvsig.sldsupport.io.SLDSymbolReader;
20
import org.gvsig.sldsupport.io.SLDSymbolWriter;
21
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
22
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
23
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
24
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamReader;
25
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
4 26

  
5 27
public class DefaultSLDSupportManager implements SLDSupportManager {
6 28
	
29
	private Map<Class<? extends ISymbol>, Set<SLDSymbolReader>> symToReaders =
30
	new HashMap<Class<? extends ISymbol>, Set<SLDSymbolReader>>();
31

  
32
	private Map<Class<? extends ILegend>, Set<SLDLegendReader>> legToReaders =
33
	new HashMap<Class<? extends ILegend>, Set<SLDLegendReader>>();
34
	// ================
35
	private Map<Class<? extends ISymbol>, Set<SLDSymbolWriter>> symToWriters =
36
	new HashMap<Class<? extends ISymbol>, Set<SLDSymbolWriter>>();
37

  
38
	private Map<Class<? extends ILegend>, Set<SLDLegendWriter>> legToWriters =
39
	new HashMap<Class<? extends ILegend>, Set<SLDLegendWriter>>();
40
	
7 41
	public DefaultSLDSupportManager() {
8 42
		
9 43
	}
10 44

  
45
	/*
46
	public IMarkerSymbol readMarkerSymbol(IXmlStreamReader reader)
47
			throws SLDReadException {
48
		// TODO Auto-generated method stub
49
		return null;
50
	}
51

  
52
	public ILineSymbol readLineSymbol(IXmlStreamReader reader)
53
			throws SLDReadException {
54
		// TODO Auto-generated method stub
55
		return null;
56
	}
57

  
58
	public IFillSymbol readFillSymbol(IXmlStreamReader reader)
59
			throws SLDReadException {
60
		// TODO Auto-generated method stub
61
		return null;
62
	}
63
	*/
64
	
65
	public ISymbol readSymbol(IXmlStreamReader reader, String version)
66
			throws SLDReadException {
67
		
68
		throw new SLDReadException(new Exception("Not implemented."));
69
	}
70

  
71

  
72
	public ILegend readLegend(IXmlStreamReader reader, String version)
73
			throws SLDReadException {
74

  
75
		throw new SLDReadException(new Exception("Not implemented."));
76
	}
77

  
78
	public void writeLegend(ILegend leg, IXmlStreamWriter writer, String version)
79
			throws SLDWriteException {
80
		
81
		if (leg == null) {
82
			throw new SLDWriteException(new Exception("Legend is NULL"));
83
		}
84
		
85
		Set<SLDLegendWriter> set = legToWriters.get(leg.getClass());
86
		
87
		if (set == null) {
88
			throw new SLDWriteException(new Exception(
89
					"Unsupported legend: '" + leg.getClass().getName() + "'"));
90
		}
91

  
92
		Iterator<SLDLegendWriter> iter = set.iterator();
93
		List<String> vv = null;
94
		SLDLegendWriter item = null;
95
		while (iter.hasNext()) {
96
			item = iter.next();
97
			vv = item.getSupportedVersions();
98
			if (vv.contains(version)) {
99
				item.write(leg, writer, version);
100
				return;
101
			}
102
		}
103
		throw new SLDWriteException(new Exception(
104
				"Legend is supported: '" + leg.getClass().getName()
105
						+ "' but not in version '" + version + "'"));
106
	}
107
	
108
	public void writeSymbol(ISymbol sym, IXmlStreamWriter writer, String version)
109
			throws SLDWriteException {
110
		
111
		if (sym == null) {
112
			throw new SLDWriteException(new Exception("Symbol is NULL"));
113
		}
114
		
115
		Set<SLDSymbolWriter> set = symToWriters.get(sym.getClass());
116
		
117
		if (set == null) {
118
			throw new SLDWriteException(new Exception(
119
					"Unsupported symbol: '" + sym.getClass().getName() + "'"));
120
		}
121

  
122
		Iterator<SLDSymbolWriter> iter = set.iterator();
123
		List<String> vv = null;
124
		SLDSymbolWriter item = null;
125
		while (iter.hasNext()) {
126
			item = iter.next();
127
			vv = item.getSupportedVersions();
128
			if (vv.contains(version)) {
129
				item.write(sym, writer, version);
130
				return;
131
			}
132
		}
133
		throw new SLDWriteException(new Exception(
134
				"Symbol is supported: '" + sym.getClass().getName()
135
						+ "' but not in version '" + version + "'"));
136
		
137
	}
138

  
139
	// =========================================
140
	// =========================================
141

  
142
	public void registerSymbolReader(SLDSymbolReader reader) {
143
		
144
		Iterator<Class<? extends ISymbol>> iter =
145
				reader.getSupportedSymbols().iterator();
146
		
147
		Class<? extends ISymbol> clazz = null;
148
		Set<SLDSymbolReader> set = null;
149
		while (iter.hasNext()) {
150
			clazz = iter.next();
151
			set = this.symToReaders.get(clazz);
152
			if (set == null) {
153
				set = new HashSet<SLDSymbolReader>();
154
				set.add(reader);
155
				this.symToReaders.put(clazz, set);
156
			} else {
157
				set.add(reader);
158
			}
159
		}
160
	}
161

  
162
	public void registerSymbolWriter(SLDSymbolWriter writer) {
163
		
164
		Iterator<Class<? extends ISymbol>> iter =
165
				writer.getSupportedSymbols().iterator();
166
		
167
		Class<? extends ISymbol> clazz = null;
168
		Set<SLDSymbolWriter> set = null;
169
		while (iter.hasNext()) {
170
			clazz = iter.next();
171
			set = this.symToWriters.get(clazz);
172
			if (set == null) {
173
				set = new HashSet<SLDSymbolWriter>();
174
				set.add(writer);
175
				this.symToWriters.put(clazz, set);
176
			} else {
177
				set.add(writer);
178
			}
179
		}
180
	}
181

  
182
	public void registerLegendReader(SLDLegendReader reader) {
183
		
184
		Iterator<Class<? extends ILegend>> iter =
185
				reader.getSupportedLegends().iterator();
186
		
187
		Class<? extends ILegend> clazz = null;
188
		Set<SLDLegendReader> set = null;
189
		while (iter.hasNext()) {
190
			clazz = iter.next();
191
			set = this.legToReaders.get(clazz);
192
			if (set == null) {
193
				set = new HashSet<SLDLegendReader>();
194
				set.add(reader);
195
				this.legToReaders.put(clazz, set);
196
			} else {
197
				set.add(reader);
198
			}
199
		}
200
	}
201

  
202
	public void registerLegendWriter(SLDLegendWriter writer) {
203

  
204
		Iterator<Class<? extends ILegend>> iter =
205
				writer.getSupportedLegends().iterator();
206
		
207
		Class<? extends ILegend> clazz = null;
208
		Set<SLDLegendWriter> set = null;
209
		while (iter.hasNext()) {
210
			clazz = iter.next();
211
			set = this.legToWriters.get(clazz);
212
			if (set == null) {
213
				set = new HashSet<SLDLegendWriter>();
214
				set.add(writer);
215
				this.legToWriters.put(clazz, set);
216
			} else {
217
				set.add(writer);
218
			}
219
		}
220
	}
221
	
222
	// =============================
223
	
224
//	private SLDSymbolWriter getSymbolWriterForClass(
225
//			Class<? extends ISymbol> clazz, String v) throws Exception {
226
//		
227
//		Set<SLDSymbolWriter> list = symToWriters.get(clazz);
228
//		
229
//		Class<? extends ISymbol> item = null;
230
//		SLDSymbolWriter resp = null;
231
//		while (iter.hasNext()) {
232
//			item = iter.next();
233
//			if (item == clazz) {
234
//				resp = symToWriter.get(item);
235
//				return resp;
236
//			}
237
//		}
238
//		return null;
239
//	}
240
//	
241
//	private SLDLegendWriter getLegendWriterForClass(Class<? extends ILegend> clazz)
242
//	throws Exception {
243
//		
244
//		Iterator<Class<? extends ILegend>> iter = legToWriter.keySet().iterator();
245
//		Class<? extends ILegend> item = null;
246
//		SLDLegendWriter resp = null;
247
//		while (iter.hasNext()) {
248
//			item = iter.next();
249
//			if (item == clazz) {
250
//				resp = legToWriter.get(item);
251
//				return resp;
252
//			}
253
//		}
254
//		return null;
255
//	}
256
	
257
	/*
258
	private Object instantiate(Class clazz) throws Exception {
259
		
260
		Constructor con = null;
261
		con = clazz.getConstructor((Class<?>[]) null);
262
		return con.newInstance((Object[]) null);
263
	}
264
	*/
265

  
266
	
267
	
268

  
11 269
}

Also available in: Unified diff