Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.geometry / org.gvsig.fmap.geometry.jts / src / main / java / org / gvsig / fmap / geom / jts / DefaultGeometryInformationBuilder.java @ 43170

History | View | Annotate | Download (7.93 KB)

1
package org.gvsig.fmap.geom.jts;
2

    
3
import org.apache.commons.lang3.StringEscapeUtils;
4
import org.cresques.cts.ICRSFactory;
5
import org.cresques.cts.IProjection;
6

    
7
import org.gvsig.fmap.geom.Geometry;
8
import org.gvsig.fmap.geom.Geometry.DIMENSIONS;
9
import org.gvsig.fmap.geom.GeometryInformationBuilder;
10
import org.gvsig.fmap.geom.GeometryInformationBuilder.EnvelopeElement;
11
import org.gvsig.fmap.geom.GeometryInformationBuilder.GeometryPropertyElement;
12
import org.gvsig.fmap.geom.GeometryInformationBuilder.GeometryRawElement;
13
import org.gvsig.fmap.geom.GeometryInformationBuilder.GeometryTextElement;
14
import org.gvsig.fmap.geom.primitive.Envelope;
15
import org.gvsig.tools.ToolsLocator;
16
import org.gvsig.tools.util.InformationBuilder.PropertyElement;
17
import org.gvsig.tools.util.InformationBuilder.TextElement;
18
import org.gvsig.tools.util.impl.DefaultInformationBuilder;
19
import org.gvsig.tools.util.impl.DefaultInformationBuilder.DefaultPropertyElement;
20

    
21
/**
22
 * @author fdiaz
23
 *
24
 */
25
public class DefaultGeometryInformationBuilder extends DefaultInformationBuilder implements GeometryInformationBuilder {
26

    
27
    protected class DefaultGeometryRawElement extends DefaultRawElement implements GeometryRawElement {
28

    
29
        @Override
30
        public GeometryRawElement value(Envelope env) {
31
            return asWKT(env);
32
        }
33

    
34
        @Override
35
        public GeometryRawElement value(Geometry geom) {
36
            return asWKT(geom);
37
        }
38

    
39
        @Override
40
        public GeometryRawElement value(IProjection proj) {
41
            if( proj == null ) {
42
                return (GeometryRawElement) value("");
43
            }
44
            return (GeometryRawElement) value(proj.getAbrev());
45
        }
46

    
47
        @Override
48
        public GeometryRawElement asWKT(IProjection proj) {
49
            if( proj == null ) {
50
                return (GeometryRawElement) value("");
51
            }
52
            String s = proj.export(ICRSFactory.FORMAT_WKT);
53
            if (s == null) {
54
                s = proj.export(ICRSFactory.FORMAT_WKT_ESRI);
55
            }
56
            if (s == null) {
57
                s = proj.export(ICRSFactory.FORMAT_PROJ4);
58
            }
59
            if (s == null) {
60
                s = proj.getAbrev();
61
            }
62
            if (s != null) {
63
                s = s.replaceAll("\\[", "[\n  ");
64
                s = s.replaceAll("]", "\n]");
65
            }
66
            return (GeometryRawElement) value(s);
67
        }
68

    
69
        @Override
70
        public GeometryRawElement asWKT(Envelope env) {
71
            if( env == null ) {
72
                return (GeometryRawElement) value("");
73
            }
74
            return asWKT(env.getGeometry());
75
        }
76

    
77
        @Override
78
        public GeometryRawElement asWKT(Geometry geom) {
79
            String s = "";
80
            try {
81
                s = geom.convertToWKT();
82
            } catch (Exception ex) {
83
            }
84
            return (GeometryRawElement) value(s);
85
        }
86

    
87
    }
88

    
89
    protected class DefaultGeometryTextElement extends DefaultGeometryRawElement implements GeometryTextElement {
90

    
91
        public TextElement value(String format, Object... args) {
92
            if (args == null) {
93
                this.value = StringEscapeUtils.escapeHtml3(format);
94
            } else {
95
                this.value = StringEscapeUtils.escapeHtml3(String.format(format, args));
96
            }
97
            return this;
98
        }
99

    
100
        @Override
101
        public GeometryTextElement value(IProjection proj) {
102
            return (GeometryTextElement) super.value(proj);
103
        }
104

    
105
        @Override
106
        public GeometryTextElement value(Envelope env) {
107
            return (GeometryTextElement) super.value(env);
108
        }
109

    
110
        @Override
111
        public GeometryTextElement value(Geometry geom) {
112
            return (GeometryTextElement) super.value(geom);
113
        }
114

    
115
        @Override
116
        public GeometryTextElement asWKT(IProjection proj) {
117
            return (GeometryTextElement) super.asWKT(proj);
118
        }
119

    
120
        @Override
121
        public GeometryTextElement asWKT(Envelope env) {
122
            return (GeometryTextElement) super.asWKT(env);
123
        }
124

    
125
        @Override
126
        public GeometryTextElement asWKT(Geometry geom) {
127
            return (GeometryTextElement) super.asWKT(geom);
128
        }
129

    
130
    }
131

    
132
    private class DefaultGeometryPropertyElement extends DefaultGeometryTextElement implements GeometryPropertyElement {
133

    
134
        @Override
135
        public DefaultPropertyElement label(String label) {
136
            this.label = StringEscapeUtils.escapeHtml3(label);
137
            return this;
138
        }
139

    
140
        @Override
141
        public PropertyElement labelkey(String labelkey) {
142
            return label(ToolsLocator.getI18nManager().getTranslation(labelkey));
143
        }
144

    
145
        @Override
146
        public GeometryPropertyElement value(IProjection proj) {
147
            if (this.label == null) {
148
                this.labelkey("_CRS");
149
            }
150
            if( proj == null ) {
151
                return (GeometryPropertyElement) value("");
152
            }
153
            return (GeometryPropertyElement) value(proj.getAbrev());
154
        }
155

    
156
        @Override
157
        public GeometryPropertyElement value(Envelope env) {
158
            return (GeometryPropertyElement) super.value(env);
159
        }
160

    
161
        @Override
162
        public GeometryPropertyElement value(Geometry geom) {
163
            return (GeometryPropertyElement) super.value(geom);
164
        }
165

    
166
        @Override
167
        public GeometryPropertyElement asWKT(IProjection proj) {
168
            return (GeometryPropertyElement) super.asWKT(proj);
169
        }
170

    
171
        @Override
172
        public GeometryPropertyElement asWKT(Envelope env) {
173
            return (GeometryPropertyElement) super.asWKT(env);
174
        }
175

    
176
        @Override
177
        public GeometryPropertyElement asWKT(Geometry geom) {
178
            return (GeometryPropertyElement) super.asWKT(geom);
179
        }
180
    }
181

    
182
    private class DefaultEnvelopeElement implements EnvelopeElement {
183

    
184
        private Envelope value;
185

    
186
        @Override
187
        public DefaultEnvelopeElement value(Envelope value) {
188
            this.value = value;
189
            return this;
190
        }
191

    
192
        @Override
193
        public String build() {
194
            //FIXME:
195

    
196
            PropertyElement p1 = new DefaultGeometryPropertyElement();
197
            p1.labelkey("_upper_left_corner");
198
            p1.value("%+f, %+f", value.getMinimum(DIMENSIONS.X), value.getMaximum(DIMENSIONS.Y));
199
            p1.monospace();
200

    
201
            PropertyElement p2 = new DefaultGeometryPropertyElement();
202
            p2.labelkey("_upper_right_corner");
203
            p2.value("%+f, %+f", value.getMaximum(DIMENSIONS.X), value.getMaximum(DIMENSIONS.Y));
204
            p2.monospace();
205

    
206
            PropertyElement p3 = new DefaultGeometryPropertyElement();
207
            p3.labelkey("_lower_right_corner");
208
            p3.value("%+f, %+f", value.getMaximum(DIMENSIONS.X), value.getMinimum(DIMENSIONS.Y));
209
            p3.monospace();
210

    
211
            PropertyElement p4 = new DefaultGeometryPropertyElement();
212
            p4.labelkey("_lower_left_corner");
213
            p4.value("%+f, %+f", value.getMinimum(DIMENSIONS.X), value.getMinimum(DIMENSIONS.Y));
214
            p4.monospace();
215

    
216
            return p1.build() + p2.build() + p3.build() + p4.build();
217
        }
218

    
219
    }
220

    
221
    public DefaultGeometryInformationBuilder() {
222
        super();
223
    }
224

    
225
    @Override
226
    public GeometryPropertyElement property() {
227
        GeometryPropertyElement element = new DefaultGeometryPropertyElement();
228
        this.elements.add(element);
229
        return element;
230
    }
231

    
232
    @Override
233
    public GeometryTextElement text() {
234
        GeometryTextElement element = new DefaultGeometryTextElement();
235
        this.elements.add(element);
236
        return element;
237
    }
238

    
239
    @Override
240
    public EnvelopeElement envelope() {
241
        EnvelopeElement element = new DefaultEnvelopeElement();
242
        this.elements.add(element);
243
        return element;
244
    }
245

    
246
    @Override
247
    public GeometryRawElement raw() {
248
        GeometryRawElement element = new DefaultGeometryRawElement();
249
        this.elements.add(element);
250
        return element;
251
    }
252

    
253
}