diff --git a/distro/changelog.xml b/distro/changelog.xml
index c152524..2e7f2de 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -9,4 +9,10 @@
Improved Plugin handling
+
+ REST Constants
+
+
+ Improved marshal checks JSON
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 2c17fa9..9fa4ec0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,29 +1,30 @@
-
- 4.0.0
-
- org.gcube.tools
- maven-parent
- LATEST
-
- org.gcube.data.transfer
- data-transfer-model
- 1.2.0-SNAPSHOT
- Data Transfer Model
- Common model used by Data Transfer Service facilities
-
-
+
+ 4.0.0
+
+ org.gcube.tools
+ maven-parent
+ LATEST
+
+ org.gcube.data.transfer
+ data-transfer-model
+ 1.2.2-SNAPSHOT
+ Data Transfer Model
+ Common model used by Data Transfer Service facilities
+
+
${project.basedir}/distro
http://svn.research-infrastructures.eu/d4science/gcube/trunk/data-transfer/${project.artifactId}
-
-
-
+
+
+
scm:svn:${svnBaseUrl}/${project.artifactId}
scm:svn:${svnBaseUrl}/${project.artifactId}
${svnBaseUrl}/${project.artifactId}
-
+
@@ -35,7 +36,7 @@
-
+
junit
@@ -43,7 +44,14 @@
4.10
test
-
+
+
+ org.eclipse.persistence
+ org.eclipse.persistence.moxy
+ 2.6.0
+ test
+
+
org.projectlombok
@@ -54,7 +62,7 @@
org.slf4j
slf4j-api
-
+
@@ -109,6 +117,6 @@
-
-
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/data/transfer/model/DestinationClashPolicy.java b/src/main/java/org/gcube/data/transfer/model/DestinationClashPolicy.java
index a3c83bc..ab21010 100644
--- a/src/main/java/org/gcube/data/transfer/model/DestinationClashPolicy.java
+++ b/src/main/java/org/gcube/data/transfer/model/DestinationClashPolicy.java
@@ -2,6 +2,7 @@ package org.gcube.data.transfer.model;
public enum DestinationClashPolicy {
+
FAIL,
REWRITE,
ADD_SUFFIX,
diff --git a/src/main/java/org/gcube/data/transfer/model/ServiceConstants.java b/src/main/java/org/gcube/data/transfer/model/ServiceConstants.java
index 7702a9e..6832ffa 100644
--- a/src/main/java/org/gcube/data/transfer/model/ServiceConstants.java
+++ b/src/main/java/org/gcube/data/transfer/model/ServiceConstants.java
@@ -9,10 +9,26 @@ public class ServiceConstants {
public static final String REQUESTS_SERVLET_NAME="Requests";
public static final String STATUS_SERVLET_NAME="TransferStatus";
+ public static final String REST_SERVLET_NAME="REST";
+
+ // Methods
+ public static final String REST_HTTP_DOWNLOAD="HttpDownload";
+ public static final String REST_DIRECT_TRANSFER="DirectTransfer";
+ public static final String REST_FILE_UPLOAD="FileUpload";
+
+
+
+
+
+
//Params
public static final String TRANSFER_REQUEST_OBJECT="request-object";
public static final String TRANSFER_ID="transfer-id";
-
-
+ public static final String DESTINATION_FILE_NAME="destination-file-name";
+ public static final String CREATE_DIRS="create-dirs";
+ public static final String ON_EXISTING_FILE="on-existing-file";
+ public static final String ON_EXISTING_DIR="on-existing-dir";
+ public static final String SOURCE_ID="source-id";
+ public static final String MULTIPART_FILE="uploadedFile";
}
diff --git a/src/main/java/org/gcube/data/transfer/model/TransferCapabilities.java b/src/main/java/org/gcube/data/transfer/model/TransferCapabilities.java
index d2c5b11..a782e28 100644
--- a/src/main/java/org/gcube/data/transfer/model/TransferCapabilities.java
+++ b/src/main/java/org/gcube/data/transfer/model/TransferCapabilities.java
@@ -1,5 +1,6 @@
package org.gcube.data.transfer.model;
+import java.util.Collections;
import java.util.Set;
import javax.xml.bind.annotation.XmlAccessType;
@@ -38,17 +39,17 @@ public class TransferCapabilities {
private String hostName;
@XmlElement
private Integer port;
-
+
@XmlElementWrapper
@XmlElementRefs({
- @XmlElementRef(type = DirectTransferOptions.class),
- @XmlElementRef(type = HttpDownloadOptions.class),
- })
+ @XmlElementRef(type = DirectTransferOptions.class),
+ @XmlElementRef(type = HttpDownloadOptions.class),
+ })
private Set availableMeans;
-
+
@XmlElementWrapper
private Set availablePlugins;
-
+
@XmlElementWrapper
private Set availablePersistenceIds;
@@ -59,17 +60,17 @@ public class TransferCapabilities {
public int hashCode() {
final int prime = 31;
int result = 1;
-
+
if(availableMeans!=null){
for(TransferOptions opt:availableMeans)
result=prime*result+((opt==null)?0:opt.hashCode());
}
-
+
if(availablePlugins!=null){
for(PluginDescription opt:availablePlugins)
result=prime*result+((opt==null)?0:opt.hashCode());
}
-
+
result = prime * result
+ ((nodeId == null) ? 0 : nodeId.hashCode());
result = prime * result
@@ -91,58 +92,70 @@ public class TransferCapabilities {
if (getClass() != obj.getClass())
return false;
TransferCapabilities other = (TransferCapabilities) obj;
-
-
+
+
//Check capabilities
if ((availableMeans == null || availableMeans.isEmpty()))
- if(other.availableMeans!=null&& (!other.availableMeans.isEmpty()))
- return false;
- else if(availableMeans!=null && (!availableMeans.isEmpty()))
- if(other.availableMeans==null || other.availableMeans.isEmpty())
- return false;
- else if(availableMeans.size()!=other.availableMeans.size())
- return false;
- else for(TransferOptions opt:availableMeans)
- if(!other.availableMeans.contains(opt))
+ if(other.availableMeans!=null&& (!other.availableMeans.isEmpty()))
return false;
-
-
+ else if(availableMeans!=null && (!availableMeans.isEmpty()))
+ if(other.availableMeans==null || other.availableMeans.isEmpty())
+ return false;
+ else if(availableMeans.size()!=other.availableMeans.size())
+ return false;
+ else for(TransferOptions opt:availableMeans)
+ if(!other.availableMeans.contains(opt))
+ return false;
+
+
//Check plugins
if ((availablePlugins == null || availablePlugins.isEmpty()))
if(other.availablePlugins!=null&& (!other.availablePlugins.isEmpty()))
return false;
- else if(availablePlugins!=null && (!availablePlugins.isEmpty()))
- if(other.availablePlugins==null || other.availablePlugins.isEmpty())
- return false;
- else if(availablePlugins.size()!=other.availablePlugins.size())
- return false;
- else for(PluginDescription opt:availablePlugins)
- if(!other.availablePlugins.contains(opt))
- return false;
-
-
-
+ else if(availablePlugins!=null && (!availablePlugins.isEmpty()))
+ if(other.availablePlugins==null || other.availablePlugins.isEmpty())
+ return false;
+ else if(availablePlugins.size()!=other.availablePlugins.size())
+ return false;
+ else for(PluginDescription opt:availablePlugins)
+ if(!other.availablePlugins.contains(opt))
+ return false;
+
+ //TODO Check persistences
+ if ((availablePersistenceIds == null || availablePersistenceIds.isEmpty()))
+ if(other.availablePersistenceIds!=null&& (!other.availablePersistenceIds.isEmpty()))
+ return false;
+ else if(availablePersistenceIds!=null && (!availablePersistenceIds.isEmpty()))
+ if(other.availablePersistenceIds==null || other.availablePersistenceIds.isEmpty())
+ return false;
+ else if(availablePersistenceIds.size()!=other.availablePersistenceIds.size())
+ return false;
+ else for(String opt:availablePersistenceIds)
+ if(!other.availablePersistenceIds.contains(opt))
+ return false;
+
+
if (nodeId == null) {
if (other.nodeId != null)
return false;
} else if (!nodeId.equals(other.nodeId))
return false;
-
+
if (hostName == null) {
if (other.hostName != null)
return false;
} else if (!hostName.equals(other.hostName))
return false;
-
+
if (port == null) {
if (other.port != null)
return false;
} else if (!port.equals(other.port))
return false;
-
-
+
+
return true;
}
-
+
}
diff --git a/src/main/java/org/gcube/data/transfer/model/options/FileUploadOptions.java b/src/main/java/org/gcube/data/transfer/model/options/FileUploadOptions.java
new file mode 100644
index 0000000..295c9fb
--- /dev/null
+++ b/src/main/java/org/gcube/data/transfer/model/options/FileUploadOptions.java
@@ -0,0 +1,39 @@
+package org.gcube.data.transfer.model.options;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+public class FileUploadOptions extends TransferOptions{
+
+ private static final List protocol=Collections.singletonList(Protocol.HTTP);
+
+
+ @Override
+ public TransferMethod getMethod() {
+ return TransferMethod.FileUpload;
+ }
+
+ @Override
+ public List getAvailableProtocols() {
+ return protocol;
+ }
+
+ @Override
+ public Range getAvailableRange() {
+ return Range.ONLY_80;
+ }
+
+
+
+}
diff --git a/src/main/java/org/gcube/data/transfer/model/options/TransferOptions.java b/src/main/java/org/gcube/data/transfer/model/options/TransferOptions.java
index e234cba..6f8f26a 100644
--- a/src/main/java/org/gcube/data/transfer/model/options/TransferOptions.java
+++ b/src/main/java/org/gcube/data/transfer/model/options/TransferOptions.java
@@ -16,7 +16,8 @@ public abstract class TransferOptions {
public static enum TransferMethod{
HTTPDownload,
- DirectTransfer
+ DirectTransfer,
+ FileUpload
}
public static enum Protocol{
diff --git a/src/main/java/org/gcube/data/transfer/model/settings/FileUploadSettings.java b/src/main/java/org/gcube/data/transfer/model/settings/FileUploadSettings.java
new file mode 100644
index 0000000..7ff0db4
--- /dev/null
+++ b/src/main/java/org/gcube/data/transfer/model/settings/FileUploadSettings.java
@@ -0,0 +1,47 @@
+package org.gcube.data.transfer.model.settings;
+
+import java.io.InputStream;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.gcube.data.transfer.model.options.FileUploadOptions;
+import org.gcube.data.transfer.model.options.Range;
+import org.gcube.data.transfer.model.options.TransferOptions.Protocol;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+@AllArgsConstructor
+@NoArgsConstructor
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+public class FileUploadSettings extends TransferSettings {
+
+ private InputStream passedStream;
+
+ @XmlElement
+ private FileUploadOptions options;
+
+ @Override
+ public FileUploadOptions getOptions() {
+ return options;
+ }
+
+ @Override
+ public Protocol getToUseProtocol() {
+ return Protocol.HTTP;
+ }
+
+ @Override
+ public Range getToUseRange() {
+ return Range.ONLY_80;
+ }
+
+}
diff --git a/src/main/java/org/gcube/data/transfer/model/settings/TransferSettings.java b/src/main/java/org/gcube/data/transfer/model/settings/TransferSettings.java
index ec4e260..ca410fd 100644
--- a/src/main/java/org/gcube/data/transfer/model/settings/TransferSettings.java
+++ b/src/main/java/org/gcube/data/transfer/model/settings/TransferSettings.java
@@ -16,7 +16,7 @@ import org.gcube.data.transfer.model.options.TransferOptions.Protocol;
@EqualsAndHashCode
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
-@XmlSeeAlso({HttpDownloadSettings.class,DirectTransferSettings.class})
+@XmlSeeAlso({HttpDownloadSettings.class,DirectTransferSettings.class,FileUploadSettings.class})
public abstract class TransferSettings {
public abstract T getOptions();
diff --git a/src/test/java/org/gcube/data/transfer/test/MarshallUnmarshalTest.java b/src/test/java/org/gcube/data/transfer/test/MarshallUnmarshalTest.java
index a261a25..203d5e8 100644
--- a/src/test/java/org/gcube/data/transfer/test/MarshallUnmarshalTest.java
+++ b/src/test/java/org/gcube/data/transfer/test/MarshallUnmarshalTest.java
@@ -31,10 +31,12 @@ import org.gcube.data.transfer.model.TransferRequest;
import org.gcube.data.transfer.model.TransferTicket;
import org.gcube.data.transfer.model.TransferTicket.Status;
import org.gcube.data.transfer.model.options.DirectTransferOptions;
+import org.gcube.data.transfer.model.options.FileUploadOptions;
import org.gcube.data.transfer.model.options.HttpDownloadOptions;
import org.gcube.data.transfer.model.options.TransferOptions;
import org.gcube.data.transfer.model.options.TransferOptions.TransferMethod;
import org.gcube.data.transfer.model.settings.DirectTransferSettings;
+import org.gcube.data.transfer.model.settings.FileUploadSettings;
import org.gcube.data.transfer.model.settings.HttpDownloadSettings;
import org.gcube.data.transfer.model.utils.DateWrapper;
import org.junit.BeforeClass;
@@ -58,18 +60,22 @@ public class MarshallUnmarshalTest {
public void Marshall() throws MalformedURLException{
print(createRequest(TransferMethod.HTTPDownload));
print(createRequest(TransferMethod.DirectTransfer));
+ print(createRequest(TransferMethod.FileUpload));
print(createTransferCapabilities());
print(createTicket(createRequest(TransferMethod.HTTPDownload)));
- print(createTicket(createRequest(TransferMethod.DirectTransfer)));
+ print(createTicket(createRequest(TransferMethod.DirectTransfer)));
+ print(createTicket(createRequest(TransferMethod.FileUpload)));
}
@Test
public void UnMarshall() throws MalformedURLException{
assertTrue(roundTrip(createRequest(TransferMethod.HTTPDownload)));
assertTrue(roundTrip(createRequest(TransferMethod.DirectTransfer)));
+ assertTrue(roundTrip(createRequest(TransferMethod.FileUpload)));
assertTrue(roundTrip(createTransferCapabilities()));
assertTrue(roundTrip(createTicket(createRequest(TransferMethod.HTTPDownload))));
assertTrue(roundTrip(createTicket(createRequest(TransferMethod.DirectTransfer))));
+ assertTrue(roundTrip(createTicket(createRequest(TransferMethod.FileUpload))));
}
@@ -77,9 +83,11 @@ public class MarshallUnmarshalTest {
public void toStringTest() throws MalformedURLException{
System.out.println(createRequest(TransferMethod.HTTPDownload));
System.out.println(createRequest(TransferMethod.DirectTransfer));
+ System.out.println(createRequest(TransferMethod.FileUpload));
System.out.println(createTransferCapabilities());
System.out.println(createTicket(createRequest(TransferMethod.HTTPDownload)));
- System.out.println(createTicket(createRequest(TransferMethod.DirectTransfer)));
+ System.out.println(createTicket(createRequest(TransferMethod.DirectTransfer)));
+ System.out.println(createTicket(createRequest(TransferMethod.FileUpload)));
}
@@ -96,22 +104,33 @@ public class MarshallUnmarshalTest {
*/
public static T marshal(Object resource,T result) {
-
try {
- JAXBContext context = ctx;
- Marshaller m = context.createMarshaller();
- m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ // OLD XML MARSHALLING
+// JAXBContext context = ctx;
+// Marshaller m = context.createMarshaller();
+// m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+//
+// m.marshal(resource,result);
+//
+// return result;
- m.marshal(resource,result);
+ JAXBContext jaxbContext = ctx;
+ Marshaller marshaller = jaxbContext.createMarshaller();
+ marshaller.setProperty("eclipselink.media-type", "application/json");
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ marshaller.marshal(resource, result);
return result;
}
catch(Exception e) {
throw new RuntimeException("serialisation error",e);
}
+
+
}
+
public static void print(Object resource) {
marshal(resource,new OutputStreamWriter(System.out));
@@ -159,6 +178,7 @@ public class MarshallUnmarshalTest {
public static T unmarshal(Class resourceClass,Source source) {
try {
Unmarshaller um = ctx.createUnmarshaller();
+ um.setProperty("eclipselink.media-type", "application/json");
return resourceClass.cast(um.unmarshal(source));
}
catch(Exception e) {
@@ -192,10 +212,18 @@ public class MarshallUnmarshalTest {
switch(toUseMethod){
case HTTPDownload : return new TransferRequest(UUID.randomUUID().toString(), createHttpSettings(),new Destination("myImportedFile"));
case DirectTransfer : return new TransferRequest(UUID.randomUUID().toString(), createDirectTransferSettings(),new Destination("myImportedFile"));
+ case FileUpload : return new TransferRequest(UUID.randomUUID().toString(),getFileUploadSettings(),new Destination("myImportedFile"));
default : return null;
}
}
+ private FileUploadSettings getFileUploadSettings(){
+ return new FileUploadSettings(getClass().getResourceAsStream("MarshallUnmarhsallTest.java"),getFileUploadOptions());
+ }
+
+ private FileUploadOptions getFileUploadOptions(){
+ return new FileUploadOptions();
+ }
private PluginInvocation createPluginInvocation(){
HashMap params=new HashMap<>();