]> git.argeo.org Git - lgpl/argeo-commons.git/blob - server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/tabular/JcrTabularWriter.java
Remove useless debug
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jcr / src / main / java / org / argeo / jcr / tabular / JcrTabularWriter.java
1 package org.argeo.jcr.tabular;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.ByteArrayOutputStream;
5 import java.io.InputStream;
6 import java.util.List;
7
8 import javax.jcr.Binary;
9 import javax.jcr.Node;
10 import javax.jcr.Property;
11 import javax.jcr.PropertyType;
12 import javax.jcr.RepositoryException;
13
14 import org.apache.commons.io.IOUtils;
15 import org.argeo.ArgeoException;
16 import org.argeo.jcr.ArgeoTypes;
17 import org.argeo.jcr.JcrUtils;
18 import org.argeo.util.CsvWriter;
19 import org.argeo.util.tabular.TabularColumn;
20 import org.argeo.util.tabular.TabularWriter;
21
22 /** Write / reference tabular content in a JCR repository. */
23 public class JcrTabularWriter implements TabularWriter {
24 private Node contentNode;
25 private ByteArrayOutputStream out;
26 private CsvWriter csvWriter;
27
28 /** Creates a table node */
29 public JcrTabularWriter(Node tableNode, List<TabularColumn> columns,
30 String contentNodeType) {
31 try {
32 for (TabularColumn column : columns) {
33 Node columnNode = tableNode.addNode(column.getName(),
34 ArgeoTypes.ARGEO_COLUMN);
35 columnNode.setProperty(Property.JCR_REQUIRED_TYPE,
36 PropertyType.nameFromValue(column.getType()));
37 }
38 contentNode = tableNode.addNode(Property.JCR_CONTENT,
39 contentNodeType);
40 if (contentNodeType.equals(ArgeoTypes.ARGEO_CSV)) {
41 contentNode.setProperty(Property.JCR_MIMETYPE, "text/csv");
42 contentNode.setProperty(Property.JCR_ENCODING, "UTF-8");
43 out = new ByteArrayOutputStream();
44 csvWriter = new CsvWriter(out);
45 }
46 } catch (RepositoryException e) {
47 throw new ArgeoException("Cannot create table node " + tableNode, e);
48 }
49 }
50
51 public void appendRow(List<?> row) {
52 csvWriter.writeLine(row);
53 }
54
55 public void close() {
56 Binary binary = null;
57 InputStream in = null;
58 try {
59 // TODO parallelize with pipes and writing from another thread
60 in = new ByteArrayInputStream(out.toByteArray());
61 binary = contentNode.getSession().getValueFactory()
62 .createBinary(in);
63 contentNode.setProperty(Property.JCR_DATA, binary);
64 } catch (RepositoryException e) {
65 throw new ArgeoException("Cannot store data in " + contentNode, e);
66 } finally {
67 IOUtils.closeQuietly(in);
68 JcrUtils.closeQuietly(binary);
69 }
70 }
71 }