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=154c3c7bc96bf224ffdebe26e933add58eff3e5c;hb=2541d68abde22de8b5e1001d6291a1afb2bbcc09;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..154c3c7bc 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 @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.argeo.slc.jcr.dao; import java.util.ArrayList; @@ -6,9 +21,11 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.Map; +import java.util.SortedMap; 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 +74,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 +87,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 +105,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 +114,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 +127,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 +137,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 +147,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 +169,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 +219,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 +262,7 @@ public class TreeTestResultDaoJcr extends AbstractSlcJcrDao implements } getSession().save(); - } catch (Exception e) { + } catch (RepositoryException e) { throw new SlcException("Cannot add resultPart", e); } } @@ -240,11 +278,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 +302,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,24 +319,24 @@ 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); } } public synchronized void updateAttributes(final String testResultId, - final Map attributes) { + final SortedMap 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);