]> git.argeo.org Git - lgpl/argeo-commons.git/blob - gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/jts/jcr/JtsJcrUtils.java
GIS does not expose perspectives and views
[lgpl/argeo-commons.git] / gis / runtime / org.argeo.gis.geotools / src / main / java / org / argeo / jts / jcr / JtsJcrUtils.java
1 package org.argeo.jts.jcr;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5
6 import javax.jcr.Binary;
7 import javax.jcr.Property;
8 import javax.jcr.Session;
9
10 import org.apache.commons.io.IOUtils;
11 import org.argeo.ArgeoException;
12 import org.argeo.jcr.JcrUtils;
13
14 import com.vividsolutions.jts.geom.Geometry;
15 import com.vividsolutions.jts.geom.GeometryFactory;
16 import com.vividsolutions.jts.io.InputStreamInStream;
17 import com.vividsolutions.jts.io.WKBReader;
18 import com.vividsolutions.jts.io.WKBWriter;
19
20 /** Utilities depending only from the JTS library. */
21 public class JtsJcrUtils {
22 private static GeometryFactory geometryFactory = new GeometryFactory();
23 private static ThreadLocal<WKBWriter> wkbWriters = new ThreadLocal<WKBWriter>();
24 private static ThreadLocal<WKBReader> wkbReaders = new ThreadLocal<WKBReader>() {
25 protected WKBReader initialValue() {
26 return new WKBReader(getGeometryFactory());
27 }
28 };
29
30 public static GeometryFactory getGeometryFactory() {
31 return geometryFactory;
32 }
33
34 public final static Geometry readWkb(Property property) {
35 Binary wkbBinary = null;
36 InputStream in = null;
37 try {
38 wkbBinary = property.getBinary();
39 in = wkbBinary.getStream();
40 WKBReader wkbReader = wkbReaders.get();
41 return wkbReader.read(new InputStreamInStream(in));
42 } catch (Exception e) {
43 throw new ArgeoException("Cannot read WKB from " + property, e);
44 } finally {
45 IOUtils.closeQuietly(in);
46 JcrUtils.closeQuietly(wkbBinary);
47 }
48 }
49
50 /** The returned binary should be disposed by the caller */
51 public final static Binary writeWkb(Session session, Geometry geometry) {
52 Binary wkbBinary = null;
53 InputStream in = null;
54 try {
55 WKBWriter wkbWriter = wkbWriters.get();
56 byte[] arr = wkbWriter.write(geometry);
57 in = new ByteArrayInputStream(arr);
58 wkbBinary = session.getValueFactory().createBinary(in);
59 return wkbBinary;
60 } catch (Exception e) {
61 throw new ArgeoException("Cannot write WKB", e);
62 } finally {
63 IOUtils.closeQuietly(in);
64 }
65 }
66 }