X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2Fdao%2FTreeTestResultDaoJcr.java;h=675091a5bad073fffd8ad149d0dea6dc81c6d1c5;hb=7efacbb6a17cd98979833f3c427ddeb940869d5c;hp=df0a8f507747f4fc963c9eb7b368c0ed7ece13f4;hpb=b554c0910f6ddce935ceea5f99d399fe23af6f58;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultDaoJcr.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultDaoJcr.java index df0a8f507..675091a5b 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultDaoJcr.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultDaoJcr.java @@ -9,6 +9,7 @@ import java.util.Map; import javax.jcr.Node; import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; @@ -57,18 +58,12 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements } public TreeTestResult getTestResult(String uuid) { - - try { - String queryString = "//testresult[@uuid='" + uuid + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); - Node node = JcrUtils.querySingleNode(query); - if (node == null) - return null; - return (TreeTestResult) nodeMapper.load(node); - - } catch (Exception e) { - throw new SlcException("Cannot load TestResult with ID " + uuid, e); - } + String queryString = "//testresult[@uuid='" + uuid + "']"; + Query query = createQuery(queryString, Query.XPATH); + Node node = JcrUtils.querySingleNode(query); + if (node == null) + return null; + return (TreeTestResult) nodeMapper.load(node); } @@ -76,7 +71,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements try { // TODO: optimize query String queryString = "//testresult"; - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); QueryResult queryResult = query.execute(); NodeIterator nodeIterator = queryResult.getNodes(); if (nodeIterator.hasNext()) { @@ -94,7 +89,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements } else return null; - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot load list of TestResult ", e); } } @@ -103,7 +98,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements try { // TODO: optimize query String queryString = "//testresult" + path.getAsUniqueString(); - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); QueryResult queryResult = query.execute(); NodeIterator nodeIterator = queryResult.getNodes(); if (nodeIterator.hasNext()) { @@ -116,7 +111,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements } else return null; - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot load list of TestResult ", e); } } @@ -126,7 +121,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements try { // TODO: optimize query String queryString = "//testresult[@uuid='" + testResultId + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); Node resNode = JcrUtils.querySingleNode(query); Calendar cal = new GregorianCalendar(); cal.setTime(closeDate); @@ -136,7 +131,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements log.debug("Cannot close because a node for test result # " + testResultId + " was not found"); getSession().save(); - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot close TestResult " + testResultId, e); } @@ -158,7 +153,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements try { // TODO: optimize query String queryString = "//testresult[@uuid='" + testResultId + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); Node resNode = JcrUtils.querySingleNode(query); Node curNode; @@ -208,14 +203,41 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements // We add the tags Map tags = relatedElements.get(key) .getTags(); + for (String tag : tags.keySet()) { - String cleanTag = JcrUtils - .removeForbiddenCharacters(tag); - if (!cleanTag.equals(tag)) - log.warn("Tag '" + tag + "' persisted as '" - + cleanTag + "'"); - curNode.setProperty(cleanTag, tags.get(tag)); + NodeIterator tagIt = curNode.getNodes("tag"); + Node tagNode = null; + while (tagIt.hasNext()) { + Node n = tagIt.nextNode(); + if (n.getProperty("name").getString().equals(tag)) { + tagNode = n; + } + } + + if (tagNode == null) { + tagNode = curNode.addNode("tag"); + tagNode.setProperty("name", tag); + } + + tagNode.setProperty("value", tags.get(tag)); + + // remove forbidden characters + // String cleanTag = + // JcrUtils.removeForbiddenCharacters(tag); + // if (!cleanTag.equals(tag)) + // log.warn("Tag '" + tag + "' persisted as '" + + // cleanTag + // + "'"); + // childNode.setProperty(cleanTag, tags.get(tag)); } + // for (String tag : tags.keySet()) { + // String cleanTag = JcrUtils + // .removeForbiddenCharacters(tag); + // if (!cleanTag.equals(tag)) + // log.warn("Tag '" + tag + "' persisted as '" + // + cleanTag + "'"); + // curNode.setProperty(cleanTag, tags.get(tag)); + // } // We set the class in order to be able to retrieve curNode.setProperty("class", StructureElement.class @@ -224,7 +246,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements } getSession().save(); - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot add resultPart", e); } } @@ -240,11 +262,11 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements // Check if attachment already exists String queryString = "//testresult[@uuid='" + testResultId + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); Node resNode = JcrUtils.querySingleNode(query); queryString = ".//*[@uuid='" + attachment.getUuid() + "']"; - query = queryManager.createQuery(queryString, Query.XPATH); + query = createQuery(queryString, Query.XPATH); Node atNode = JcrUtils.querySingleNode(query); if (atNode != null) { @@ -264,7 +286,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements getSession().save(); } - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot Add Attachment to " + testResultId, e); } @@ -281,7 +303,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements return null; return (TreeTestResult) nodeMapper.load(node); - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot load TestResult with ID " + testResultId + " For Session " + session, e); } @@ -291,14 +313,14 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements final Map attributes) { try { String queryString = "//testresult[@uuid='" + testResultId + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); + Query query = createQuery(queryString, Query.XPATH); Node node = JcrUtils.querySingleNode(query); for (String key : attributes.keySet()) { node.setProperty(key, attributes.get(key)); } getSession().save(); - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException( "Cannot update Attributes on TestResult with ID " + testResultId, e);