1 package org.argeo.people.util;
2
3 import javax.jcr.Node;
4 import javax.jcr.NodeIterator;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Session;
7 import javax.jcr.query.Query;
8 import javax.jcr.query.QueryManager;
9 import javax.jcr.query.QueryResult;
10 import javax.jcr.query.qom.Constraint;
11 import javax.jcr.query.qom.DynamicOperand;
12 import javax.jcr.query.qom.QueryObjectModel;
13 import javax.jcr.query.qom.QueryObjectModelFactory;
14 import javax.jcr.query.qom.Selector;
15 import javax.jcr.query.qom.StaticOperand;
16
17 import org.argeo.connect.util.XPathUtils;
18 import org.argeo.people.PeopleException;
19 import org.argeo.people.PeopleNames;
20 import org.argeo.people.PeopleTypes;
21
22
23
24
25
26 public class OrgJcrUtils implements PeopleNames {
27
28
29 public static NodeIterator getPaymentAccounts(Node entity) {
30 try {
31 if (entity.hasNode(PEOPLE_PAYMENT_ACCOUNTS))
32 return entity.getNode(PEOPLE_PAYMENT_ACCOUNTS).getNodes();
33 else
34 return null;
35 } catch (RepositoryException e) {
36 throw new PeopleException("Error while getting " + "payment accounts for node " + entity, e);
37 }
38 }
39
40 public static Node getPrimaryPaymentAccount(Node entity) {
41 NodeIterator nit = getPaymentAccounts(entity);
42 if (nit == null || nit.getSize() == 0)
43 return null;
44 else if (nit.getSize() > 1)
45 throw new PeopleException("Unable to get primary payment accounts for " + entity
46 + ". Multiple accounts is not implemented and " + nit.getSize() + " accounts has been found.");
47 else
48 return nit.nextNode();
49 }
50
51 public static Node createPaymentAccount(Node entity, String nodeType, String name) {
52 try {
53 Node accounts = null;
54 if (entity.hasNode(PEOPLE_PAYMENT_ACCOUNTS))
55 accounts = entity.getNode(PEOPLE_PAYMENT_ACCOUNTS);
56 else
57 accounts = entity.addNode(PEOPLE_PAYMENT_ACCOUNTS);
58 return accounts.addNode(name, nodeType);
59 } catch (RepositoryException e) {
60 throw new PeopleException("Error while creating new payment account for node " + entity, e);
61 }
62 }
63
64
65
66
67
68
69 public static Node getOrgWithWebSite(Session session, String website) throws RepositoryException {
70 String xpathQueryStr = "//element(*, " + PeopleTypes.PEOPLE_ORG + ")";
71 xpathQueryStr += "[" + XPathUtils.getPropertyEquals(PeopleNames.PEOPLE_PURL, website) + "]";
72 Query xpathQuery = XPathUtils.createQuery(session, xpathQueryStr);
73 NodeIterator ni = xpathQuery.execute().getNodes();
74 Node orga = null;
75 if (ni.hasNext())
76 orga = ni.nextNode();
77 return orga;
78 }
79
80
81
82
83
84 public static Node getOrgByName(Session session, String name) throws RepositoryException {
85 QueryManager queryManager = session.getWorkspace().getQueryManager();
86 QueryObjectModelFactory factory = queryManager.getQOMFactory();
87 Selector source = factory.selector(PeopleTypes.PEOPLE_ORG, PeopleTypes.PEOPLE_ORG);
88
89 DynamicOperand dynOp = factory.propertyValue(source.getSelectorName(), PeopleNames.PEOPLE_LEGAL_NAME);
90 StaticOperand statOp = factory.literal(session.getValueFactory().createValue(name));
91 Constraint defaultC = factory.comparison(dynOp, QueryObjectModelFactory.JCR_OPERATOR_EQUAL_TO, statOp);
92
93 QueryObjectModel query = factory.createQuery(source, defaultC, null, null);
94 QueryResult result = query.execute();
95 NodeIterator ni = result.getNodes();
96
97 long resultNb = ni.getSize();
98
99 if (resultNb == 0)
100 return null;
101 else if (resultNb == 1)
102 return ni.nextNode();
103 else
104 throw new PeopleException("More than 1 org with name " + name + " has been found.");
105 }
106 }