You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2016/04/08 22:20:49 UTC
[02/36] usergrid git commit: Added a method to properly set the owner
( at least the email ) to the schema map in elastic search Removed traces of
creating a new column family. Map manager is the way to go. Added the get
endpoint to the service resource
Added a method to properly set the owner ( at least the email ) to the schema map in elastic search
Removed traces of creating a new column family. Map manager is the way to go.
Added the get endpoint to the service resource that will allow us to do gets.
Added a way for the endpoint to read the JSON response and did the specific call out so that we could work around having to make a service ( Which is bad code )
Returned an object with a terrible name to debug the response that gets returned.
Added AbstractCollectionService method that allows us to get the workaround to a normal call in order to get around path permission checking.
AbstractService has the workaround which is what needs to be done if you want to avoid using a schema.
Added a new service action for the work around.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/58e6cf38
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/58e6cf38
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/58e6cf38
Branch: refs/heads/release-2.1.1
Commit: 58e6cf38660350b16f3d443dfe781bc9f1c90903
Parents: 56e0371
Author: George Reyes <gr...@apache.org>
Authored: Mon Mar 7 10:40:27 2016 -0800
Committer: George Reyes <gr...@apache.org>
Committed: Thu Mar 24 09:05:42 2016 -0700
----------------------------------------------------------------------
.../corepersistence/CpEntityManager.java | 49 +++++++++-
.../usergrid/persistence/EntityManager.java | 4 +
.../persistence/cassandra/ApplicationCF.java | 5 -
.../rest/applications/ServiceResource.java | 98 +++++++++++++++++++-
.../collection/CollectionsResourceIT.java | 2 +-
.../services/AbstractCollectionService.java | 19 ++++
.../services/AbstractConnectionsService.java | 7 ++
.../usergrid/services/AbstractService.java | 7 ++
.../apache/usergrid/services/ServiceAction.java | 2 +-
.../applications/ApplicationsService.java | 7 ++
10 files changed, 190 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
index 3dbdb7d..6a6d036 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
@@ -17,11 +17,15 @@ package org.apache.usergrid.corepersistence;
import java.nio.ByteBuffer;
+import java.time.Instant;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -1730,8 +1734,49 @@ public class CpEntityManager implements EntityManager {
return get( id, Role.class );
}
+ @Override
+ public Map createCollectionSchema( String collectionName, String owner ,Map<String, Object> properties ){
+
+
+ //haven't decided which one I should base off of which, maybe from epoch to utc
+ Instant timeInstance = Instant.now();
+
+ Date date = Date.from(timeInstance);
+ Long epoch = timeInstance.toEpochMilli();
+
+ Map<String,Object> schemaMap = new HashMap<>( );
+
+
+ schemaMap.put("lastUpdated",epoch);
+ //this needs the method that can extract the user from the token no matter the token.
+ //Possible values are app credentials, org credentials, or the user email(Admin tokens).
+ schemaMap.put("lastUpdateBy",owner);
+ schemaMap.put("lastReindexed",0);
+ schemaMap.putAll( properties );
+
+ //Map<String,Object> fields = properties.get( "properties" );
+
+ //for(Object)
+
+ MapManager mm = getMapManagerForTypes();
+ mm.putString( collectionName,schemaMap.toString() );
+
+ return schemaMap;
+
+ }
@Override
+ public Entity createCollectionSchema( String collectionName ){
+ MapManager mm = getMapManagerForTypes();
+ String jsonMap = mm.getString( collectionName );
+
+ Object obj = JsonUtils.parse( jsonMap );
+
+ return null;
+ }
+
+
+ @Override
public void grantRolePermission( String roleName, String permission ) throws Exception {
roleName = roleName.toLowerCase();
permission = permission.toLowerCase();
@@ -2663,6 +2708,7 @@ public class CpEntityManager implements EntityManager {
cpEntity.getId().getType(), cpEntity.getId().getUuid(), cpEntity.getVersion() );
}
+ //this does the write so before adding to a collection everything already exists already.
cpEntity = ecm.write( cpEntity ).toBlocking().last();
entity.setSize(cpEntity.getSize());
@@ -2683,6 +2729,8 @@ public class CpEntityManager implements EntityManager {
// add to and index in collection of the application
if ( !is_application ) {
+ //maybe a check here to see if it exists in the column family and if it doesn't then SEND IT ON THROUGHH
+
String collectionName = Schema.defaultCollectionName( eType );
CpRelationManager cpr = ( CpRelationManager ) getRelationManager( getApplication() );
cpr.addToCollection( collectionName, entity );
@@ -2695,7 +2743,6 @@ public class CpEntityManager implements EntityManager {
MapManager mm = getMapManagerForTypes();
mm.putString( itemId.toString(), entity.getType() );
-
return entity;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
index 1a844f6..7c5cc5b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
@@ -512,6 +512,10 @@ public interface EntityManager {
*/
public Entity createRole( String roleName, String roleTitle, long inactivity ) throws Exception;
+ public Map createCollectionSchema( String collectionName, String owner ,Map<String, Object> properties );
+
+ Entity createCollectionSchema( String collectionName );
+
public void grantRolePermission( String roleName, String permission ) throws Exception;
public void grantRolePermissions( String roleName, Collection<String> permissions ) throws Exception;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/ApplicationCF.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/ApplicationCF.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/ApplicationCF.java
index ad72717..242d360 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/ApplicationCF.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/ApplicationCF.java
@@ -46,11 +46,6 @@ public enum ApplicationCF implements CFEnum {
/** Entity counters */
ENTITY_COUNTERS( "Entity_Counters", "BytesType", COUNTERTYPE.getClassName() );
- /**
- * Collection Schema
- */
- COL_SCHEMA( "")
-
private final String cf;
private final String comparator;
private final String validator;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
index 2843417..3318adf 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ServiceResource.java
@@ -244,6 +244,55 @@ public class ServiceResource extends AbstractContextResource {
return getSubResource( ServiceResource.class );
}
+ public ServiceResults executeServiceRequestForSchema(UriInfo ui, ApiResponse response, ServiceAction action,
+ ServicePayload payload) throws Exception {
+
+ if(logger.isTraceEnabled()){
+ logger.trace( "ServiceResource.executeServiceRequest" );
+ }
+
+
+ boolean tree = "true".equalsIgnoreCase( ui.getQueryParameters().getFirst( "tree" ) );
+
+ String connectionQueryParm = ui.getQueryParameters().getFirst("connections");
+ boolean returnInboundConnections = true;
+ boolean returnOutboundConnections = true;
+
+ addQueryParams( getServiceParameters(), ui );
+
+ ServiceRequest r = services.newRequest( action, tree, getServiceParameters(), payload,
+ returnInboundConnections, returnOutboundConnections );
+
+ response.setServiceRequest( r );
+ ServiceResults results = r.execute();
+ if ( results != null ) {
+ if ( results.hasData() ) {
+ response.setData( results.getData() );
+ }
+ if ( results.getServiceMetadata() != null ) {
+ response.setMetadata( results.getServiceMetadata() );
+ }
+ Query query = r.getLastQuery();
+ if ( query != null ) {
+ if ( query.hasSelectSubjects() ) {
+ response.setList( QueryUtils.getSelectionResults( query, results ) );
+ response.setCount( response.getList().size() );
+ response.setNext( results.getNextResult() );
+ response.setPath( results.getPath() );
+ return results;
+ }
+ }
+
+ response.setResults( results );
+ }
+
+ httpServletRequest.setAttribute( "applicationId", services.getApplicationId() );
+
+ return results;
+
+
+ }
+
public ServiceResults executeServiceRequest( UriInfo ui, ApiResponse response, ServiceAction action,
ServicePayload payload ) throws Exception {
@@ -366,7 +415,7 @@ public class ServiceResource extends AbstractContextResource {
@Produces({MediaType.APPLICATION_JSON,"application/javascript"})
@RequireApplicationAccess
@JSONP
- public ApiResponse executePostOnIndexes( @Context UriInfo ui,
+ public ApiResponse executePostOnIndexes( @Context UriInfo ui, String body,
@QueryParam("callback") @DefaultValue("callback") String callback )
throws Exception {
@@ -374,17 +423,62 @@ public class ServiceResource extends AbstractContextResource {
logger.trace( "ServiceResource.executePostOnIndexes" );
}
+ Object json;
+ if ( StringUtils.isEmpty( body ) ) {
+ json = null;
+ } else {
+ json = readJsonToObject( body );
+ }
+
ApiResponse response = createApiResponse();
response.setAction( "post" );
response.setApplication( services.getApplication() );
response.setParams( ui.getQueryParameters() );
- executeServiceRequest( ui, response, ServiceAction.POST, null );
+ ServicePayload payload = getPayload( json );
+
+ executeServiceRequestForSchema( ui,response,ServiceAction.SCHEMA,payload );
+
+ return response;
+ }
+
+ @GET
+ @Path("_index")
+ @Produces({MediaType.APPLICATION_JSON,"application/javascript"})
+ @RequireApplicationAccess
+ @JSONP
+ public ApiResponse executeGetOnIndex( @Context UriInfo ui, String body,
+ @QueryParam("callback") @DefaultValue("callback") String callback )
+ throws Exception {
+
+ if(logger.isTraceEnabled()){
+ logger.trace( "ServiceResource.executePostOnIndexes" );
+ }
+
+ Object json;
+ if ( StringUtils.isEmpty( body ) ) {
+ json = null;
+ } else {
+ json = readJsonToObject( body );
+ }
+
+ ApiResponse response = createApiResponse();
+
+
+
+ response.setAction( "get" );
+ response.setApplication( services.getApplication() );
+ response.setParams( ui.getQueryParameters() );
+
+ ServicePayload payload = getPayload( json );
+
+ executeServiceRequest( ui, response, ServiceAction.GET, payload );
return response;
}
+
@SuppressWarnings({ "unchecked" })
public ServicePayload getPayload( Object json ) {
ServicePayload payload = null;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
index ca5360d..773317b 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
@@ -149,7 +149,7 @@ public class CollectionsResourceIT extends AbstractRestIT {
payload.put( "fields", indexingArray);
//Post index to the collection metadata
- this.app().collection( "testCollection" ).collection( "_indexes" ).post( payload );
+ Object thing = this.app().collection( "testCollection" ).collection( "_indexes" ).post( payload );
refreshIndex();
//Below is what needs to be implemented along with the index call above
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/services/src/main/java/org/apache/usergrid/services/AbstractCollectionService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/AbstractCollectionService.java b/stack/services/src/main/java/org/apache/usergrid/services/AbstractCollectionService.java
index 0ad751a..f6d2849 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/AbstractCollectionService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/AbstractCollectionService.java
@@ -25,6 +25,9 @@ import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
+import org.apache.shiro.subject.Subject;
+
import org.apache.usergrid.persistence.Entity;
import org.apache.usergrid.persistence.EntityRef;
import org.apache.usergrid.persistence.Query;
@@ -34,6 +37,8 @@ import org.apache.usergrid.persistence.SimpleEntityRef;
import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
import org.apache.usergrid.persistence.exceptions.UnexpectedEntityTypeException;
import org.apache.usergrid.persistence.Query.Level;
+import org.apache.usergrid.security.shiro.principals.AdminUserPrincipal;
+import org.apache.usergrid.security.shiro.utils.SubjectUtils;
import org.apache.usergrid.services.ServiceResults.Type;
import org.apache.usergrid.services.exceptions.ForbiddenServiceOperationException;
import org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException;
@@ -318,6 +323,20 @@ public class AbstractCollectionService extends AbstractService {
return new ServiceResults( this, context, Type.COLLECTION, r, null, null );
}
+ @Override
+ public ServiceResults postCollectionSchema( ServiceContext context ) throws Exception {
+ context.setAction( ServiceAction.POST );
+ checkPermissionsForCollection( context );
+ Subject currentUser = SubjectUtils.getSubject();
+ Object currentUser2 =currentUser.getPrincipal();
+
+ Map collectionSchema = em.createCollectionSchema(context.getCollectionName(),
+ ( ( AdminUserPrincipal ) currentUser2 ).getUser().getEmail(),context.getProperties());
+
+ return new ServiceResults( this, context, Type.COLLECTION, Results.fromData( collectionSchema ), null, null );
+
+ }
+
@Override
public ServiceResults postCollection( ServiceContext context ) throws Exception {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/services/src/main/java/org/apache/usergrid/services/AbstractConnectionsService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/AbstractConnectionsService.java b/stack/services/src/main/java/org/apache/usergrid/services/AbstractConnectionsService.java
index 94b25d3..666f676 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/AbstractConnectionsService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/AbstractConnectionsService.java
@@ -38,6 +38,7 @@ import org.apache.usergrid.services.ServiceParameter.NameParameter;
import org.apache.usergrid.services.ServiceParameter.QueryParameter;
import org.apache.usergrid.services.ServiceResults.Type;
import org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException;
+import org.apache.usergrid.services.exceptions.UnsupportedServiceOperationException;
import rx.Observable;
import rx.schedulers.Schedulers;
@@ -391,6 +392,12 @@ public class AbstractConnectionsService extends AbstractService {
@Override
+ public ServiceResults postCollectionSchema( final ServiceContext context ) throws Exception {
+ throw new UnsupportedServiceOperationException( context );
+ }
+
+
+ @Override
public ServiceResults putItemById( ServiceContext context, UUID id ) throws Exception {
if ( context.moreParameters() ) {
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/services/src/main/java/org/apache/usergrid/services/AbstractService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/AbstractService.java b/stack/services/src/main/java/org/apache/usergrid/services/AbstractService.java
index 5d818cc..3c5503c 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/AbstractService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/AbstractService.java
@@ -55,6 +55,7 @@ import org.apache.usergrid.services.ServiceResults.Type;
import org.apache.usergrid.services.exceptions.ServiceInvocationException;
import org.apache.usergrid.services.exceptions.ServiceResourceNotFoundException;
import org.apache.usergrid.services.exceptions.UnsupportedServiceOperationException;
+import org.apache.usergrid.services.generic.RootCollectionService;
import com.google.inject.Injector;
import com.google.inject.Key;
@@ -827,6 +828,9 @@ public abstract class AbstractService implements Service {
case HEAD:
return headCollection( context );
+
+ case SCHEMA:
+ return postCollectionSchema( context );
}
throw new ServiceInvocationException( context, "Request action unhandled " + context.getAction() );
@@ -888,6 +892,9 @@ public abstract class AbstractService implements Service {
}
+ public abstract ServiceResults postCollectionSchema( ServiceContext context ) throws Exception;
+
+
public ServiceResults postCollection( ServiceContext context ) throws Exception {
throw new UnsupportedServiceOperationException( context );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/services/src/main/java/org/apache/usergrid/services/ServiceAction.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/ServiceAction.java b/stack/services/src/main/java/org/apache/usergrid/services/ServiceAction.java
index e1c6133..ec34df4 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/ServiceAction.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/ServiceAction.java
@@ -18,5 +18,5 @@ package org.apache.usergrid.services;
public enum ServiceAction {
- POST, GET, PUT, DELETE, HEAD, OPTIONS;
+ POST, GET, PUT, DELETE, HEAD, OPTIONS, SCHEMA;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/58e6cf38/stack/services/src/main/java/org/apache/usergrid/services/applications/ApplicationsService.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/applications/ApplicationsService.java b/stack/services/src/main/java/org/apache/usergrid/services/applications/ApplicationsService.java
index ae524c6..cf4aa80 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/applications/ApplicationsService.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/applications/ApplicationsService.java
@@ -34,6 +34,7 @@ import org.apache.usergrid.services.ServiceParameter.QueryParameter;
import org.apache.usergrid.services.ServicePayload;
import org.apache.usergrid.services.ServiceResults;
import org.apache.usergrid.services.ServiceResults.Type;
+import org.apache.usergrid.services.exceptions.UnsupportedServiceOperationException;
import org.apache.commons.lang.StringUtils;
@@ -94,6 +95,12 @@ public class ApplicationsService extends AbstractService {
@Override
+ public ServiceResults postCollectionSchema( final ServiceContext context ) throws Exception {
+ throw new UnsupportedServiceOperationException( context );
+ }
+
+
+ @Override
public ServiceResults getEntityDictionary( ServiceContext context, List<EntityRef> refs,
EntityDictionaryEntry dictionary ) throws Exception {