svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.mapcontext / org.gvsig.fmap.mapcontext.api / src / main / java / org / gvsig / fmap / mapcontext / layers / DefaultLayerInformationBuilder.java @ 43152
History | View | Annotate | Download (12.3 KB)
1 | 43141 | jjdelcerro | package org.gvsig.fmap.mapcontext.layers; |
---|---|---|---|
2 | |||
3 | import java.util.ArrayList; |
||
4 | import java.util.List; |
||
5 | import org.apache.commons.lang3.StringEscapeUtils; |
||
6 | import org.apache.commons.lang3.StringUtils; |
||
7 | import org.cresques.cts.ICRSFactory; |
||
8 | import org.cresques.cts.IProjection; |
||
9 | import org.gvsig.fmap.geom.Geometry; |
||
10 | import org.gvsig.fmap.geom.primitive.Envelope; |
||
11 | import org.gvsig.tools.ToolsLocator; |
||
12 | |||
13 | public class DefaultLayerInformationBuilder implements LayerInformationBuilder { |
||
14 | |||
15 | private String backgroundColor = "\"#FFFFFF\""; |
||
16 | private String backgroundColorTitle = "\"#FBFFE1\""; // light yellow |
||
17 | private String backgroundColorPropertyLabel = "\"#D6D6D6\""; // Gris |
||
18 | private String backgroundColorPropertyValue1 = "\"#FEEDD6\""; // light salmon |
||
19 | private String backgroundColorPropertyValue2 = "\"#EAEAEA\""; // light grey |
||
20 | |||
21 | private int propertyCount = 0; |
||
22 | private final List<Element> elements; |
||
23 | |||
24 | private class DefaultTitleElement implements TitleElement { |
||
25 | |||
26 | private String label; |
||
27 | |||
28 | @Override
|
||
29 | public DefaultTitleElement label(String label) { |
||
30 | this.label = StringEscapeUtils.escapeHtml3(label);
|
||
31 | return this; |
||
32 | } |
||
33 | |||
34 | @Override
|
||
35 | public TitleElement labelkey(String labelkey) { |
||
36 | return label(ToolsLocator.getI18nManager().getTranslation(labelkey));
|
||
37 | } |
||
38 | |||
39 | @Override
|
||
40 | public String build() { |
||
41 | propertyCount = 0;
|
||
42 | return "<tr valign=\"middle\" >" |
||
43 | + "<td bgcolor=" + backgroundColorTitle + " align=\"center\" colspan=\"2\"><font face=\"Arial\" size=\"3\"><b> " + this.label + "</b></font></td>" |
||
44 | + "</tr>";
|
||
45 | } |
||
46 | } |
||
47 | |||
48 | private class DefaultRawElement implements RawElement { |
||
49 | |||
50 | protected String value; |
||
51 | |||
52 | @Override
|
||
53 | public RawElement value(String format, Object... args) { |
||
54 | if (args == null) { |
||
55 | this.value = format;
|
||
56 | } else {
|
||
57 | this.value = String.format(format, args); |
||
58 | } |
||
59 | return this; |
||
60 | } |
||
61 | |||
62 | @Override
|
||
63 | public RawElement value(Envelope env) {
|
||
64 | return asWKT(env);
|
||
65 | } |
||
66 | |||
67 | @Override
|
||
68 | public RawElement value(Geometry geom) {
|
||
69 | return asWKT(geom);
|
||
70 | } |
||
71 | |||
72 | @Override
|
||
73 | public RawElement value(IProjection proj) {
|
||
74 | if( proj == null ) { |
||
75 | return value(""); |
||
76 | } |
||
77 | return value(proj.getAbrev());
|
||
78 | } |
||
79 | |||
80 | @Override
|
||
81 | public RawElement asWKT(IProjection proj) {
|
||
82 | if( proj == null ) { |
||
83 | return value(""); |
||
84 | } |
||
85 | String s = proj.export(ICRSFactory.FORMAT_WKT);
|
||
86 | if (s == null) { |
||
87 | s = proj.export(ICRSFactory.FORMAT_WKT_ESRI); |
||
88 | } |
||
89 | if (s == null) { |
||
90 | s = proj.export(ICRSFactory.FORMAT_PROJ4); |
||
91 | } |
||
92 | if (s == null) { |
||
93 | s = proj.getAbrev(); |
||
94 | } |
||
95 | 43152 | fdiaz | if (s != null) { |
96 | s = s.replaceAll("\\[", "[\n "); |
||
97 | s = s.replaceAll("]", "\n]"); |
||
98 | } |
||
99 | 43141 | jjdelcerro | return value(s);
|
100 | } |
||
101 | |||
102 | @Override
|
||
103 | public RawElement asWKT(Envelope env) {
|
||
104 | if( env == null ) { |
||
105 | return value(""); |
||
106 | } |
||
107 | return asWKT(env.getGeometry());
|
||
108 | } |
||
109 | |||
110 | @Override
|
||
111 | public RawElement asWKT(Geometry geom) {
|
||
112 | String s = ""; |
||
113 | try {
|
||
114 | s = geom.convertToWKT(); |
||
115 | } catch (Exception ex) { |
||
116 | } |
||
117 | return value(s);
|
||
118 | } |
||
119 | |||
120 | @Override
|
||
121 | public String build() { |
||
122 | String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2; |
||
123 | String content = "<tr valign=\"top\">\n"; |
||
124 | 43152 | fdiaz | content += "<td bgcolor=" + color + "align=\"left\" colspan=\"2\"><font face=\"Arial\" size=\"3\"><div>" + value.replace("\\n", "<br>\n") + "</div></font></td>\n"; |
125 | 43141 | jjdelcerro | content += "</tr>\n";
|
126 | return content;
|
||
127 | } |
||
128 | } |
||
129 | |||
130 | private class DefaultTextElement extends DefaultRawElement implements TextElement { |
||
131 | |||
132 | @Override
|
||
133 | public TextElement value(String format, Object... args) { |
||
134 | if (args == null) { |
||
135 | this.value = StringEscapeUtils.escapeHtml3(format);
|
||
136 | } else {
|
||
137 | this.value = StringEscapeUtils.escapeHtml3(String.format(format, args)); |
||
138 | } |
||
139 | return this; |
||
140 | } |
||
141 | |||
142 | @Override
|
||
143 | public TextElement value(IProjection proj) {
|
||
144 | return (TextElement) super.value(proj); |
||
145 | } |
||
146 | |||
147 | @Override
|
||
148 | public TextElement value(Envelope env) {
|
||
149 | return (TextElement) super.value(env); |
||
150 | } |
||
151 | |||
152 | @Override
|
||
153 | public TextElement value(Geometry geom) {
|
||
154 | return (TextElement) super.value(geom); |
||
155 | } |
||
156 | |||
157 | @Override
|
||
158 | public TextElement asWKT(IProjection proj) {
|
||
159 | return (TextElement) super.asWKT(proj); |
||
160 | } |
||
161 | |||
162 | @Override
|
||
163 | public TextElement asWKT(Envelope env) {
|
||
164 | return (TextElement) super.asWKT(env); |
||
165 | } |
||
166 | |||
167 | @Override
|
||
168 | public TextElement asWKT(Geometry geom) {
|
||
169 | return (TextElement) super.asWKT(geom); |
||
170 | } |
||
171 | |||
172 | @Override
|
||
173 | public String build() { |
||
174 | String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2; |
||
175 | String content = "<tr valign=\"top\">\n"; |
||
176 | 43152 | fdiaz | content += "<td bgcolor=" + color + "align=\"left\" colspan=\"2\"><font face=\"Arial\" size=\"3\">" + value.replace("\n", "<br>\n") + "</font></td>\n"; |
177 | 43141 | jjdelcerro | content += "</tr>\n";
|
178 | return content;
|
||
179 | } |
||
180 | } |
||
181 | |||
182 | private class DefaultPropertyElement extends DefaultTextElement implements PropertyElement { |
||
183 | |||
184 | private String label; |
||
185 | private boolean monospace = false; |
||
186 | |||
187 | @Override
|
||
188 | public DefaultPropertyElement label(String label) { |
||
189 | this.label = StringEscapeUtils.escapeHtml3(label);
|
||
190 | return this; |
||
191 | } |
||
192 | |||
193 | @Override
|
||
194 | public PropertyElement labelkey(String labelkey) { |
||
195 | return label(ToolsLocator.getI18nManager().getTranslation(labelkey));
|
||
196 | } |
||
197 | |||
198 | @Override
|
||
199 | public PropertyElement value(IProjection proj) {
|
||
200 | if (this.label == null) { |
||
201 | this.labelkey("_CRS"); |
||
202 | } |
||
203 | if( proj == null ) { |
||
204 | return (PropertyElement) value(""); |
||
205 | } |
||
206 | return (PropertyElement) value(proj.getAbrev());
|
||
207 | } |
||
208 | |||
209 | @Override
|
||
210 | public String build() { |
||
211 | String color = ((propertyCount++ % 2) == 0) ? backgroundColorPropertyValue1 : backgroundColorPropertyValue2; |
||
212 | String content = "<tr valign=\"top\">\n"; |
||
213 | if (!StringUtils.isEmpty(label)) {
|
||
214 | content += "<td nowrap bgcolor=" + backgroundColorPropertyLabel + "align=\"right\" width=\"140\"><font face=\"Arial\" size=\"3\">" + label + ": </font></td>\n"; |
||
215 | } |
||
216 | if( this.monospace ) { |
||
217 | 43152 | fdiaz | content += "<td bgcolor=" + color + "align=\"left\"><font face=\"Monospaced\" size=\"3\">" + value.replace("\\n", "<br>\n") + "</font></td>"; |
218 | 43141 | jjdelcerro | } else {
|
219 | 43152 | fdiaz | content += "<td bgcolor=" + color + "align=\"left\"><font face=\"Arial\" size=\"3\">" + value.replace("\\n", "<br>\n") + "</font></td>"; |
220 | 43141 | jjdelcerro | } |
221 | content += "</tr>\n";
|
||
222 | return content;
|
||
223 | } |
||
224 | |||
225 | @Override
|
||
226 | public PropertyElement value(String format, Object... args) { |
||
227 | return (PropertyElement) super.value(format, args); |
||
228 | } |
||
229 | |||
230 | @Override
|
||
231 | public PropertyElement value(Envelope env) {
|
||
232 | return (PropertyElement) super.value(env); |
||
233 | } |
||
234 | |||
235 | @Override
|
||
236 | public PropertyElement value(Geometry geom) {
|
||
237 | return (PropertyElement) super.value(geom); |
||
238 | } |
||
239 | |||
240 | @Override
|
||
241 | public PropertyElement asWKT(IProjection proj) {
|
||
242 | return (PropertyElement) super.asWKT(proj); |
||
243 | } |
||
244 | |||
245 | @Override
|
||
246 | public PropertyElement asWKT(Envelope env) {
|
||
247 | return (PropertyElement) super.asWKT(env); |
||
248 | } |
||
249 | |||
250 | @Override
|
||
251 | public PropertyElement asWKT(Geometry geom) {
|
||
252 | return (PropertyElement) super.asWKT(geom); |
||
253 | } |
||
254 | |||
255 | @Override
|
||
256 | public PropertyElement monospace() {
|
||
257 | this.monospace = true; |
||
258 | return this; |
||
259 | } |
||
260 | } |
||
261 | |||
262 | private class DefaultEnvelopeElement implements EnvelopeElement { |
||
263 | |||
264 | private Envelope value;
|
||
265 | |||
266 | @Override
|
||
267 | public DefaultEnvelopeElement value(Envelope value) {
|
||
268 | this.value = value;
|
||
269 | return this; |
||
270 | } |
||
271 | |||
272 | @Override
|
||
273 | public String build() { |
||
274 | 43152 | fdiaz | //FIXME:
|
275 | |||
276 | 43141 | jjdelcerro | PropertyElement p1 = new DefaultPropertyElement();
|
277 | p1.labelkey("ul");
|
||
278 | p1.value("%+f, %+f", value.getUpperCorner().getX(), value.getUpperCorner().getY());
|
||
279 | p1.monospace(); |
||
280 | |||
281 | PropertyElement p2 = new DefaultPropertyElement();
|
||
282 | p2.labelkey("lr");
|
||
283 | p2.value("%+f, %+f", value.getLowerCorner().getX(), value.getLowerCorner().getY());
|
||
284 | p2.monospace(); |
||
285 | |||
286 | PropertyElement p3 = new DefaultPropertyElement();
|
||
287 | p3.labelkey("ur");
|
||
288 | p3.value("%+f, %+f", value.getUpperCorner().getX(), value.getLowerCorner().getY());
|
||
289 | p3.monospace(); |
||
290 | |||
291 | PropertyElement p4 = new DefaultPropertyElement();
|
||
292 | p4.labelkey("ll");
|
||
293 | p4.value("%+f, %+f", value.getUpperCorner().getX(), value.getLowerCorner().getY());
|
||
294 | p4.monospace(); |
||
295 | 43152 | fdiaz | |
296 | 43141 | jjdelcerro | return p1.build() + p2.build() + p3.build() + p4.build();
|
297 | } |
||
298 | |||
299 | } |
||
300 | |||
301 | public DefaultLayerInformationBuilder() {
|
||
302 | this.elements = new ArrayList<>(); |
||
303 | } |
||
304 | |||
305 | @Override
|
||
306 | public DefaultLayerInformationBuilder backgroundColor(String color) { |
||
307 | this.backgroundColor = color;
|
||
308 | return this; |
||
309 | } |
||
310 | |||
311 | @Override
|
||
312 | public DefaultLayerInformationBuilder backgroundColorTitle(String color) { |
||
313 | this.backgroundColorTitle = color;
|
||
314 | return this; |
||
315 | } |
||
316 | |||
317 | @Override
|
||
318 | public DefaultLayerInformationBuilder backgroundColorPropertyLabel(String color) { |
||
319 | this.backgroundColorPropertyLabel = color;
|
||
320 | return this; |
||
321 | } |
||
322 | |||
323 | @Override
|
||
324 | public DefaultLayerInformationBuilder backgroundColorPropertyValue1(String color) { |
||
325 | this.backgroundColorPropertyValue1 = color;
|
||
326 | return this; |
||
327 | } |
||
328 | |||
329 | @Override
|
||
330 | public DefaultLayerInformationBuilder backgroundColorPropertyValue2(String color) { |
||
331 | this.backgroundColorPropertyValue2 = color;
|
||
332 | return this; |
||
333 | } |
||
334 | |||
335 | @Override
|
||
336 | public TitleElement title() {
|
||
337 | TitleElement element = new DefaultTitleElement();
|
||
338 | this.elements.add(element);
|
||
339 | return element;
|
||
340 | } |
||
341 | |||
342 | @Override
|
||
343 | public PropertyElement property() {
|
||
344 | PropertyElement element = new DefaultPropertyElement();
|
||
345 | this.elements.add(element);
|
||
346 | return element;
|
||
347 | } |
||
348 | |||
349 | @Override
|
||
350 | public TextElement text() {
|
||
351 | TextElement element = new DefaultTextElement();
|
||
352 | this.elements.add(element);
|
||
353 | return element;
|
||
354 | } |
||
355 | |||
356 | @Override
|
||
357 | public EnvelopeElement envelope() {
|
||
358 | EnvelopeElement element = new DefaultEnvelopeElement();
|
||
359 | this.elements.add(element);
|
||
360 | return element;
|
||
361 | } |
||
362 | |||
363 | @Override
|
||
364 | public RawElement raw() {
|
||
365 | RawElement element = new DefaultRawElement();
|
||
366 | this.elements.add(element);
|
||
367 | return element;
|
||
368 | } |
||
369 | |||
370 | @Override
|
||
371 | public String build() { |
||
372 | StringBuilder html = new StringBuilder(); |
||
373 | html.append("<html>\n");
|
||
374 | html.append("<body bgcolor=").append(backgroundColor).append(" topmargin=\"0\" marginheight=\"0\">\n"); |
||
375 | html.append("<table cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">");
|
||
376 | boolean first = true; |
||
377 | for (Element element : elements) { |
||
378 | if( element instanceof TitleElement ) { |
||
379 | if( first ) {
|
||
380 | first = false;
|
||
381 | } else {
|
||
382 | html.append("<tr>\n<td><br></td>\n<td></td></tr>\n");
|
||
383 | } |
||
384 | } |
||
385 | html.append(element.build()); |
||
386 | } |
||
387 | html.append("</table>");
|
||
388 | html.append("</body>");
|
||
389 | html.append("</html>");
|
||
390 | return html.toString();
|
||
391 | } |
||
392 | |||
393 | @Override
|
||
394 | public String toString() { |
||
395 | return this.build(); |
||
396 | } |
||
397 | } |