diff --git a/pom.xml b/pom.xml
index b8d0f34..96730eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,12 @@
${jersey.version}
provided
+
+ org.glassfish.jersey.media
+ jersey-media-multipart
+ ${jersey.version}
+ provided
+
org.apache.cxf
cxf-rt-rs-client
diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java
index a6a4ab1..6934da5 100644
--- a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java
+++ b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java
@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
+import com.inteligr8.alfresco.acs.api.NodesCxfApi;
import com.inteligr8.rs.ClientConfiguration;
/**
@@ -25,5 +26,9 @@ public class AcsPublicRestApiCxfImpl extends AcsPublicRestApi {
protected T getApi(Class apiClass) {
return this.client.getApi(apiClass);
}
+
+ public NodesCxfApi getNodesExtApi() {
+ return this.client.getApi(NodesCxfApi.class);
+ }
}
diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java
index e517ea5..8548a11 100644
--- a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java
+++ b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java
@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
+import com.inteligr8.alfresco.acs.api.NodesJerseyApi;
import com.inteligr8.rs.ClientConfiguration;
/**
@@ -25,5 +26,9 @@ public class AcsPublicRestApiJerseyImpl extends AcsPublicRestApi {
protected T getApi(Class apiClass) {
return this.client.getApi(apiClass);
}
+
+ public NodesJerseyApi getNodesExtApi() {
+ return this.client.getApi(NodesJerseyApi.class);
+ }
}
diff --git a/src/main/java/com/inteligr8/alfresco/acs/api/NodesCxfApi.java b/src/main/java/com/inteligr8/alfresco/acs/api/NodesCxfApi.java
new file mode 100644
index 0000000..71bf452
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/acs/api/NodesCxfApi.java
@@ -0,0 +1,54 @@
+package com.inteligr8.alfresco.acs.api;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+
+import com.inteligr8.alfresco.acs.model.Error;
+import com.inteligr8.alfresco.acs.model.NodeBodyCreate;
+import com.inteligr8.alfresco.acs.model.NodeEntry;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
+@Path("/api/-default-/public/alfresco/versions/1")
+@Api(value = "/api/-default-/public/alfresco/versions/1", description = "")
+public interface NodesCxfApi {
+
+ @POST
+ @Path("/nodes/{nodeId}/children")
+ @Consumes({ "application/json", "multipart/form-data" })
+ @Produces({ "application/json" })
+ @ApiOperation(value = "Create a node", tags={ })
+ @ApiResponses(value = {
+ @ApiResponse(code = 201, message = "Successful response", response = NodeEntry.class),
+ @ApiResponse(code = 400, message = "Invalid parameter: **nodeId** is not a valid format or **nodeBodyCreate** is invalid "),
+ @ApiResponse(code = 401, message = "Authentication failed"),
+ @ApiResponse(code = 403, message = "Current user does not have permission to create children of **nodeId**"),
+ @ApiResponse(code = 404, message = "**nodeId** or **renditionId** does not exist "),
+ @ApiResponse(code = 409, message = "New name clashes with an existing node in the current parent folder"),
+ @ApiResponse(code = 413, message = "Content exceeds individual file size limit configured for the network or system"),
+ @ApiResponse(code = 415, message = "Content Type is not supported"),
+ @ApiResponse(code = 422, message = "Model integrity exception including a file name containing invalid characters"),
+ @ApiResponse(code = 507, message = "Content exceeds overall storage quota limit configured for the network or system"),
+ @ApiResponse(code = 200, message = "Unexpected error", response = Error.class) })
+ public NodeEntry createNode(
+ @PathParam("nodeId") String nodeId,
+ NodeBodyCreate nodeBodyCreate,
+ @QueryParam("autoRename") Boolean autoRename,
+ @QueryParam("majorVersion") Boolean majorVersion,
+ @QueryParam("versioningEnabled") Boolean versioningEnabled,
+ @QueryParam("include") List include,
+ @QueryParam("fields") List fields,
+ List attachments);
+
+}
diff --git a/src/main/java/com/inteligr8/alfresco/acs/api/NodesJerseyApi.java b/src/main/java/com/inteligr8/alfresco/acs/api/NodesJerseyApi.java
new file mode 100644
index 0000000..b54f433
--- /dev/null
+++ b/src/main/java/com/inteligr8/alfresco/acs/api/NodesJerseyApi.java
@@ -0,0 +1,57 @@
+package com.inteligr8.alfresco.acs.api;
+
+import java.io.InputStream;
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+
+import com.inteligr8.alfresco.acs.model.Error;
+import com.inteligr8.alfresco.acs.model.NodeBodyCreate;
+import com.inteligr8.alfresco.acs.model.NodeEntry;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
+@Path("/api/-default-/public/alfresco/versions/1")
+@Api(value = "/api/-default-/public/alfresco/versions/1", description = "")
+public interface NodesJerseyApi {
+
+ @POST
+ @Path("/nodes/{nodeId}/children")
+ @Consumes({ "application/json", "multipart/form-data" })
+ @Produces({ "application/json" })
+ @ApiOperation(value = "Create a node", tags={ })
+ @ApiResponses(value = {
+ @ApiResponse(code = 201, message = "Successful response", response = NodeEntry.class),
+ @ApiResponse(code = 400, message = "Invalid parameter: **nodeId** is not a valid format or **nodeBodyCreate** is invalid "),
+ @ApiResponse(code = 401, message = "Authentication failed"),
+ @ApiResponse(code = 403, message = "Current user does not have permission to create children of **nodeId**"),
+ @ApiResponse(code = 404, message = "**nodeId** or **renditionId** does not exist "),
+ @ApiResponse(code = 409, message = "New name clashes with an existing node in the current parent folder"),
+ @ApiResponse(code = 413, message = "Content exceeds individual file size limit configured for the network or system"),
+ @ApiResponse(code = 415, message = "Content Type is not supported"),
+ @ApiResponse(code = 422, message = "Model integrity exception including a file name containing invalid characters"),
+ @ApiResponse(code = 507, message = "Content exceeds overall storage quota limit configured for the network or system"),
+ @ApiResponse(code = 200, message = "Unexpected error", response = Error.class) })
+ public NodeEntry createNode(
+ @PathParam("nodeId") String nodeId,
+ NodeBodyCreate nodeBodyCreate,
+ @QueryParam("autoRename") Boolean autoRename,
+ @QueryParam("majorVersion") Boolean majorVersion,
+ @QueryParam("versioningEnabled") Boolean versioningEnabled,
+ @QueryParam("include") List include,
+ @QueryParam("fields") List fields,
+ @FormDataParam("filedata") InputStream filedataStream,
+ @FormDataParam("filedata") FormDataContentDisposition filedataDisposition);
+
+}