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
</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
--- /dev/null
+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
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
</plugins>
</build>
<dependencies>
- <dependency>
- <groupId>org.argeo.slc.dep</groupId>
- <artifactId>org.argeo.slc.dep.server</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.argeo.slc.dep</groupId>
<artifactId>org.argeo.slc.dep.sdk</artifactId>
<arg>-clean</arg>
</argsToAppend>
<systemProperties>
+ <argeo.osgi.bundles>
+ ${basedir}/../../demo/site;in=*;ex=target;ex=pom.xml;ex=.*,
+ </argeo.osgi.bundles><!--
<argeo.osgi.bundles>
${basedir}/../../demo/site;in=*;ex=target;ex=pom.xml;ex=.*,
${basedir}/../../modules/server;in=*;ex=target;ex=pom.xml;ex=.*,
${basedir}/../../modules/agent;in=*;ex=target;ex=pom.xml;ex=.*
</argeo.osgi.bundles>
+ --><!--
<argeo.osgi.start>
org.springframework.osgi.extender,
org.argeo.slc.server.main,
org.argeo.slc.server.hsqldb,
+ org.argeo.slc.server.hibernate,
+ org.argeo.slc.ria,
+ org.argeo.slc.agent,
+ org.argeo.slc.agent.jms
+ </argeo.osgi.start>
+ --><argeo.osgi.start>
+ 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
</plugins>
</build>
<dependencies>
- <dependency>
- <groupId>org.argeo.commons.osgi</groupId>
- <artifactId>org.argeo.osgi.boot</artifactId>
- <version>${version.argeo-commons}</version>
- </dependency>
-
- <dependency>
- <groupId>org.argeo.slc.dep</groupId>
- <artifactId>org.argeo.slc.dep.server</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.argeo.slc.dep</groupId>
- <artifactId>org.argeo.slc.dep.agent</artifactId>
+ <artifactId>org.argeo.slc.dep.sdk</artifactId>
<version>${project.version}</version>
</dependency>
-
- <!-- Security -->
- <dependency>
- <groupId>org.argeo.commons.security</groupId>
- <artifactId>org.argeo.security.dep.ads</artifactId>
- <version>${version.argeo-commons}</version>
- <type>pom</type>
- </dependency>
-
- <!-- RIA -->
- <dependency>
- <groupId>org.argeo.slc.server</groupId>
- <artifactId>org.argeo.slc.ria</artifactId>
- </dependency>
-
<!-- Unit Tests -->
<dependency>
<groupId>org.argeo.slc.runtime</groupId>
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
<service interface="org.argeo.slc.dao.runtime.SlcAgentDescriptorDao"\r
ref="slcAgentDescriptorDao" />\r
\r
+ <service\r
+ interface="org.springframework.web.context.request.WebRequestInterceptor"\r
+ ref="osivInterceptor" />\r
+\r
<reference id="sessionFactory" interface="org.hibernate.SessionFactory" />\r
\r
</beans:beans>
\ No newline at end of file
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
+ <bean id="osivInterceptor"
+ class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
+ <property name="sessionFactory" ref="sessionFactory" />
+ </bean>
</beans>
\ No newline at end of file
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"
ref="testRunDescriptorDao" />\r
<service interface="org.argeo.slc.dao.runtime.SlcAgentDescriptorDao"\r
ref="slcAgentDescriptorDao" />\r
+\r
+ <service\r
+ interface="org.springframework.web.context.request.WebRequestInterceptor"\r
+ ref="osivInterceptor" />\r
</beans:beans>
\ No newline at end of file
<property name="nodeMapperProvider" ref="nodeMapperProvider" />\r
</bean>\r
\r
+ <bean id="osivInterceptor" class="org.argeo.slc.jcr.mvc.OpenSessionInViewJcrInterceptor">\r
+ </bean>\r
+\r
<!-- JCR node mappers -->\r
<bean id="bundleClassLoader"\r
class="org.springframework.osgi.util.BundleDelegatingClassLoader"\r
</bean>\r
\r
<bean id="argeo.jcr.repository.inMemory" class="org.argeo.server.jackrabbit.JackrabbitContainer">\r
- <property name="homeDirectory" value="${java.io.tmpdir}/jackrabbit-slc-unit" />\r
- <property name="configuration"\r
- value="classpath:/org/argeo/server/jackrabbit/repository-inMemory.xml" />\r
+ <property name="homeDirectory" value="${argeo.osgi.data.dir}/jackrabbit" />\r
+ <property name="configuration" value="osgibundle:/repository.xml" />\r
</bean>\r
\r
</beans>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+ -->
+<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN"
+ "http://jackrabbit.apache.org/dtd/repository-1.6.dtd">
+ <!--
+ Example Repository Configuration File Used by -
+ org.apache.jackrabbit.core.config.RepositoryConfigTest.java -
+ -->
+<Repository>
+ <!--
+ virtual file system where the repository stores global state (e.g.
+ registered namespaces, custom node types, etc.)
+ -->
+ <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
+ <param name="path" value="${rep.home}/repository" />
+ </FileSystem>
+
+ <!--
+ security configuration
+ -->
+ <Security appName="Jackrabbit">
+ <!--
+ security manager: class: FQN of class implementing the
+ JackrabbitSecurityManager interface
+ -->
+ <SecurityManager
+ class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"
+ workspaceName="security">
+ <!--
+ workspace access: class: FQN of class implementing the
+ WorkspaceAccessManager interface
+ -->
+ <!-- <WorkspaceAccessManager class="..."/> -->
+ <!-- <param name="config" value="${rep.home}/security.xml"/> -->
+ </SecurityManager>
+
+ <!--
+ access manager: class: FQN of class implementing the AccessManager
+ interface
+ -->
+ <AccessManager
+ class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager">
+ <!-- <param name="config" value="${rep.home}/access.xml"/> -->
+ </AccessManager>
+
+ <LoginModule
+ class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule">
+ <!--
+ anonymous user name ('anonymous' is the default value)
+ -->
+ <param name="anonymousId" value="anonymous" />
+ <!--
+ administrator user id (default value if param is missing is 'admin')
+ -->
+ <param name="adminId" value="admin" />
+ </LoginModule>
+ </Security>
+
+ <!--
+ location of workspaces root directory and name of default workspace
+ -->
+ <Workspaces rootPath="${rep.home}/workspaces"
+ defaultWorkspace="default" />
+ <!--
+ workspace configuration template: used to create the initial workspace
+ if there's no workspace yet
+ -->
+ <Workspace name="${wsp.name}">
+ <!--
+ virtual file system of the workspace: class: FQN of class
+ implementing the FileSystem interface
+ -->
+ <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
+ <param name="path" value="${wsp.home}" />
+ </FileSystem>
+ <!--
+ persistence manager of the workspace: class: FQN of class
+ implementing the PersistenceManager interface
+ -->
+ <PersistenceManager
+ class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
+ <!--
+ <param name="url" value="jdbc:derby:memory:db;create=true" />
+ -->
+ <param name="url" value="jdbc:derby:${wsp.home}/db;create=true" />
+ <param name="driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+ <param name="schemaObjectPrefix" value="${wsp.name}_" />
+ </PersistenceManager>
+ <!--
+ Search index and the file system it uses. class: FQN of class
+ implementing the QueryHandler interface
+ -->
+ <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+ <param name="path" value="${wsp.home}/index" />
+ <param name="extractorPoolSize" value="2" />
+ <param name="supportHighlighting" value="true" />
+ </SearchIndex>
+ </Workspace>
+
+ <!--
+ Configures the versioning
+ -->
+ <Versioning rootPath="${rep.home}/version">
+ <!--
+ Configures the filesystem to use for versioning for the respective
+ persistence manager
+ -->
+ <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
+ <param name="path" value="${rep.home}/version" />
+ </FileSystem>
+
+ <!--
+ Configures the persistence manager to be used for persisting version
+ state. Please note that the current versioning implementation is
+ based on a 'normal' persistence manager, but this could change in
+ future implementations.
+ -->
+ <PersistenceManager
+ class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
+ <!--
+ <param name="url" value="jdbc:derby:memory:version;create=true" />
+ -->
+ <param name="url" value="jdbc:derby:${rep.home}/version/db;create=true" />
+ <param name="driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
+ <param name="schemaObjectPrefix" value="version_" />
+ </PersistenceManager>
+ </Versioning>
+
+ <!--
+ Search index for content that is shared repository wide (/jcr:system
+ tree, contains mainly versions)
+ -->
+ <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
+ <param name="path" value="${rep.home}/repository/index" />
+ <param name="extractorPoolSize" value="2" />
+ <param name="supportHighlighting" value="true" />
+ </SearchIndex>
+</Repository>
action="start" />
<bundle id="agentProxy" symbolic-name="org.argeo.slc.server.agentproxy"
action="start" />
- <bundle id="hibernate" symbolic-name="org.argeo.slc.server.hibernate"
- action="start" />
<bundle id="services" symbolic-name="org.argeo.slc.server.services"
action="start" />
<bundle id="jms" symbolic-name="org.argeo.slc.server.jms"
org.argeo.slc.web.mvc.provisioning,
org.argeo.slc.web.mvc.result,
org.argeo.slc.web.mvc.runtime,
- org.hibernate,
- org.hibernate.hql.ast,
- org.hibernate.jdbc,
+ org.hibernate.hql.ast;resolution:=optional,
+ org.hibernate.jdbc;resolution:=optional,
org.springframework.aop,
org.springframework.aop.framework,
org.springframework.aop.scope,
org.springframework.beans.factory.support,
- org.springframework.orm.hibernate3.support,
org.springframework.osgi.web.context.support,
org.springframework.oxm,
org.springframework.security,
<import resource="osgi.xml" />
<import resource="security.xml" />
- <!-- Hibernate instrumentation-->
+ <!-- Hibernate instrumentation
<bean id="osivInterceptor"
class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
- </bean>
+ </bean>-->
<!-- Properties -->
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
- <!-- Web Services transactions -->
+ <!-- Web Services transactions
<aop:config>
<aop:pointcut id="epMethods"
expression="execution(* org.springframework.web.servlet.mvc.Controller.handleRequest(..))" />
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
- </tx:advice>
+ </tx:advice> -->
</beans>
\ No newline at end of file
<reference interface="org.argeo.slc.dao.runtime.SlcAgentDescriptorDao"\r
id="slcAgentDescriptorDao" />\r
\r
- <reference interface="org.hibernate.SessionFactory" id="sessionFactory" />\r
+ <reference id="osivInterceptor"\r
+ interface="org.springframework.web.context.request.WebRequestInterceptor" />\r
+ <!--\r
+\r
\r
+ <reference interface="org.hibernate.SessionFactory"\r
+ id="sessionFactory" />\r
+ -->\r
<!--\r
<reference interface="org.argeo.slc.execution.ExecutionModulesManager"\r
id="modulesManager" />\r
<reference id="testManagerService" interface="org.argeo.slc.services.TestManagerService" />\r
<reference id="agentService" interface="org.argeo.slc.services.AgentService" />\r
<reference id="slcExecutionService" interface="org.argeo.slc.services.SlcExecutionService" />\r
+ <!--\r
\r
- <reference id="hibernateTransactionManager"\r
+ <reference id="hibernateTransactionManager"\r
interface="org.springframework.transaction.PlatformTransactionManager"\r
bean-name="hibernateTransactionManager" />\r
-\r
+ -->\r
<reference id="agentFactory" interface="org.argeo.slc.runtime.SlcAgentFactory" />\r
\r
<reference id="eventListener" interface="org.argeo.slc.msg.event.SlcEventListener" />\r
cardinality="0..N" />\r
\r
<!-- Security -->\r
- <!-- <reference id="authenticationEntryPoint"\r
- interface="org.springframework.security.ui.AuthenticationEntryPoint" />-->\r
+ <!--\r
+ <reference id="authenticationEntryPoint"\r
+ interface="org.springframework.security.ui.AuthenticationEntryPoint"\r
+ />\r
+ -->\r
<reference id="_authenticationManager"\r
interface="org.springframework.security.AuthenticationManager" />\r
\r
protected String basePath(TestResult testResult) {\r
Calendar cal = new GregorianCalendar();\r
cal.setTime(new Date());\r
- // cal.setTime(slcExecution.getStartDate());\r
- return "/slc/testresult/" + JcrUtils.dateAsPath(cal) + "testresult";\r
+ return "/slc/testresults/" + JcrUtils.dateAsPath(cal) + "testresult";\r
}\r
\r
protected String basePath(SlcAgentDescriptor slcAgentDescriptor) {\r
- Calendar cal = new GregorianCalendar();\r
- cal.setTime(new Date());\r
- // cal.setTime(slcExecution.getStartDate());\r
return "/slc/agents/"\r
- + JcrUtils.hostAsPath(slcAgentDescriptor.getHost() + "/agent");\r
+ + JcrUtils.hostAsPath(slcAgentDescriptor.getHost()) + "/agent";\r
}\r
\r
protected String basePath(TestRunDescriptor testRunDescriptor) {\r
- Calendar cal = new GregorianCalendar();\r
- cal.setTime(new Date());\r
- // cal.setTime(slcExecution.getStartDate());\r
- return "/slc/testruns/" + testRunDescriptor.getTestRunUuid()\r
+ return "/slc/testruns/" + testRunDescriptor.getSlcExecutionUuid()\r
+ "/testrun";\r
}\r
\r
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) {
\r
import javax.jcr.Node;\r
import javax.jcr.NodeIterator;\r
+import javax.jcr.RepositoryException;\r
+import javax.jcr.query.InvalidQueryException;\r
import javax.jcr.query.Query;\r
+import javax.jcr.query.QueryManager;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
\r
// FIXME : we handle testResultCollection by adding a property called\r
// "TestResultCollectionId "\r
- final private String ttrColProp = "TestResultCollectionId";\r
+ final private String ttrColProp = "collectionId";\r
\r
private final static Log log = LogFactory\r
.getLog(TreeTestResultCollectionDaoJcr.class);\r
public TreeTestResultCollection getTestResultCollection(String id) {\r
TreeTestResultCollection res = new TreeTestResultCollection();\r
res.setId(id);\r
-\r
- // String queryString = "//*[@" + ttrColProp + "='" + id + "']";\r
- // Query query = queryManager.createQuery(queryString, Query.XPATH);\r
- // log.debug("retrieving all nodes of a col - " + queryString);\r
- int i = 0;\r
NodeIterator ni = resultNodesInCollection(id);\r
while (ni.hasNext()) {\r
- i++;\r
res.getResults().add(\r
(TreeTestResult) nodeMapper.load(ni.nextNode()));\r
}\r
- // log.debug(i + " nodes found");\r
return res;\r
}\r
\r
public void update(TreeTestResultCollection ttrCollection) {\r
try {\r
log.debug("Update ");\r
- String queryString;\r
- Query query;\r
- Node curNode;\r
String colId = ttrCollection.getId();\r
// We add or update existing ones\r
for (TreeTestResult ttr : ttrCollection.getResults()) {\r
- queryString = "//*[@uuid='" + ttr.getUuid() + "']";\r
- query = queryManager.createQuery(queryString, Query.XPATH);\r
- curNode = JcrUtils.querySingleNode(query);\r
+ String queryString = "//testresult[@uuid='" + ttr.getUuid()\r
+ + "']";\r
+ Node curNode = singleNode(queryString, Query.XPATH);\r
if (curNode == null) {\r
curNode = nodeMapper.save(getSession(), basePath(ttr), ttr);\r
log.debug("New Node added");\r
JcrUtils.debug(curNode.getSession().getRootNode());\r
}\r
// We remove those who are not part of the collection anymore\r
- queryString = "//*[@" + ttrColProp + "='" + colId + "']";\r
- query = queryManager.createQuery(queryString, Query.XPATH);\r
+ String queryString = "//*[@" + ttrColProp + "='" + colId + "']";\r
+ Query query = queryManager.createQuery(queryString, Query.XPATH);\r
log.debug("Query :" + queryString);\r
NodeIterator ni = query.execute().getNodes();\r
int i = 0;\r
while (ni.hasNext()) {\r
log.debug("Node " + (++i));\r
- curNode = ni.nextNode();\r
+ Node curNode = ni.nextNode();\r
String uuid = curNode.getProperty("uuid").getString();\r
boolean isPartOfTheSet = false;\r
for (TreeTestResult ttr : ttrCollection.getResults()) {\r
String queryString;\r
Node curNode;\r
String colId = ttrc.getId();\r
- queryString = "//*[@uuid='" + resultUuid + "']";\r
- Query query = queryManager.createQuery(queryString, Query.XPATH);\r
- curNode = JcrUtils.querySingleNode(query);\r
+ queryString = "//testresult[@uuid='" + resultUuid + "']";\r
+ curNode = singleNode(queryString, Query.XPATH);\r
if (curNode == null) {\r
- throw new SlcException("Cannot add TreeTestResult of Id "\r
- + resultUuid + " to collection " + colId);\r
+ throw new SlcException("Cannot find test result #" + resultUuid);\r
} else\r
curNode.setProperty(ttrColProp, colId);\r
getSession().save();\r
public void removeResultFromCollection(final TreeTestResultCollection ttrc,\r
final String resultUuid) {\r
try {\r
- log.debug("remove result");\r
String queryString;\r
Node curNode;\r
- String colId = ttrc.getId();\r
- queryString = "//*[@uuid='" + resultUuid + "']";\r
+ queryString = "//testresult[@uuid='" + resultUuid + "' and "\r
+ + ttrColProp + "='" + ttrc.getId() + "']";\r
Query query = queryManager.createQuery(queryString, Query.XPATH);\r
curNode = JcrUtils.querySingleNode(query);\r
- log.debug("Query : " + queryString + " - Node retrieved "\r
- + curNode.getPath());\r
if (curNode == null) {\r
- throw new SlcException("Cannot remove TreeTestResult of Id "\r
- + resultUuid + " from collection " + colId);\r
+ throw new SlcException("Cannot find test result #" + resultUuid);\r
} else {\r
curNode.getProperty(ttrColProp).remove();\r
- log.debug("Property removed : "\r
- + curNode.getProperty(ttrColProp).getString());\r
}\r
getSession().save();\r
} catch (Exception e) {\r
}\r
\r
return list;\r
- // throw new UnsupportedOperationException();\r
- // List<ResultAttributes> list;\r
- // if (collectionId == null)\r
- // list = getHibernateTemplate().find(\r
- // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr)"\r
- // + " from TreeTestResult ttr");\r
- // else\r
- // list = getHibernateTemplate()\r
- // .find(\r
- // "select new org.argeo.slc.core.test.tree.ResultAttributes(ttr) "\r
- // + " from TreeTestResult ttr, TreeTestResultCollection ttrc "\r
- // + " where ttr in elements(ttrc.results) and ttrc.id=?",\r
- // collectionId);\r
- //\r
- // return list;\r
}\r
\r
public List<TreeTestResult> listResults(String collectionId,\r
String attributeValue) {\r
String queryString;\r
if (attributeKey != null)\r
- queryString = "//testResult[@" + attributeKey + "='"\r
+ queryString = "//testresult[@" + attributeKey + "='"\r
+ attributeValue + "']";\r
else\r
- queryString = "//testResult";\r
+ queryString = "//testresult";\r
return query(queryString);\r
}\r
\r
}\r
}\r
\r
+ private Node singleNode(String query, String queryType) {\r
+ try {\r
+ Query q = queryManager.createQuery(query, queryType);\r
+ return JcrUtils.querySingleNode(q);\r
+ } catch (RepositoryException e) {\r
+ throw new SlcException("Cannot retrieve single node with query "\r
+ + query, e);\r
+ }\r
+ }\r
+\r
}\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
// We add the tags
Map<String, String> 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
se.setLabel(curNode.getProperty("label").getString());
Map<String, String> tagMap = new TreeMap<String, String>();
- 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);
--- /dev/null
+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);
+
+ }
+
+}
</bean>\r
\r
<bean id="argeo.jcr.repository.inMemory" class="org.argeo.server.jackrabbit.JackrabbitContainer">\r
- <property name="homeDirectory" value="${java.io.tmpdir}/jackrabbit-slc-unit" />\r
+ <property name="homeDirectory"\r
+ value="${java.io.tmpdir}/jackrabbit-slc-unit-${user.name}" />\r
+ <property name="inMemory" value="true" />\r
<property name="configuration"\r
value="classpath:/org/argeo/server/jackrabbit/repository-inMemory.xml" />\r
</bean>\r