]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.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 * Set as a subnode which will be exported as an XML element.
35 public static String
getXmlValue(Node node
, String name
) {
37 if (!node
.hasNode(name
))
39 Node child
= node
.getNode(name
);
40 if (!child
.hasNode(Jcr
.JCR_XMLTEXT
))
42 Node xmlText
= child
.getNode(Jcr
.JCR_XMLTEXT
);
43 if (!xmlText
.hasProperty(Jcr
.JCR_XMLCHARACTERS
))
44 throw new IllegalArgumentException(
45 "Node " + xmlText
+ " has no " + Jcr
.JCR_XMLCHARACTERS
+ " property");
46 return xmlText
.getProperty(Jcr
.JCR_XMLCHARACTERS
).getString();
47 } catch (RepositoryException e
) {
48 throw new IllegalStateException("Cannot get " + name
+ " as XML text", e
);
53 * Set as a subnode which will be exported as an XML element.
55 public static void setXmlValue(Node node
, String name
, String value
) {
57 if (node
.hasNode(name
))
58 node
.getNode(name
).getNode(Jcr
.JCR_XMLTEXT
).setProperty(Jcr
.JCR_XMLCHARACTERS
, value
);
60 node
.addNode(name
, JcrxType
.JCRX_XMLVALUE
).addNode(Jcr
.JCR_XMLTEXT
, JcrxType
.JCRX_XMLTEXT
)
61 .setProperty(Jcr
.JCR_XMLCHARACTERS
, value
);
62 } catch (RepositoryException e
) {
63 throw new IllegalStateException("Cannot set " + name
+ " as XML text", e
);
68 * Add a checksum replacing the one which was previously set with the same
71 public static void addChecksum(Node node
, String checksum
) {
73 if (!node
.hasProperty(JcrxName
.JCRX_SUM
)) {
74 node
.setProperty(JcrxName
.JCRX_SUM
, new String
[] { checksum
});
77 int stringLength
= checksum
.length();
78 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
79 List
<Value
> values
= Arrays
.asList(property
.getValues());
80 Integer indexToRemove
= null;
81 values
: for (int i
= 0; i
< values
.size(); i
++) {
82 Value value
= values
.get(i
);
83 if (value
.getString().length() == stringLength
) {
88 if (indexToRemove
!= null)
89 values
.set(indexToRemove
, node
.getSession().getValueFactory().createValue(checksum
));
91 values
.add(0, node
.getSession().getValueFactory().createValue(checksum
));
92 property
.setValue(values
.toArray(new Value
[values
.size()]));
94 } catch (RepositoryException e
) {
95 throw new JcrException("Cannot set checksum on " + node
, e
);
99 /** Replace all checksums. */
100 public static void setChecksums(Node node
, List
<String
> checksums
) {
102 node
.setProperty(JcrxName
.JCRX_SUM
, checksums
.toArray(new String
[checksums
.size()]));
103 } catch (RepositoryException e
) {
104 throw new JcrException("Cannot set checksums on " + node
, e
);
108 /** Replace all checksums. */
109 public static List
<String
> getChecksums(Node node
) {
111 List
<String
> res
= new ArrayList
<>();
112 if (!node
.hasProperty(JcrxName
.JCRX_SUM
))
114 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
115 for (Value value
: property
.getValues()) {
116 res
.add(value
.getString());
119 } catch (RepositoryException e
) {
120 throw new JcrException("Cannot get checksums from " + node
, e
);
124 // /** Replace all checksums with this single one. */
125 // public static void setChecksum(Node node, String checksum) {
126 // setChecksums(node, Collections.singletonList(checksum));
129 /** Retrieves the checksum with this algorithm, or null if not found. */
130 public static String
getChecksum(Node node
, String algorithm
) {
134 stringLength
= LENGTH_MD5
;
137 stringLength
= LENGTH_SHA1
;
140 stringLength
= LENGTH_SHA256
;
143 stringLength
= LENGTH_SHA512
;
146 throw new IllegalArgumentException("Unkown algorithm " + algorithm
);
148 return getChecksum(node
, stringLength
);
151 /** Retrieves the checksum with this string length, or null if not found. */
152 public static String
getChecksum(Node node
, int stringLength
) {
154 if (!node
.hasProperty(JcrxName
.JCRX_SUM
))
156 Property property
= node
.getProperty(JcrxName
.JCRX_SUM
);
157 for (Value value
: property
.getValues()) {
158 String str
= value
.getString();
159 if (str
.length() == stringLength
)
163 } catch (RepositoryException e
) {
164 throw new IllegalStateException("Cannot get checksum for " + node
, e
);