]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultCollectionDaoJcr.java
Improve JCR
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / dao / TreeTestResultCollectionDaoJcr.java
index 6a9824dfb7cbdab0db64451b4fe057e6bf7213fc..6daf16641600bc89618e707c7b0d18057f328e35 100644 (file)
@@ -9,7 +9,10 @@ import java.util.TreeSet;
 \r
 import javax.jcr.Node;\r
 import javax.jcr.NodeIterator;\r
+import javax.jcr.RepositoryException;\r
+import javax.jcr.query.InvalidQueryException;\r
 import javax.jcr.query.Query;\r
+import javax.jcr.query.QueryManager;\r
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
@@ -26,7 +29,7 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
 \r
        // FIXME : we handle testResultCollection by adding a property called\r
        // "TestResultCollectionId "\r
-       final private String ttrColProp = "TestResultCollectionId";\r
+       final private String ttrColProp = "collectionId";\r
 \r
        private final static Log log = LogFactory\r
                        .getLog(TreeTestResultCollectionDaoJcr.class);\r
@@ -49,18 +52,11 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
        public TreeTestResultCollection getTestResultCollection(String id) {\r
                TreeTestResultCollection res = new TreeTestResultCollection();\r
                res.setId(id);\r
-\r
-               // String queryString = "//*[@" + ttrColProp + "='" + id + "']";\r
-               // Query query = queryManager.createQuery(queryString, Query.XPATH);\r
-               // log.debug("retrieving all nodes of a col - " + queryString);\r
-               int i = 0;\r
                NodeIterator ni = resultNodesInCollection(id);\r
                while (ni.hasNext()) {\r
-                       i++;\r
                        res.getResults().add(\r
                                        (TreeTestResult) nodeMapper.load(ni.nextNode()));\r
                }\r
-               // log.debug(i + " nodes found");\r
                return res;\r
        }\r
 \r
@@ -75,15 +71,12 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
        public void update(TreeTestResultCollection ttrCollection) {\r
                try {\r
                        log.debug("Update ");\r
-                       String queryString;\r
-                       Query query;\r
-                       Node curNode;\r
                        String colId = ttrCollection.getId();\r
                        // We add or update existing ones\r
                        for (TreeTestResult ttr : ttrCollection.getResults()) {\r
-                               queryString = "//*[@uuid='" + ttr.getUuid() + "']";\r
-                               query = queryManager.createQuery(queryString, Query.XPATH);\r
-                               curNode = JcrUtils.querySingleNode(query);\r
+                               String queryString = "//testresult[@uuid='" + ttr.getUuid()\r
+                                               + "']";\r
+                               Node curNode = singleNode(queryString, Query.XPATH);\r
                                if (curNode == null) {\r
                                        curNode = nodeMapper.save(getSession(), basePath(ttr), ttr);\r
                                        log.debug("New Node added");\r
@@ -97,14 +90,14 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
                                JcrUtils.debug(curNode.getSession().getRootNode());\r
                        }\r
                        // We remove those who are not part of the collection anymore\r
-                       queryString = "//*[@" + ttrColProp + "='" + colId + "']";\r
-                       query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       String queryString = "//*[@" + ttrColProp + "='" + colId + "']";\r
+                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
                        log.debug("Query :" + queryString);\r
                        NodeIterator ni = query.execute().getNodes();\r
                        int i = 0;\r
                        while (ni.hasNext()) {\r
                                log.debug("Node " + (++i));\r
-                               curNode = ni.nextNode();\r
+                               Node curNode = ni.nextNode();\r
                                String uuid = curNode.getProperty("uuid").getString();\r
                                boolean isPartOfTheSet = false;\r
                                for (TreeTestResult ttr : ttrCollection.getResults()) {\r
@@ -166,12 +159,10 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
                        String queryString;\r
                        Node curNode;\r
                        String colId = ttrc.getId();\r
-                       queryString = "//*[@uuid='" + resultUuid + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
-                       curNode = JcrUtils.querySingleNode(query);\r
+                       queryString = "//testresult[@uuid='" + resultUuid + "']";\r
+                       curNode = singleNode(queryString, Query.XPATH);\r
                        if (curNode == null) {\r
-                               throw new SlcException("Cannot add TreeTestResult of Id "\r
-                                               + resultUuid + " to collection " + colId);\r
+                               throw new SlcException("Cannot find test result #" + resultUuid);\r
                        } else\r
                                curNode.setProperty(ttrColProp, colId);\r
                        getSession().save();\r
@@ -185,22 +176,16 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
        public void removeResultFromCollection(final TreeTestResultCollection ttrc,\r
                        final String resultUuid) {\r
                try {\r
-                       log.debug("remove result");\r
                        String queryString;\r
                        Node curNode;\r
-                       String colId = ttrc.getId();\r
-                       queryString = "//*[@uuid='" + resultUuid + "']";\r
+                       queryString = "//testresult[@uuid='" + resultUuid + "' and "\r
+                                       + ttrColProp + "='" + ttrc.getId() + "']";\r
                        Query query = queryManager.createQuery(queryString, Query.XPATH);\r
                        curNode = JcrUtils.querySingleNode(query);\r
-                       log.debug("Query : " + queryString + " - Node retrieved "\r
-                                       + curNode.getPath());\r
                        if (curNode == null) {\r
-                               throw new SlcException("Cannot remove TreeTestResult of Id "\r
-                                               + resultUuid + " from collection " + colId);\r
+                               throw new SlcException("Cannot find test result #" + resultUuid);\r
                        } else {\r
                                curNode.getProperty(ttrColProp).remove();\r
-                               log.debug("Property removed : "\r
-                                               + curNode.getProperty(ttrColProp).getString());\r
                        }\r
                        getSession().save();\r
                } catch (Exception e) {\r
@@ -229,21 +214,6 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
                }\r
 \r
                return list;\r
-               // throw new UnsupportedOperationException();\r
-               // List<ResultAttributes> list;\r
-               // if (collectionId == null)\r
-               // list = getHibernateTemplate().find(\r
-               // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr)"\r
-               // + " from TreeTestResult ttr");\r
-               // else\r
-               // list = getHibernateTemplate()\r
-               // .find(\r
-               // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr) "\r
-               // + " from TreeTestResult ttr, TreeTestResultCollection ttrc "\r
-               // + " where ttr in elements(ttrc.results) and ttrc.id=?",\r
-               // collectionId);\r
-               //\r
-               // return list;\r
        }\r
 \r
        public List<TreeTestResult> listResults(String collectionId,\r
@@ -298,10 +268,10 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
                        String attributeValue) {\r
                String queryString;\r
                if (attributeKey != null)\r
-                       queryString = "//testResult[@" + attributeKey + "='"\r
+                       queryString = "//testresult[@" + attributeKey + "='"\r
                                        + attributeValue + "']";\r
                else\r
-                       queryString = "//testResult";\r
+                       queryString = "//testresult";\r
                return query(queryString);\r
        }\r
 \r
@@ -334,4 +304,14 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements
                }\r
        }\r
 \r
+       private Node singleNode(String query, String queryType) {\r
+               try {\r
+                       Query q = queryManager.createQuery(query, queryType);\r
+                       return JcrUtils.querySingleNode(q);\r
+               } catch (RepositoryException e) {\r
+                       throw new SlcException("Cannot retrieve single node with query "\r
+                                       + query, e);\r
+               }\r
+       }\r
+\r
 }\r