]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultDaoJcr.java
Adapt to changes in Argeo Commons
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.jcr / src / main / java / org / argeo / slc / jcr / dao / TreeTestResultDaoJcr.java
index df0a8f507747f4fc963c9eb7b368c0ed7ece13f4..154c3c7bc96bf224ffdebe26e933add58eff3e5c 100644 (file)
@@ -1,3 +1,18 @@
+/*\r
+ * Copyright (C) 2007-2012 Mathieu Baudier\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *         http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
 package org.argeo.slc.jcr.dao;\r
 \r
 import java.util.ArrayList;\r
@@ -6,9 +21,11 @@ import java.util.Date;
 import java.util.GregorianCalendar;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.SortedMap;\r
 \r
 import javax.jcr.Node;\r
 import javax.jcr.NodeIterator;\r
+import javax.jcr.RepositoryException;\r
 import javax.jcr.Session;\r
 import javax.jcr.query.Query;\r
 import javax.jcr.query.QueryManager;\r
@@ -57,18 +74,12 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
        }\r
 \r
        public TreeTestResult getTestResult(String uuid) {\r
-\r
-               try {\r
-                       String queryString = "//testresult[@uuid='" + uuid + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
-                       Node node = JcrUtils.querySingleNode(query);\r
-                       if (node == null)\r
-                               return null;\r
-                       return (TreeTestResult) nodeMapper.load(node);\r
-\r
-               } catch (Exception e) {\r
-                       throw new SlcException("Cannot load TestResult with ID " + uuid, e);\r
-               }\r
+               String queryString = "//testresult[@uuid='" + uuid + "']";\r
+               Query query = createQuery(queryString, Query.XPATH);\r
+               Node node = JcrUtils.querySingleNode(query);\r
+               if (node == null)\r
+                       return null;\r
+               return (TreeTestResult) nodeMapper.load(node);\r
 \r
        }\r
 \r
@@ -76,7 +87,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                try {\r
                        // TODO: optimize query\r
                        String queryString = "//testresult";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        QueryResult queryResult = query.execute();\r
                        NodeIterator nodeIterator = queryResult.getNodes();\r
                        if (nodeIterator.hasNext()) {\r
@@ -94,7 +105,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                        } else\r
                                return null;\r
 \r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot load list of TestResult ", e);\r
                }\r
        }\r
@@ -103,7 +114,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                try {\r
                        // TODO: optimize query\r
                        String queryString = "//testresult" + path.getAsUniqueString();\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        QueryResult queryResult = query.execute();\r
                        NodeIterator nodeIterator = queryResult.getNodes();\r
                        if (nodeIterator.hasNext()) {\r
@@ -116,7 +127,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                        } else\r
                                return null;\r
 \r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot load list of TestResult ", e);\r
                }\r
        }\r
@@ -126,7 +137,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                try {\r
                        // TODO: optimize query\r
                        String queryString = "//testresult[@uuid='" + testResultId + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        Node resNode = JcrUtils.querySingleNode(query);\r
                        Calendar cal = new GregorianCalendar();\r
                        cal.setTime(closeDate);\r
@@ -136,7 +147,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                                log.debug("Cannot close because a node for test result # "\r
                                                + testResultId + " was not found");\r
                        getSession().save();\r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot close TestResult " + testResultId, e);\r
                }\r
 \r
@@ -158,7 +169,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                try {\r
                        // TODO: optimize query\r
                        String queryString = "//testresult[@uuid='" + testResultId + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        Node resNode = JcrUtils.querySingleNode(query);\r
 \r
                        Node curNode;\r
@@ -208,14 +219,41 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                                        // We add the tags\r
                                        Map<String, String> tags = relatedElements.get(key)\r
                                                        .getTags();\r
+\r
                                        for (String tag : tags.keySet()) {\r
-                                               String cleanTag = JcrUtils\r
-                                                               .removeForbiddenCharacters(tag);\r
-                                               if (!cleanTag.equals(tag))\r
-                                                       log.warn("Tag '" + tag + "' persisted as '"\r
-                                                                       + cleanTag + "'");\r
-                                               curNode.setProperty(cleanTag, tags.get(tag));\r
+                                               NodeIterator tagIt = curNode.getNodes("tag");\r
+                                               Node tagNode = null;\r
+                                               while (tagIt.hasNext()) {\r
+                                                       Node n = tagIt.nextNode();\r
+                                                       if (n.getProperty("name").getString().equals(tag)) {\r
+                                                               tagNode = n;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if (tagNode == null) {\r
+                                                       tagNode = curNode.addNode("tag");\r
+                                                       tagNode.setProperty("name", tag);\r
+                                               }\r
+\r
+                                               tagNode.setProperty("value", tags.get(tag));\r
+\r
+                                               // remove forbidden characters\r
+                                               // String cleanTag =\r
+                                               // JcrUtils.removeForbiddenCharacters(tag);\r
+                                               // if (!cleanTag.equals(tag))\r
+                                               // log.warn("Tag '" + tag + "' persisted as '" +\r
+                                               // cleanTag\r
+                                               // + "'");\r
+                                               // childNode.setProperty(cleanTag, tags.get(tag));\r
                                        }\r
+                                       // for (String tag : tags.keySet()) {\r
+                                       // String cleanTag = JcrUtils\r
+                                       // .removeForbiddenCharacters(tag);\r
+                                       // if (!cleanTag.equals(tag))\r
+                                       // log.warn("Tag '" + tag + "' persisted as '"\r
+                                       // + cleanTag + "'");\r
+                                       // curNode.setProperty(cleanTag, tags.get(tag));\r
+                                       // }\r
 \r
                                        // We set the class in order to be able to retrieve\r
                                        curNode.setProperty("class", StructureElement.class\r
@@ -224,7 +262,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                        }\r
                        getSession().save();\r
 \r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot add resultPart", e);\r
                }\r
        }\r
@@ -240,11 +278,11 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
 \r
                        // Check if attachment already exists\r
                        String queryString = "//testresult[@uuid='" + testResultId + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        Node resNode = JcrUtils.querySingleNode(query);\r
 \r
                        queryString = ".//*[@uuid='" + attachment.getUuid() + "']";\r
-                       query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       query = createQuery(queryString, Query.XPATH);\r
                        Node atNode = JcrUtils.querySingleNode(query);\r
 \r
                        if (atNode != null) {\r
@@ -264,7 +302,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                                getSession().save();\r
                        }\r
 \r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot Add Attachment to " + testResultId,\r
                                        e);\r
                }\r
@@ -281,24 +319,24 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements
                                return null;\r
                        return (TreeTestResult) nodeMapper.load(node);\r
 \r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException("Cannot load TestResult with ID "\r
                                        + testResultId + " For Session " + session, e);\r
                }\r
        }\r
 \r
        public synchronized void updateAttributes(final String testResultId,\r
-                       final Map<String, String> attributes) {\r
+                       final SortedMap<String, String> attributes) {\r
                try {\r
                        String queryString = "//testresult[@uuid='" + testResultId + "']";\r
-                       Query query = queryManager.createQuery(queryString, Query.XPATH);\r
+                       Query query = createQuery(queryString, Query.XPATH);\r
                        Node node = JcrUtils.querySingleNode(query);\r
 \r
                        for (String key : attributes.keySet()) {\r
                                node.setProperty(key, attributes.get(key));\r
                        }\r
                        getSession().save();\r
-               } catch (Exception e) {\r
+               } catch (RepositoryException e) {\r
                        throw new SlcException(\r
                                        "Cannot update Attributes on TestResult with ID "\r
                                                        + testResultId, e);\r