Merge branch 'two-dot-o-dev' into usergrid-103-upgrade-jersey

Conflicts:
        
stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
        
stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
        
stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
        
stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/0db86225
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/0db86225
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/0db86225

Branch: refs/heads/two-dot-o-dev
Commit: 0db8622540987e951748ca1c01f7f609fe39ee3d
Parents: 2aaa37f a1be2fd
Author: Dave Johnson <[email protected]>
Authored: Wed Sep 9 13:11:35 2015 -0400
Committer: Dave Johnson <[email protected]>
Committed: Wed Sep 9 13:11:35 2015 -0400

----------------------------------------------------------------------
 .../usergrid/corepersistence/CoreModule.java    | 25 ++---
 .../service/ApplicationService.java             |  2 +-
 .../service/ApplicationServiceImpl.java         | 38 +++++---
 .../corepersistence/service/StatusService.java  | 81 ++++++++++++++++
 .../service/StatusServiceImpl.java              | 98 ++++++++++++++++++++
 .../corepersistence/CpEntityMapUtilsTest.java   | 26 +++---
 .../persistence/ApplicationServiceIT.java       |  8 +-
 .../usergrid/rest/ApplicationsResource.java     | 94 ++++++++++++++++---
 .../rest/applications/ApplicationResource.java  | 43 +++------
 .../applications/ApplicationResource.java       |  5 +-
 .../apache/usergrid/rest/SystemResourceIT.java  | 23 ++++-
 .../test/resource/endpoints/SystemResource.java | 22 ++++-
 .../usergrid/management/ManagementService.java  |  2 +-
 .../cassandra/ManagementServiceImpl.java        | 45 +++++----
 14 files changed, 391 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
index b702276,8d36acb..74827e9
--- 
a/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
+++ 
b/stack/rest/src/main/java/org/apache/usergrid/rest/ApplicationsResource.java
@@@ -19,8 -19,12 +19,10 @@@
   */
  package org.apache.usergrid.rest;
  
 -import com.sun.jersey.api.json.JSONWithPadding;
 +import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
+ import org.apache.usergrid.corepersistence.service.StatusService;
 -import org.apache.usergrid.persistence.Entity;
  import org.apache.usergrid.persistence.EntityManager;
 -import org.apache.usergrid.persistence.core.util.StringUtils;
+ import org.apache.usergrid.persistence.model.util.UUIDGenerator;
  import org.apache.usergrid.rest.security.annotations.RequireSystemAccess;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
@@@ -56,13 -64,12 +59,15 @@@ public class ApplicationsResource exten
  
      @RequireSystemAccess
      @DELETE
 +    @JSONP
      @Path( "{applicationId}" )
-     public ApiResponse clearApplication( @Context UriInfo ui,
 -    public JSONWithPadding clearApplication( @Context UriInfo ui,
 -                                             @PathParam("applicationId") UUID 
applicationId,
 -                                             @QueryParam( 
"confirmApplicationName" ) String confirmApplicationName,
 -                                             @QueryParam( "limit" ) int limit,
 -                                             @QueryParam( "callback" ) 
@DefaultValue( "callback" ) String callback )
++    public ApiResponse clearApplication(
++        @Context UriInfo ui,
 +        @PathParam("applicationId") UUID applicationId,
 +        @QueryParam( "confirmApplicationName" ) String confirmApplicationName,
++        @QueryParam( "limit" ) int limit,
 +        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback 
)
 +
          throws Exception {
  
          if(confirmApplicationName == null){
@@@ -72,28 -81,89 +79,89 @@@
          final EntityManager em =  emf.getEntityManager(applicationId);
          final String name =  em.getApplication().getApplicationName();
          if(!name.toLowerCase().equals(confirmApplicationName.toLowerCase())){
 -            throw new IllegalArgumentException("confirmApplicationName: " + 
confirmApplicationName + " does not equal " + name);
 +            throw new IllegalArgumentException(
 +                "confirmApplicationName: " + confirmApplicationName + " does 
not equal " + name);
          }
+         final StatusService statusService = 
injector.getInstance(StatusService.class);
+ 
          final ApiResponse response = createApiResponse();
+ 
          response.setAction( "clear application" );
  
-         logger.info( "clearing up application" );
-         final AtomicInteger itemsDeleted = new AtomicInteger(0);
-         try {
-             management.deleteAllEntities(applicationId)
-                 .count()
-                 .doOnNext(count -> itemsDeleted.set(count))
-                 .toBlocking().lastOrDefault(0);
-         }
-         catch ( Exception e ) {
-             logger.error( "Unable to delete all items, deleted: " + 
itemsDeleted.get(), e );
-         }
+         logger.info("clearing up application");
+ 
 -
+         final Thread delete = new Thread() {
+ 
+             @Override
+             public void run() {
+                 final AtomicInteger itemsDeleted = new AtomicInteger(0);
+                 try {
+                     management.deleteAllEntities(applicationId, limit)
+                         .count()
+                         .doOnNext(count -> itemsDeleted.set(count))
+                         .doOnNext(count -> {
+                             if( count % 100 == 0 ){
+                                 Map<String,Object> map = new 
LinkedHashMap<>();
+                                 map.put("count",itemsDeleted.intValue());
+                                 final StatusService statusService = 
injector.getInstance(StatusService.class);
+                                 statusService.setStatus(applicationId, jobId, 
StatusService.Status.INPROGRESS,map).subscribe();
+                             }
+                         })
+                         .doOnCompleted(() ->{
+                             Map<String,Object> map = new LinkedHashMap<>();
+                             map.put("count",itemsDeleted.intValue());
+                             final StatusService statusService = 
injector.getInstance(StatusService.class);
+                             statusService.setStatus(applicationId,jobId, 
StatusService.Status.COMPLETE,map).subscribe();
+                         })
+                         .subscribe();
+ 
+                 } catch ( Exception e ) {
+                     Map<String,Object> map = new LinkedHashMap<>();
+                     map.put("exception",e);
+                     statusService.setStatus(applicationId,jobId, 
StatusService.Status.FAILED,map).subscribe();
+                     logger.error( "Failed to delete appid:"+applicationId + " 
jobid:"+jobId+" count:"+itemsDeleted, e );
+                 }
+             }
+         };
+ 
+         delete.setName("Delete for app : " + applicationId + " job: " + 
jobId);
+         delete.setDaemon(true);
+         delete.start();
+ 
+         statusService.setStatus(applicationId,jobId, 
StatusService.Status.STARTED,new LinkedHashMap<>()).subscribe();
+ 
+         Map<String,Object> data = new HashMap<>();
+         data.put("jobId",jobId);
+         data.put("status",StatusService.Status.STARTED);
+         response.setData(data);
+         response.setSuccess();
 -        return new JSONWithPadding( response, callback );
++        return response;
+     }
+ 
+     @RequireSystemAccess
+     @GET
+     @Path( "{applicationId}/job/{jobId}" )
 -    public JSONWithPadding getStatus( @Context UriInfo ui,
 -                                             @PathParam("applicationId") UUID 
applicationId,
 -                                            @PathParam("jobId") UUID jobId,
 -                                             @QueryParam( "callback" ) 
@DefaultValue( "callback" ) String callback ) throws Exception{
++    public ApiResponse getStatus(
++        @Context UriInfo ui,
++        @PathParam("applicationId") UUID applicationId,
++        @PathParam("jobId") UUID jobId,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback 
) throws Exception{
++
+         final StatusService statusService = 
injector.getInstance(StatusService.class);
+ 
+         final ApiResponse response = createApiResponse();
+ 
+         response.setAction( "clear application" );
+ 
+         StatusService.JobStatus jobStatus = 
statusService.getStatus(applicationId, jobId).toBlocking().lastOrDefault(null);
+ 
          Map<String,Object> data = new HashMap<>();
-         data.put("count",itemsDeleted.get());
+         data.put("jobId",jobId);
+         data.put( "status", jobStatus.getStatus().toString() );
+         data.put( "metadata", jobStatus.getData() );
          response.setData(data);
          response.setSuccess();
 -
 -        return new JSONWithPadding( response, callback );
 -
 +        return response;
      }
  
  }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index 7dc6717,52a0f99..afcbbaf
--- 
a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
+++ 
b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
@@@ -17,35 -17,8 +17,7 @@@
  package org.apache.usergrid.rest.applications;
  
  
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.Map;
- import java.util.UUID;
- 
- import javax.ws.rs.Consumes;
- import javax.ws.rs.DELETE;
- import javax.ws.rs.DefaultValue;
- import javax.ws.rs.FormParam;
- import javax.ws.rs.GET;
- import javax.ws.rs.HeaderParam;
- import javax.ws.rs.POST;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.QueryParam;
- import javax.ws.rs.core.Context;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.PathSegment;
- import javax.ws.rs.core.Response;
- import javax.ws.rs.core.UriInfo;
- 
 -import com.sun.jersey.api.json.JSONWithPadding;
 -import com.sun.jersey.api.view.Viewable;
 +import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
- import org.apache.usergrid.rest.ApiResponse;
- import org.glassfish.jersey.server.mvc.Viewable;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.context.annotation.Scope;
- import org.springframework.stereotype.Component;
- 
  import org.apache.amber.oauth2.common.error.OAuthError;
  import org.apache.amber.oauth2.common.exception.OAuthProblemException;
  import org.apache.amber.oauth2.common.message.OAuthResponse;
@@@ -65,6 -37,6 +36,7 @@@ import org.apache.usergrid.persistence.
  import org.apache.usergrid.persistence.entities.User;
  import org.apache.usergrid.persistence.index.query.Identifier;
  import org.apache.usergrid.rest.AbstractContextResource;
++import org.apache.usergrid.rest.ApiResponse;
  import org.apache.usergrid.rest.applications.assets.AssetsResource;
  import org.apache.usergrid.rest.applications.events.EventsResource;
  import org.apache.usergrid.rest.applications.queues.QueueResource;
@@@ -75,6 -47,17 +47,18 @@@ import org.apache.usergrid.rest.securit
  import 
org.apache.usergrid.rest.security.annotations.RequireOrganizationAccess;
  import org.apache.usergrid.security.oauth.AccessInfo;
  import org.apache.usergrid.security.oauth.ClientCredentialsInfo;
++import org.glassfish.jersey.server.mvc.Viewable;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ import org.springframework.context.annotation.Scope;
+ import org.springframework.stereotype.Component;
+ 
+ import javax.ws.rs.*;
+ import javax.ws.rs.core.*;
+ import java.io.UnsupportedEncodingException;
+ import java.net.URLEncoder;
+ import java.util.Map;
+ import java.util.UUID;
  
  import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
  import static javax.servlet.http.HttpServletResponse.SC_OK;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
index a278358,55623dd..ae9a2c2
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/SystemResourceIT.java
@@@ -20,9 -20,11 +20,10 @@@ package org.apache.usergrid.rest
  import org.apache.usergrid.rest.test.resource.AbstractRestIT;
  import org.apache.usergrid.rest.test.resource.model.Entity;
  import org.apache.usergrid.rest.test.resource.model.QueryParameters;
 +import org.junit.Test;
  
  import java.util.LinkedHashMap;
+ import java.util.UUID;
  
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertNotNull;
@@@ -60,12 -63,25 +61,26 @@@ public class SystemResourceIT extends A
          queryParameters.addParam( "access_token", 
clientSetup.getSuperuserToken().getAccessToken() );
          queryParameters.addParam("confirmApplicationName", 
this.clientSetup.getAppName());
  
 -        org.apache.usergrid.rest.test.resource.model.ApiResponse result = 
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid()).delete(
 queryParameters);
 +        org.apache.usergrid.rest.test.resource.model.ApiResponse result =
 +            
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid()).delete(
 queryParameters);
  
-         assertNotNull( result );
-         assertNotNull( "ok",result.getStatus() );
-         assertEquals(((LinkedHashMap) result.getData()).get("count"), count);
+         assertNotNull(result);
+         assertNotNull("ok", result.getStatus());
+         assertNotNull(((LinkedHashMap) result.getData()).get("jobId"));
+ 
+         String jobId = (String)((LinkedHashMap) 
result.getData()).get("jobId");
+         queryParameters = new QueryParameters();
+         for(int i = 0;i<10;i++ ) {
+             result = 
clientSetup.getRestClient().system().applications(this.clientSetup.getAppUuid(),
 "job/" + jobId).get(queryParameters);
+             String status = (String) ((LinkedHashMap) 
result.getData()).get("status");
+             if(status.equals("COMPLETE")){
+                 break;
+             }else{
+                 Thread.sleep(100);
+             }
+         }
+         assertEquals(((LinkedHashMap)((LinkedHashMap) 
result.getData()).get("metadata")).get("count"), 10);
+ 
      }
  
  

http://git-wip-us.apache.org/repos/asf/usergrid/blob/0db86225/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
----------------------------------------------------------------------
diff --cc 
stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
index 6d89fa9,1a7b594..96e8fa5
--- 
a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
+++ 
b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource/endpoints/SystemResource.java
@@@ -45,32 -48,37 +45,46 @@@ public class SystemResource extends Nam
      public ApplicationsResource applications(String appid) {
          return new ApplicationsResource(appid,context,this);
      }
 +
+     public ApplicationsResource applications(String appid, String 
additionalPath) {
+         return new 
ApplicationsResource(appid+"/"+additionalPath,context,this);
+     }
++
      public class ApplicationsResource extends NamedResource {
 -        public ApplicationsResource(final String appid, final ClientContext 
context, final UrlResource parent ) {
 -            super( "applications/"+appid,context, parent );
 +
 +        public ApplicationsResource(final String appid, final ClientContext 
context, final UrlResource parent) {
 +            super( "applications/" + appid, context, parent );
          }
  
+         public ApiResponse get(QueryParameters queryParameters){
+ 
 -            WebResource resource = getResource();
++            WebTarget resource = getTarget();
+             resource = addParametersToResource( resource, queryParameters );
+ 
 -            //added httpBasicauth filter to all setup calls because they all 
do verification this way.
 -            HTTPBasicAuthFilter httpBasicAuthFilter = new 
HTTPBasicAuthFilter( "superuser","superpassword" );
 -            resource.addFilter(httpBasicAuthFilter);
++            HttpAuthenticationFeature feature = 
HttpAuthenticationFeature.basicBuilder()
++                .credentials( "superuser", "superpassword" ).build();
+ 
 -            return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept( 
MediaType.APPLICATION_JSON )
++            return resource.register( feature ).request().accept( 
MediaType.APPLICATION_JSON )
+                 .get(ApiResponse.class);
+         }
 -        public ApiResponse delete(QueryParameters queryParameters){
+ 
 -            WebResource resource = getResource();
++
 +        public ApiResponse delete(QueryParameters queryParameters) {
 +
 +            WebTarget resource = getTarget();
              resource = addParametersToResource( resource, queryParameters );
  
 -            //added httpBasicauth filter to all setup calls because they all 
do verification this way.
 -            HTTPBasicAuthFilter httpBasicAuthFilter = new 
HTTPBasicAuthFilter( "superuser","superpassword" );
 -            resource.addFilter(httpBasicAuthFilter);
 +            HttpAuthenticationFeature feature = 
HttpAuthenticationFeature.basicBuilder()
 +                .credentials( "superuser", "superpassword" ).build();
 +
 +            return resource.register( feature ).request().delete( 
ApiResponse.class );
  
 -            return resource.type( MediaType.APPLICATION_JSON_TYPE ).accept( 
MediaType.APPLICATION_JSON )
 -                .delete(ApiResponse.class);
          }
      }
 +
 +    public ApiResponse put(){
-         ApiResponse
-             response = getTarget(true)
-                 .request()
-                 .accept(MediaType.APPLICATION_JSON)
++        ApiResponse response = 
getTarget(true).request().accept(MediaType.APPLICATION_JSON)
 +                .put( javax.ws.rs.client.Entity.json(""), ApiResponse.class);
 +        return response;
 +    }
  }

Reply via email to