Statistics
| Revision:

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 + ":&nbsp;</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
}