You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 12:32:19 UTC

[13/50] [abbrv] incubator-taverna-engine git commit: taverna-reference-types

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/StringToStringReference.java
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/StringToStringReference.java b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/StringToStringReference.java
new file mode 100644
index 0000000..55b0573
--- /dev/null
+++ b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/StringToStringReference.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (C) 2007 The University of Manchester   
+ * 
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ * 
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *    
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *    
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.reference.impl.external.object;
+
+import net.sf.taverna.t2.reference.ExternalReferenceSPI;
+import net.sf.taverna.t2.reference.ReferenceContext;
+import net.sf.taverna.t2.reference.ValueToReferenceConversionException;
+import net.sf.taverna.t2.reference.ValueToReferenceConverterSPI;
+
+/**
+ * Convert a String to a StringReference
+ * 
+ * @author Tom Oinn
+ */
+public class StringToStringReference implements ValueToReferenceConverterSPI {
+	/**
+	 * Can convert if the object is an instance of java.lang.String
+	 */
+	@Override
+	public boolean canConvert(Object o, ReferenceContext context) {
+		return o instanceof String;
+	}
+
+	/**
+	 * Return a new InlineStringReference wrapping the supplied String
+	 */
+	@Override
+	public ExternalReferenceSPI convert(Object o, ReferenceContext context)
+			throws ValueToReferenceConversionException {
+		InlineStringReference result = new InlineStringReference();
+		result.setContents((String) o);
+		return result;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.java
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.java b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.java
new file mode 100644
index 0000000..18b66f2
--- /dev/null
+++ b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (C) 2007 The University of Manchester   
+ * 
+ *  Modifications to the initial code base are copyright of their
+ *  respective authors, or their employers as appropriate.
+ * 
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public License
+ *  as published by the Free Software Foundation; either version 2.1 of
+ *  the License, or (at your option) any later version.
+ *    
+ *  This program is distributed in the hope that it will be useful, but
+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *    
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ******************************************************************************/
+package net.sf.taverna.t2.reference.impl.external.object;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import net.sf.taverna.t2.reference.AbstractExternalReference;
+import net.sf.taverna.t2.reference.ExternalReferenceSPI;
+import net.sf.taverna.t2.reference.ReferenceContext;
+
+/**
+ * Implementation of ExternalReferenceSPI used to refer to objects in the local
+ * virtual machine.
+ * 
+ * @author Stian Soiland-Reyes
+ * @author Alex Nenadic
+ */
+public class VMObjectReference extends AbstractExternalReference implements
+		ExternalReferenceSPI, Serializable {
+	private static final long serialVersionUID = 6708284419760319684L;
+	private static final Charset UTF8 = Charset.forName("UTF-8");
+
+	/**
+	 * Mapping from objects to their UUIDs.
+	 */
+	private static Map<Object, UUID> objectToUUID = new HashMap<>();
+	/**
+	 * Mapping from UUIDs to objects.
+	 */
+	private static Map<UUID, Object> uuidToObject = new HashMap<>();
+
+	/**
+	 * Unique reference to the object.
+	 */
+	private String uuid;
+
+	@Override
+	public InputStream openStream(ReferenceContext context) {
+		return new ByteArrayInputStream(getObject().toString().getBytes(UTF8));
+	}
+
+	/**
+	 * Getter used by hibernate to retrieve the object uuid property.
+	 */
+	public String getUuid() {
+		return uuid;
+	}
+
+	/**
+	 * Setter used by hibernate to set the object uuid property.
+	 */
+	public void setUuid(String id) {
+		if (uuid != null)
+			throw new IllegalStateException("Can't set UUID of an object twice");
+		this.uuid = id;
+	}
+
+	public void setObject(Object object) {
+		if (uuid != null)
+			throw new IllegalStateException("Can't set UUID an object twice");
+		UUID knownUUID = objectToUUID.get(object);
+		if (knownUUID == null) {
+			// register object
+			knownUUID = UUID.randomUUID();
+			objectToUUID.put(object, knownUUID);
+			uuidToObject.put(knownUUID, object);
+		}
+		setUuid(knownUUID.toString());
+	}
+
+	public Object getObject() {
+		return uuidToObject.get(UUID.fromString(uuid));
+	}
+
+	@Override
+	public Long getApproximateSizeInBytes() {
+		// We do not know the object size
+		return new Long(-1);
+	}
+
+	@Override
+	public VMObjectReference clone() {
+		VMObjectReference result = new VMObjectReference();
+		result.setUuid(this.getUuid());
+		return result;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/package.html
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/package.html b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/package.html
new file mode 100644
index 0000000..b5b3b72
--- /dev/null
+++ b/taverna-reference-types/src/main/java/net/sf/taverna/t2/reference/impl/external/object/package.html
@@ -0,0 +1,4 @@
+<body>
+Support for representation of inlined objects as references. Replaces
+the old Literal support
+</body>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI
new file mode 100644
index 0000000..b90bb55
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI
@@ -0,0 +1,3 @@
+# Implementation classes of ExternalReferenceBuilderSPI go here, one per line
+net.sf.taverna.t2.reference.impl.external.object.InlineStringReferenceBuilder
+net.sf.taverna.t2.reference.impl.external.object.InlineByteArrayReferenceBuilder
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceSPI
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceSPI b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceSPI
new file mode 100644
index 0000000..d4ad547
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceSPI
@@ -0,0 +1,6 @@
+# Implementation classes of ExternalReferenceSPI go here, one per line
+net.sf.taverna.t2.reference.impl.external.file.FileReference
+net.sf.taverna.t2.reference.impl.external.http.HttpReference
+net.sf.taverna.t2.reference.impl.external.object.InlineStringReference
+net.sf.taverna.t2.reference.impl.external.object.InlineByteArrayReference
+net.sf.taverna.t2.reference.impl.external.object.VMObjectReference
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceTranslatorSPI
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceTranslatorSPI b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceTranslatorSPI
new file mode 100644
index 0000000..a5547db
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ExternalReferenceTranslatorSPI
@@ -0,0 +1,3 @@
+# Implementation classes of ExternalReferenceTranslatorSPI go here, one per line
+net.sf.taverna.t2.reference.impl.external.object.InlineByteToInlineStringTranslator
+net.sf.taverna.t2.reference.impl.external.object.InlineStringToInlineByteTranslator

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.StreamToValueConverterSPI
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.StreamToValueConverterSPI b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.StreamToValueConverterSPI
new file mode 100644
index 0000000..a433461
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.StreamToValueConverterSPI
@@ -0,0 +1,7 @@
+# Implementation classes of StreamToValueConverterSPI go here, one per line
+net.sf.taverna.t2.reference.impl.external.object.StreamToStringConverter
+net.sf.taverna.t2.reference.impl.external.object.StreamToByteArrayConverter
+net.sf.taverna.t2.reference.impl.external.object.StreamToVMObjectReferenceConverter
+net.sf.taverna.t2.reference.impl.external.object.StreamToDoubleConverter
+net.sf.taverna.t2.reference.impl.external.object.StreamToBooleanConverter
+net.sf.taverna.t2.reference.impl.external.object.StreamToIntegerConverter

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ValueToReferenceConverterSPI
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ValueToReferenceConverterSPI b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ValueToReferenceConverterSPI
new file mode 100644
index 0000000..e1c3593
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/services/net.sf.taverna.t2.reference.ValueToReferenceConverterSPI
@@ -0,0 +1,8 @@
+# Implementation classes of ValueToReferenceConverterSPI go here, one per line
+net.sf.taverna.t2.reference.impl.external.file.FileToFileReference
+net.sf.taverna.t2.reference.impl.external.http.UrlToHttpReference
+net.sf.taverna.t2.reference.impl.external.object.StringToStringReference
+net.sf.taverna.t2.reference.impl.external.object.ByteArrayToByteArrayReference
+net.sf.taverna.t2.reference.impl.external.object.NumberToStringReference
+net.sf.taverna.t2.reference.impl.external.object.CharacterToStringReference
+net.sf.taverna.t2.reference.impl.external.object.BooleanToStringReference

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context-osgi.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context-osgi.xml b/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context-osgi.xml
new file mode 100644
index 0000000..aeed47f
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context-osgi.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:beans="http://www.springframework.org/schema/beans"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                                 http://www.springframework.org/schema/beans/spring-beans.xsd
+                                 http://www.springframework.org/schema/osgi 
+                                 http://www.springframework.org/schema/osgi/spring-osgi.xsd" >
+
+	<service ref="inlineStringReferenceBuilder" interface="net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI" />
+	<service ref="inlineByteArrayReferenceBuilder" interface="net.sf.taverna.t2.reference.ExternalReferenceBuilderSPI" />
+
+	<service ref="fileReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
+	<service ref="httpReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
+	<service ref="inlineStringReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
+	<service ref="inlineByteArrayReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
+	<service ref="vmObjectReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
+		
+	<service ref="streamToStringConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+	<service ref="streamToByteArrayConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+	<service ref="streamToVMObjectReferenceConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+	<service ref="streamToDoubleConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+	<service ref="streamToBooleanConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+	<service ref="streamToIntegerConverter" interface="net.sf.taverna.t2.reference.StreamToValueConverterSPI" />
+
+	<service ref="fileToFileReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="urlToHttpReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="stringToStringReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="byteArrayToByteArrayReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="numberToStringReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="characterToStringReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+	<service ref="booleanToStringReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" />
+
+</beans:beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context.xml b/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context.xml
new file mode 100644
index 0000000..6b7a4cb
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/META-INF/spring/reference-core-extensions-context.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                           http://www.springframework.org/schema/beans/spring-beans.xsd">
+                           
+	<bean id="inlineStringReferenceBuilder" class="net.sf.taverna.t2.reference.impl.external.object.InlineStringReferenceBuilder" />
+	<bean id="inlineByteArrayReferenceBuilder" class="net.sf.taverna.t2.reference.impl.external.object.InlineByteArrayReferenceBuilder" />
+
+	<bean id="fileReference" class="net.sf.taverna.t2.reference.impl.external.file.FileReference" />
+	<bean id="httpReference" class="net.sf.taverna.t2.reference.impl.external.http.HttpReference" />
+	<bean id="inlineStringReference" class="net.sf.taverna.t2.reference.impl.external.object.InlineStringReference" />
+	<bean id="inlineByteArrayReference" class="net.sf.taverna.t2.reference.impl.external.object.InlineByteArrayReference" />
+	<bean id="vmObjectReference" class="net.sf.taverna.t2.reference.impl.external.object.VMObjectReference" />
+
+	<bean id="streamToStringConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToStringConverter" />
+	<bean id="streamToByteArrayConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToByteArrayConverter" />
+	<bean id="streamToVMObjectReferenceConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToVMObjectReferenceConverter" />
+	<bean id="streamToDoubleConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToDoubleConverter" />
+	<bean id="streamToBooleanConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToBooleanConverter" />
+	<bean id="streamToIntegerConverter" class="net.sf.taverna.t2.reference.impl.external.object.StreamToIntegerConverter" />
+	
+	<bean id="fileToFileReference" class="net.sf.taverna.t2.reference.impl.external.file.FileToFileReference" />
+	<bean id="urlToHttpReference" class="net.sf.taverna.t2.reference.impl.external.http.UrlToHttpReference" />
+	<bean id="stringToStringReference" class="net.sf.taverna.t2.reference.impl.external.object.StringToStringReference" />
+	<bean id="byteArrayToByteArrayReference" class="net.sf.taverna.t2.reference.impl.external.object.ByteArrayToByteArrayReference" />
+	<bean id="numberToStringReference" class="net.sf.taverna.t2.reference.impl.external.object.NumberToStringReference" />
+	<bean id="characterToStringReference" class="net.sf.taverna.t2.reference.impl.external.object.CharacterToStringReference" />
+	<bean id="booleanToStringReference" class="net.sf.taverna.t2.reference.impl.external.object.BooleanToStringReference" />
+
+</beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/file/FileReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/file/FileReference.hbm.xml b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/file/FileReference.hbm.xml
new file mode 100644
index 0000000..9a8fc05
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/file/FileReference.hbm.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Hibernate mapping for file reference bean -->
+<hibernate-mapping>
+	<joined-subclass
+		name="net.sf.taverna.t2.reference.impl.external.file.FileReference"
+		extends="net.sf.taverna.t2.reference.AbstractExternalReference">
+		<!-- Link to primary key from abstract superclass -->
+		<key column="bean_id" />
+		<!-- FileReference specific properties below here -->
+		<property name="filePath" type="string" />
+		<property name="dataNatureName" type="string"/>
+		<property name="charset" type="string" />
+	</joined-subclass>
+</hibernate-mapping>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/http/HttpReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/http/HttpReference.hbm.xml b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/http/HttpReference.hbm.xml
new file mode 100644
index 0000000..99af97c
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/http/HttpReference.hbm.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Hibernate mapping for http and https reference bean -->
+<hibernate-mapping>
+	<joined-subclass
+		name="net.sf.taverna.t2.reference.impl.external.http.HttpReference"
+		extends="net.sf.taverna.t2.reference.AbstractExternalReference">
+		<!-- Link to primary key from abstract superclass -->
+		<key column="bean_id" />
+		<!-- HttpReference specific properties below here -->
+		<property name="httpUrlString" type="string" />
+	</joined-subclass>
+</hibernate-mapping>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineByteArrayReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineByteArrayReference.hbm.xml b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineByteArrayReference.hbm.xml
new file mode 100644
index 0000000..8f9ff44
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineByteArrayReference.hbm.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Hibernate mapping for inline byte array reference bean -->
+<hibernate-mapping>
+	<joined-subclass
+		name="net.sf.taverna.t2.reference.impl.external.object.InlineByteArrayReference"
+		extends="net.sf.taverna.t2.reference.AbstractExternalReference">
+		<!-- Link to primary key from abstract superclass -->
+		<key column="bean_id" />
+		<!-- Reference specific props -->
+		<property name="contents" type="text" length="1000000000" />
+	</joined-subclass>
+</hibernate-mapping>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineStringReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineStringReference.hbm.xml b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineStringReference.hbm.xml
new file mode 100644
index 0000000..d81b227
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/InlineStringReference.hbm.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Hibernate mapping for inline string reference bean -->
+<hibernate-mapping>
+	<joined-subclass
+		name="net.sf.taverna.t2.reference.impl.external.object.InlineStringReference"
+		extends="net.sf.taverna.t2.reference.AbstractExternalReference">
+		<!-- Link to primary key from abstract superclass -->
+		<key column="bean_id" />
+		<!-- Reference specific props -->
+		<property name="contents" type="text" length="1000000000"/>
+	</joined-subclass>
+</hibernate-mapping>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.hbm.xml b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.hbm.xml
new file mode 100644
index 0000000..74c47a7
--- /dev/null
+++ b/taverna-reference-types/src/main/resources/net/sf/taverna/t2/reference/impl/external/object/VMObjectReference.hbm.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<!-- Hibernate mapping for VM object reference bean -->
+<hibernate-mapping>
+	<joined-subclass
+		name="net.sf.taverna.t2.reference.impl.external.object.VMObjectReference"
+		extends="net.sf.taverna.t2.reference.AbstractExternalReference">
+		<!-- Link to primary key from abstract superclass -->
+		<key column="bean_id" />
+		<!-- VMObjectReference specific properties below here -->
+		<property name="uuid" type="string" />
+	</joined-subclass>
+</hibernate-mapping>
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/cb77125a/taverna-reference-types/src/test/java/net/sf/taverna/t2/reference/impl/external/object/ByteArrayToStringTest.java
----------------------------------------------------------------------
diff --git a/taverna-reference-types/src/test/java/net/sf/taverna/t2/reference/impl/external/object/ByteArrayToStringTest.java b/taverna-reference-types/src/test/java/net/sf/taverna/t2/reference/impl/external/object/ByteArrayToStringTest.java
new file mode 100644
index 0000000..5afa878
--- /dev/null
+++ b/taverna-reference-types/src/test/java/net/sf/taverna/t2/reference/impl/external/object/ByteArrayToStringTest.java
@@ -0,0 +1,91 @@
+package net.sf.taverna.t2.reference.impl.external.object;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.nio.charset.Charset;
+import java.util.Set;
+
+import net.sf.taverna.t2.reference.ExternalReferenceSPI;
+import net.sf.taverna.t2.reference.ReferenceContext;
+import net.sf.taverna.t2.reference.ReferenceSet;
+import net.sf.taverna.t2.reference.impl.EmptyReferenceContext;
+import net.sf.taverna.t2.reference.impl.TranslationPath;
+import net.sf.taverna.t2referencetest.DummyReferenceSet;
+
+import org.junit.Test;
+
+public class ByteArrayToStringTest {
+
+	protected TranslationPath path  = new TranslationPath();
+	private final Charset UTF8 = Charset.forName("UTF-8");
+	// cleverly including the supplementary character U+10400
+	// which in UTF8 should be \xf0\x90\x90\x80
+	private final String string = "Ferronni\u00e8re \ud801\udc00";	
+	
+	
+	@Test
+	public void translateStringToByteTranslator() throws Exception {
+		ReferenceContext context = new EmptyReferenceContext();
+		InlineStringReference inlineString = new InlineStringReference();
+		inlineString.setContents(string);
+		path.setSourceReference(inlineString);
+		ReferenceSet rs = new DummyReferenceSet(inlineString);		
+		path.getTranslators().add(new InlineStringToInlineByteTranslator());
+		
+		Set<ExternalReferenceSPI> set = path.doTranslation(rs, context);		
+		assertEquals(1, set.size());
+		InlineByteArrayReference byteRef = (InlineByteArrayReference) set.iterator().next();
+		
+		assertEquals(string, new String(byteRef.getValue(), UTF8));		
+	}
+
+	@Test
+	public void translateByteToStringTranslator() throws Exception {
+		ReferenceContext context = new EmptyReferenceContext();
+		InlineByteArrayReference inlineByte = new InlineByteArrayReference();
+		inlineByte.setValue(string.getBytes(UTF8));
+		path.setSourceReference(inlineByte);
+		ReferenceSet rs = new DummyReferenceSet(inlineByte);		
+		path.getTranslators().add(new InlineByteToInlineStringTranslator());		
+		
+		Set<ExternalReferenceSPI> set = path.doTranslation(rs, context);		
+		assertEquals(1, set.size());
+		InlineStringReference inlineString = (InlineStringReference) set.iterator().next();
+		assertEquals(string,  inlineString.getContents());	
+	}
+
+	
+	@Test
+	public void translateStringToByteArrayBuilder() throws Exception {
+		ReferenceContext context = new EmptyReferenceContext();
+		InlineStringReference inlineString = new InlineStringReference();
+		inlineString.setContents(string);
+		path.setSourceReference(inlineString);
+		ReferenceSet rs = new DummyReferenceSet(inlineString);
+		path.setInitialBuilder(new InlineByteArrayReferenceBuilder());
+		Set<ExternalReferenceSPI> set = path.doTranslation(rs, context);		
+		assertEquals(1, set.size());
+		InlineByteArrayReference byteRef = (InlineByteArrayReference) set.iterator().next();
+		
+		assertEquals(string, new String(byteRef.getValue(), UTF8));		
+	}
+
+	@Test
+	public void translateByteArrayToStringBuilder() throws Exception {
+		ReferenceContext context = new EmptyReferenceContext();
+		InlineByteArrayReference inlineByte = new InlineByteArrayReference();
+		inlineByte.setValue(string.getBytes(UTF8));
+		path.setSourceReference(inlineByte);
+		ReferenceSet rs = new DummyReferenceSet(inlineByte);
+		path.setInitialBuilder(new InlineStringReferenceBuilder());
+		Set<ExternalReferenceSPI> set = path.doTranslation(rs, context);		
+		assertEquals(1, set.size());
+		assertTrue(set.iterator().next() instanceof InlineStringReference);
+		InlineStringReference inlineString = (InlineStringReference) set.iterator().next();
+		assertEquals(string,  inlineString.getContents());
+		//System.out.println(string);
+	}
+	
+	
+}