+/*\r
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>\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
+\r
package org.argeo.slc.jcr.dao;\r
\r
import java.util.ArrayList;\r
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
}\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
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
} 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
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
} 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
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
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
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
// 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
}\r
getSession().save();\r
\r
- } catch (Exception e) {\r
+ } catch (RepositoryException e) {\r
throw new SlcException("Cannot add resultPart", e);\r
}\r
}\r
\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
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
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