}\r
\r
/** Gets the path of a project (root). */\r
-// private static TreeSPath getProjectPath(Project project) {\r
-// return (TreeSPath) project.getReference(REF_PROJECT_PATH);\r
-// }\r
-\r
+ // private static TreeSPath getProjectPath(Project project) {\r
+ // return (TreeSPath) project.getReference(REF_PROJECT_PATH);\r
+ // }\r
/** Initializes the Spring application context. */\r
private void initSpringContext(Project project) {\r
System.getProperties().putAll((Map<?, ?>) project.getProperties());\r
\r
createAndRegisterSlcExecution(project);\r
// Add build listeners declared in Spring context\r
-// Map<String, BuildListener> listeners = context.getBeansOfType(\r
-// BuildListener.class, false, true);\r
-// for (BuildListener listener : listeners.values()) {\r
-// project.addBuildListener(listener);\r
-// }\r
+ // Map<String, BuildListener> listeners = context.getBeansOfType(\r
+ // BuildListener.class, false, true);\r
+ // for (BuildListener listener : listeners.values()) {\r
+ // project.addBuildListener(listener);\r
+ // }\r
}\r
\r
/** Loads the SLC specific Ant tasks. */\r
slcExecution.setType(SlcExecutionBuildListener.ANT_TYPE);\r
}\r
\r
- slcExecution.setPath(project.getProperty("ant.file"));\r
+ slcExecution.setUser(System.getProperty("user.name"));\r
slcExecution.setStatus(SlcExecution.STATUS_RUNNING);\r
+ slcExecution.getAttributes().put("ant.file",\r
+ project.getProperty("ant.file"));\r
\r
project.addReference(SlcExecutionBuildListener.REF_SLC_EXECUTION,\r
slcExecution);\r
package org.argeo.slc.core.process;\r
\r
import java.util.List;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
import java.util.Vector;\r
\r
public class SlcExecution {\r
\r
private String uuid;\r
private String host;\r
- private String path;\r
+ private String user;\r
private String type;\r
private String status;\r
+ private Map<String, String> attributes = new TreeMap<String, String>();\r
\r
private List<SlcExecutionStep> steps = new Vector<SlcExecutionStep>();\r
\r
this.host = host;\r
}\r
\r
- public String getPath() {\r
- return path;\r
+ public String getUser() {\r
+ return user;\r
}\r
\r
- public void setPath(String path) {\r
- this.path = path;\r
+ public void setUser(String path) {\r
+ this.user = path;\r
}\r
\r
public String getType() {\r
return getUuid().hashCode();\r
}\r
\r
+ public Map<String, String> getAttributes() {\r
+ return attributes;\r
+ }\r
+\r
+ public void setAttributes(Map<String, String> attributes) {\r
+ this.attributes = attributes;\r
+ }\r
}\r
--- /dev/null
+package org.argeo.slc.unit;\r
+\r
+import java.io.IOException;\r
+\r
+import javax.xml.transform.Source;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import org.springframework.xml.validation.XmlValidator;\r
+import org.springframework.xml.xsd.XsdSchema;\r
+import org.xml.sax.SAXParseException;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+public abstract class UnitXmlUtils {\r
+ private final static Log log = LogFactory.getLog(UnitXmlUtils.class);\r
+\r
+ public static void assertXsdSchemaValidation(XsdSchema schema, Source source)\r
+ throws IOException {\r
+ XmlValidator validator = schema.createValidator();\r
+ SAXParseException[] exceptions = validator.validate(source);\r
+ if (exceptions.length != 0) {\r
+ for (SAXParseException ex : exceptions) {\r
+ log.error(ex.getMessage());\r
+ }\r
+ TestCase.fail("Could not validate with schema " + schema);\r
+ }\r
+ }\r
+\r
+ private UnitXmlUtils() {\r
+\r
+ }\r
+}\r
<mapping>\r
<description>Process objects XML mapping</description>\r
\r
- <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest"\r
- auto-complete="true">\r
- <map-to ns-uri="http://argeo.org/projects/slc/schemas" />\r
+ <class name="org.argeo.slc.msg.process.SlcExecutionStepsRequest">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="slcExecutionUuid" />\r
<field name="steps" collection="vector"\r
type="org.argeo.slc.core.process.SlcExecutionStep">\r
<bind-xml auto-naming="deriveByClass" location="steps" />\r
</field>\r
</class>\r
\r
- <class name="org.argeo.slc.msg.process.SlcExecutionRequest"\r
- auto-complete="true">\r
- <map-to ns-uri="http://argeo.org/projects/slc/schemas" />\r
+ <class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="slcExecution"\r
+ type="org.argeo.slc.core.process.SlcExecution" />\r
</class>\r
\r
- <class name="org.argeo.slc.core.process.SlcExecution"\r
- auto-complete="true">\r
+ <class name="org.argeo.slc.core.process.SlcExecution">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
<field name="uuid" identity="true">\r
<bind-xml node="attribute" />\r
</field>\r
+ <field name="status" />\r
+ <field name="type" />\r
+ <field name="host" />\r
+ <field name="user" />\r
<field name="steps" collection="vector"\r
type="org.argeo.slc.core.process.SlcExecutionStep">\r
<bind-xml auto-naming="deriveByClass" location="steps" />\r
</field>\r
+ <field name="attributes" collection="map">\r
+ <bind-xml name="attribute" location="attributes">\r
+ <class name="org.exolab.castor.mapping.MapItem">\r
+ <map-to\r
+ ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+ <field name="key" type="string">\r
+ <bind-xml name="name" node="attribute" />\r
+ </field>\r
+ <field name="value" type="string">\r
+ <bind-xml node="text" />\r
+ </field>\r
+ </class>\r
+ </bind-xml>\r
+ </field>\r
</class>\r
\r
- <class name="org.argeo.slc.core.process.SlcExecutionStep"\r
- auto-complete="true">\r
+ <class name="org.argeo.slc.core.process.SlcExecutionStep">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
<field name="uuid" identity="true">\r
<bind-xml node="attribute" />\r
</field>\r
+ <field name="type" />\r
+ <field name="begin" />\r
<field name="logLines" collection="vector" type="string">\r
<bind-xml name="log-line" location="log-lines" />\r
</field>\r
-<?xml version="1.0"?>
-
-<mapping>
- <description>TreeTestResult objects XML mapping</description>
-
- <class name="org.argeo.slc.core.test.tree.TreeTestResult"
- auto-complete="false">
- <field name="numericResultId"
- type="org.argeo.slc.core.test.NumericTRId" />
- <field name="closeDate" />
- <field name="resultParts" collection="map">
- <bind-xml name="result-part" location="result-parts">
- <class name="org.exolab.castor.mapping.MapItem">
- <field name="key"
- type="org.argeo.slc.core.structure.tree.TreeSPath">
- <bind-xml name="path" node="attribute" />
- </field>
- <field name="value"
- type="org.argeo.slc.core.test.tree.PartSubList">
- <bind-xml name="part-sub-list" />
- </field>
- </class>
- </bind-xml>
- </field>
- <field name="elements" collection="map">
- <bind-xml name="element" location="elements">
- <class name="org.exolab.castor.mapping.MapItem">
- <field name="key"
- type="org.argeo.slc.core.structure.tree.TreeSPath">
- <bind-xml name="path" node="attribute" />
- </field>
- <field name="value"
- type="org.argeo.slc.core.structure.SimpleSElement">
- <bind-xml name="simpleSElement" />
- </field>
- </class>
- </bind-xml>
- </field>
- </class>
-
- <class name="org.argeo.slc.core.test.tree.PartSubList"
- auto-complete="false">
- <field name="slcExecutionUuid" type="string" />
- <field name="slcExecutionStepUuid" type="string" />
- <field name="parts" collection="vector"
- type="org.argeo.slc.core.test.SimpleResultPart">
- <bind-xml auto-naming="deriveByClass" location="parts" />
- </field>
- </class>
-
- <class name="org.argeo.slc.core.test.SimpleResultPart"
- auto-complete="false">
- <field name="message" type="string" />
- <field name="status" type="string"
- handler="org.argeo.slc.castor.test.tree.StatusFieldHandler" />
- <field name="exception" type="java.lang.Exception" />
- </class>
-
- <class name="org.argeo.slc.core.structure.tree.TreeSPath"
- auto-complete="false">
- <field name="asUniqueString" type="string" />
- </class>
-
- <class name="org.argeo.slc.core.structure.SimpleSElement"
- auto-complete="false">
- <field name="label" type="string" />
- <field name="tags" collection="map">
- <bind-xml name="tag" location="tags">
- <class name="org.exolab.castor.mapping.MapItem">
- <field name="key" type="string">
- <bind-xml name="name" node="attribute" />
- </field>
- <field name="value" type="string">
- <bind-xml name="value" />
- </field>
- </class>
- </bind-xml>
- </field>
- </class>
-
- <class name="java.lang.Exception" auto-complete="false">
- <field name="message"></field>
- <field name="stackTrace" collection="array"
- type="java.lang.StackTraceElement">
- <bind-xml auto-naming="deriveByClass"
- location="stack-trace" />
- </field>
- </class>
-
- <class name="java.lang.StackTraceElement" auto-complete="false"
- verify-constructable="false">
- <field name="declaringClass" type="string" set-method="%1"
- get-method="getClassName">
- <bind-xml node="attribute" />
- </field>
- <field name="methodName" type="string" set-method="%2"
- get-method="getMethodName">
- <bind-xml node="attribute" />
- </field>
- <field name="fileName" type="string" set-method="%3"
- get-method="getFileName">
- <bind-xml node="attribute" />
- </field>
- <field name="lineNumber" type="integer" set-method="%4"
- get-method="getLineNumber">
- <bind-xml node="attribute" />
- </field>
- </class>
+<?xml version="1.0"?>\r
+\r
+<mapping>\r
+ <description>TreeTestResult objects XML mapping</description>\r
+\r
+ <class name="org.argeo.slc.core.test.tree.TreeTestResult"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="closeDate" />\r
+ <field name="numericResultId"\r
+ type="org.argeo.slc.core.test.NumericTRId">\r
+ <bind-xml auto-naming="deriveByClass"\r
+ location="result-id">\r
+ </bind-xml>\r
+ </field>\r
+ <field name="resultParts" collection="map">\r
+ <bind-xml name="result-part" location="result-parts">\r
+ <class name="org.exolab.castor.mapping.MapItem">\r
+ <map-to\r
+ ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+ <field name="key"\r
+ type="org.argeo.slc.core.structure.tree.TreeSPath">\r
+ <bind-xml name="path" node="attribute" />\r
+ </field>\r
+ <field name="value"\r
+ type="org.argeo.slc.core.test.tree.PartSubList">\r
+ <bind-xml name="part-sub-list" />\r
+ </field>\r
+ </class>\r
+ </bind-xml>\r
+ </field>\r
+ <field name="elements" collection="map">\r
+ <bind-xml name="element" location="elements">\r
+ <class name="org.exolab.castor.mapping.MapItem">\r
+ <map-to\r
+ ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+ <field name="key"\r
+ type="org.argeo.slc.core.structure.tree.TreeSPath">\r
+ <bind-xml name="path" node="attribute" />\r
+ </field>\r
+ <field name="value"\r
+ type="org.argeo.slc.core.structure.SimpleSElement">\r
+ <bind-xml auto-naming="deriveByClass" />\r
+ </field>\r
+ </class>\r
+ </bind-xml>\r
+ </field>\r
+ </class>\r
+\r
+ <class name="org.argeo.slc.core.test.NumericTRId"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="value">\r
+ <bind-xml node="attribute" />\r
+ </field>\r
+ </class>\r
+\r
+ <class name="org.argeo.slc.core.test.tree.PartSubList"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="slcExecutionUuid" type="string" />\r
+ <field name="slcExecutionStepUuid" type="string" />\r
+ <field name="parts" collection="vector"\r
+ type="org.argeo.slc.core.test.SimpleResultPart">\r
+ <bind-xml auto-naming="deriveByClass" location="parts" />\r
+ </field>\r
+ </class>\r
+\r
+ <class name="org.argeo.slc.core.test.SimpleResultPart"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="message" type="string" />\r
+ <field name="status" type="string"\r
+ handler="org.argeo.slc.castor.test.tree.StatusFieldHandler" />\r
+ <field name="exception" type="java.lang.Exception" />\r
+ </class>\r
+\r
+ <class name="org.argeo.slc.core.structure.tree.TreeSPath"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="asUniqueString" type="string" />\r
+ </class>\r
+\r
+ <class name="org.argeo.slc.core.structure.SimpleSElement"\r
+ auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="label" type="string" />\r
+ <field name="tags" collection="map">\r
+ <bind-xml name="tag" location="tags">\r
+ <class name="org.exolab.castor.mapping.MapItem">\r
+ <map-to\r
+ ns-uri="http://argeo.org/projects/slc/schemas" ns-prefix="slc" />\r
+ <field name="key" type="string">\r
+ <bind-xml name="name" node="attribute" />\r
+ </field>\r
+ <field name="value" type="string">\r
+ <bind-xml name="tag-value" />\r
+ </field>\r
+ </class>\r
+ </bind-xml>\r
+ </field>\r
+ </class>\r
+\r
+ <class name="java.lang.Exception" auto-complete="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="message"></field>\r
+ <field name="stackTrace" collection="array"\r
+ type="java.lang.StackTraceElement">\r
+ <bind-xml auto-naming="deriveByClass"\r
+ location="stack-trace" />\r
+ </field>\r
+ </class>\r
+\r
+ <class name="java.lang.StackTraceElement" auto-complete="false"\r
+ verify-constructable="false">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="declaringClass" type="string" set-method="%1"\r
+ get-method="getClassName">\r
+ <bind-xml node="attribute" />\r
+ </field>\r
+ <field name="methodName" type="string" set-method="%2"\r
+ get-method="getMethodName">\r
+ <bind-xml node="attribute" />\r
+ </field>\r
+ <field name="fileName" type="string" set-method="%3"\r
+ get-method="getFileName">\r
+ <bind-xml node="attribute" />\r
+ </field>\r
+ <field name="lineNumber" type="integer" set-method="%4"\r
+ get-method="getLineNumber">\r
+ <bind-xml node="attribute" />\r
+ </field>\r
+ </class>\r
</mapping>
\ No newline at end of file
<class name="SlcExecution" table="SLC_EXECUTION">\r
<id name="uuid" column="UUID" />\r
<property name="host" column="HOST" />\r
- <property name="path" column="PATH" />\r
+ <property name="user" column="USER" />\r
<property name="type" column="TYPE" />\r
<property name="status" column="STATUS" />\r
\r
<one-to-many\r
class="org.argeo.slc.core.process.SlcExecutionStep" />\r
</list>\r
+\r
+ <map name="attributes" table="SLC_EXEC_ATTRS_MAP" cascade="all"\r
+ lazy="false" sort="natural">\r
+ <key column="PARENT_ID" />\r
+ <map-key type="string" column="ATTR_NAME" />\r
+ <element column="NAME" type="string" />\r
+ </map>\r
+\r
</class>\r
</hibernate-mapping>
\ No newline at end of file
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:slc="http://argeo.org/projects/slc/schemas"
- elementFormDefault="qualified"
- targetNamespace="http://argeo.org/projects/slc/schemas">
- <!-- TREE TEST RESULT -->
- <xs:complexType name="TreeTestResultType">
- <xs:all>
- <xs:element name="close-date" type="xs:dateTime" />
- <xs:element name="result-parts" minOccurs="0"
- type="slc:ResultPartsType" />
- <xs:element name="elements" minOccurs="0"
- type="slc:ElementsType" />
- </xs:all>
- </xs:complexType>
- <xs:complexType name="ResultPartsType">
- <xs:sequence>
- <xs:element name="result-part" type="slc:ResultPartType"
- maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ResultPartType">
- <xs:all>
- <xs:element name="part-sub-list" type="slc:PartSubListType" />
- </xs:all>
- <xs:attribute name="path" type="xs:string" use="required" />
- </xs:complexType>
- <xs:complexType name="PartSubListType">
- <xs:all>
- <xs:element name="slc-execution-uuid" type="xs:string" />
- <xs:element name="slc-execution-step-uuid" type="xs:string" />
- <xs:element name="parts" minOccurs="0" type="slc:PartsType" />
- </xs:all>
- <xs:attribute name="path" type="xs:string" use="required" />
- </xs:complexType>
- <xs:complexType name="PartsType">
- <xs:sequence>
- <xs:element name="simple-result-part"
- type="slc:SimpleResultPartType" maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="SimpleResultPartType">
- <xs:all>
- <xs:element name="status">
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:enumeration value="PASSED" />
- <xs:enumeration value="FAILED" />
- <xs:enumeration value="ERROR" />
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="message" type="xs:string" />
- <xs:element name="exception" minOccurs="0"
- type="slc:ExceptionType" />
- </xs:all>
- </xs:complexType>
- <xs:complexType name="ExceptionType">
- <xs:all>
- <xs:element name="localized-message" type="xs:string" />
- <xs:element name="message" type="xs:string" />
- <xs:element name="exception" minOccurs="0"
- type="slc:StackTraceType" />
- </xs:all>
- </xs:complexType>
- <xs:complexType name="StackTraceType">
- <xs:sequence>
- <xs:element name="stack-trace-element"
- type="slc:StackTraceElementType" maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="StackTraceElementType">
- <xs:attribute name="delaring-class" type="xs:string"
- use="required" />
- <xs:attribute name="method-name" type="xs:string"
- use="required" />
- <xs:attribute name="file-name" type="xs:string" use="required" />
- <xs:attribute name="line-number" type="xs:integer"
- use="required" />
- </xs:complexType>
- <xs:complexType name="ElementsType">
- <xs:sequence>
- <xs:element name="element" type="slc:ElementType"
- maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ElementType">
- <xs:all>
- <xs:element name="simpleSElement" type="slc:SimpleSElementType" />
- </xs:all>
- <xs:attribute name="path" type="xs:string" use="required" />
- </xs:complexType>
- <xs:complexType name="SimpleSElementType">
- <xs:all>
- <xs:element name="label" type="xs:string" />
- <xs:element name="tags" type="slc:TagsType" minOccurs="0"/>
- </xs:all>
- </xs:complexType>
- <xs:complexType name="TagsType">
- <xs:sequence>
- <xs:element name="tag" type="slc:TagType"
- maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TagType">
- <xs:all>
- <xs:element name="value" type="xs:string" />
- </xs:all>
- <xs:attribute name="name" type="xs:string" use="required" />
- </xs:complexType>
-
- <!-- SLC EXECUTION -->
- <xs:element name="slc-execution-request">
- <xs:complexType>
- <xs:all>
- <xs:element name="slc-execution"
- type="slc:SlcExecutionType" />
- </xs:all>
- </xs:complexType>
- </xs:element>
- <xs:element name="slc-execution-steps-request">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="steps"
- type="slc:SlcExecutionStepsType" />
- <xs:element name="slc-execution-uuid" type="xs:string" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:complexType name="SlcExecutionType">
- <xs:all>
- <xs:element name="status" type="xs:string" />
- <xs:element name="type" type="xs:string" />
- <xs:element name="host" type="xs:string" />
- <xs:element name="path" type="xs:string" />
- <xs:element name="steps" minOccurs="0"
- type="slc:SlcExecutionStepsType" />
- </xs:all>
- <xs:attribute name="uuid" type="xs:string" use="required" />
- </xs:complexType>
- <xs:complexType name="SlcExecutionStepType">
- <xs:all>
- <xs:element name="type" type="xs:string" />
- <xs:element name="begin" type="xs:dateTime" />
- <xs:element name="log-lines" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="log-line" type="xs:string"
- maxOccurs="unbounded" />
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:all>
- <xs:attribute name="uuid" type="xs:string" use="required" />
- </xs:complexType>
- <xs:complexType name="SlcExecutionStepsType">
- <xs:sequence>
- <xs:element name="slc-execution-step"
- type="slc:SlcExecutionStepType" maxOccurs="unbounded">
- </xs:element>
- </xs:sequence>
- </xs:complexType>
-
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:slc="http://argeo.org/projects/slc/schemas"\r
+ elementFormDefault="qualified"\r
+ targetNamespace="http://argeo.org/projects/slc/schemas">\r
+ <!-- TREE TEST RESULT -->\r
+ <xs:element name="tree-test-result" type="slc:TreeTestResultType" />\r
+ <xs:complexType name="TreeTestResultType">\r
+ <xs:all>\r
+ <xs:element name="result-id" type="slc:ResultIdType" />\r
+ <xs:element name="close-date" type="xs:dateTime" />\r
+ <xs:element name="result-parts" minOccurs="0"\r
+ type="slc:ResultPartsType" />\r
+ <xs:element name="elements" minOccurs="0"\r
+ type="slc:ElementsType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="ResultIdType">\r
+ <xs:all>\r
+ <xs:element name="numeric-tRId"\r
+ type="slc:NumericResultIdType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="NumericResultIdType">\r
+ <xs:attribute name="value" type="xs:integer" use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="ResultPartsType">\r
+ <xs:sequence>\r
+ <xs:element name="result-part" type="slc:ResultPartType"\r
+ maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="ResultPartType">\r
+ <xs:all>\r
+ <xs:element name="part-sub-list" type="slc:PartSubListType" />\r
+ </xs:all>\r
+ <xs:attribute name="path" type="xs:string" use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="PartSubListType">\r
+ <xs:all>\r
+ <xs:element name="slc-execution-uuid" type="xs:string" />\r
+ <xs:element name="slc-execution-step-uuid" type="xs:string" />\r
+ <xs:element name="parts" minOccurs="0" type="slc:PartsType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="PartsType">\r
+ <xs:sequence>\r
+ <xs:element name="simple-result-part"\r
+ type="slc:SimpleResultPartType" maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="SimpleResultPartType">\r
+ <xs:all>\r
+ <xs:element name="status">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="PASSED" />\r
+ <xs:enumeration value="FAILED" />\r
+ <xs:enumeration value="ERROR" />\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:element>\r
+ <xs:element name="message" type="xs:string" />\r
+ <xs:element name="exception" minOccurs="0"\r
+ type="slc:ExceptionType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="ExceptionType">\r
+ <xs:all>\r
+ <xs:element name="message" type="xs:string" />\r
+ <xs:element name="stack-trace" minOccurs="0"\r
+ type="slc:StackTraceType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="StackTraceType">\r
+ <xs:sequence>\r
+ <xs:element name="stack-trace-element"\r
+ type="slc:StackTraceElementType" maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="StackTraceElementType">\r
+ <xs:attribute name="declaring-class" type="xs:string"\r
+ use="required" />\r
+ <xs:attribute name="method-name" type="xs:string"\r
+ use="required" />\r
+ <xs:attribute name="file-name" type="xs:string" use="required" />\r
+ <xs:attribute name="line-number" type="xs:integer"\r
+ use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="ElementsType">\r
+ <xs:sequence>\r
+ <xs:element name="element" type="slc:ElementType"\r
+ maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="ElementType">\r
+ <xs:all>\r
+ <xs:element name="simple-sElement"\r
+ type="slc:SimpleSElementType" />\r
+ </xs:all>\r
+ <xs:attribute name="path" type="xs:string" use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="SimpleSElementType">\r
+ <xs:all>\r
+ <xs:element name="label" type="xs:string" />\r
+ <xs:element name="tags" type="slc:TagsType" minOccurs="0" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="TagsType">\r
+ <xs:sequence>\r
+ <xs:element name="tag" type="slc:TagType"\r
+ maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="TagType">\r
+ <xs:all>\r
+ <xs:element name="tag-value" type="xs:string" />\r
+ </xs:all>\r
+ <xs:attribute name="name" type="xs:string" use="required" />\r
+ </xs:complexType>\r
+\r
+ <!-- SLC EXECUTION -->\r
+ <xs:element name="slc-execution" type="slc:SlcExecutionType" />\r
+ <xs:complexType name="SlcExecutionType">\r
+ <xs:all>\r
+ <xs:element name="status" type="xs:string" />\r
+ <xs:element name="type" type="xs:string" />\r
+ <xs:element name="host" type="xs:string" />\r
+ <xs:element name="user" type="xs:string" />\r
+ <xs:element name="steps" minOccurs="0"\r
+ type="slc:SlcExecutionStepsType" />\r
+ <xs:element name="attributes" minOccurs="0"\r
+ type="slc:AttributesType" />\r
+ </xs:all>\r
+ <xs:attribute name="uuid" type="xs:string" use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="SlcExecutionStepsType">\r
+ <xs:sequence>\r
+ <xs:element name="slc-execution-step"\r
+ type="slc:SlcExecutionStepType" maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="SlcExecutionStepType">\r
+ <xs:all>\r
+ <xs:element name="type" type="xs:string" />\r
+ <xs:element name="begin" type="xs:dateTime" />\r
+ <xs:element name="log-lines" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="log-line" type="xs:string"\r
+ maxOccurs="unbounded" />\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ <xs:attribute name="uuid" type="xs:string" use="required" />\r
+ </xs:complexType>\r
+ <xs:complexType name="AttributesType">\r
+ <xs:sequence>\r
+ <xs:element name="attribute" type="slc:AttributeType"\r
+ maxOccurs="unbounded">\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="AttributeType">\r
+ <xs:simpleContent>\r
+ <xs:extension base="xs:string">\r
+ <xs:attribute name="name" type="xs:string"\r
+ use="required" />\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+\r
+ <!-- SLC EXECUTION REQUESTS-->\r
+ <xs:element name="slc-execution-request">\r
+ <xs:complexType>\r
+ <xs:all>\r
+ <xs:element name="slc-execution"\r
+ type="slc:SlcExecutionType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="slc-execution-steps-request">\r
+ <xs:complexType>\r
+ <xs:all>\r
+ <xs:element name="slc-execution-uuid" type="xs:string" />\r
+ <xs:element name="steps"\r
+ type="slc:SlcExecutionStepsType" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ </xs:element>\r
+\r
</xs:schema>
\ No newline at end of file
import org.argeo.slc.msg.process.SlcExecutionRequest;\r
import org.argeo.slc.msg.process.SlcExecutionStepsRequest;\r
import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.unit.UnitXmlUtils;\r
+\r
import org.springframework.oxm.Marshaller;\r
import org.springframework.oxm.Unmarshaller;\r
+import org.springframework.xml.transform.StringResult;\r
+import org.springframework.xml.transform.StringSource;\r
+import org.springframework.xml.xsd.XsdSchema;\r
\r
public class SlcExecutionCastorTest extends AbstractSpringTestCase {\r
private Log log = LogFactory.getLog(getClass());\r
private Marshaller marshaller;\r
private Unmarshaller unmarshaller;\r
\r
+ @Override\r
public void setUp() {\r
marshaller = getBean("marshaller");\r
unmarshaller = getBean("marshaller");\r
SlcExecutionRequest msgUpdate = new SlcExecutionRequest();\r
msgUpdate.setSlcExecution(slcExecUnm);\r
String msgUpdateXml = marshallAndLog(marshaller, msgUpdate);\r
- \r
+\r
SlcExecutionRequest msgUpdateUnm = unmarshall(unmarshaller,\r
msgUpdateXml);\r
assertNotNull(msgUpdateUnm);\r
\r
private String marshallAndLog(Marshaller marshaller, Object obj)\r
throws IOException {\r
- StringWriter writer = new StringWriter();\r
- marshaller.marshal(obj, new StreamResult(writer));\r
- String xml = writer.toString();\r
- log.info(xml);\r
- IOUtils.closeQuietly(writer);\r
- return xml;\r
+ StringResult xml = new StringResult();\r
+ marshaller.marshal(obj, xml);\r
+ log.info("Marshalled object: " + xml);\r
+\r
+ XsdSchema schema = getBean("schema");\r
+ UnitXmlUtils.assertXsdSchemaValidation(schema, new StringSource(xml\r
+ .toString()));\r
+\r
+ return xml.toString();\r
}\r
\r
private <T> T unmarshall(Unmarshaller unmarshaller, String xml)\r
\r
import junit.framework.TestCase;\r
\r
-public abstract class SlcExecutionTestUtils extends TestCase{\r
+public abstract class SlcExecutionTestUtils extends TestCase {\r
\r
public static SlcExecution createSimpleSlcExecution() {\r
SlcExecution slcExec = new SlcExecution();\r
slcExec.setUuid(UUID.randomUUID().toString());\r
slcExec.setHost("localhost");\r
- slcExec.setPath("/test");\r
+ slcExec.setUser("user");\r
slcExec.setType("slcAnt");\r
slcExec.setStatus("STARTED");\r
+ slcExec.getAttributes().put("ant.file", "/test");\r
return slcExec;\r
}\r
\r
- public static void assertSlcExecution(SlcExecution expected, SlcExecution reached) {\r
+ public static void assertSlcExecution(SlcExecution expected,\r
+ SlcExecution reached) {\r
assertNotNull(reached);\r
assertEquals(expected.getHost(), reached.getHost());\r
- assertEquals(expected.getPath(), reached.getPath());\r
+ assertEquals(expected.getUser(), reached.getUser());\r
assertEquals(expected.getType(), reached.getType());\r
assertEquals(expected.getStatus(), reached.getStatus());\r
+ assertEquals(expected.getAttributes().size(), reached.getAttributes()\r
+ .size());\r
+ for (String key : expected.getAttributes().keySet()) {\r
+ String expectedValue = expected.getAttributes().get(key);\r
+ String reachedValue = reached.getAttributes().get(key);\r
+ assertNotNull(reachedValue);\r
+ assertEquals(expectedValue, reachedValue);\r
+ }\r
}\r
\r
public static void assertSlcExecutionStep(SlcExecutionStep expected,\r
assertEquals(expected.getUuid(), reached.getUuid());\r
assertEquals(expected.getType(), reached.getType());\r
assertEquals(expected.logAsString(), reached.logAsString());\r
- //assertEquals(expected.getBegin(), reached.getBegin());\r
+ // assertEquals(expected.getBegin(), reached.getBegin());\r
}\r
\r
- private SlcExecutionTestUtils(){\r
- \r
+ private SlcExecutionTestUtils() {\r
+\r
}\r
}\r
import org.springframework.oxm.Unmarshaller;\r
import org.springframework.xml.transform.StringResult;\r
import org.springframework.xml.transform.StringSource;\r
+import org.springframework.xml.xsd.XsdSchema;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
import static org.argeo.slc.core.test.tree.TreeTestResultTestUtils.createCompleteTreeTestResult;\r
\r
import org.argeo.slc.unit.AbstractSpringTestCase;\r
+import org.argeo.slc.unit.UnitXmlUtils;\r
import org.argeo.slc.unit.test.tree.UnitTestTreeUtil;\r
\r
public class TreeTestResultCastorTest extends AbstractSpringTestCase {\r
\r
log.info("Marshalled TreeTestResult: " + xml);\r
\r
+ XsdSchema schema = getBean("schema");\r
+ UnitXmlUtils.assertXsdSchemaValidation(schema, new StringSource(xml\r
+ .toString()));\r
+\r
TreeTestResult ttrUnm = (TreeTestResult) unmarshaller\r
.unmarshal(new StringSource(xml.toString()));\r
\r
log4j.logger.org.argeo.slc.core.process=DEBUG\r
\r
# Castor\r
+log4j.logger.org.exolab.castor=WARN\r
\r
# Spring\r
log4j.logger.org.springframework=INFO\r
<bean id="webServiceTemplate"\r
class="org.springframework.ws.client.core.WebServiceTemplate">\r
<constructor-arg ref="messageFactory" />\r
- <property name="marshaller" ref="marshaller"/>\r
- <property name="unmarshaller" ref="marshaller"/>\r
+ <property name="marshaller" ref="marshaller" />\r
+ <property name="unmarshaller" ref="marshaller" />\r
<property name="defaultUri"\r
value="http://localhost:8080/org.argeo.slc.webapp/slcService/" />\r
</bean>\r
<bean id="messageFactory"\r
class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory" />\r
\r
+ <bean id="schema"\r
+ class="org.springframework.xml.xsd.SimpleXsdSchema">\r
+ <property name="xsd"\r
+ value="classpath:/org/argeo/slc/xml/slc.xsd" />\r
+ </bean>\r
+\r
</beans>
\ No newline at end of file
<property name="mappingLocation"\r
value="classpath:org/argeo/slc/castor/test/tree/mapping.xml" />\r
</bean>\r
+\r
+ <bean id="schema"\r
+ class="org.springframework.xml.xsd.SimpleXsdSchema">\r
+ <property name="xsd"\r
+ value="classpath:/org/argeo/slc/xml/slc.xsd" />\r
+ </bean>\r
</beans>
\ No newline at end of file