From 0ebe6753b6569ff52b4ba86cd61c6e08a19e0c5f Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 19 Apr 2010 11:17:35 +0000 Subject: [PATCH] Improve JCR git-svn-id: https://svn.argeo.org/slc/trunk@3479 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- demo/pom.xml | 2 +- demo/server.properties | 1 + demo/server_jcr.properties | 6 + .../org.argeo.slc.demo.log4j/log4j.properties | 3 + dist/org.argeo.slc.sdk/pom.xml | 5 - .../org.argeo.slc.it.webapp/pom.xml | 41 ++--- .../META-INF/MANIFEST.MF | 4 +- .../META-INF/spring/db-osgi.xml | 4 + .../META-INF/spring/db.xml | 4 + .../META-INF/MANIFEST.MF | 4 +- .../META-INF/spring/jcr-osgi.xml | 4 + .../META-INF/spring/jcr.xml | 8 +- .../org.argeo.slc.server.jcr/repository.xml | 152 ++++++++++++++++++ .../META-INF/spring/main.xml | 2 - .../META-INF/MANIFEST.MF | 6 +- .../WEB-INF/applicationContext.xml | 8 +- .../org.argeo.slc.webapp.war/WEB-INF/osgi.xml | 20 ++- .../argeo/slc/jcr/dao/AbstractSlcJcrDao.java | 13 +- .../argeo/slc/jcr/dao/SlcExecutionDaoJcr.java | 7 +- .../dao/TreeTestResultCollectionDaoJcr.java | 76 ++++----- .../slc/jcr/dao/TreeTestResultDaoJcr.java | 39 ++++- .../slc/jcr/dao/TreeTestResultNodeMapper.java | 61 ++++--- .../mvc/OpenSessionInViewJcrInterceptor.java | 30 ++++ .../argeo/slc/jcr/dao/applicationContext.xml | 4 +- 24 files changed, 365 insertions(+), 139 deletions(-) create mode 100644 demo/server_jcr.properties create mode 100644 modules/server/org.argeo.slc.server.jcr/repository.xml create mode 100644 runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/mvc/OpenSessionInViewJcrInterceptor.java diff --git a/demo/pom.xml b/demo/pom.xml index d3a3da759..2fad01796 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -42,7 +42,7 @@ org.springframework.osgi.extender, org.argeo.server.ads.server, org.argeo.slc.server.hsqldb, - org.argeo.slc.server.jcr, + org.argeo.slc.server.hibernate, org.argeo.slc.server.main, org.argeo.slc.ria diff --git a/demo/server.properties b/demo/server.properties index a05439d43..0f5eabe9d 100644 --- a/demo/server.properties +++ b/demo/server.properties @@ -2,5 +2,6 @@ argeo.osgi.start=\ org.springframework.osgi.extender,\ org.argeo.server.ads.server,\ org.argeo.slc.server.hsqldb,\ +org.argeo.slc.server.hibernate,\ org.argeo.slc.server.main,\ org.argeo.slc.ria diff --git a/demo/server_jcr.properties b/demo/server_jcr.properties new file mode 100644 index 000000000..800ab8ed4 --- /dev/null +++ b/demo/server_jcr.properties @@ -0,0 +1,6 @@ +argeo.osgi.start=\ +org.springframework.osgi.extender,\ +org.argeo.server.ads.server,\ +org.argeo.slc.server.jcr,\ +org.argeo.slc.server.main,\ +org.argeo.slc.ria diff --git a/demo/site/org.argeo.slc.demo.log4j/log4j.properties b/demo/site/org.argeo.slc.demo.log4j/log4j.properties index 1b6711423..5c44cdd99 100644 --- a/demo/site/org.argeo.slc.demo.log4j/log4j.properties +++ b/demo/site/org.argeo.slc.demo.log4j/log4j.properties @@ -32,6 +32,9 @@ log4j.logger.org.apache.directory.server=INFO log4j.logger.org.apache.directory.server.core.partition=ERROR log4j.logger.org.apache.directory.server.core.schema.bootstrap.BootstrapAttributeTypeRegistry=ERROR +log4j.logger.org.apache.jackrabbit=WARN +log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR + ## Appenders # console is set to be a ConsoleAppender. log4j.appender.console=org.apache.log4j.ConsoleAppender diff --git a/dist/org.argeo.slc.sdk/pom.xml b/dist/org.argeo.slc.sdk/pom.xml index f69e9a952..e3b2e55af 100644 --- a/dist/org.argeo.slc.sdk/pom.xml +++ b/dist/org.argeo.slc.sdk/pom.xml @@ -147,11 +147,6 @@ - - org.argeo.slc.dep - org.argeo.slc.dep.server - ${project.version} - org.argeo.slc.dep org.argeo.slc.dep.sdk diff --git a/integration-tests/org.argeo.slc.it.webapp/pom.xml b/integration-tests/org.argeo.slc.it.webapp/pom.xml index 321687592..9d3bfae5d 100644 --- a/integration-tests/org.argeo.slc.it.webapp/pom.xml +++ b/integration-tests/org.argeo.slc.it.webapp/pom.xml @@ -21,15 +21,28 @@ -clean + + ${basedir}/../../demo/site;in=*;ex=target;ex=pom.xml;ex=.*, + + org.springframework.osgi.extender, + org.argeo.slc.server.jcr, + org.argeo.slc.server.main, org.argeo.slc.ria, org.argeo.slc.agent, org.argeo.slc.agent.jms @@ -78,37 +91,11 @@ - - org.argeo.commons.osgi - org.argeo.osgi.boot - ${version.argeo-commons} - - - - org.argeo.slc.dep - org.argeo.slc.dep.server - ${project.version} - org.argeo.slc.dep - org.argeo.slc.dep.agent + org.argeo.slc.dep.sdk ${project.version} - - - - org.argeo.commons.security - org.argeo.security.dep.ads - ${version.argeo-commons} - pom - - - - - org.argeo.slc.server - org.argeo.slc.ria - - org.argeo.slc.runtime diff --git a/modules/server/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF b/modules/server/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF index cb8c9cdee..38f86340f 100644 --- a/modules/server/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF +++ b/modules/server/org.argeo.slc.server.hibernate/META-INF/MANIFEST.MF @@ -23,5 +23,7 @@ Import-Package: org.aopalliance.aop, org.springframework.aop, org.springframework.aop.framework, org.springframework.orm.hibernate3, - org.springframework.transaction + org.springframework.orm.hibernate3.support, + org.springframework.transaction, + org.springframework.web.context.request Bundle-Name: Server Hibernate diff --git a/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml b/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml index d17489ba3..c85ccd5a2 100644 --- a/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml +++ b/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db-osgi.xml @@ -18,6 +18,10 @@ + + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db.xml b/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db.xml index 7345ebd54..a5d4329dd 100644 --- a/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db.xml +++ b/modules/server/org.argeo.slc.server.hibernate/META-INF/spring/db.xml @@ -36,4 +36,8 @@ + + + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.server.jcr/META-INF/MANIFEST.MF b/modules/server/org.argeo.slc.server.jcr/META-INF/MANIFEST.MF index 22e6065ef..602a3b83f 100644 --- a/modules/server/org.argeo.slc.server.jcr/META-INF/MANIFEST.MF +++ b/modules/server/org.argeo.slc.server.jcr/META-INF/MANIFEST.MF @@ -17,8 +17,10 @@ Import-Package: javax.jcr, org.argeo.slc.dao.test.tree, org.argeo.slc.execution, org.argeo.slc.jcr.dao, + org.argeo.slc.jcr.mvc, org.argeo.slc.process, org.argeo.slc.runtime;specification-version="0.12.2.SNAPSHOT-r3445", org.argeo.slc.test, org.springframework.beans.factory.config, - org.springframework.osgi.util + org.springframework.osgi.util, + org.springframework.web.context.request;specification-version="2.5.6.SEC01" diff --git a/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr-osgi.xml b/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr-osgi.xml index 7bf84a66e..7327e466f 100644 --- a/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr-osgi.xml +++ b/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr-osgi.xml @@ -16,4 +16,8 @@ ref="testRunDescriptorDao" /> + + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr.xml b/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr.xml index 4adfd61ca..ccc14fccf 100644 --- a/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr.xml +++ b/modules/server/org.argeo.slc.server.jcr/META-INF/spring/jcr.xml @@ -45,6 +45,9 @@ + + + - - + + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.server.jcr/repository.xml b/modules/server/org.argeo.slc.server.jcr/repository.xml new file mode 100644 index 000000000..d980f8bd1 --- /dev/null +++ b/modules/server/org.argeo.slc.server.jcr/repository.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/server/org.argeo.slc.server.main/META-INF/spring/main.xml b/modules/server/org.argeo.slc.server.main/META-INF/spring/main.xml index 83468060e..e625491e9 100644 --- a/modules/server/org.argeo.slc.server.main/META-INF/spring/main.xml +++ b/modules/server/org.argeo.slc.server.main/META-INF/spring/main.xml @@ -23,8 +23,6 @@ action="start" /> - - + @@ -29,7 +29,7 @@ - + \ No newline at end of file diff --git a/modules/server/org.argeo.slc.webapp.war/WEB-INF/osgi.xml b/modules/server/org.argeo.slc.webapp.war/WEB-INF/osgi.xml index d7dde2d34..5772d67be 100644 --- a/modules/server/org.argeo.slc.webapp.war/WEB-INF/osgi.xml +++ b/modules/server/org.argeo.slc.webapp.war/WEB-INF/osgi.xml @@ -20,8 +20,14 @@ - + + @@ -49,8 +56,11 @@ cardinality="0..N" /> - + diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/AbstractSlcJcrDao.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/AbstractSlcJcrDao.java index 2bf9cc64c..bb752a8c1 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/AbstractSlcJcrDao.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/AbstractSlcJcrDao.java @@ -56,23 +56,16 @@ public abstract class AbstractSlcJcrDao { protected String basePath(TestResult testResult) { Calendar cal = new GregorianCalendar(); cal.setTime(new Date()); - // cal.setTime(slcExecution.getStartDate()); - return "/slc/testresult/" + JcrUtils.dateAsPath(cal) + "testresult"; + return "/slc/testresults/" + JcrUtils.dateAsPath(cal) + "testresult"; } protected String basePath(SlcAgentDescriptor slcAgentDescriptor) { - Calendar cal = new GregorianCalendar(); - cal.setTime(new Date()); - // cal.setTime(slcExecution.getStartDate()); return "/slc/agents/" - + JcrUtils.hostAsPath(slcAgentDescriptor.getHost() + "/agent"); + + JcrUtils.hostAsPath(slcAgentDescriptor.getHost()) + "/agent"; } protected String basePath(TestRunDescriptor testRunDescriptor) { - Calendar cal = new GregorianCalendar(); - cal.setTime(new Date()); - // cal.setTime(slcExecution.getStartDate()); - return "/slc/testruns/" + testRunDescriptor.getTestRunUuid() + return "/slc/testruns/" + testRunDescriptor.getSlcExecutionUuid() + "/testrun"; } diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java index c64139eae..135f10760 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/SlcExecutionDaoJcr.java @@ -45,8 +45,11 @@ public class SlcExecutionDaoJcr extends AbstractSlcJcrDao implements Calendar cal = new GregorianCalendar(); cal.setTime(new Date()); // cal.setTime(slcExecution.getStartDate()); - return "/slc/processes/" + JcrUtils.hostAsPath(slcExecution.getHost()) - + '/' + JcrUtils.dateAsPath(cal) + "process"; + String host = slcExecution.getHost(); + if (host == null) + host = "UNKOWNHOST"; + return "/slc/processes/" + JcrUtils.hostAsPath(host) + '/' + + JcrUtils.dateAsPath(cal) + "process"; } public SlcExecution getSlcExecution(String uuid) { diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultCollectionDaoJcr.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultCollectionDaoJcr.java index 6a9824dfb..6daf16641 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultCollectionDaoJcr.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultCollectionDaoJcr.java @@ -9,7 +9,10 @@ import java.util.TreeSet; import javax.jcr.Node; import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; +import javax.jcr.query.InvalidQueryException; import javax.jcr.query.Query; +import javax.jcr.query.QueryManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -26,7 +29,7 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements // FIXME : we handle testResultCollection by adding a property called // "TestResultCollectionId " - final private String ttrColProp = "TestResultCollectionId"; + final private String ttrColProp = "collectionId"; private final static Log log = LogFactory .getLog(TreeTestResultCollectionDaoJcr.class); @@ -49,18 +52,11 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements public TreeTestResultCollection getTestResultCollection(String id) { TreeTestResultCollection res = new TreeTestResultCollection(); res.setId(id); - - // String queryString = "//*[@" + ttrColProp + "='" + id + "']"; - // Query query = queryManager.createQuery(queryString, Query.XPATH); - // log.debug("retrieving all nodes of a col - " + queryString); - int i = 0; NodeIterator ni = resultNodesInCollection(id); while (ni.hasNext()) { - i++; res.getResults().add( (TreeTestResult) nodeMapper.load(ni.nextNode())); } - // log.debug(i + " nodes found"); return res; } @@ -75,15 +71,12 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements public void update(TreeTestResultCollection ttrCollection) { try { log.debug("Update "); - String queryString; - Query query; - Node curNode; String colId = ttrCollection.getId(); // We add or update existing ones for (TreeTestResult ttr : ttrCollection.getResults()) { - queryString = "//*[@uuid='" + ttr.getUuid() + "']"; - query = queryManager.createQuery(queryString, Query.XPATH); - curNode = JcrUtils.querySingleNode(query); + String queryString = "//testresult[@uuid='" + ttr.getUuid() + + "']"; + Node curNode = singleNode(queryString, Query.XPATH); if (curNode == null) { curNode = nodeMapper.save(getSession(), basePath(ttr), ttr); log.debug("New Node added"); @@ -97,14 +90,14 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements JcrUtils.debug(curNode.getSession().getRootNode()); } // We remove those who are not part of the collection anymore - queryString = "//*[@" + ttrColProp + "='" + colId + "']"; - query = queryManager.createQuery(queryString, Query.XPATH); + String queryString = "//*[@" + ttrColProp + "='" + colId + "']"; + Query query = queryManager.createQuery(queryString, Query.XPATH); log.debug("Query :" + queryString); NodeIterator ni = query.execute().getNodes(); int i = 0; while (ni.hasNext()) { log.debug("Node " + (++i)); - curNode = ni.nextNode(); + Node curNode = ni.nextNode(); String uuid = curNode.getProperty("uuid").getString(); boolean isPartOfTheSet = false; for (TreeTestResult ttr : ttrCollection.getResults()) { @@ -166,12 +159,10 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements String queryString; Node curNode; String colId = ttrc.getId(); - queryString = "//*[@uuid='" + resultUuid + "']"; - Query query = queryManager.createQuery(queryString, Query.XPATH); - curNode = JcrUtils.querySingleNode(query); + queryString = "//testresult[@uuid='" + resultUuid + "']"; + curNode = singleNode(queryString, Query.XPATH); if (curNode == null) { - throw new SlcException("Cannot add TreeTestResult of Id " - + resultUuid + " to collection " + colId); + throw new SlcException("Cannot find test result #" + resultUuid); } else curNode.setProperty(ttrColProp, colId); getSession().save(); @@ -185,22 +176,16 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements public void removeResultFromCollection(final TreeTestResultCollection ttrc, final String resultUuid) { try { - log.debug("remove result"); String queryString; Node curNode; - String colId = ttrc.getId(); - queryString = "//*[@uuid='" + resultUuid + "']"; + queryString = "//testresult[@uuid='" + resultUuid + "' and " + + ttrColProp + "='" + ttrc.getId() + "']"; Query query = queryManager.createQuery(queryString, Query.XPATH); curNode = JcrUtils.querySingleNode(query); - log.debug("Query : " + queryString + " - Node retrieved " - + curNode.getPath()); if (curNode == null) { - throw new SlcException("Cannot remove TreeTestResult of Id " - + resultUuid + " from collection " + colId); + throw new SlcException("Cannot find test result #" + resultUuid); } else { curNode.getProperty(ttrColProp).remove(); - log.debug("Property removed : " - + curNode.getProperty(ttrColProp).getString()); } getSession().save(); } catch (Exception e) { @@ -229,21 +214,6 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements } return list; - // throw new UnsupportedOperationException(); - // List list; - // if (collectionId == null) - // list = getHibernateTemplate().find( - // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr)" - // + " from TreeTestResult ttr"); - // else - // list = getHibernateTemplate() - // .find( - // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr) " - // + " from TreeTestResult ttr, TreeTestResultCollection ttrc " - // + " where ttr in elements(ttrc.results) and ttrc.id=?", - // collectionId); - // - // return list; } public List listResults(String collectionId, @@ -298,10 +268,10 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements String attributeValue) { String queryString; if (attributeKey != null) - queryString = "//testResult[@" + attributeKey + "='" + queryString = "//testresult[@" + attributeKey + "='" + attributeValue + "']"; else - queryString = "//testResult"; + queryString = "//testresult"; return query(queryString); } @@ -334,4 +304,14 @@ public class TreeTestResultCollectionDaoJcr extends AbstractSlcJcrDao implements } } + private Node singleNode(String query, String queryType) { + try { + Query q = queryManager.createQuery(query, queryType); + return JcrUtils.querySingleNode(q); + } catch (RepositoryException e) { + throw new SlcException("Cannot retrieve single node with query " + + query, e); + } + } + } 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..71bdf529a 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 @@ -208,14 +208,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 diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultNodeMapper.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultNodeMapper.java index 471de7100..162e5d2f7 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultNodeMapper.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/dao/TreeTestResultNodeMapper.java @@ -94,12 +94,28 @@ public class TreeTestResultNodeMapper extends BeanNodeMapper { // We add the tags Map tags = elements.get(key).getTags(); for (String tag : tags.keySet()) { + NodeIterator tagIt = childNode.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 = childNode.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)); + // String cleanTag = JcrUtils.removeForbiddenCharacters(tag); + // if (!cleanTag.equals(tag)) + // log.warn("Tag '" + tag + "' persisted as '" + cleanTag + // + "'"); + // childNode.setProperty(cleanTag, tags.get(tag)); } // We set the class in order to be able to retrieve @@ -271,22 +287,29 @@ public class TreeTestResultNodeMapper extends BeanNodeMapper { se.setLabel(curNode.getProperty("label").getString()); Map tagMap = new TreeMap(); - PropertyIterator tagIt = curNode.getProperties(); - tags: while (tagIt.hasNext()) { - Property prop = tagIt.nextProperty(); - //log.debug("Handling property named : " + prop.getName()); - - // TODO Define a rule to generalize it - // Specific case. mainly uuid - if ("uuid".equals(prop.getName()) - || prop.getName().equals(getClassProperty()) - || prop.getName().startsWith("jcr")) { - continue tags; - } + NodeIterator tagIt = node.getNodes("tag"); + while (tagIt.hasNext()) { + Node tagNode = tagIt.nextNode(); + tagMap.put(tagNode.getProperty("name").getString(), tagNode + .getProperty("value").getString()); - // else it's an attribute, we retrieve it - tagMap.put(prop.getName(), prop.getString()); } + // PropertyIterator tagIt = curNode.getProperties(); + // tags: while (tagIt.hasNext()) { + // Property prop = tagIt.nextProperty(); + // //log.debug("Handling property named : " + prop.getName()); + // + // // TODO Define a rule to generalize it + // // Specific case. mainly uuid + // if ("uuid".equals(prop.getName()) + // || prop.getName().equals(getClassProperty()) + // || prop.getName().startsWith("jcr")) { + // continue tags; + // } + // + // // else it's an attribute, we retrieve it + // tagMap.put(prop.getName(), prop.getString()); + // } se.setTags(tagMap); elements.put(tsp, se); diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/mvc/OpenSessionInViewJcrInterceptor.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/mvc/OpenSessionInViewJcrInterceptor.java new file mode 100644 index 000000000..0076f5f71 --- /dev/null +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/mvc/OpenSessionInViewJcrInterceptor.java @@ -0,0 +1,30 @@ +package org.argeo.slc.jcr.mvc; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ui.ModelMap; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.context.request.WebRequestInterceptor; + +public class OpenSessionInViewJcrInterceptor implements WebRequestInterceptor { + private final static Log log = LogFactory + .getLog(OpenSessionInViewJcrInterceptor.class); + + public void preHandle(WebRequest request) throws Exception { + if (log.isDebugEnabled()) + log.debug("preHandle: " + request); + } + + public void postHandle(WebRequest request, ModelMap model) throws Exception { + if (log.isDebugEnabled()) + log.debug("postHandle: " + request); + } + + public void afterCompletion(WebRequest request, Exception ex) + throws Exception { + if (log.isDebugEnabled()) + log.debug("afterCompletion: " + request); + + } + +} diff --git a/runtime/org.argeo.slc.support.jcr/src/test/resources/org/argeo/slc/jcr/dao/applicationContext.xml b/runtime/org.argeo.slc.support.jcr/src/test/resources/org/argeo/slc/jcr/dao/applicationContext.xml index c70a2a9a4..cfd99cd38 100644 --- a/runtime/org.argeo.slc.support.jcr/src/test/resources/org/argeo/slc/jcr/dao/applicationContext.xml +++ b/runtime/org.argeo.slc.support.jcr/src/test/resources/org/argeo/slc/jcr/dao/applicationContext.xml @@ -57,7 +57,9 @@ - + + -- 2.39.2