From a14564c87f04ca3cfb9e8d40cc962b6c3c06c1cf Mon Sep 17 00:00:00 2001 From: Brian Long Date: Mon, 2 May 2022 23:30:39 +0100 Subject: [PATCH] split API/client --- pom.xml | 104 +++-------- .../activiti/ApsClientConfiguration.java | 165 ------------------ .../alfresco/activiti/ApsClientCxfImpl.java | 43 ----- .../activiti/ApsClientJerseyImpl.java | 43 ----- .../alfresco/activiti/ApsPublicRestApi.java | 77 ++------ .../activiti/ApsPublicRestApiCxfImpl.java | 56 ------ .../activiti/ApsPublicRestApiJerseyImpl.java | 56 ------ .../activiti/ApsPublicRestCxfApi.java | 16 ++ .../activiti/ApsPublicRestJerseyApi.java | 16 ++ .../alfresco/activiti/api/AdminApi.java | 59 ++++++- .../alfresco/activiti/api/GroupsApi.java | 32 ++++ .../alfresco/activiti/model/Group.java | 13 +- .../alfresco/activiti/model/GroupLight.java | 94 ++++++++++ .../alfresco/activiti/model/ResultList.java | 54 ++++++ .../activiti/ArrayResponseUnitTest.java | 37 ---- .../alfresco/activiti/ConditionalIT.java | 35 ---- .../alfresco/activiti/ConnectionClientIT.java | 54 ------ .../activiti/ConnectionCxfClientPojoIT.java | 32 ---- .../activiti/ConnectionCxfClientSpringIT.java | 28 --- .../ConnectionJerseyClientPojoIT.java | 31 ---- .../ConnectionJerseyClientSpringIT.java | 27 --- src/test/resources/local-oauth.properties | 5 - src/test/resources/local.properties | 3 - 23 files changed, 315 insertions(+), 765 deletions(-) delete mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java delete mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java delete mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java delete mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java delete mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestCxfApi.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestJerseyApi.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/api/GroupsApi.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/model/GroupLight.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/model/ResultList.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java delete mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java delete mode 100644 src/test/resources/local-oauth.properties delete mode 100644 src/test/resources/local.properties diff --git a/pom.xml b/pom.xml index 6832c34..c054f9f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,8 +4,8 @@ 4.0.0 com.inteligr8.alfresco aps-public-rest-api - 1.2-SNAPSHOT - Alfresco Process Services ReST API Client for Java + 2.0-SNAPSHOT + Alfresco Process Services ReST API for Java utf-8 @@ -15,74 +15,34 @@ - http://localhost:8080 aps1 - 5.7.2 - 5.2.14.RELEASE - 2.34 - 3.3.2 + 2.35 + 3.4.7 - com.inteligr8 - common-rest-api - 1.1-SNAPSHOT + jakarta.ws.rs + jakarta.ws.rs-api + 2.1.6 - org.glassfish.jersey.ext - jersey-proxy-client - ${jersey.version} - provided + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + 2.12.2 org.apache.cxf - cxf-rt-rs-client + cxf-rt-frontend-jaxrs ${cxf.version} - provided - - - org.glassfish.jersey.core - jersey-client - ${jersey.version} - test + true org.glassfish.jersey.media jersey-media-multipart ${jersey.version} - provided - - - 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 + true @@ -94,30 +54,9 @@ ${aps.app.tag} - - maven-surefire-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - - - maven-failsafe-plugin - 3.0.0-M5 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - - - maven-javadoc-plugin + 3.3.2 javadoc @@ -264,6 +203,21 @@ + + + inteligr8-releases + https://repos.inteligr8.com/nexus/repository/inteligr8-public + true + false + + + inteligr8-snapshots + https://repos.inteligr8.com/nexus/repository/inteligr8-snapshots + false + true + + + mulesoft-releases diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java deleted file mode 100644 index 3bbefc2..0000000 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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 ApsClientConfiguration implements ClientCxfConfiguration, ClientJerseyConfiguration { - - @Value("${process.service.baseUrl:http://localhost:8080/activiti-app}") - private String baseUrl; - - @Value("${process.service.security.basicAuth.username:admin@app.activiti.com}") - private String basicAuthUsername; - - @Value("${process.service.security.basicAuth.password:admin}") - private String basicAuthPassword; - - @Value("${process.service.security.bearerToken:#{null}}") - private String bearerToken; - - @Value("${process.service.security.oauth.tokenUrl:#{null}}") - private String oAuthTokenUrl; - - @Value("${process.service.security.oauth.clientId:#{null}}") - private String oAuthClientId; - - @Value("${process.service.security.oauth.clientSecret:#{null}}") - private String oAuthClientSecret; - - @Value("${process.service.security.oauth.authCode:#{null}}") - private String oAuthAuthCode; - - @Value("${process.service.security.oauth.authRedirectUri:#{null}}") - private String oAuthAuthRedirectUri; - - @Value("${process.service.security.oauth.grantUsername:#{null}}") - private String oAuthUsername; - - @Value("${process.service.security.oauth.grantPassword:#{null}}") - private String oAuthPassword; - - @Value("${process.service.cxf.defaultBusEnabled:true}") - private boolean defaultBusEnabled; - - @Value("${process.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/activiti/ApsClientCxfImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java deleted file mode 100644 index 76774d2..0000000 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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("aps.client.cxf") -@Lazy -public class ApsClientCxfImpl extends ClientCxfImpl { - - @Autowired - private ApsClientConfiguration config; - - /** - * This constructor is for Spring use - */ - protected ApsClientCxfImpl() { - } - - /** - * This constructor is for POJO use - */ - public ApsClientCxfImpl(ApsClientConfiguration config) { - this.config = config; - } - - @Override - protected ClientCxfConfiguration getConfig() { - return this.config; - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java deleted file mode 100644 index f78d94f..0000000 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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("aps.client.jersey") -@Lazy -public class ApsClientJerseyImpl extends ClientJerseyImpl { - - @Autowired - private ApsClientConfiguration config; - - /** - * This constructor is for Spring use - */ - protected ApsClientJerseyImpl() { - } - - /** - * This constructor is for POJO use - */ - public ApsClientJerseyImpl(ApsClientConfiguration config) { - this.config = config; - } - - @Override - protected ClientJerseyConfiguration getConfig() { - return this.config; - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApi.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApi.java index b7587da..a1f43d1 100644 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApi.java +++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApi.java @@ -7,84 +7,27 @@ import com.inteligr8.alfresco.activiti.api.ModelsApi; import com.inteligr8.alfresco.activiti.api.ProcessInstancesApi; import com.inteligr8.alfresco.activiti.api.ProfileApi; import com.inteligr8.alfresco.activiti.api.TasksApi; -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 APS - * Public ReST API. + * This interface consolidates the JAX-RS APIs available in the APS Public + * ReST API. * * @author brian@inteligr8.com */ -public abstract class ApsPublicRestApi { +public interface ApsPublicRestApi { - abstract ClientConfiguration getConfig(); + AdminApi getAdminApi(); - abstract Client getClient(); + AppDefinitionsApi getAppDefinitionsApi(); - protected final T getApi(Class apiClass) { - return this.getApi(null, apiClass); - } - - protected T getApi(AuthorizationFilter authFilter, Class apiClass) { - return this.getClient().getApi(authFilter, apiClass); - } + AppVersionApi getAppVersionApi(); - public AdminApi getAdminApi() { - return this.getApi(AdminApi.class); - } + ModelsApi getModelsApi(); - public AdminApi getAdminApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AdminApi.class); - } + ProcessInstancesApi getProcessInstancesApi(); - public AppDefinitionsApi getAppDefinitionsApi() { - return this.getApi(AppDefinitionsApi.class); - } + ProfileApi getProfileApi(); - public AppDefinitionsApi getAppDefinitionsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AppDefinitionsApi.class); - } - - public AppVersionApi getAppVersionApi() { - return this.getApi(AppVersionApi.class); - } - - public AppVersionApi getAppVersionApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AppVersionApi.class); - } - - public ModelsApi getModelsApi() { - return this.getApi(ModelsApi.class); - } - - public ModelsApi getModelsApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ModelsApi.class); - } - - public ProcessInstancesApi getProcessInstancesApi() { - return this.getApi(ProcessInstancesApi.class); - } - - public ProcessInstancesApi getProcessInstancesApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ProcessInstancesApi.class); - } - - public ProfileApi getProfileApi() { - return this.getApi(ProfileApi.class); - } - - public ProfileApi getProfileApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, ProfileApi.class); - } - - public TasksApi getTasksApi() { - return this.getApi(TasksApi.class); - } - - public TasksApi getTasksApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, TasksApi.class); - } + TasksApi getTasksApi(); } diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java deleted file mode 100644 index d7269d6..0000000 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import com.inteligr8.alfresco.activiti.api.AppDefinitionsCxfApi; -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 APS - * Public ReST API. - * - * @author brian@inteligr8.com - */ -@Component("aps.api.cxf") -@Lazy -public class ApsPublicRestApiCxfImpl extends ApsPublicRestApi { - - @Autowired - private ApsClientCxfImpl client; - - /** - * This constructor is for Spring use - */ - protected ApsPublicRestApiCxfImpl() { - } - - /** - * This constructor is for POJO use - */ - public ApsPublicRestApiCxfImpl(ApsClientCxfImpl client) { - this.client = client; - } - - @Override - ClientConfiguration getConfig() { - return this.client.getConfig(); - } - - @Override - Client getClient() { - return this.client; - } - - public AppDefinitionsCxfApi getAppDefinitionsCxfApi() { - return this.getApi(AppDefinitionsCxfApi.class); - } - - public AppDefinitionsCxfApi getAppDefinitionsCxfApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AppDefinitionsCxfApi.class); - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java deleted file mode 100644 index 730f530..0000000 --- a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import com.inteligr8.alfresco.activiti.api.AppDefinitionsJerseyApi; -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 APS Public - * ReST API. - * - * @author brian@inteligr8.com - */ -@Component("aps.api.jersey") -@Lazy -public class ApsPublicRestApiJerseyImpl extends ApsPublicRestApi { - - @Autowired - private ApsClientJerseyImpl client; - - /** - * This constructor is for Spring use - */ - protected ApsPublicRestApiJerseyImpl() { - } - - /** - * This constructor is for POJO use - */ - public ApsPublicRestApiJerseyImpl(ApsClientJerseyImpl client) { - this.client = client; - } - - @Override - ClientConfiguration getConfig() { - return this.client.getConfig(); - } - - @Override - Client getClient() { - return this.client; - } - - public AppDefinitionsJerseyApi getAppDefinitionsJerseyApi() { - return this.getApi(AppDefinitionsJerseyApi.class); - } - - public AppDefinitionsJerseyApi getAppDefinitionsJerseyApi(AuthorizationFilter authFilter) { - return this.getApi(authFilter, AppDefinitionsJerseyApi.class); - } - -} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestCxfApi.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestCxfApi.java new file mode 100644 index 0000000..54994b0 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestCxfApi.java @@ -0,0 +1,16 @@ +package com.inteligr8.alfresco.activiti; + +import com.inteligr8.alfresco.activiti.api.AppDefinitionsCxfApi; + +/** + * This interface appends Apache CXF implementation specific methods to the + * JAX-RS API of the APS Public ReST API. This is due to a lack of multi-part + * in the JAX-RS specification. + * + * @author brian@inteligr8.com + */ +public interface ApsPublicRestCxfApi extends ApsPublicRestApi { + + AppDefinitionsCxfApi getAppDefinitionsCxfApi(); + +} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestJerseyApi.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestJerseyApi.java new file mode 100644 index 0000000..66bc8b9 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestJerseyApi.java @@ -0,0 +1,16 @@ +package com.inteligr8.alfresco.activiti; + +import com.inteligr8.alfresco.activiti.api.AppDefinitionsJerseyApi; + +/** + * This interface appends Jersey implementation specific methods to the JAX-RS + * API of the APS Public ReST API. This is due to a lack of multi-part in the + * JAX-RS specification. + * + * @author brian@inteligr8.com + */ +public interface ApsPublicRestJerseyApi extends ApsPublicRestApi { + + AppDefinitionsJerseyApi getAppDefinitionsJerseyApi(); + +} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/api/AdminApi.java b/src/main/java/com/inteligr8/alfresco/activiti/api/AdminApi.java index 26751f9..120f58e 100644 --- a/src/main/java/com/inteligr8/alfresco/activiti/api/AdminApi.java +++ b/src/main/java/com/inteligr8/alfresco/activiti/api/AdminApi.java @@ -3,28 +3,81 @@ package com.inteligr8.alfresco.activiti.api; import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; +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 javax.ws.rs.core.MediaType; import com.inteligr8.alfresco.activiti.model.Group; +import com.inteligr8.alfresco.activiti.model.GroupLight; +import com.inteligr8.alfresco.activiti.model.ResultList; import com.inteligr8.alfresco.activiti.model.Tenant; +import com.inteligr8.alfresco.activiti.model.UserLight; @Path("/api/enterprise/admin") public interface AdminApi { @GET @Path("/tenants") - @Produces({ "application/json" }) + @Produces({ MediaType.APPLICATION_JSON }) public List getTenants(); @GET @Path("/groups") - @Produces({ "application/json" }) - public List getGroups( + @Produces({ MediaType.APPLICATION_JSON }) + public List getGroups( @QueryParam("tenantId") Long tenantId, @QueryParam("functional") Boolean functional, @QueryParam("summary") Boolean summary); + + @POST + @Path("/groups") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public GroupLight createGroup( + Group group); + + @GET + @Path("/groups/{groupId}") + @Produces({ MediaType.APPLICATION_JSON }) + public Group getGroup( + @PathParam("groupId") long groupId, + @QueryParam("includeAllUsers") Boolean includeAllUsers, + @QueryParam("summary") Boolean summary); + + @GET + @Path("/groups/${groupId}/related-groups") + @Produces({ MediaType.APPLICATION_JSON }) + public List getRelatedGroups( + @PathParam("groupId") long groupId); + + @POST + @Path("/groups/${groupId}/related-groups/${relatedGroupId}") + @Produces({ MediaType.APPLICATION_JSON }) + public void addRelatedGroup( + @PathParam("groupId") long groupId, + @PathParam("relatedGroupId") long relatedGroupId, + @PathParam("type") String type); + + @DELETE + @Path("/groups/${groupId}/related-groups/${relatedGroupId}") + @Produces({ MediaType.APPLICATION_JSON }) + public void deleteRelatedGroup( + @PathParam("groupId") long groupId, + @PathParam("relatedGroupId") long relatedGroupId); + + @GET + @Path("groups/{groupId}/users") + @Produces({ MediaType.APPLICATION_JSON }) + ResultList getMembers( + @PathParam("groupId") long groupId, + @QueryParam("filter") String filter, + @QueryParam("page") Integer page, + @QueryParam("pageSize") Integer pageSize); } diff --git a/src/main/java/com/inteligr8/alfresco/activiti/api/GroupsApi.java b/src/main/java/com/inteligr8/alfresco/activiti/api/GroupsApi.java new file mode 100644 index 0000000..2f0a5a9 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/api/GroupsApi.java @@ -0,0 +1,32 @@ + +package com.inteligr8.alfresco.activiti.api; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; + +import com.inteligr8.alfresco.activiti.model.GroupLight; +import com.inteligr8.alfresco.activiti.model.ResultList; +import com.inteligr8.alfresco.activiti.model.UserLight; + +@Path("/api/enterprise/groups") +public interface GroupsApi { + + @GET + @Produces({ "application/json" }) + ResultList query( + @QueryParam("filter") String filter, + @QueryParam("groupId") Long groupId, + @QueryParam("externalId") String externalId, + @QueryParam("externalIdCaseInsensitive") String externalIdCaseInsensitve, + @QueryParam("tenantId") Long tenantId); + + @GET + @Path("{groupId}/users") + @Produces({ "application/json" }) + ResultList queryMembers( + @PathParam("groupId") long groupId); + +} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/model/Group.java b/src/main/java/com/inteligr8/alfresco/activiti/model/Group.java index 1e38623..45331ed 100644 --- a/src/main/java/com/inteligr8/alfresco/activiti/model/Group.java +++ b/src/main/java/com/inteligr8/alfresco/activiti/model/Group.java @@ -1,4 +1,3 @@ - package com.inteligr8.alfresco.activiti.model; import java.util.ArrayList; @@ -31,7 +30,7 @@ public class Group { @JsonProperty("externalId") private String externalId; @JsonProperty("groups") - private List groups = new ArrayList(); + private List groups = new ArrayList(); @JsonProperty("id") private Long id; @JsonProperty("lastSyncTimeStamp") @@ -85,15 +84,15 @@ public class Group { return this; } - public List getGroups() { + public List getGroups() { return groups; } - public void setGroups(List groups) { + public void setGroups(List groups) { this.groups = groups; } - public Group withGroups(List groups) { + public Group withGroups(List groups) { this.groups = groups; return this; } @@ -229,3 +228,7 @@ public class Group { } } + + + + diff --git a/src/main/java/com/inteligr8/alfresco/activiti/model/GroupLight.java b/src/main/java/com/inteligr8/alfresco/activiti/model/GroupLight.java new file mode 100644 index 0000000..24eb832 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/model/GroupLight.java @@ -0,0 +1,94 @@ +package com.inteligr8.alfresco.activiti.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class GroupLight { + + @JsonProperty("id") + private Long id; + @JsonProperty("externalId") + private String externalId; + @JsonProperty("name") + private String name; + @JsonProperty("parentGroupId") + private Long parentGroupId; + @JsonProperty("status") + private String status; + + /** + * No args constructor for use in serialization + */ + public GroupLight() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public GroupLight withId(Long id) { + this.setId(id); + return this; + } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public GroupLight withExternalId(String externalId) { + this.setExternalId(externalId); + return this; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public GroupLight withName(String name) { + this.setName(name); + return this; + } + + public Long getParentGroupId() { + return parentGroupId; + } + + public void setParentGroupId(Long parentGroupId) { + this.parentGroupId = parentGroupId; + } + + public GroupLight withParentGroupId(Long parentGroupId) { + this.setParentGroupId(parentGroupId); + return this; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public GroupLight withStatus(String status) { + this.setStatus(status); + return this; + } + +} + diff --git a/src/main/java/com/inteligr8/alfresco/activiti/model/ResultList.java b/src/main/java/com/inteligr8/alfresco/activiti/model/ResultList.java new file mode 100644 index 0000000..919203d --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/model/ResultList.java @@ -0,0 +1,54 @@ + +package com.inteligr8.alfresco.activiti.model; + +import java.util.LinkedList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ResultList { + + @JsonProperty("size") + private Integer size; + @JsonProperty("total") + private Integer total; + @JsonProperty("start") + private Integer start; + @JsonProperty("data") + private List data = new LinkedList(); + + public Integer getSize() { + return size; + } + + public void setSize(Integer size) { + this.size = size; + } + + public Integer getTotal() { + return total; + } + + public void setTotal(Integer total) { + this.total = total; + } + + public Integer getStart() { + return start; + } + + public void setStart(Integer start) { + this.start = start; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + +} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java b/src/test/java/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java deleted file mode 100644 index d53acff..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import java.util.List; - -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.activiti.model.Tenant; -import com.inteligr8.rs.ClientConfiguration; - -@TestPropertySource(locations = {"/local.properties"}) -@SpringJUnitConfig(classes = {ApsClientConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class}) -public class ArrayResponseUnitTest extends ConditionalIT { - - @Autowired - @Qualifier("aps.api.jersey") - private ApsPublicRestApi client; - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - - @Test - @EnabledIf("hostExists") - public void testTenants() { - List objs = this.client.getAdminApi().getTenants(); - - Assertions.assertNotNull(objs); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java deleted file mode 100644 index de77a23..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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/activiti/ConnectionClientIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java deleted file mode 100644 index cc39863..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import java.util.Arrays; -import java.util.UUID; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIf; - -import com.inteligr8.alfresco.activiti.model.AppVersion; -import com.inteligr8.alfresco.activiti.model.CreateProcessInstance; -import com.inteligr8.alfresco.activiti.model.ProcessInstance; -import com.inteligr8.alfresco.activiti.model.User; -import com.inteligr8.alfresco.activiti.model.Variable; - -public abstract class ConnectionClientIT extends ConditionalIT { - - public abstract ApsPublicRestApi getClient(); - - @Test - @EnabledIf("hostExists") - public void testAppVersion() { - AppVersion obj = this.getClient().getAppVersionApi().get(); - - Assertions.assertNotNull(obj); - Assertions.assertEquals("1", obj.getMajorVersion()); - Assertions.assertEquals("bpmSuite", obj.getType()); - } - - @Test - @EnabledIf("hostExists") - public void testProfile() { - User obj = this.getClient().getProfileApi().get(); - - Assertions.assertNotNull(obj); - Assertions.assertEquals("admin@app.activiti.com", obj.getEmail()); - } - - @Test - @EnabledIf("hostExists") - public void testStartProcess() { - CreateProcessInstance request = new CreateProcessInstance(); - request.setProcessDefinitionKey("qcDocument"); - request.setVariables(Arrays.asList(new Variable("acsNodeId", null, null, UUID.randomUUID().toString()))); - - ProcessInstance response = this.getClient().getProcessInstancesApi().create(request); - - Assertions.assertNotNull(response); - Assertions.assertNotNull(response.getId()); - Assertions.assertNotNull(response.getId().length() > 0); - Assertions.assertEquals("qcDocument", response.getProcessDefinitionKey()); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java deleted file mode 100644 index 8b584c2..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import org.junit.jupiter.api.BeforeAll; - -import com.inteligr8.rs.ClientConfiguration; - -public class ConnectionCxfClientPojoIT extends ConnectionClientIT { - - private static ApsPublicRestApi client; - - @BeforeAll - public static void initClient() { - ApsClientConfiguration config = new ApsClientConfiguration(); - config.setBaseUrl("http://localhost:8080/activiti-app"); - config.setBasicAuthUsername("admin"); - config.setBasicAuthPassword("admin"); - - client = new ApsPublicRestApiCxfImpl( - new ApsClientCxfImpl(config)); - } - - @Override - public ApsPublicRestApi getClient() { - return client; - } - - @Override - public ClientConfiguration getConfiguration() { - return client.getConfig(); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java deleted file mode 100644 index bcf49da..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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-oauth.properties"}) -@SpringJUnitConfig(classes = {ApsClientConfiguration.class, ApsPublicRestApiCxfImpl.class, ApsClientCxfImpl.class}) -public class ConnectionCxfClientSpringIT extends ConnectionClientIT { - - @Autowired - @Qualifier("aps.api.cxf") - private ApsPublicRestApi client; - - @Override - public ApsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java deleted file mode 100644 index cdaf7e2..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -import org.junit.jupiter.api.BeforeAll; - -import com.inteligr8.rs.ClientConfiguration; - -public class ConnectionJerseyClientPojoIT extends ConnectionClientIT { - - private static ApsPublicRestApi client; - - @BeforeAll - public static void initClient() { - ApsClientConfiguration config = new ApsClientConfiguration(); - config.setBaseUrl("http://localhost:8080/activiti-app"); - config.setBasicAuthUsername("admin"); - config.setBasicAuthPassword("admin"); - - client = new ApsPublicRestApiJerseyImpl( - new ApsClientJerseyImpl(config)); - } - - public ApsPublicRestApi getClient() { - return client; - } - - @Override - public ClientConfiguration getConfiguration() { - return client.getConfig(); - } - -} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java deleted file mode 100644 index 2cde217..0000000 --- a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.inteligr8.alfresco.activiti; - -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 = {ApsClientConfiguration.class, ApsPublicRestApiCxfImpl.class, ApsClientJerseyImpl.class}) -public class ConnectionJerseyClientSpringIT extends ConnectionClientIT { - - @Autowired - @Qualifier("aps.api.jersey") - private ApsPublicRestApi client; - - public ApsPublicRestApi getClient() { - return this.client; - } - - @Override - public ClientConfiguration getConfiguration() { - return this.client.getConfig(); - } - -} diff --git a/src/test/resources/local-oauth.properties b/src/test/resources/local-oauth.properties deleted file mode 100644 index 5bf8df3..0000000 --- a/src/test/resources/local-oauth.properties +++ /dev/null @@ -1,5 +0,0 @@ -process.service.baseUrl=http://localhost:8080/activiti-app -process.service.security.oauth.tokenUrl=http://auth.example.org:8080/auth/realms/alfresco/protocol/openid-connect/token -process.service.security.oauth.clientId=api -process.service.security.oauth.grantUsername=admin -process.service.security.oauth.grantPassword=admin diff --git a/src/test/resources/local.properties b/src/test/resources/local.properties deleted file mode 100644 index b623a7a..0000000 --- a/src/test/resources/local.properties +++ /dev/null @@ -1,3 +0,0 @@ -process.service.baseUrl=http://localhost:8080/activiti-app -process.service.security.basicAuth.username=admin@app.activiti.com -process.service.security.basicAuth.password=admin