<classpathentry kind="lib" path="lib/spring-2.0.6.jar" sourcepath="lib-src/spring-2.0.6-src.zip"/>\r
<classpathentry kind="lib" path="lib/commons-logging.jar"/>\r
<classpathentry kind="lib" path="lib/log4j-1.2.14.jar"/>\r
+ <classpathentry kind="lib" path="lib/antlr-2.7.6.jar"/>\r
+ <classpathentry kind="lib" path="lib/asm.jar"/>\r
+ <classpathentry kind="lib" path="lib/asm-attrs.jar"/>\r
+ <classpathentry kind="lib" path="lib/cglib-2.1.3.jar"/>\r
+ <classpathentry kind="lib" path="lib/commons-collections-2.1.1.jar"/>\r
+ <classpathentry kind="lib" path="lib/commons-dbcp.jar"/>\r
+ <classpathentry kind="lib" path="lib/commons-lang.jar"/>\r
+ <classpathentry kind="lib" path="lib/commons-pool.jar"/>\r
+ <classpathentry kind="lib" path="lib/dom4j-1.6.1.jar"/>\r
+ <classpathentry kind="lib" path="lib/hibernate3.jar"/>\r
+ <classpathentry kind="lib" path="lib/hsqldb.jar"/>\r
+ <classpathentry kind="lib" path="lib/jta.jar"/>\r
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>\r
<classpathentry kind="output" path="target/classes"/>\r
</classpath>\r
String parentStr = parent != null ? parent.getAsUniqueString() : "";\r
return parentStr + separator + name;\r
}\r
+ \r
+ public void setAsUniqueString(String str){\r
+ TreeSPath twin = parseToCreatePath(str, getSeparator());\r
+ name = twin.name;\r
+ parent = twin.parent;\r
+ }\r
\r
/** The separator actually used by this path. */\r
public Character getSeparator() {\r
--- /dev/null
+package org.argeo.slc.core.test;\r
+\r
+import org.argeo.slc.core.deploy.DeployedSystemId;\r
+\r
+public class NumericTRId implements TestResultId {\r
+ /** For ORM */\r
+ private Long tid;\r
+\r
+ private Long value;\r
+ private DeployedSystemId deployedSystemId;\r
+ \r
+ public void init() {\r
+ if (getValue() == null) {\r
+ setValue(System.currentTimeMillis());\r
+ }\r
+ }\r
+\r
+\r
+ public Long getValue() {\r
+ return value;\r
+ }\r
+\r
+ public void setValue(Long value) {\r
+ this.value = value;\r
+ }\r
+\r
+ public DeployedSystemId getDeployedSystemId() {\r
+ return deployedSystemId;\r
+ }\r
+\r
+ public void setDeployedSystemId(DeployedSystemId deployedSystemId) {\r
+ this.deployedSystemId = deployedSystemId;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ return value.toString().equals(obj.toString());\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return value.toString();\r
+ }\r
+\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+ \r
+ \r
+\r
+}\r
public final static Integer FAILED = 2;\r
public final static Integer ERROR = 3;\r
\r
+ /** For ORM */\r
+ private Long tid;\r
+ \r
private Integer status;\r
private String message;\r
private Throwable exception;\r
return buf.toString();\r
}\r
\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
}\r
package org.argeo.slc.core.test;\r
\r
-import java.util.List;\r
-\r
/** The result of a test */\r
public interface TestResult {\r
public TestResultId getTestResultId();\r
- public List<TestResultPart> listResultParts();\r
public void addResultPart(TestResultPart part);\r
}\r
/** The unique id referencing a test result.*/\r
public interface TestResultId {\r
public DeployedSystemId getDeployedSystemId();\r
+ \r
}\r
\r
import org.argeo.slc.core.deploy.DeployedSystemId;\r
\r
-public class TimeTestResultId implements TestResultId{\r
+public class TimeTestResultId extends NumericTRId {\r
private DeployedSystemId deployedSystemId;\r
- private Long time;\r
\r
public void init() {\r
- time = System.currentTimeMillis();\r
+ if (getValue() == null) {\r
+ setValue(System.currentTimeMillis());\r
+ }\r
}\r
\r
public void setDeployedSystemId(DeployedSystemId deployedSystemId) {\r
public DeployedSystemId getDeployedSystemId() {\r
return deployedSystemId;\r
}\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- return obj.toString().equals(toString());\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return time.toString();\r
- }\r
-\r
- \r
-\r
}\r
import java.util.Vector;\r
\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.NumericTRId;\r
import org.argeo.slc.core.test.TestResult;\r
-import org.argeo.slc.core.test.TestResultId;\r
import org.argeo.slc.core.test.TestResultListener;\r
import org.argeo.slc.core.test.TestResultPart;\r
\r
TestResultPart testResultPart) {\r
TreeTestResult result = (TreeTestResult) testResult;\r
synchronized (partStructs) {\r
- partStructs.add(new PartStruct(result.getCurrentPath(), result\r
- .getTestResultId(), testResultPart, result));\r
+ partStructs.add(new PartStruct(result.getCurrentPath(),\r
+ (NumericTRId) result.getTestResultId(), testResultPart,\r
+ result));\r
partStructs.notifyAll();\r
}\r
}\r
\r
public void run() {\r
while (thread != null) {\r
- for (PartStruct partStruct : partStructs) {\r
- resultPartAdded(partStruct);\r
- }\r
- \r
synchronized (partStructs) {\r
+ for (PartStruct partStruct : partStructs) {\r
+ resultPartAdded(partStruct);\r
+ }\r
+\r
partStructs.clear();\r
while (partStructs.size() == 0) {\r
try {\r
\r
protected static class PartStruct {\r
public final TreeSPath path;\r
- public final TestResultId resultId;\r
+ public final NumericTRId resultId;\r
public final TestResultPart part;\r
public final TreeTestResult result;\r
\r
- public PartStruct(TreeSPath path, TestResultId resultId,\r
+ public PartStruct(TreeSPath path, NumericTRId resultId,\r
TestResultPart part, TreeTestResult result) {\r
super();\r
this.path = path;\r
--- /dev/null
+package org.argeo.slc.core.test.tree;\r
+\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+import org.argeo.slc.core.test.TestResultPart;\r
+\r
+public class PartSubList {\r
+ \r
+ /** For ORM */\r
+ private Long tid;\r
+\r
+ private List<TestResultPart> parts = new Vector<TestResultPart>();\r
+\r
+ public List<TestResultPart> getParts() {\r
+ return parts;\r
+ }\r
+\r
+ public void setParts(List<TestResultPart> parts) {\r
+ this.parts = parts;\r
+ }\r
+\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
+ \r
+}\r
import java.util.List;\r
import java.util.SortedMap;\r
import java.util.TreeMap;\r
-import java.util.Vector;\r
\r
import org.argeo.slc.core.SlcException;\r
import org.argeo.slc.core.structure.StructureAware;\r
import org.argeo.slc.core.structure.StructurePath;\r
import org.argeo.slc.core.structure.StructureRegistry;\r
import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.NumericTRId;\r
import org.argeo.slc.core.test.TestResult;\r
import org.argeo.slc.core.test.TestResultId;\r
import org.argeo.slc.core.test.TestResultListener;\r
import org.argeo.slc.core.test.TestResultPart;\r
\r
public class TreeTestResult implements TestResult, StructureAware {\r
- private TestResultId testResultId;\r
+ /** For ORM */\r
+ private Long tid;\r
+\r
+ private NumericTRId testResultId;\r
private List<TestResultListener> listeners;\r
\r
private TreeSPath currentPath;\r
\r
- private SortedMap<TreeSPath, List<TestResultPart>> resultParts = new TreeMap<TreeSPath, List<TestResultPart>>();\r
+ private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
+\r
\r
+ \r
public TestResultId getTestResultId() {\r
return testResultId;\r
}\r
\r
- public void setTestResultId(TestResultId testResultId) {\r
+ public NumericTRId getNumericResultId() {\r
+ return testResultId;\r
+ }\r
+\r
+ public void setNumericResultId(NumericTRId testResultId) {\r
this.testResultId = testResultId;\r
}\r
\r
public void setListeners(List<TestResultListener> listeners) {\r
this.listeners = listeners;\r
}\r
- \r
+\r
public void addResultPart(TestResultPart part) {\r
- if(currentPath==null){\r
+ if (currentPath == null) {\r
throw new SlcException("No current path set.");\r
}\r
- List<TestResultPart> list = resultParts.get(currentPath);\r
- if(list == null){\r
- list = new Vector<TestResultPart>();\r
- resultParts.put(currentPath, list);\r
+ PartSubList subList = resultParts.get(currentPath);\r
+ if (subList == null) {\r
+ subList = new PartSubList();\r
+ resultParts.put(currentPath, subList);\r
}\r
- list.add(part);\r
- \r
+ subList.getParts().add(part);\r
+\r
// notify listeners\r
- for(TestResultListener listener: listeners){\r
+ for (TestResultListener listener : listeners) {\r
listener.resultPartAdded(this, part);\r
}\r
}\r
\r
- public List<TestResultPart> listResultParts() {\r
- List<TestResultPart> all = new Vector<TestResultPart>();\r
- for(TreeSPath path:resultParts.keySet()){\r
- all.addAll(resultParts.get(path));\r
- }\r
- return all;\r
- }\r
-\r
public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
currentPath = (TreeSPath) path;\r
}\r
return currentPath;\r
}\r
\r
- public SortedMap<TreeSPath, List<TestResultPart>> getResultParts() {\r
+ public SortedMap<TreeSPath, PartSubList> getResultParts() {\r
return resultParts;\r
}\r
\r
- \r
+ void setResultParts(SortedMap<TreeSPath, PartSubList> resultParts) {\r
+ this.resultParts = resultParts;\r
+ }\r
+\r
+ Long getTid() {\r
+ return tid;\r
+ }\r
+\r
+ void setTid(Long tid) {\r
+ this.tid = tid;\r
+ }\r
+\r
}\r
--- /dev/null
+package org.argeo.slc.core.test.tree;\r
+\r
+import org.argeo.slc.dao.test.TestResultDao;\r
+\r
+public class TreeTestResultPersister extends AsynchronousTreeTestResultListener {\r
+ private TestResultDao testResultDao;\r
+\r
+ @Override\r
+ protected void resultPartAdded(PartStruct partStruct) {\r
+ TreeTestResult persistedResult = (TreeTestResult) testResultDao\r
+ .getTestResult(partStruct.resultId);\r
+ if (persistedResult == null) {\r
+ persistedResult = new TreeTestResult();\r
+ persistedResult.setNumericResultId(partStruct.resultId);\r
+ PartSubList subList = new PartSubList();\r
+ subList.getParts().add(partStruct.part);\r
+ persistedResult.getResultParts().put(partStruct.path, subList);\r
+\r
+ testResultDao.create(persistedResult);\r
+ } else {\r
+ PartSubList subList = persistedResult.getResultParts().get(\r
+ partStruct.path);\r
+ if (subList == null) {\r
+ subList = new PartSubList();\r
+ persistedResult.getResultParts().put(partStruct.path, subList);\r
+ }\r
+ subList.getParts().add(partStruct.part);\r
+\r
+ testResultDao.update(persistedResult);\r
+ }\r
+ }\r
+\r
+ public void setTestResultDao(TestResultDao testResultDao) {\r
+ this.testResultDao = testResultDao;\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.dao.test;\r
+\r
+import java.util.List;\r
+\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.TestResultId;\r
+\r
+public interface TestResultDao {\r
+ public TestResult getTestResult(TestResultId id);\r
+ public void create(TestResult testResult);\r
+ public void update(TestResult testResult);\r
+ public List<TestResult> listTestResults();\r
+}\r
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.test">\r
+ <class name="NumericTRId" table="NUMERIC_TR_ID">\r
+\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ <property name="value" column="VALUE" not-null="true"\r
+ unique="true" />\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.test">\r
+ <class name="SimpleResultPart" table="SIMPLE_RESULT_PART">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ <property name="status" column="STATUS" not-null="true" />\r
+ <property name="message" column="MESSAGE" not-null="true" />\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.test">\r
+ <class name="TestResultId" table="TEST_RESULT_ID">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.test.tree">\r
+ <class name="PartSubList" table="PART_SUB_LIST">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+ <list name="parts" table="SUB_LIST_PARTS" cascade="all" lazy="false">\r
+ <key column="PARENT_ID" unique="true" />\r
+ <list-index column="INDEX" />\r
+ <many-to-many\r
+ class="org.argeo.slc.core.test.SimpleResultPart" column="PART_ID" lazy="false"/>\r
+ </list>\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
--- /dev/null
+package org.argeo.slc.hibernate.test.tree;\r
+\r
+import java.util.List;\r
+\r
+import org.springframework.orm.hibernate3.support.HibernateDaoSupport;\r
+\r
+import org.argeo.slc.core.test.NumericTRId;\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.TestResultId;\r
+import org.argeo.slc.dao.test.TestResultDao;\r
+\r
+public class TestResultDaoHibernate extends HibernateDaoSupport implements\r
+ TestResultDao {\r
+\r
+ public void create(TestResult testResult) {\r
+ getHibernateTemplate().save(testResult);\r
+ }\r
+\r
+ public void update(TestResult testResult) {\r
+ getHibernateTemplate().saveOrUpdate(testResult);\r
+ }\r
+\r
+ public TestResult getTestResult(TestResultId id) {\r
+ NumericTRId ntrid = (NumericTRId) id;\r
+ List<?> list = getHibernateTemplate().find(\r
+ "from TreeTestResult where numericResultId.value=?",\r
+ ntrid.getValue());\r
+ if (list.size() == 0) {\r
+ return null;\r
+ } else {\r
+ return (TestResult) list.get(0);\r
+ }\r
+\r
+ }\r
+\r
+ public List<TestResult> listTestResults() {\r
+ return (List<TestResult>) getHibernateTemplate().find(\r
+ "from TreeTestResult");\r
+ }\r
+\r
+}\r
--- /dev/null
+<?xml version="1.0"?>\r
+<!DOCTYPE hibernate-mapping PUBLIC\r
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"\r
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">\r
+<hibernate-mapping package="org.argeo.slc.core.test.tree">\r
+ <class name="TreeTestResult" table="TREE_TEST_RESULT">\r
+ <id name="tid" column="T_ID">\r
+ <generator class="native" />\r
+ </id>\r
+\r
+ <many-to-one name="numericResultId" unique="true"\r
+ not-null="true" column="TEST_RESULT_ID" cascade="all" lazy="false"/>\r
+\r
+ <map name="resultParts" table="RESULT_PARTS_MAP"\r
+ cascade="all" lazy="false" sort="natural">\r
+ <key column="PARENT_ID" />\r
+ <composite-map-key\r
+ class="org.argeo.slc.core.structure.tree.TreeSPath">\r
+ <key-property name="asUniqueString" column="PATH" />\r
+ </composite-map-key>\r
+ <many-to-many class="PartSubList" column="PART_SUB_LIST_ID"\r
+ unique="true" lazy="false"/>\r
+ </map>\r
+ </class>\r
+</hibernate-mapping>
\ No newline at end of file
File antFile = new File(slcBaseDir.getPath()\r
+ "/root/Category1/SubCategory2/build.xml");\r
AntRegistryUtil.runAll(antFile);\r
+ \r
+ try {\r
+ Thread.sleep(5000);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
}\r
}\r
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">\r
\r
+ <import resource="data.xml" />\r
<import resource="slc.xml" />\r
<import resource="testDatas.xml" />\r
<import resource="testDefinitions.xml" />\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans xmlns="http://www.springframework.org/schema/beans"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">\r
+\r
+ <!-- Results -->\r
+ <bean id="dataSourceResults"\r
+ class="org.springframework.jdbc.datasource.DriverManagerDataSource"\r
+ destroy-method="close">\r
+ <property name="driverClassName" value="org.hsqldb.jdbcDriver" />\r
+ <property name="url"\r
+ value="jdbc:hsqldb:file:${slc.workDir}/results/hsqldb/db" />\r
+ <property name="username" value="sa" />\r
+ <property name="password" value="" />\r
+ </bean>\r
+\r
+ <bean id="sessionFactoryResults"\r
+ class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">\r
+ <property name="dataSource" ref="dataSourceResults" />\r
+ <property name="mappingResources">\r
+ <list>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/NumericTRId.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/SimpleResultPart.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/tree/PartSubList.hbm.xml\r
+ </value>\r
+ <value>\r
+ org/argeo/slc/hibernate/test/tree/TreeTestResult.hbm.xml\r
+ </value>\r
+ </list>\r
+ </property>\r
+ <property name="hibernateProperties">\r
+ <value>\r
+ hibernate.dialect=org.hibernate.dialect.HSQLDialect\r
+ c3p0.min_size=1 c3p0.timeout=1800\r
+ cache.provider_class=org.hibernate.cache.NoCacheProvider\r
+ cache.use_query_cache=false cache.use_minimal_puts=false\r
+ max_fetch_depth=3 show_sql=true format_sql=true\r
+ current_session_context_class=thread\r
+ hibernate.hbm2ddl.auto=update\r
+ </value>\r
+ </property>\r
+ </bean>\r
+\r
+ <bean id="testResultDao"\r
+ class="org.argeo.slc.hibernate.test.tree.TestResultDaoHibernate">\r
+ <property name="sessionFactory" ref="sessionFactoryResults" />\r
+ </bean>\r
+\r
+\r
+</beans>
\ No newline at end of file
# Set root logger level to DEBUG and its only appender to A1.\r
-log4j.rootLogger=TRACE, console\r
+log4j.rootLogger=DEBUG, console\r
\r
## Levels\r
# Spring\r
log4j.logger.org.springframework=INFO\r
+# Hibernate\r
+log4j.logger.org.hibernate=INFO\r
\r
\r
## Appenders\r
<property name="deployedSystem" ref="exampleDeployedSystem" />\r
</bean>\r
\r
+ <bean id="testResultId"\r
+ class="org.argeo.slc.core.test.NumericTRId" init-method="init">\r
+ </bean>\r
+\r
<bean id="testResult"\r
class="org.argeo.slc.core.test.tree.TreeTestResult">\r
- <property name="testResultId" ref="testResultId" />\r
+ <property name="numericResultId" ref="testResultId" />\r
<property name="listeners">\r
<list>\r
<ref bean="resultLogger" />\r
+ <ref bean="resultPersister" />\r
</list>\r
</property>\r
</bean>\r
\r
- <bean id="testResultId"\r
- class="org.argeo.slc.core.test.TimeTestResultId" init-method="init">\r
- </bean>\r
-\r
<bean\r
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />\r
\r
init-method="init" destroy-method="destroy">\r
</bean>\r
\r
+ <bean id="resultPersister"\r
+ class="org.argeo.slc.core.test.tree.TreeTestResultPersister" init-method="init" destroy-method="destroy">\r
+ <property name="testResultDao" ref="testResultDao"/>\r
+ </bean>\r
+\r
<bean id="exampleDeployedSystem"\r
class="org.argeo.slc.example.ExampleDeployedSystem">\r
<property name="deployedSystemId">\r
</bean>\r
</property>\r
</bean>\r
+\r
</beans>
\ No newline at end of file