]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - jcr/org.argeo.cms.jcr/src/org/argeo/jcr/JcrxApi.java
3 import java
.util
.ArrayList
;
4 import java
.util
.Arrays
;
8 import javax
.jcr
.Property
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.jcr
.Value
;
12 /** Uilities around the JCR extensions. */
13 public class JcrxApi
{
14 public final static String MD5
= "MD5";
15 public final static String SHA1
= "SHA1";
16 public final static String SHA256
= "SHA-256";
17 public final static String SHA512
= "SHA-512";
19 public final static String EMPTY_MD5
= "d41d8cd98f00b204e9800998ecf8427e";
20 public final static String EMPTY_SHA1
= "da39a3ee5e6b4b0d3255bfef95601890afd80709";
21 public final static String EMPTY_SHA256
= "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
22 public final static String EMPTY_SHA512
= "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e";
24 public final static int LENGTH_MD5
= EMPTY_MD5
.length();
25 public final static int LENGTH_SHA1
= EMPTY_SHA1
.length();
26 public final static int LENGTH_SHA256
= EMPTY_SHA256
.length();
27 public final static int LENGTH_SHA512
= EMPTY_SHA512
.length();
33 * Get the XML text of this child node.
35 public static String
getXmlValue(Node node
, String name
) {
37 if (!node
.hasNode(name
))
39 Node child
= node
.getNode(name
);
40 return getXmlValue(child
);
41 } catch (RepositoryException e
) {
42 throw new IllegalStateException("Cannot get " + name
+ " as XML text", e
);
47 * Get the XML text of this node.
49 public static String
getXmlValue(Node node
) {
51 if (!node
.hasNode(Jcr
.JCR_XMLTEXT
))
53 Node xmlText
= node
.getNode(Jcr
.JCR_XMLTEXT
);
54 if (!xmlText
.hasProperty(Jcr
.JCR_XMLCHARACTERS
))
55 throw new IllegalArgumentException(
56 "Node " + xmlText
+ " has no " + Jcr
.JCR_XMLCHARACTERS
+ " property");
57 return xmlText
.getProperty(Jcr
.JCR_XMLCHARACTERS
).getString();
58 } catch (RepositoryException e
) {
59 throw new IllegalStateException("Cannot get " + node
+ " as XML text", e
);
64 * Set as a subnode which will be exported as an XML element.
66 public static void setXmlValue(Node node
, String name
, String value
) {
68 if (node
.hasNode(name
)) {
69 Node child
= node
.getNode(name
);
70 setXmlValue(node
, child
, value
);
72 node
.addNode(name
, JcrxType
.JCRX_XMLVALUE
).addNode(Jcr
.JCR_XMLTEXT
, JcrxType
.JCRX_XMLTEXT
)
73 .setProperty(Jcr
.JCR_XMLCHARACTERS
, value
);
74 } catch (RepositoryException e
) {
75 throw new JcrException("Cannot set " + name
+ " as XML text", e
);
79 public static void setXmlValue(Node node
, Node child
, String value
) {
81 if (!child
.hasNode(Jcr
.JCR_XMLTEXT
))
82 child
.addNode(Jcr
.JCR_XMLTEXT
, JcrxType
.JCRX_XMLTEXT
);
83 child
.getNode(Jcr
.JCR_XMLTEXT
).setProperty(Jcr
.JCR_XMLCHARACTERS
, value
);
84 } catch (RepositoryException e
) {
85 throw new JcrException("Cannot set " + child
+ " as XML text", e
);
90 * Add a checksum replacing the one which was previously set with the same
93 public static void addChecksum(Node node
, String checksum
) {
95 if (!node
.hasProperty(JcrxName
.JCRX_SUM
)) {
96 node
.setProperty(JcrxName
.JCRX_SUM
, new String
[] { checksum
});
99 int stringLength
= checksum
.length();
100 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
101 List
<Value
> values
= Arrays
.asList(property
.getValues());
102 Integer indexToRemove
= null;
103 values
: for (int i
= 0; i
< values
.size(); i
++) {
104 Value value
= values
.get(i
);
105 if (value
.getString().length() == stringLength
) {
110 if (indexToRemove
!= null)
111 values
.set(indexToRemove
, node
.getSession().getValueFactory().createValue(checksum
));
113 values
.add(0, node
.getSession().getValueFactory().createValue(checksum
));
114 property
.setValue(values
.toArray(new Value
[values
.size()]));
116 } catch (RepositoryException e
) {
117 throw new JcrException("Cannot set checksum on " + node
, e
);
121 /** Replace all checksums. */
122 public static void setChecksums(Node node
, List
<String
> checksums
) {
124 node
.setProperty(JcrxName
.JCRX_SUM
, checksums
.toArray(new String
[checksums
.size()]));
125 } catch (RepositoryException e
) {
126 throw new JcrException("Cannot set checksums on " + node
, e
);
130 /** Replace all checksums. */
131 public static List
<String
> getChecksums(Node node
) {
133 List
<String
> res
= new ArrayList
<>();
134 if (!node
.hasProperty(JcrxName
.JCRX_SUM
))
136 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
137 for (Value value
: property
.getValues()) {
138 res
.add(value
.getString());
141 } catch (RepositoryException e
) {
142 throw new JcrException("Cannot get checksums from " + node
, e
);
146 // /** Replace all checksums with this single one. */
147 // public static void setChecksum(Node node, String checksum) {
148 // setChecksums(node, Collections.singletonList(checksum));
151 /** Retrieves the checksum with this algorithm, or null if not found. */
152 public static String
getChecksum(Node node
, String algorithm
) {
156 stringLength
= LENGTH_MD5
;
159 stringLength
= LENGTH_SHA1
;
162 stringLength
= LENGTH_SHA256
;
165 stringLength
= LENGTH_SHA512
;
168 throw new IllegalArgumentException("Unkown algorithm " + algorithm
);
170 return getChecksum(node
, stringLength
);
173 /** Retrieves the checksum with this string length, or null if not found. */
174 public static String
getChecksum(Node node
, int stringLength
) {
176 if (!node
.hasProperty(JcrxName
.JCRX_SUM
))
178 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
179 for (Value value
: property
.getValues()) {
180 String str
= value
.getString();
181 if (str
.length() == stringLength
)
185 } catch (RepositoryException e
) {
186 throw new IllegalStateException("Cannot get checksum for " + node
, e
);