diff --git a/pom.xml b/pom.xml index 1bc02ea..0921d64 100644 --- a/pom.xml +++ b/pom.xml @@ -4,35 +4,28 @@ 4.0.0 com.inteligr8.alfresco acs-public-rest-api - 1.1-SNAPSHOT - Alfresco Content Services ReST API Client for Java + 2.0-SNAPSHOT + Alfresco Content Services ReST API for Java utf-8 8 8 + lines,vars,source - https://api-explorer.alfresco.com/api-explorer + http://localhost:8080/alfresco acs7 com.inteligr8.alfresco.acs - src/test/none - 5.7.2 - 5.2.14.RELEASE - 2.34 - 3.3.2 + 2.35 + 3.4.7 false - - com.inteligr8 - common-rest-api - 1.1-SNAPSHOT - io.swagger swagger-jaxrs @@ -45,64 +38,26 @@ - org.glassfish.jersey.ext - jersey-proxy-client - ${jersey.version} - provided + jakarta.ws.rs + jakarta.ws.rs-api + 2.1.6 + + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + 2.12.2 + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf.version} + true org.glassfish.jersey.media jersey-media-multipart ${jersey.version} - provided - - - org.apache.cxf - cxf-rt-rs-client - ${cxf.version} - provided - - - org.glassfish.jersey.core - jersey-client - ${jersey.version} - test - - - org.glassfish.jersey.inject - jersey-hk2 - ${jersey.version} - test - - - org.glassfish.jersey.media - jersey-media-json-jackson - ${jersey.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit.version} - test - - - org.springframework - spring-test - ${spring.version} - test - - - org.apache.httpcomponents - httpclient - 4.5.9 - test - - - org.apache.logging.log4j - log4j-slf4j-impl - 2.16.0 - test + true @@ -125,21 +80,6 @@ - - add-services - process-test-resources - - add-test-resource - - - - - ${it.directory} - false - - - - @@ -148,42 +88,9 @@ ${acs.platform.tag} - - maven-surefire-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Jersey* - **/*Cxf* - - - - - maven-failsafe-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Jersey* - **/*Cxf* - - - maven-javadoc-plugin + 3.3.2 javadoc @@ -199,96 +106,6 @@ - - it-jersey - - src/test/jersey - - - - - maven-surefire-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Jersey* - - - **/*IT.java - - - - - maven-failsafe-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Jersey*IT.java - - - - - - - - it-cxf - - src/test/cxf - - - - - maven-surefire-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Cxf* - - - **/*IT.java - - - - - maven-failsafe-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - **/*Cxf*IT.java - - - - - - swagger-codegen @@ -541,8 +358,16 @@ - inteligr8-public + inteligr8-releases https://repos.inteligr8.com/nexus/repository/inteligr8-public + true + false + + + inteligr8-snapshots + https://repos.inteligr8.com/nexus/repository/inteligr8-snapshots + false + true diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java deleted file mode 100644 index b436423..0000000 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsClientConfiguration.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.inteligr8.alfresco.acs; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -import com.inteligr8.rs.ClientCxfConfiguration; -import com.inteligr8.rs.ClientJerseyConfiguration; - -/** - * This class provides a POJO & Spring-based implementation of the - * ClientConfiguration interface. You can use it outside of the Spring - * context, but you will need the spring-context and spring-beans libraries in - * your non-Spring application. - * - * @author brian@inteligr8.com - */ -@Configuration -@ComponentScan -public class AcsClientConfiguration implements ClientCxfConfiguration, ClientJerseyConfiguration { - - @Value("${content.service.baseUrl:http://localhost:8080/alfresco}") - private String baseUrl; - - @Value("${content.service.security.basicAuth.username:admin}") - private String basicAuthUsername; - - @Value("${content.service.security.basicAuth.password:admin}") - private String basicAuthPassword; - - @Value("${content.service.security.bearerToken:#{null}}") - private String bearerToken; - - @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; - - @Value("${content.service.cxf.defaultBusEnabled:true}") - private boolean defaultBusEnabled; - - @Value("${content.service.jersey.putBodyRequired:true}") - private boolean putBodyRequired; - - public String getBaseUrl() { - return this.baseUrl; - } - - public void setBaseUrl(String baseUrl) { - this.baseUrl = baseUrl; - } - - public String getBasicAuthUsername() { - return this.basicAuthUsername; - } - - public void setBasicAuthUsername(String basicAuthUsername) { - this.basicAuthUsername = basicAuthUsername; - } - - public String getBasicAuthPassword() { - return this.basicAuthPassword; - } - - public void setBasicAuthPassword(String basicAuthPassword) { - this.basicAuthPassword = basicAuthPassword; - } - - public String getBearerToken() { - return this.bearerToken; - } - - public void setBearerToken(String bearerToken) { - this.bearerToken = bearerToken; - } - - public String getOAuthTokenUrl() { - return this.oAuthTokenUrl; - } - - public void setOAuthTokenUrl(String oAuthTokenUrl) { - this.oAuthTokenUrl = oAuthTokenUrl; - } - - public String getOAuthClientId() { - return this.oAuthClientId; - } - - public void setOAuthClientId(String oAuthClientId) { - this.oAuthClientId = oAuthClientId; - } - - public String getOAuthClientSecret() { - return this.oAuthClientSecret; - } - - public void setOAuthClientSecret(String oAuthClientSecret) { - this.oAuthClientSecret = oAuthClientSecret; - } - - public String getOAuthAuthCode() { - return this.oAuthAuthCode; - } - - public void setOAuthAuthCode(String oAuthAuthCode) { - this.oAuthAuthCode = oAuthAuthCode; - } - - public String getOAuthAuthRedirectUri() { - return this.oAuthAuthRedirectUri; - } - - public void setOAuthAuthRedirectUri(String oAuthAuthRedirectUri) { - this.oAuthAuthRedirectUri = oAuthAuthRedirectUri; - } - - public String getOAuthUsername() { - return this.oAuthUsername; - } - - public void setOAuthUsername(String oAuthUsername) { - this.oAuthUsername = oAuthUsername; - } - - public String getOAuthPassword() { - return this.oAuthPassword; - } - - public void setOAuthPassword(String oAuthPassword) { - this.oAuthPassword = oAuthPassword; - } - - public boolean isDefaultBusEnabled() { - return this.defaultBusEnabled; - } - - public void setDefaultBusEnabled(boolean defaultBusEnabled) { - this.defaultBusEnabled = defaultBusEnabled; - } - - public boolean isPutBodyRequired() { - return this.putBodyRequired; - } - - public void setPutBodyRequired(boolean putBodyRequired) { - this.putBodyRequired = putBodyRequired; - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java deleted file mode 100644 index 1cd5f6c..0000000 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsClientCxfImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -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.rs.ClientCxfConfiguration; -import com.inteligr8.rs.ClientCxfImpl; - -/** - * This class provides a POJO & Spring-based implementation of the Apache - * CXF client. You can use it outside of the Spring context, but you will need - * the spring-context and spring-beans libraries in your non-Spring - * application. - * - * @author brian@inteligr8.com - */ -@Component("acs.client.cxf") -@Lazy -public class AcsClientCxfImpl extends ClientCxfImpl { - - @Autowired - private AcsClientConfiguration config; - - /** - * This constructor is for Spring use. - */ - protected AcsClientCxfImpl() { - } - - /** - * This constructor is for POJO use. - * @param config - */ - public AcsClientCxfImpl(AcsClientConfiguration config) { - this.config = config; - } - - @Override - protected ClientCxfConfiguration getConfig() { - return this.config; - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsClientJerseyImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsClientJerseyImpl.java deleted file mode 100644 index b1a14b6..0000000 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsClientJerseyImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -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.rs.ClientJerseyConfiguration; -import com.inteligr8.rs.ClientJerseyImpl; - -/** - * This class provides a POJO & Spring-based implementation of the Apache - * CXF client. You can use it outside of the Spring context, but you will need - * the spring-context and spring-beans libraries in your non-Spring - * application. - * - * @author brian@inteligr8.com - */ -@Component("acs.client.jersey") -@Lazy -public class AcsClientJerseyImpl extends ClientJerseyImpl { - - @Autowired - private AcsClientConfiguration config; - - /** - * This constructor is for Spring use. - */ - protected AcsClientJerseyImpl() { - } - - /** - * This constructor is for POJO use. - * @param config - */ - public AcsClientJerseyImpl(AcsClientConfiguration config) { - this.config = config; - } - - @Override - protected ClientJerseyConfiguration getConfig() { - return this.config; - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApi.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApi.java index 4c38b15..5de7522 100644 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApi.java +++ b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApi.java @@ -26,236 +26,123 @@ import com.inteligr8.alfresco.acs.api.TrashcanApi; import com.inteligr8.alfresco.acs.api.TypesApi; import com.inteligr8.alfresco.acs.api.V0Api; import com.inteligr8.alfresco.acs.api.VersionsApi; -import com.inteligr8.rs.AuthorizationFilter; -import com.inteligr8.rs.Client; -import com.inteligr8.rs.ClientConfiguration; /** - * This class serves as the base implementation for the JAX-RS API for the ACS - * Public ReST API. + * This interface consolidates the JAX-RS APIs available in the ACS Public + * ReST API. * * @author brian@inteligr8.com */ -public abstract class AcsPublicRestApi { +public interface AcsPublicRestApi { - abstract ClientConfiguration getConfig(); + T getApi(Class apiClass); - abstract Client getClient(); - - protected final T getApi(Class apiClass) { - return this.getApi(null, apiClass); - } - - protected T getApi(AuthorizationFilter authFilter, Class apiClass) { - return this.getClient().getApi(authFilter, apiClass); - } - - public ActionsApi getActionsApi() { + default ActionsApi getActionsApi() { return this.getApi(ActionsApi.class); } - public ActionsApi getActionsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ActionsApi.class); - } - - public ActivitiesApi getActivitiesApi() { + default ActivitiesApi getActivitiesApi() { return this.getApi(ActivitiesApi.class); } - public ActivitiesApi getActivitiesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ActivitiesApi.class); - } - - public AspectsApi getAspectsApi() { + default AspectsApi getAspectsApi() { return this.getApi(AspectsApi.class); } - - public AspectsApi getAspectsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AspectsApi.class); - } - public AuditApi getAuditApi() { + default AuditApi getAuditApi() { return this.getApi(AuditApi.class); } - - public AuditApi getAuditApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AuditApi.class); - } - public AuthenticationApi getAuthenticationApi() { + default AuthenticationApi getAuthenticationApi() { return this.getApi(AuthenticationApi.class); } - public AuthenticationApi getAuthenticationApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AuthenticationApi.class); - } - - public CommentsApi getCommentsApi() { + default CommentsApi getCommentsApi() { return this.getApi(CommentsApi.class); } - public CommentsApi getCommentsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, CommentsApi.class); - } - - public DiscoveryApi getDiscoveryApi() { + default DiscoveryApi getDiscoveryApi() { return this.getApi(DiscoveryApi.class); } - public DiscoveryApi getDiscoveryApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, DiscoveryApi.class); - } - - public DownloadsApi getDownloadsApi() { + default DownloadsApi getDownloadsApi() { return this.getApi(DownloadsApi.class); } - public DownloadsApi getDownloadsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, DownloadsApi.class); - } - - public FavoritesApi getFavoritesApi() { + default FavoritesApi getFavoritesApi() { return this.getApi(FavoritesApi.class); } - public FavoritesApi getFavoritesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, FavoritesApi.class); - } - - public GroupsApi getGroupsApi() { + default GroupsApi getGroupsApi() { return this.getApi(GroupsApi.class); } - public GroupsApi getGroupsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, GroupsApi.class); - } - - public NetworksApi getNetworksApi() { + default NetworksApi getNetworksApi() { return this.getApi(NetworksApi.class); } - public NetworksApi getNetworksApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, NetworksApi.class); - } - - public NodesApi getNodesApi() { + default NodesApi getNodesApi() { return this.getApi(NodesApi.class); } - public NodesApi getNodesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, NodesApi.class); - } - - public PeopleApi getPeopleApi() { + default PeopleApi getPeopleApi() { return this.getApi(PeopleApi.class); } - public PeopleApi getPeopleApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, PeopleApi.class); - } - - public PreferencesApi getPreferencesApi() { + default PreferencesApi getPreferencesApi() { return this.getApi(PreferencesApi.class); } - public PreferencesApi getPreferencesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, PreferencesApi.class); - } - - public ProbesApi getProbesApi() { + default ProbesApi getProbesApi() { return this.getApi(ProbesApi.class); } - public ProbesApi getProbesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ProbesApi.class); - } - - public QueriesApi getQueriesApi() { + default QueriesApi getQueriesApi() { return this.getApi(QueriesApi.class); } - public QueriesApi getQueriesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, QueriesApi.class); - } - - public RatingsApi getRatingsApi() { + default RatingsApi getRatingsApi() { return this.getApi(RatingsApi.class); } - public RatingsApi getRatingsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, RatingsApi.class); - } - - public RenditionsApi getRenditionsApi() { + default RenditionsApi getRenditionsApi() { return this.getApi(RenditionsApi.class); } - public RenditionsApi getRenditionsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, RenditionsApi.class); - } - - public SearchApi getSearchApi() { + default SearchApi getSearchApi() { return this.getApi(SearchApi.class); } - public SearchApi getSearchApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, SearchApi.class); - } - - public SharedLinksApi getSharedLinksApi() { + default SharedLinksApi getSharedLinksApi() { return this.getApi(SharedLinksApi.class); } - public SharedLinksApi getSharedLinksApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, SharedLinksApi.class); - } - - public SitesApi getSitesApi() { + default SitesApi getSitesApi() { return this.getApi(SitesApi.class); } - public SitesApi getSitesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, SitesApi.class); - } - - public TagsApi getTagsApi() { + default TagsApi getTagsApi() { return this.getApi(TagsApi.class); } - public TagsApi getTagsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, TagsApi.class); - } - - public TrashcanApi getTrashcanApi() { + default TrashcanApi getTrashcanApi() { return this.getApi(TrashcanApi.class); } - - public TrashcanApi getTrashcanApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, TrashcanApi.class); - } - public TypesApi getTypesApi() { + default TypesApi getTypesApi() { return this.getApi(TypesApi.class); } - public TypesApi getTypesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, TypesApi.class); - } - - public VersionsApi getVersionsApi() { + default VersionsApi getVersionsApi() { return this.getApi(VersionsApi.class); } - public VersionsApi getVersionsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, VersionsApi.class); - } - - public V0Api getV0Api() { + default V0Api getV0Api() { return this.getApi(V0Api.class); } - public V0Api getV0Api(AuthorizationFilter authFilter) { - return this.getApi(authFilter, V0Api.class); + default V0Api getLegacyApi() { + return this.getV0Api(); } } diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java deleted file mode 100644 index 4581a96..0000000 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiCxfImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -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.AuthorizationFilter; -import com.inteligr8.rs.Client; -import com.inteligr8.rs.ClientConfiguration; - -/** - * This class provides the Apache CXF client to the JAX-RS API for the ACS - * Public ReST API. It also provides extension API helpers. - * - * @author brian@inteligr8.com - */ -@Component("acs.api.cxf") -@Lazy -public class AcsPublicRestApiCxfImpl extends AcsPublicRestApi { - - @Autowired - private AcsClientCxfImpl client; - - /** - * This constructor is for Spring use. - */ - protected AcsPublicRestApiCxfImpl() { - } - - /** - * This constructor is for POJO use. - */ - public AcsPublicRestApiCxfImpl(AcsClientCxfImpl client) { - this.client = client; - } - - @Override - ClientConfiguration getConfig() { - return this.client.getConfig(); - } - - @Override - Client getClient() { - return this.client; - } - - public NodesCxfApi getNodesExtApi() { - return this.client.getApi(NodesCxfApi.class); - } - - public NodesCxfApi getNodesExtApi(AuthorizationFilter authFilter) { - return this.client.getApi(authFilter, NodesCxfApi.class); - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java deleted file mode 100644 index 77e3b71..0000000 --- a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestApiJerseyImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -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.AuthorizationFilter; -import com.inteligr8.rs.Client; -import com.inteligr8.rs.ClientConfiguration; - -/** - * This class provides the Jersey client to the JAX-RS API for the ACS Public - * ReST API. It also provides extension API helpers. - * - * @author brian@inteligr8.com - */ -@Component("acs.api.jersey") -@Lazy -public class AcsPublicRestApiJerseyImpl extends AcsPublicRestApi { - - @Autowired - private AcsClientJerseyImpl client; - - /** - * This constructor is for Spring use. - */ - protected AcsPublicRestApiJerseyImpl() { - } - - /** - * This constructor is for POJO use. - */ - public AcsPublicRestApiJerseyImpl(AcsClientJerseyImpl client) { - this.client = client; - } - - @Override - ClientConfiguration getConfig() { - return this.client.getConfig(); - } - - @Override - Client getClient() { - return this.client; - } - - public NodesJerseyApi getNodesExtApi() { - return this.client.getApi(NodesJerseyApi.class); - } - - public NodesJerseyApi getNodesExtApi(AuthorizationFilter authFilter) { - return this.client.getApi(authFilter, NodesJerseyApi.class); - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestCxfApi.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestCxfApi.java new file mode 100644 index 0000000..4fc5a2e --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestCxfApi.java @@ -0,0 +1,18 @@ +package com.inteligr8.alfresco.acs; + +import com.inteligr8.alfresco.acs.api.NodesCxfApi; + +/** + * This interface appends Apache CXF implementation specific methods to the + * JAX-RS API of the ACS Public ReST API. This is due to a lack of multi-part + * in the JAX-RS specification. + * + * @author brian@inteligr8.com + */ +public interface AcsPublicRestCxfApi extends AcsPublicRestApi { + + default NodesCxfApi getNodesExtApi() { + return this.getApi(NodesCxfApi.class); + } + +} diff --git a/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestJerseyApi.java b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestJerseyApi.java new file mode 100644 index 0000000..34249e4 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/acs/AcsPublicRestJerseyApi.java @@ -0,0 +1,18 @@ +package com.inteligr8.alfresco.acs; + +import com.inteligr8.alfresco.acs.api.NodesJerseyApi; + +/** + * This interface appends Jersey implementation specific methods to the + * JAX-RS API of the ACS Public ReST API. This is due to a lack of multi-part + * in the JAX-RS specification. + * + * @author brian@inteligr8.com + */ +public interface AcsPublicRestJerseyApi extends AcsPublicRestApi { + + default NodesJerseyApi getNodesExtApi() { + return this.getApi(NodesJerseyApi.class); + } + +} diff --git a/src/test/java/com/inteligr8/alfresco/acs/ConditionalIT.java b/src/test/java/com/inteligr8/alfresco/acs/ConditionalIT.java deleted file mode 100644 index 90c6ecd..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/ConditionalIT.java +++ /dev/null @@ -1,35 +0,0 @@ -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; - } - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/ConnectionClientIT.java b/src/test/java/com/inteligr8/alfresco/acs/ConnectionClientIT.java deleted file mode 100755 index e869393..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/ConnectionClientIT.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.inteligr8.alfresco.acs; - -import java.util.List; -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.api.V0Api; -import com.inteligr8.alfresco.acs.model.RepositoryInfo; -import com.inteligr8.alfresco.acs.model.v0.ClassInfo; -import com.inteligr8.alfresco.acs.model.v0.MimeTypesData; -import com.inteligr8.alfresco.acs.model.v0.PropertyInfo; -import com.inteligr8.alfresco.acs.model.v0.ServerData; - -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); - }); - } - - @Test - @EnabledIf("hostExists") - public void testV0ServerInfo() { - V0Api api = this.getClient().getV0Api(); - ServerData server = api.getServer(); - - Assertions.assertNotNull(server); - Assertions.assertNotNull(server.getData()); - Assertions.assertNotNull(server.getData().getEdition()); - Assertions.assertTrue(server.getData().getEdition().length() > 5); - Assertions.assertTrue(server.getData().getVersion().length() > 5); - Assertions.assertTrue(server.getData().getSchema().length() > 3); - } - - @Test - @EnabledIf("hostExists") - public void testV0MimeTypes() { - V0Api api = this.getClient().getV0Api(); - MimeTypesData mimeTypes = api.getMimeTypes(); - - Assertions.assertNotNull(mimeTypes); - Assertions.assertNotNull(mimeTypes.getData()); - Assertions.assertTrue(mimeTypes.getData().getMimeTypes().size() > 50); - Assertions.assertNotNull(mimeTypes.getData().getMimeTypeInfo("application/pdf")); - Assertions.assertEquals("pdf", mimeTypes.getData().getMimeTypeInfo("application/pdf").getExtensions().getDefault()); - } - - @Test - @EnabledIf("hostExists") - public void testV0Classes() { - V0Api api = this.getClient().getV0Api(); - List classes = api.getClasses(null, null, null); - - Assertions.assertNotNull(classes); - Assertions.assertTrue(classes.size() > 50); - } - - @Test - @EnabledIf("hostExists") - public void testV0Property() { - V0Api api = this.getClient().getV0Api(); - List props = api.getProperties(null, "cm:content", null); - - Assertions.assertNotNull(props); - Assertions.assertEquals(1, props.size()); - Assertions.assertEquals("d:content", props.iterator().next().getDataType()); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/ConnectionCxfClientIT.java b/src/test/java/com/inteligr8/alfresco/acs/ConnectionCxfClientIT.java deleted file mode 100644 index 1f9ca9b..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/ConnectionCxfClientIT.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.inteligr8.alfresco.acs; - -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.rs.ClientConfiguration; - -@TestPropertySource(locations = {"/local.properties"}) -@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiCxfImpl.class, AcsClientCxfImpl.class}) -public class ConnectionCxfClientIT extends ConnectionClientIT { - - @Autowired - @Qualifier("acs.api.cxf") - private AcsPublicRestApiCxfImpl client; - - @Override - public AcsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/ConnectionJerseyClientIT.java b/src/test/java/com/inteligr8/alfresco/acs/ConnectionJerseyClientIT.java deleted file mode 100644 index 9782d7c..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/ConnectionJerseyClientIT.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.inteligr8.alfresco.acs; - -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.rs.ClientConfiguration; - -@TestPropertySource(locations = {"/local.properties"}) -@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiJerseyImpl.class, AcsClientJerseyImpl.class}) -public class ConnectionJerseyClientIT extends ConnectionClientIT { - - @Autowired - @Qualifier("acs.api.jersey") - private AcsPublicRestApi client; - - @Override - public AcsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/CxfUploadIT.java b/src/test/java/com/inteligr8/alfresco/acs/CxfUploadIT.java deleted file mode 100644 index 3f5a5b7..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/CxfUploadIT.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.inteligr8.alfresco.acs; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.Collections; - -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.model.Node; -import com.inteligr8.alfresco.acs.model.NodeBodyCreate; -import com.inteligr8.alfresco.acs.model.NodeBodyCreateMultipartCxf; -import com.inteligr8.rs.ClientConfiguration; - -@TestPropertySource(locations = {"/local.properties"}) -@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiCxfImpl.class, AcsClientCxfImpl.class}) -public class CxfUploadIT extends UploadIT { - - @Autowired - @Qualifier("acs.api.cxf") - private AcsPublicRestApiCxfImpl client; - - @Override - public AcsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - - @Test - @EnabledIf("hostExists") - public void uploadFile() throws IOException { - String folderNodeId = this.getSharedFolder(); - - NodeBodyCreate nodeBody = new NodeBodyCreate().nodeType("trx:transferReport").name("test-name1.txt") - .properties(Collections.singletonMap("cm:author", "Brian")); - - ByteArrayInputStream istream = new ByteArrayInputStream("This is a test".getBytes()); - NodeBodyCreateMultipartCxf body = NodeBodyCreateMultipartCxf.from(nodeBody, "test-name2.txt", istream, true, null, null); - - Node newNode = this.client.getNodesExtApi().createNode(folderNodeId, body).getEntry(); - Assertions.assertNotNull(newNode); - Assertions.assertNotNull(newNode.getId()); - Assertions.assertEquals(folderNodeId, newNode.getParentId()); - Assertions.assertEquals(nodeBody.getNodeType(), newNode.getNodeType()); - Assertions.assertTrue(newNode.getName().startsWith("test-name1")); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/JerseyUploadIT.java b/src/test/java/com/inteligr8/alfresco/acs/JerseyUploadIT.java deleted file mode 100644 index 142f2bb..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/JerseyUploadIT.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.inteligr8.alfresco.acs; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.text.ParseException; -import java.util.Collections; - -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.model.Node; -import com.inteligr8.alfresco.acs.model.NodeBodyCreate; -import com.inteligr8.alfresco.acs.model.NodeBodyCreateMultipartJersey; -import com.inteligr8.rs.ClientConfiguration; - -@TestPropertySource(locations = {"/local.properties"}) -@SpringJUnitConfig(classes = {AcsClientConfiguration.class, AcsPublicRestApiJerseyImpl.class, AcsClientJerseyImpl.class}) -public class JerseyUploadIT extends UploadIT { - - @Autowired - @Qualifier("acs.api.jersey") - private AcsPublicRestApiJerseyImpl client; - - @Override - public AcsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - - @Test - @EnabledIf("hostExists") - public void uploadFile() throws IOException, ParseException { - String folderNodeId = this.getSharedFolder(); - - NodeBodyCreate nodeBody = new NodeBodyCreate().nodeType("trx:transferReport").name("test-name1.txt") - .properties(Collections.singletonMap("cm:author", "Brian")); - - ByteArrayInputStream istream = new ByteArrayInputStream("This is a test".getBytes()); - NodeBodyCreateMultipartJersey body = NodeBodyCreateMultipartJersey.from(nodeBody, "test-name2.txt", istream, true, null, null); - - Node newNode = this.client.getNodesExtApi().createNode(folderNodeId, body).getEntry(); - Assertions.assertNotNull(newNode); - Assertions.assertNotNull(newNode.getId()); - Assertions.assertEquals(folderNodeId, newNode.getParentId()); - Assertions.assertEquals(nodeBody.getNodeType(), newNode.getNodeType()); - Assertions.assertTrue(newNode.getName().startsWith("test-name1")); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/acs/UploadIT.java b/src/test/java/com/inteligr8/alfresco/acs/UploadIT.java deleted file mode 100644 index 56dd8aa..0000000 --- a/src/test/java/com/inteligr8/alfresco/acs/UploadIT.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.inteligr8.alfresco.acs; - -import com.inteligr8.alfresco.acs.model.RequestQuery; -import com.inteligr8.alfresco.acs.model.RequestQuery.LanguageEnum; -import com.inteligr8.alfresco.acs.model.ResultNode; -import com.inteligr8.alfresco.acs.model.ResultSetPaging; -import com.inteligr8.alfresco.acs.model.SearchRequest; - -public abstract class UploadIT extends ConditionalIT { - - public abstract AcsPublicRestApi getClient(); - - public String getSharedFolder() { - RequestQuery query = new RequestQuery(); - query.setLanguage(LanguageEnum.AFTS); - query.setQuery("=@cm:name:'Shared'"); - - SearchRequest searchRequest = new SearchRequest(); - searchRequest.setQuery(query); - - ResultSetPaging paging = this.getClient().getSearchApi().search(searchRequest); - ResultNode folderNode = paging.getList().getEntries().iterator().next().getEntry(); - return folderNode.getId(); - } - -} diff --git a/src/test/resources/local-oauth.properties b/src/test/resources/local-oauth.properties deleted file mode 100644 index f6f978b..0000000 --- a/src/test/resources/local-oauth.properties +++ /dev/null @@ -1,5 +0,0 @@ -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 diff --git a/src/test/resources/local.properties b/src/test/resources/local.properties deleted file mode 100644 index 17bb34c..0000000 --- a/src/test/resources/local.properties +++ /dev/null @@ -1,3 +0,0 @@ -content.service.baseUrl=http://localhost:8080/alfresco -content.service.security.basicAuth.username=admin -content.service.security.basicAuth.password=admin diff --git a/src/test/resources/log4j2.properties b/src/test/resources/log4j2.properties deleted file mode 100644 index df444d4..0000000 --- a/src/test/resources/log4j2.properties +++ /dev/null @@ -1,19 +0,0 @@ -rootLogger.level=trace -rootLogger.appenderRef.stdout.ref=STDOUT - -logger.spring.name=org.springframework -logger.spring.level=info - -logger.common-rest-api.name=com.inteligr8.rs -logger.common-rest-api.level=trace - -logger.this.name=com.inteligr8.alfresco.acs -logger.this.level=trace - -logger.jaxrslog.name=jaxrs.request -logger.jaxrslog.level=trace - -appender.stdout.type=Console -appender.stdout.name=STDOUT -appender.stdout.layout.type=PatternLayout -appender.stdout.layout.pattern=%C [%t] %m%n