Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
0e8d522769 | |||
7185dd225e | |||
1e4f420f47 | |||
64330e3ca4 | |||
1aa4c4943f | |||
8e538cfec5 | |||
d0c1e92bce | |||
c4a2bd66a2 | |||
02deed49be | |||
c879fa41b7 | |||
10b8a4c982 | |||
7dd7cc0fd4 | |||
69dbe968ef | |||
de7da4d1c2 | |||
e3cb51f910 |
29
pom.xml
29
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.inteligr8.alfresco</groupId>
|
||||
<artifactId>acs-public-rest-api</artifactId>
|
||||
<version>1.0.1-v2</version>
|
||||
<version>1.0.5-v2</version>
|
||||
<name>Alfresco Content Services ReST API Client for Java</name>
|
||||
|
||||
<properties>
|
||||
@@ -25,9 +25,9 @@
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
<groupId>com.inteligr8</groupId>
|
||||
<artifactId>common-rest-api</artifactId>
|
||||
<version>1.0.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.swagger</groupId>
|
||||
@@ -40,27 +40,18 @@
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.12.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
||||
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
||||
<version>2.12.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.ws.rs</groupId>
|
||||
<artifactId>jakarta.ws.rs-api</artifactId>
|
||||
<version>2.1.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.ext</groupId>
|
||||
<artifactId>jersey-proxy-client</artifactId>
|
||||
<version>${jersey.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-multipart</artifactId>
|
||||
<version>${jersey.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.cxf</groupId>
|
||||
<artifactId>cxf-rt-rs-client</artifactId>
|
||||
|
@@ -1,20 +0,0 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import javax.ws.rs.client.ClientRequestContext;
|
||||
import javax.ws.rs.client.ClientRequestFilter;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
|
||||
public class AccessTokenRequestFilter implements ClientRequestFilter {
|
||||
|
||||
private final String token;
|
||||
|
||||
public AccessTokenRequestFilter(String token) {
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void filter(ClientRequestContext requestContext) {
|
||||
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, "Bearer " + this.token);
|
||||
}
|
||||
|
||||
}
|
@@ -1,14 +1,14 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import javax.ws.rs.client.ClientRequestFilter;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan
|
||||
public class AcsClientConfiguration {
|
||||
public class AcsClientConfiguration extends ClientConfiguration {
|
||||
|
||||
@Value("${content.service.baseUrl:http://localhost:8080/alfresco}")
|
||||
private String baseUrl;
|
||||
@@ -21,19 +21,70 @@ public class AcsClientConfiguration {
|
||||
|
||||
@Value("${content.service.security.accessToken:#{null}}")
|
||||
private String accessToken;
|
||||
|
||||
@Value("${content.service.security.oauth.tokenUrl:#{null}}")
|
||||
private String oAuthTokenUrl;
|
||||
|
||||
@Value("${content.service.security.oauth.clientId:#{null}}")
|
||||
private String oAuthClientId;
|
||||
|
||||
@Value("${content.service.security.oauth.clientSecret:#{null}}")
|
||||
private String oAuthClientSecret;
|
||||
|
||||
@Value("${content.service.security.oauth.authCode:#{null}}")
|
||||
private String oAuthAuthCode;
|
||||
|
||||
@Value("${content.service.security.oauth.authRedirectUri:#{null}}")
|
||||
private String oAuthAuthRedirectUri;
|
||||
|
||||
@Value("${content.service.security.oauth.grantUsername:#{null}}")
|
||||
private String oAuthUsername;
|
||||
|
||||
@Value("${content.service.security.oauth.grantPassword:#{null}}")
|
||||
private String oAuthPassword;
|
||||
|
||||
public String getBaseUrl() {
|
||||
return this.baseUrl;
|
||||
}
|
||||
|
||||
public ClientRequestFilter getAuthorizationFilter() {
|
||||
if (this.accessToken != null) {
|
||||
return new AccessTokenRequestFilter(this.accessToken);
|
||||
} else if (this.basicAuthUsername != null) {
|
||||
return new BasicAuthRequestFilter(this.basicAuthUsername, this.basicAuthPassword);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getBasicAuthUsername() {
|
||||
return this.basicAuthUsername;
|
||||
}
|
||||
|
||||
public String getBasicAuthPassword() {
|
||||
return this.basicAuthPassword;
|
||||
}
|
||||
|
||||
public String getAccessToken() {
|
||||
return this.accessToken;
|
||||
}
|
||||
|
||||
public String getOAuthTokenUrl() {
|
||||
return this.oAuthTokenUrl;
|
||||
}
|
||||
|
||||
public String getOAuthClientId() {
|
||||
return this.oAuthClientId;
|
||||
}
|
||||
|
||||
public String getOAuthClientSecret() {
|
||||
return this.oAuthClientSecret;
|
||||
}
|
||||
|
||||
public String getOAuthAuthCode() {
|
||||
return this.oAuthAuthCode;
|
||||
}
|
||||
|
||||
public String getOAuthAuthRedirectUri() {
|
||||
return this.oAuthAuthRedirectUri;
|
||||
}
|
||||
|
||||
public String getOAuthUsername() {
|
||||
return this.oAuthUsername;
|
||||
}
|
||||
|
||||
public String getOAuthPassword() {
|
||||
return this.oAuthPassword;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,58 +1,25 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.client.ClientRequestFilter;
|
||||
import javax.ws.rs.ext.RuntimeDelegate;
|
||||
|
||||
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
|
||||
import org.apache.cxf.jaxrs.client.WebClient;
|
||||
import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
import com.inteligr8.rs.ClientCxfImpl;
|
||||
|
||||
/**
|
||||
* Alfresco Content Services Spring Client for CXF
|
||||
* Configured JAX-RS Client & WebTarget for ACS & CXF
|
||||
*/
|
||||
@Component("acsClient.cxf")
|
||||
@Component("acs.client.cxf")
|
||||
@Lazy
|
||||
public class AcsClientCxfImpl extends AcsClient implements InitializingBean {
|
||||
public class AcsClientCxfImpl extends ClientCxfImpl {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(AcsClientCxfImpl.class);
|
||||
@Autowired
|
||||
private AcsClientConfiguration config;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
if (RuntimeDelegate.getInstance() == null) {
|
||||
this.logger.info("Setting JAX-RS runtime delegate to the CXF library");
|
||||
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
|
||||
} else if (RuntimeDelegate.getInstance() instanceof RuntimeDelegateImpl) {
|
||||
this.logger.info("JAX-RS runtime delegate already the CXF library");
|
||||
} else {
|
||||
this.logger.warn("Setting JAX-RS runtime delegate to the CXF library; was: " + RuntimeDelegate.getInstance().getClass().getName());
|
||||
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
|
||||
}
|
||||
}
|
||||
|
||||
public WebClient getCxfClient() {
|
||||
List<Object> providersAndFilters = new LinkedList<Object>();
|
||||
providersAndFilters.add(new JacksonJaxbJsonProvider());
|
||||
|
||||
ClientRequestFilter authFilter = this.getConfig().getAuthorizationFilter();
|
||||
if (authFilter != null)
|
||||
providersAndFilters.add(authFilter);
|
||||
|
||||
return WebClient.create(this.getConfig().getBaseUrl(), providersAndFilters);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T getApi(Class<T> apiClass) {
|
||||
return JAXRSClientFactory.fromClient(this.getCxfClient(), apiClass);
|
||||
protected ClientConfiguration getConfig() {
|
||||
return this.config;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,40 +1,25 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import javax.ws.rs.ext.RuntimeDelegate;
|
||||
|
||||
import org.glassfish.jersey.client.proxy.WebResourceFactory;
|
||||
import org.glassfish.jersey.internal.RuntimeDelegateImpl;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
import com.inteligr8.rs.ClientJerseyImpl;
|
||||
|
||||
/**
|
||||
* Alfresco Content Services Spring Client for Jersey
|
||||
* Configured JAX-RS Client & WebTarget for ACS & Jersey
|
||||
*/
|
||||
@Component("acsClient.jersey")
|
||||
@Component("acs.client.jersey")
|
||||
@Lazy
|
||||
public class AcsClientJerseyImpl extends AcsClient implements InitializingBean {
|
||||
public class AcsClientJerseyImpl extends ClientJerseyImpl {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(AcsClientJerseyImpl.class);
|
||||
@Autowired
|
||||
private AcsClientConfiguration config;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
if (RuntimeDelegate.getInstance() == null) {
|
||||
this.logger.info("Setting JAX-RS runtime delegate to the Jersey library");
|
||||
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
|
||||
} else if (RuntimeDelegate.getInstance() instanceof RuntimeDelegateImpl) {
|
||||
this.logger.info("JAX-RS runtime delegate already the Jersey library");
|
||||
} else {
|
||||
this.logger.warn("Setting JAX-RS runtime delegate to the Jersey library; was: " + RuntimeDelegate.getInstance().getClass().getName());
|
||||
RuntimeDelegate.setInstance(new RuntimeDelegateImpl());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T getApi(Class<T> apiClass) {
|
||||
return WebResourceFactory.newResource(apiClass, this.getTarget());
|
||||
protected ClientConfiguration getConfig() {
|
||||
return this.config;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,14 +1,5 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.ClientBuilder;
|
||||
import javax.ws.rs.client.ClientRequestFilter;
|
||||
import javax.ws.rs.client.WebTarget;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
|
||||
import com.inteligr8.alfresco.acs.api.ActionsApi;
|
||||
import com.inteligr8.alfresco.acs.api.ActivitiesApi;
|
||||
import com.inteligr8.alfresco.acs.api.AspectsApi;
|
||||
@@ -34,39 +25,16 @@ import com.inteligr8.alfresco.acs.api.TagsApi;
|
||||
import com.inteligr8.alfresco.acs.api.TrashcanApi;
|
||||
import com.inteligr8.alfresco.acs.api.TypesApi;
|
||||
import com.inteligr8.alfresco.acs.api.VersionsApi;
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
|
||||
/**
|
||||
* Alfresco Content Services Spring Client
|
||||
* Alfresco Content Services Spring-ready API
|
||||
*/
|
||||
@Component("acsClient")
|
||||
public class AcsClient {
|
||||
public abstract class AcsPublicRestApi {
|
||||
|
||||
@Autowired
|
||||
private AcsClientConfiguration config;
|
||||
abstract ClientConfiguration getConfig();
|
||||
|
||||
protected AcsClientConfiguration getConfig() {
|
||||
return this.config;
|
||||
}
|
||||
|
||||
public Client getClient() {
|
||||
ClientRequestFilter authFilter = this.config.getAuthorizationFilter();
|
||||
|
||||
ClientBuilder clientBuilder = ClientBuilder.newBuilder()
|
||||
.register(new JacksonJaxbJsonProvider());
|
||||
if (authFilter != null)
|
||||
clientBuilder.register(authFilter);
|
||||
|
||||
return clientBuilder.build();
|
||||
}
|
||||
|
||||
public WebTarget getTarget() {
|
||||
return this.getClient()
|
||||
.target(this.config.getBaseUrl());
|
||||
}
|
||||
|
||||
protected <T> T getApi(Class<T> apiClass) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
protected abstract <T> T getApi(Class<T> apiClass);
|
||||
|
||||
public ActionsApi getActionsApi() {
|
||||
return this.getApi(ActionsApi.class);
|
@@ -0,0 +1,34 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Alfresco Content Services Spring-ready API for CXF
|
||||
*/
|
||||
@Component("acs.api.cxf")
|
||||
@Lazy
|
||||
public class AcsPublicRestApiCxfImpl extends AcsPublicRestApi {
|
||||
|
||||
@Autowired
|
||||
private AcsClientCxfImpl client;
|
||||
|
||||
@Override
|
||||
ClientConfiguration getConfig() {
|
||||
return this.client.getConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T getApi(Class<T> apiClass) {
|
||||
return this.client.getApi(apiClass);
|
||||
}
|
||||
|
||||
public NodesCxfApi getNodesExtApi() {
|
||||
return this.client.getApi(NodesCxfApi.class);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* Alfresco Content Services Spring-ready API for Jersey
|
||||
*/
|
||||
@Component("acs.api.jersey")
|
||||
@Lazy
|
||||
public class AcsPublicRestApiJerseyImpl extends AcsPublicRestApi {
|
||||
|
||||
@Autowired
|
||||
private AcsClientJerseyImpl client;
|
||||
|
||||
@Override
|
||||
ClientConfiguration getConfig() {
|
||||
return this.client.getConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T getApi(Class<T> apiClass) {
|
||||
return this.client.getApi(apiClass);
|
||||
}
|
||||
|
||||
public NodesJerseyApi getNodesExtApi() {
|
||||
return this.client.getApi(NodesJerseyApi.class);
|
||||
}
|
||||
|
||||
}
|
@@ -1,28 +0,0 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Base64;
|
||||
|
||||
import javax.ws.rs.client.ClientRequestContext;
|
||||
import javax.ws.rs.client.ClientRequestFilter;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
|
||||
public class BasicAuthRequestFilter implements ClientRequestFilter {
|
||||
|
||||
private final String username;
|
||||
private final String password;
|
||||
|
||||
public BasicAuthRequestFilter(String username, String password) {
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void filter(ClientRequestContext requestContext) throws UnsupportedEncodingException {
|
||||
String userAndPass = this.username + ":" + this.password;
|
||||
String userAndPassEncoded = Base64.getEncoder().encodeToString(userAndPass.getBytes("utf-8"));
|
||||
|
||||
requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, "Basic " + userAndPassEncoded);
|
||||
}
|
||||
|
||||
}
|
@@ -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<String> include,
|
||||
@QueryParam("fields") List<String> fields,
|
||||
List<Attachment> attachments);
|
||||
|
||||
}
|
@@ -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<String> include,
|
||||
@QueryParam("fields") List<String> fields,
|
||||
@FormDataParam("filedata") InputStream filedataStream,
|
||||
@FormDataParam("filedata") FormDataContentDisposition filedataDisposition);
|
||||
|
||||
}
|
35
src/test/java/com/inteligr8/alfresco/acs/ConditionalIT.java
Normal file
35
src/test/java/com/inteligr8/alfresco/acs/ConditionalIT.java
Normal file
@@ -0,0 +1,35 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.methods.RequestBuilder;
|
||||
import org.apache.http.impl.client.DefaultRedirectStrategy;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
|
||||
public abstract class ConditionalIT {
|
||||
|
||||
public abstract ClientConfiguration getConfiguration();
|
||||
|
||||
public boolean hostExists() {
|
||||
String uri = this.getConfiguration().getBaseUrl();
|
||||
|
||||
HttpUriRequest request = RequestBuilder.get()
|
||||
.setUri(uri)
|
||||
.build();
|
||||
|
||||
HttpClient client = HttpClientBuilder.create()
|
||||
.setRedirectStrategy(DefaultRedirectStrategy.INSTANCE)
|
||||
.build();
|
||||
|
||||
try {
|
||||
HttpResponse response = client.execute(request);
|
||||
return response.getStatusLine().getStatusCode() < 300;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.ws.rs.NotFoundException;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.condition.EnabledIf;
|
||||
|
||||
import com.inteligr8.alfresco.acs.api.DiscoveryApi;
|
||||
import com.inteligr8.alfresco.acs.api.NodesApi;
|
||||
import com.inteligr8.alfresco.acs.model.RepositoryInfo;
|
||||
|
||||
public abstract class ConnectionClientIT extends ConditionalIT {
|
||||
|
||||
public abstract AcsPublicRestApi getClient();
|
||||
|
||||
@Test
|
||||
@EnabledIf("hostExists")
|
||||
public void testDiscovery() {
|
||||
DiscoveryApi api = this.getClient().getDiscoveryApi();
|
||||
RepositoryInfo repoInfo = api.getRepositoryInformation().getEntry().getRepository();
|
||||
|
||||
Assertions.assertNotNull(repoInfo);
|
||||
Assertions.assertFalse(repoInfo.getStatus().isIsReadOnly());
|
||||
Assertions.assertEquals("6", repoInfo.getVersion().getMajor());
|
||||
}
|
||||
|
||||
@Test
|
||||
@EnabledIf("hostExists")
|
||||
public void testMissingNode() {
|
||||
NodesApi api = this.getClient().getNodesApi();
|
||||
|
||||
Assertions.assertThrows(NotFoundException.class, () -> {
|
||||
api.getNode(UUID.randomUUID().toString(), null, null, null);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@@ -1,59 +1,28 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.methods.RequestBuilder;
|
||||
import org.apache.http.impl.client.DefaultRedirectStrategy;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.condition.EnabledIf;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
||||
|
||||
import com.inteligr8.alfresco.acs.api.DiscoveryApi;
|
||||
import com.inteligr8.alfresco.acs.model.RepositoryInfo;
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
|
||||
@TestPropertySource(locations = {"/local.properties"})
|
||||
@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsClient.class, AcsClientCxfImpl.class})
|
||||
public class ConnectionCxfClientIT {
|
||||
@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiCxfImpl.class, AcsClientCxfImpl.class})
|
||||
public class ConnectionCxfClientIT extends ConnectionClientIT {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("acsClient.cxf")
|
||||
private AcsClient client;
|
||||
@Qualifier("acs.api.cxf")
|
||||
private AcsPublicRestApi client;
|
||||
|
||||
@Test
|
||||
@EnabledIf("hostExists")
|
||||
public void testDiscovery() {
|
||||
DiscoveryApi api = this.client.getDiscoveryApi();
|
||||
RepositoryInfo repoInfo = api.getRepositoryInformation().getEntry().getRepository();
|
||||
|
||||
Assertions.assertNotNull(repoInfo);
|
||||
Assertions.assertFalse(repoInfo.getStatus().isIsReadOnly());
|
||||
Assertions.assertEquals("6", repoInfo.getVersion().getMajor());
|
||||
@Override
|
||||
public AcsPublicRestApi getClient() {
|
||||
return this.client;
|
||||
}
|
||||
|
||||
public boolean hostExists() {
|
||||
URI uri = this.client.getTarget().getUri();
|
||||
|
||||
HttpUriRequest request = RequestBuilder.get()
|
||||
.setUri(uri)
|
||||
.build();
|
||||
|
||||
HttpClient client = HttpClientBuilder.create()
|
||||
.setRedirectStrategy(DefaultRedirectStrategy.INSTANCE)
|
||||
.build();
|
||||
|
||||
try {
|
||||
HttpResponse response = client.execute(request);
|
||||
return response.getStatusLine().getStatusCode() < 300;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public ClientConfiguration getConfiguration() {
|
||||
return this.client.getConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,58 +1,28 @@
|
||||
package com.inteligr8.alfresco.acs;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.methods.RequestBuilder;
|
||||
import org.apache.http.impl.client.DefaultRedirectStrategy;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
|
||||
|
||||
import com.inteligr8.alfresco.acs.api.DiscoveryApi;
|
||||
import com.inteligr8.alfresco.acs.model.RepositoryInfo;
|
||||
import com.inteligr8.rs.ClientConfiguration;
|
||||
|
||||
@TestPropertySource(locations = {"/local.properties"})
|
||||
@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsClient.class, AcsClientJerseyImpl.class})
|
||||
public class ConnectionJerseyClientIT {
|
||||
@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiJerseyImpl.class, AcsClientJerseyImpl.class})
|
||||
public class ConnectionJerseyClientIT extends ConnectionClientIT {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("acsClient.jersey")
|
||||
private AcsClient client;
|
||||
@Qualifier("acs.api.jersey")
|
||||
private AcsPublicRestApi client;
|
||||
|
||||
@Test
|
||||
//@EnabledIf("hostExists")
|
||||
public void testDiscovery() {
|
||||
DiscoveryApi api = this.client.getDiscoveryApi();
|
||||
RepositoryInfo repoInfo = api.getRepositoryInformation().getEntry().getRepository();
|
||||
|
||||
Assertions.assertNotNull(repoInfo);
|
||||
Assertions.assertFalse(repoInfo.getStatus().isIsReadOnly());
|
||||
Assertions.assertEquals("6", repoInfo.getVersion().getMajor());
|
||||
@Override
|
||||
public AcsPublicRestApi getClient() {
|
||||
return this.client;
|
||||
}
|
||||
|
||||
public boolean hostExists() {
|
||||
URI uri = this.client.getTarget().getUri();
|
||||
|
||||
HttpUriRequest request = RequestBuilder.get()
|
||||
.setUri(uri)
|
||||
.build();
|
||||
|
||||
HttpClient client = HttpClientBuilder.create()
|
||||
.setRedirectStrategy(DefaultRedirectStrategy.INSTANCE)
|
||||
.build();
|
||||
|
||||
try {
|
||||
HttpResponse response = client.execute(request);
|
||||
return response.getStatusLine().getStatusCode() < 300;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public ClientConfiguration getConfiguration() {
|
||||
return this.client.getConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
5
src/test/resources/local-oauth.properties
Normal file
5
src/test/resources/local-oauth.properties
Normal file
@@ -0,0 +1,5 @@
|
||||
content.service.baseUrl=http://localhost:8080/alfresco
|
||||
content.service.security.oauth.tokenUrl=http://auth.example.org:8080/auth/realms/alfresco/protocol/openid-connect/token
|
||||
content.service.security.oauth.clientId=alfresco
|
||||
content.service.security.oauth.grantUsername=admin
|
||||
content.service.security.oauth.grantPassword=admin
|
Reference in New Issue
Block a user