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 2015/07/28 17:27:34 UTC
[1/4] incubator-usergrid git commit: convert to lat lon for ES
otherwise its latitude longitude
Repository: incubator-usergrid
Updated Branches:
refs/heads/two-dot-o-dev 4a7ce9a17 -> b7fd30051
convert to lat lon for ES otherwise its latitude longitude
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/ab059f64
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/ab059f64
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/ab059f64
Branch: refs/heads/two-dot-o-dev
Commit: ab059f64990a030bbe2a079b80850a3c2ca3f263
Parents: 4a7ce9a
Author: Shawn Feldman <sf...@apache.org>
Authored: Mon Jul 27 15:20:15 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Mon Jul 27 15:20:15 2015 -0600
----------------------------------------------------------------------
.../corepersistence/util/CpEntityMapUtils.java | 286 +------------------
.../org/apache/usergrid/persistence/Schema.java | 18 +-
.../org/apache/usergrid/persistence/GeoIT.java | 6 +-
.../model/collection/SchemaManager.java | 35 +++
.../model/entity/EntityToMapConverter.java | 61 ++--
.../model/entity/MapToEntityConverter.java | 137 +++++----
.../index/impl/EntityMappingParser.java | 14 +-
.../index/impl/EntityToMapConverterTest.java | 12 +-
8 files changed, 181 insertions(+), 388 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpEntityMapUtils.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpEntityMapUtils.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpEntityMapUtils.java
index 80c7857..07078fc 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpEntityMapUtils.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpEntityMapUtils.java
@@ -33,7 +33,10 @@ import java.util.UUID;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
import org.apache.usergrid.persistence.Schema;
+import org.apache.usergrid.persistence.model.collection.SchemaManager;
import org.apache.usergrid.persistence.model.entity.Entity;
+import org.apache.usergrid.persistence.model.entity.EntityToMapConverter;
+import org.apache.usergrid.persistence.model.entity.MapToEntityConverter;
import org.apache.usergrid.persistence.model.entity.SimpleId;
import org.apache.usergrid.persistence.model.field.*;
import org.apache.usergrid.persistence.model.field.value.EntityObject;
@@ -51,12 +54,9 @@ import org.slf4j.LoggerFactory;
*/
public class CpEntityMapUtils {
- private static final Logger logger = LoggerFactory.getLogger( CpEntityMapUtils.class );
-
- public static JsonFactory jsonFactory = new JsonFactory();
- public static ObjectMapper objectMapper = new ObjectMapper( jsonFactory )
- .registerModule(new GuavaModule());
+ private static final MapToEntityConverter mapConverter = new MapToEntityConverter();
+ private static final EntityToMapConverter entityConverter = new EntityToMapConverter();
/**
* Convert a usergrid 1.0 entity into a usergrid 2.0 entity
@@ -78,7 +78,7 @@ public class CpEntityMapUtils {
public static Entity fromMap( Map<String, Object> map, String entityType, boolean topLevel ) {
- return fromMap( null, map, entityType, topLevel );
+ return fromMap(null, map, entityType, topLevel);
}
public static Entity fromMap(
@@ -88,67 +88,8 @@ public class CpEntityMapUtils {
entity = new Entity();
}
- for ( String fieldName : map.keySet() ) {
-
- Object value = map.get( fieldName );
- boolean unique = Schema.getDefaultSchema().isPropertyUnique(entityType, fieldName);
-
- if ( value instanceof String ) {
- entity.setField( new StringField( fieldName, (String)value, unique && topLevel ));
-
- } else if ( value instanceof Boolean ) {
- entity.setField( new BooleanField( fieldName, (Boolean)value, unique && topLevel ));
-
- } else if ( value instanceof Integer ) {
- entity.setField( new IntegerField( fieldName, (Integer)value, unique && topLevel ));
-
- } else if ( value instanceof Double ) {
- entity.setField( new DoubleField( fieldName, (Double)value, unique && topLevel ));
-
- } else if ( value instanceof Float ) {
- entity.setField( new FloatField( fieldName, (Float)value, unique && topLevel ));
-
- } else if ( value instanceof Long ) {
- entity.setField( new LongField( fieldName, (Long)value, unique && topLevel ));
-
- } else if ( value instanceof List) {
- entity.setField( listToListField( fieldName, (List)value, entityType ));
-
- } else if ( value instanceof UUID) {
- entity.setField( new UUIDField( fieldName, (UUID)value, unique && topLevel ));
-
- } else if ( value instanceof Map ) {
- processMapValue( value, fieldName, entity, entityType);
-
- } else if ( value instanceof Enum ) {
- entity.setField( new StringField( fieldName, value.toString(), unique && topLevel ));
-
- } else if ( value != null ) {
-// String valueSerialized;
-// try {
-// valueSerialized = objectMapper.writeValueAsString(value);
-// }
-// catch ( JsonProcessingException e ) {
-// throw new RuntimeException( "Can't serialize object ",e );
-// }
-//
-// SerializedObjectField bf = new SerializedObjectField( fieldName, valueSerialized, value.getClass() );
-// entity.setField( bf );
- byte[] valueSerialized;
- try {
- valueSerialized = objectMapper.writeValueAsBytes( value );
- }
- catch ( JsonProcessingException e ) {
- throw new RuntimeException( "Can't serialize object ",e );
- }
-
- ByteBuffer byteBuffer = ByteBuffer.wrap(valueSerialized);
- ByteArrayField bf = new ByteArrayField( fieldName, byteBuffer.array(), value.getClass() );
- entity.setField( bf );
- }
- }
-
- return entity;
+ SchemaManager schemaManager = Schema.getDefaultSchema();
+ return mapConverter.fromMap(entity,map, schemaManager, entityType,topLevel);
}
@@ -160,217 +101,8 @@ public class CpEntityMapUtils {
*/
public static Map toMap(EntityObject entity) {
- Map<String, Object> entityMap = new TreeMap<>();
-
- for (Object f : entity.getFields().toArray()) {
- Field field = (Field) f;
-
- if (f instanceof ListField || f instanceof ArrayField) {
- List list = (List) field.getValue();
- entityMap.put(field.getName(),
- new ArrayList( processCollectionForMap(list)));
-
- } else if (f instanceof SetField) {
- Set set = (Set) field.getValue();
- entityMap.put(field.getName(),
- new ArrayList( processCollectionForMap(set)));
-
- } else if (f instanceof EntityObjectField) {
- EntityObject eo = (EntityObject) field.getValue();
- entityMap.put( field.getName(), toMap(eo)); // recursion
-
- } else if (f instanceof StringField) {
- entityMap.put(field.getName(), ((String) field.getValue()));
-
- } else if (f instanceof LocationField) {
- LocationField locField = (LocationField) f;
- Map<String, Object> locMap = new HashMap<String, Object>();
-
- // field names lat and lon trigger ElasticSearch geo location
- locMap.put("lat", locField.getValue().getLatitude());
- locMap.put("lon", locField.getValue().getLongitude());
- entityMap.put( field.getName(), field.getValue());
-
- } else if (f instanceof ByteArrayField) {
- ByteArrayField bf = ( ByteArrayField ) f;
-
- byte[] serilizedObj = bf.getValue();
- Object o;
- try {
- o = objectMapper.readValue( serilizedObj, bf.getClassinfo() );
- }
- catch ( IOException e ) {
- throw new RuntimeException( "Can't deserialize object ",e );
- }
- entityMap.put( bf.getName(), o );
- }
- else if (f instanceof SerializedObjectField) {
- SerializedObjectField bf = (SerializedObjectField) f;
-
- String serilizedObj = bf.getValue();
- Object o;
- try {
- o = objectMapper.readValue( serilizedObj, bf.getClassinfo() );
- }
- catch ( IOException e ) {
- throw new RuntimeException( "Can't deserialize object "+serilizedObj,e );
- }
- entityMap.put( bf.getName(), o );
- }else {
- entityMap.put( field.getName(), field.getValue());
- }
- }
-
- return entityMap;
- }
-
- private static void processMapValue(
- Object value, String fieldName, Entity entity, String entityType) {
-
- // is the map really a location element?
- if ("location" .equals(fieldName.toString().toLowerCase()) ) {
-
- // get the object to inspect
- Map<String, Object> origMap = (Map<String, Object>) value;
- Map<String, Object> m = new HashMap<String, Object>();
-
- // Tests expect us to treat "Longitude" the same as "longitude"
- for ( String key : origMap.keySet() ) {
- m.put( key.toLowerCase(), origMap.get(key) );
- }
-
- // Expect at least two fields in a Location object
- if (m.size() >= 2) {
+ return entityConverter.toMap(entity);
- Double lat = null;
- Double lon = null;
-
- // check the properties to make sure they are set and are doubles
- if (m.get("latitude") != null && m.get("longitude") != null) {
- try {
- lat = Double.parseDouble(m.get("latitude").toString());
- lon = Double.parseDouble(m.get("longitude").toString());
-
- } catch (NumberFormatException ignored) {
- throw new IllegalArgumentException(
- "Latitude and longitude must be doubles (e.g. 32.1234).");
- }
- } else if (m.get("lat") != null && m.get("lon") != null) {
- try {
- lat = Double.parseDouble(m.get("lat").toString());
- lon = Double.parseDouble(m.get("lon").toString());
- } catch (NumberFormatException ignored) {
- throw new IllegalArgumentException(""
- + "Latitude and longitude must be doubles (e.g. 32.1234).");
- }
- } else {
- throw new IllegalArgumentException("Location properties require two fields - "
- + "latitude and longitude, or lat and lon");
- }
-
- if (lat != null && lon != null) {
- entity.setField( new LocationField(fieldName, new Location(lat, lon)));
- } else {
- throw new IllegalArgumentException( "Unable to parse location field properties "
- + "- make sure they conform - lat and lon, and should be doubles.");
- }
- } else {
- throw new IllegalArgumentException("Location properties requires two fields - "
- + "latitude and longitude, or lat and lon.");
- }
- } else {
- // not a location element, process it as map
- entity.setField(new EntityObjectField(fieldName,
- fromMap((Map<String, Object>) value, entityType, false))); // recursion
- }
- }
-
-
- private static ListField listToListField( String fieldName, List list, String entityType ) {
-
- if (list.isEmpty()) {
- return new ArrayField( fieldName );
- }
-
- Object sample = list.get(0);
-
- if ( sample instanceof Map ) {
- return new ArrayField<Entity>( fieldName, processListForField( list, entityType ));
-
- } else if ( sample instanceof List ) {
- return new ArrayField<List>( fieldName, processListForField( list, entityType ));
- } else if ( sample instanceof String ) {
- return new ArrayField<String>( fieldName, (List<String>)list );
-
- } else if ( sample instanceof Boolean ) {
- return new ArrayField<Boolean>( fieldName, (List<Boolean>)list );
-
- } else if ( sample instanceof Integer ) {
- return new ArrayField<Integer>( fieldName, (List<Integer>)list );
-
- } else if ( sample instanceof Double ) {
- return new ArrayField<Double>( fieldName, (List<Double>)list );
-
- } else if ( sample instanceof Long ) {
- return new ArrayField<Long>( fieldName, (List<Long>)list );
-
- } else {
- throw new RuntimeException("Unknown type " + sample.getClass().getName());
- }
- }
-
-
- private static List processListForField( List list, String entityType ) {
- if ( list.isEmpty() ) {
- return list;
- }
- Object sample = list.get(0);
-
- if ( sample instanceof Map ) {
- List<Entity> newList = new ArrayList<Entity>();
- for ( Map<String, Object> map : (List<Map<String, Object>>)list ) {
- newList.add( fromMap( map, entityType, false ) );
- }
- return newList;
-
- } else if ( sample instanceof List ) {
- return processListForField( list, entityType ); // recursion
-
- } else {
- return list;
- }
- }
- private static Collection processCollectionForMap(Collection c) {
- if (c.isEmpty()) {
- return c;
- }
- List processed = new ArrayList();
- Object sample = c.iterator().next();
-
- if (sample instanceof Entity) {
- for (Object o : c.toArray()) {
- Entity e = (Entity) o;
- processed.add(toMap(e));
- }
-
- } else if (sample instanceof List) {
- for (Object o : c.toArray()) {
- List list = (List) o;
- processed.add(processCollectionForMap(list)); // recursion;
- }
-
- } else if (sample instanceof Set) {
- for (Object o : c.toArray()) {
- Set set = (Set) o;
- processed.add(processCollectionForMap(set)); // recursion;
- }
-
- } else {
- for (Object o : c.toArray()) {
- processed.add(o);
- }
- }
- return processed;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/core/src/main/java/org/apache/usergrid/persistence/Schema.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/Schema.java b/stack/core/src/main/java/org/apache/usergrid/persistence/Schema.java
index b42995a..d1ac6dc 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/Schema.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/Schema.java
@@ -41,6 +41,7 @@ import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
+import org.apache.usergrid.persistence.model.collection.SchemaManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -95,7 +96,7 @@ import static org.apache.usergrid.utils.StringUtils.stringOrSubstringAfterLast;
*
* @author edanuff
*/
-public class Schema {
+public class Schema implements SchemaManager {
private static final Logger logger = LoggerFactory.getLogger( Schema.class );
@@ -697,7 +698,8 @@ public class Schema {
/** @return value */
- public boolean isPropertyMutable( String entityType, String propertyName ) {
+ @Override
+ public boolean isPropertyMutable(String entityType, String propertyName) {
EntityInfo entity = getEntityInfo( entityType );
return entity != null && entity.isPropertyMutable(propertyName);
@@ -705,7 +707,8 @@ public class Schema {
}
- public boolean isPropertyUnique( String entityType, String propertyName ) {
+ @Override
+ public boolean isPropertyUnique(String entityType, String propertyName) {
EntityInfo entity = getEntityInfo( entityType );
return entity != null && entity.isPropertyUnique(propertyName);
@@ -713,7 +716,8 @@ public class Schema {
}
- public boolean isPropertyIndexed( String entityType, String propertyName ) {
+ @Override
+ public boolean isPropertyIndexed(String entityType, String propertyName) {
EntityInfo entity = getEntityInfo( entityType );
return entity == null || !entity.hasProperty(propertyName) || entity.isPropertyIndexed(propertyName);
@@ -721,7 +725,8 @@ public class Schema {
}
- public boolean isPropertyFulltextIndexed( String entityType, String propertyName ) {
+ @Override
+ public boolean isPropertyFulltextIndexed(String entityType, String propertyName) {
EntityInfo entity = getEntityInfo( entityType );
return entity == null || !entity.hasProperty(propertyName) || entity.isPropertyFulltextIndexed(propertyName);
@@ -729,7 +734,8 @@ public class Schema {
}
- public boolean isPropertyTimestamp( String entityType, String propertyName ) {
+ @Override
+ public boolean isPropertyTimestamp(String entityType, String propertyName) {
EntityInfo entity = getEntityInfo( entityType );
return entity != null && entity.isPropertyTimestamp(propertyName);
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java b/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
index 4529140..8d71826 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/GeoIT.java
@@ -104,7 +104,9 @@ public class GeoIT extends AbstractCoreIT {
//3. Remove the entity's location
properties.remove("location");
+ user.getDynamicProperties().remove("location");
em.updateProperties(user, properties);
+ em.update(user);
app.refreshIndex();
//4. Repeat the query, expecting no results
@@ -241,8 +243,10 @@ public class GeoIT extends AbstractCoreIT {
assertEquals("total number of 'stores'", LOCATION_PROPERTIES.size(), listResults.size());
//3. verify each entity has geo data
for (Entity entity : listResults.entities) {
- Location location = (Location) entity.getProperty("location");
+ Map location = (Map)entity.getProperty("location");
assertNotNull(location);
+ assertNotNull(location.get("longitude"));
+ assertNotNull(location.get("latitude"));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/collection/SchemaManager.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/collection/SchemaManager.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/collection/SchemaManager.java
new file mode 100644
index 0000000..452d65e
--- /dev/null
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/collection/SchemaManager.java
@@ -0,0 +1,35 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one or more
+ * * contributor license agreements. The ASF licenses this file to You
+ * * under the Apache License, Version 2.0 (the "License"); you may not
+ * * use this file except in compliance with the License.
+ * * You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing, software
+ * * distributed under the License is distributed on an "AS IS" BASIS,
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * * See the License for the specific language governing permissions and
+ * * limitations under the License. For additional information regarding
+ * * copyright in this work, please see the NOTICE file in the top level
+ * * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.persistence.model.collection;
+
+/**
+ * interface encapsulates schema structure
+ */
+public interface SchemaManager {
+ boolean isPropertyMutable(String entityType, String propertyName);
+
+ boolean isPropertyUnique(String entityType, String propertyName);
+
+ boolean isPropertyIndexed(String entityType, String propertyName);
+
+ boolean isPropertyFulltextIndexed(String entityType, String propertyName);
+
+ boolean isPropertyTimestamp(String entityType, String propertyName);
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
index c7bd90b..9eb50c7 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityToMapConverter.java
@@ -20,23 +20,11 @@ package org.apache.usergrid.persistence.model.entity;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
-import org.apache.usergrid.persistence.model.field.AbstractField;
-import org.apache.usergrid.persistence.model.field.ArrayField;
-import org.apache.usergrid.persistence.model.field.ByteArrayField;
-import org.apache.usergrid.persistence.model.field.EntityObjectField;
-import org.apache.usergrid.persistence.model.field.Field;
-import org.apache.usergrid.persistence.model.field.ListField;
-import org.apache.usergrid.persistence.model.field.LocationField;
-import org.apache.usergrid.persistence.model.field.SetField;
+import java.util.*;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.datatype.guava.GuavaModule;
+import org.apache.usergrid.persistence.model.field.*;
import org.apache.usergrid.persistence.model.field.value.EntityObject;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -46,27 +34,31 @@ import com.fasterxml.jackson.databind.ObjectMapper;
* abstract conversion to Map<String,Object> form EntityObject
*/
public class EntityToMapConverter {
- public static final String LAT = "lat";
- public static final String LON = "lon";
+ public static final String LAT = "latitude";
+ public static final String LON = "longitude";
+ private final JsonFactory jsonFactory = new JsonFactory();
+ private final ObjectMapper objectMapper = new ObjectMapper(jsonFactory).registerModule(new GuavaModule());
+
+ /**
+ * Convert Entity to Map, adding version_ug_field and a {name}_ug_analyzed field for each StringField.
+ */
- public static ObjectMapper objectMapper = new ObjectMapper();
- private final Stack<String> fieldName = new Stack();
/**
- * Convert Entity to Map, adding version_ug_field and a {name}_ug_analyzed field for each StringField.
+ * hacky impl, for outbound implementations longitude needs to be \ "longitude" and not "lon"
+ * @param entityObject
+ * @return
*/
+
public EntityMap toMap( EntityObject entityObject ) {
EntityMap map = new EntityMap();
return toMap(entityObject, map);
}
-
- public EntityMap toMap( EntityObject entity, EntityMap entityMap ) {
-
+ private EntityMap toMap( EntityObject entity, EntityMap entityMap ) {
for ( Field field : entity.getFields() ) {
-
if ( field instanceof ListField || field instanceof ArrayField || field instanceof SetField) {
Collection list = ( Collection ) field.getValue();
entityMap.put( field.getName(), processCollection( list ) );
@@ -96,16 +88,25 @@ public class EntityToMapConverter {
throw new RuntimeException( "Can't deserialize object ", e );
}
entityMap.put( bf.getName(), o );
- }
- else {
- entityMap.put( field.getName(), field.getValue() );
+ }else if (field instanceof SerializedObjectField) {
+ SerializedObjectField bf = (SerializedObjectField) field;
+
+ String serilizedObj = bf.getValue();
+ Object o;
+ try {
+ o = objectMapper.readValue(serilizedObj, bf.getClassinfo());
+ } catch (IOException e) {
+ throw new RuntimeException("Can't deserialize object " + serilizedObj, e);
+ }
+ entityMap.put(bf.getName(), o);
+ } else {
+ entityMap.put(field.getName(), field.getValue());
}
}
return entityMap;
}
-
/**
* Process the collection for our map
* @param c
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
index 6bd6cb6..8f79de5 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverter.java
@@ -1,7 +1,10 @@
package org.apache.usergrid.persistence.model.entity;
+import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.guava.GuavaModule;
+import org.apache.usergrid.persistence.model.collection.SchemaManager;
import org.apache.usergrid.persistence.model.field.*;
import org.apache.usergrid.persistence.model.field.value.Location;
@@ -11,49 +14,51 @@ import java.util.*;
public class MapToEntityConverter{
- private ObjectMapper objectMapper = new ObjectMapper();
+ private final JsonFactory jsonFactory = new JsonFactory();
+ private final ObjectMapper objectMapper = new ObjectMapper(jsonFactory).registerModule(new GuavaModule());
public Entity fromMap( Map<String, Object> map, boolean topLevel ) {
Entity entity = new Entity();
- return fromMap( entity, map, topLevel );
+ return fromMap( entity, map, null, null, topLevel );
}
- public Entity fromMap( Entity entity, Map<String, Object> map, boolean topLevel ) {
+ public Entity fromMap(final Entity entity,final Map<String, Object> map,final SchemaManager schemaManager, final String entityType, boolean topLevel) {
for ( String fieldName : map.keySet() ) {
- Object value = map.get(fieldName);
+ Object value = map.get( fieldName );
+ boolean unique = schemaManager == null ? topLevel : topLevel && schemaManager.isPropertyUnique(entityType, fieldName);
if ( value instanceof String ) {
- entity.setField( new StringField( fieldName, (String)value, topLevel ));
+ entity.setField( new StringField( fieldName, (String)value, unique ));
} else if ( value instanceof Boolean ) {
- entity.setField( new BooleanField( fieldName, (Boolean)value, topLevel ));
+ entity.setField( new BooleanField( fieldName, (Boolean)value, unique ));
} else if ( value instanceof Integer ) {
- entity.setField( new IntegerField( fieldName, (Integer)value, topLevel ));
+ entity.setField( new IntegerField( fieldName, (Integer)value, unique ));
} else if ( value instanceof Double ) {
- entity.setField( new DoubleField( fieldName, (Double)value, topLevel ));
+ entity.setField( new DoubleField( fieldName, (Double)value, unique ));
} else if ( value instanceof Float ) {
- entity.setField( new FloatField( fieldName, (Float)value, topLevel ));
+ entity.setField( new FloatField( fieldName, (Float)value, unique ));
} else if ( value instanceof Long ) {
- entity.setField( new LongField( fieldName, (Long)value, topLevel ));
+ entity.setField( new LongField( fieldName, (Long)value, unique ));
} else if ( value instanceof List) {
entity.setField( listToListField( fieldName, (List)value ));
} else if ( value instanceof UUID) {
- entity.setField( new UUIDField( fieldName, (UUID)value, topLevel ));
+ entity.setField( new UUIDField( fieldName, (UUID)value, unique ));
} else if ( value instanceof Map ) {
processMapValue( value, fieldName, entity);
} else if ( value instanceof Enum ) {
- entity.setField( new StringField( fieldName, value.toString(), topLevel ));
+ entity.setField( new StringField( fieldName, value.toString(), unique ));
} else if ( value != null ) {
byte[] valueSerialized;
@@ -63,15 +68,14 @@ public class MapToEntityConverter{
catch ( JsonProcessingException e ) {
throw new RuntimeException( "Can't serialize object ",e );
}
- catch ( IOException e ) {
- throw new RuntimeException( "Can't serialize object ",e );
- }
- ByteBuffer byteBuffer = ByteBuffer.wrap( valueSerialized );
+
+ ByteBuffer byteBuffer = ByteBuffer.wrap(valueSerialized);
ByteArrayField bf = new ByteArrayField( fieldName, byteBuffer.array(), value.getClass() );
entity.setField( bf );
}
}
+
return entity;
}
@@ -136,59 +140,70 @@ public class MapToEntityConverter{
// is the map really a location element?
if ("location" .equals(fieldName.toString().toLowerCase()) ) {
+ processLocationField((Map<String, Object>) value, fieldName, entity);
- // get the object to inspect
- Map<String, Object> origMap = (Map<String, Object>) value;
- Map<String, Object> m = new HashMap<String, Object>();
- // Tests expect us to treat "Longitude" the same as "longitude"
- for ( String key : origMap.keySet() ) {
- m.put( key.toLowerCase(), origMap.get(key) );
- }
+ } else {
+ // not a location element, process it as map
+ entity.setField(new EntityObjectField(fieldName,
+ fromMap((Map<String, Object>) value, false))); // recursion
+ }
+ }
- // Expect at least two fields in a Location object
- if (m.size() >= 2) {
-
- Double lat = null;
- Double lon = null;
-
- // check the properties to make sure they are set and are doubles
- if (m.get("latitude") != null && m.get("longitude") != null) {
- try {
- lat = Double.parseDouble(m.get("latitude").toString());
- lon = Double.parseDouble(m.get("longitude").toString());
-
- } catch (NumberFormatException ignored) {
- throw new IllegalArgumentException(
- "Latitude and longitude must be doubles (e.g. 32.1234).");
- }
- } else if (m.get("lat") != null && m.get("lon") != null) {
- try {
- lat = Double.parseDouble(m.get("lat").toString());
- lon = Double.parseDouble(m.get("lon").toString());
- } catch (NumberFormatException ignored) {
- throw new IllegalArgumentException(""
- + "Latitude and longitude must be doubles (e.g. 32.1234).");
- }
- } else {
- throw new IllegalArgumentException("Location properties require two fields - "
- + "latitude and longitude, or lat and lon");
- }
+ /**
+ * for location we need to parse two formats potentially and convert to a typed field
+ * @param value
+ * @param fieldName
+ * @param entity
+ */
+ private void processLocationField(Map<String, Object> value, String fieldName, Entity entity) {
+ // get the object to inspect
+ Map<String, Object> origMap = value;
+ Map<String, Object> m = new HashMap<String, Object>();
+
+ // Tests expect us to treat "Longitude" the same as "longitude"
+ for ( String key : origMap.keySet() ) {
+ m.put( key.toLowerCase(), origMap.get(key) );
+ }
- if (lat != null && lon != null) {
- entity.setField( new LocationField(fieldName, new Location(lat, lon)));
- } else {
- throw new IllegalArgumentException( "Unable to parse location field properties "
- + "- make sure they conform - lat and lon, and should be doubles.");
+ // Expect at least two fields in a Location object
+ if (m.size() >= 2) {
+
+ Double lat = null;
+ Double lon = null;
+
+ // check the properties to make sure they are set and are doubles
+ if (m.get("latitude") != null && m.get("longitude") != null) {
+ try {
+ lat = Double.parseDouble(m.get("latitude").toString());
+ lon = Double.parseDouble(m.get("longitude").toString());
+
+ } catch (NumberFormatException ignored) {
+ throw new IllegalArgumentException(
+ "Latitude and longitude must be doubles (e.g. 32.1234).");
+ }
+ } else if (m.get("lat") != null && m.get("lon") != null) {
+ try {
+ lat = Double.parseDouble(m.get("lat").toString());
+ lon = Double.parseDouble(m.get("lon").toString());
+ } catch (NumberFormatException ignored) {
+ throw new IllegalArgumentException(""
+ + "Latitude and longitude must be doubles (e.g. 32.1234).");
}
} else {
- throw new IllegalArgumentException("Location properties requires two fields - "
- + "latitude and longitude, or lat and lon.");
+ throw new IllegalArgumentException("Location properties require two fields - "
+ + "latitude and longitude, or lat and lon");
+ }
+
+ if (lat != null && lon != null) {
+ entity.setField( new LocationField(fieldName, new Location(lat, lon)));
+ } else {
+ throw new IllegalArgumentException( "Unable to parse location field properties "
+ + "- make sure they conform - lat and lon, and should be doubles.");
}
} else {
- // not a location element, process it as map
- entity.setField(new EntityObjectField(fieldName,
- fromMap((Map<String, Object>) value, false))); // recursion
+ throw new IllegalArgumentException("Location properties requires two fields - "
+ + "latitude and longitude, or lat and lon.");
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EntityMappingParser.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EntityMappingParser.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EntityMappingParser.java
index 9adc35d..bfefaa9 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EntityMappingParser.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EntityMappingParser.java
@@ -24,12 +24,7 @@
package org.apache.usergrid.persistence.index.impl;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-import java.util.UUID;
+import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -139,7 +134,12 @@ public class EntityMappingParser implements FieldParser {
if ( value instanceof Map ) {
//if it's a location, then create a location field.
if ( EntityMap.isLocationField( (Map)value ) ) {
- fields.add( EntityField.create( fieldStack.peek(), ( Map ) value ) );
+ Map<String,Object> map = ( Map ) value;
+ Map<String,Object> location = new HashMap<>(2);
+ //normalize location field to use lat/lon for es
+ location.put("lat",map.get("latitude"));
+ location.put("lon",map.get("longitude"));
+ fields.add( EntityField.create( fieldStack.peek(), location) );
return;
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab059f64/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityToMapConverterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityToMapConverterTest.java b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityToMapConverterTest.java
index 96f9169..2fb32cd 100644
--- a/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityToMapConverterTest.java
+++ b/stack/corepersistence/queryindex/src/test/java/org/apache/usergrid/persistence/index/impl/EntityToMapConverterTest.java
@@ -187,9 +187,9 @@ public class EntityToMapConverterTest {
final Map<String, Double> latLong = ( Map<String, Double> ) entityField.get( IndexingUtils.FIELD_LOCATION );
assertEquals( Double.valueOf( 10 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LAT ) );
+ latLong.get( "lat" ) );
assertEquals( Double.valueOf( 20 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LON ) );
+ latLong.get( "lon" ) );
} );
}
@@ -404,9 +404,9 @@ public class EntityToMapConverterTest {
final Map<String, Double> latLong = ( Map<String, Double> ) entityField.get( IndexingUtils.FIELD_LOCATION );
assertEquals( Double.valueOf( 10 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LAT ) );
+ latLong.get( "lat" ) );
assertEquals( Double.valueOf( 20 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LON ) );
+ latLong.get( "lon" ) );
} );
}
@@ -518,9 +518,9 @@ public class EntityToMapConverterTest {
final Map<String, Double> latLong = ( Map<String, Double> ) entityField.get( IndexingUtils.FIELD_LOCATION );
assertEquals( Double.valueOf( 10 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LAT ) );
+ latLong.get("lat" ) );
assertEquals( Double.valueOf( 20 ),
- latLong.get( org.apache.usergrid.persistence.model.entity.EntityToMapConverter.LON ) );
+ latLong.get("lon" ) );
} );
}
[2/4] incubator-usergrid git commit: fixed assets resource
Posted by gr...@apache.org.
fixed assets resource
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/fb1d552c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/fb1d552c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/fb1d552c
Branch: refs/heads/two-dot-o-dev
Commit: fb1d552cd2eb87513328051bd749f5c59358f768
Parents: 4a7ce9a
Author: GERey <gr...@apigee.com>
Authored: Mon Jul 27 16:44:34 2015 -0700
Committer: GERey <gr...@apigee.com>
Committed: Mon Jul 27 16:44:34 2015 -0700
----------------------------------------------------------------------
.../applications/assets/AssetsResource.java | 37 ++++++++++++++++++--
.../main/resources/usergrid-rest-context.xml | 3 --
2 files changed, 35 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/fb1d552c/stack/rest/src/main/java/org/apache/usergrid/rest/applications/assets/AssetsResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/assets/AssetsResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/assets/AssetsResource.java
index ef43cfd..fedffc4 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/assets/AssetsResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/assets/AssetsResource.java
@@ -26,7 +26,9 @@ import org.apache.usergrid.rest.AbstractContextResource;
import org.apache.usergrid.rest.applications.ServiceResource;
import org.apache.usergrid.rest.security.annotations.RequireApplicationAccess;
import org.apache.usergrid.services.assets.data.AssetUtils;
+import org.apache.usergrid.services.assets.data.AwsSdkS3BinaryStore;
import org.apache.usergrid.services.assets.data.BinaryStore;
+import org.apache.usergrid.services.assets.data.LocalFileBinaryStore;
import org.apache.usergrid.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,6 +43,8 @@ import java.util.Date;
import java.util.Map;
import java.util.UUID;
+import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_USERGRID_BINARY_UPLOADER;
+
/** @deprecated */
@Component("org.apache.usergrid.rest.applications.assets.AssetsResource")
@@ -50,9 +54,16 @@ public class AssetsResource extends ServiceResource {
private Logger logger = LoggerFactory.getLogger( AssetsResource.class );
- @Autowired
+ //@Autowired
private BinaryStore binaryStore;
+ @Autowired
+ private LocalFileBinaryStore localFileBinaryStore;
+
+ @Autowired
+ private AwsSdkS3BinaryStore awsSdkS3BinaryStore;
+
+
@Override
@Path("{itemName}")
@@ -99,7 +110,15 @@ public class AssetsResource extends ServiceResource {
public Response uploadData( @FormDataParam("file") InputStream uploadedInputStream,
// @FormDataParam("file") FormDataContentDisposition fileDetail,
@PathParam("entityId") PathSegment entityId ) throws Exception {
- if (uploadedInputStream != null ) {
+
+ if(properties.getProperty( PROPERTIES_USERGRID_BINARY_UPLOADER ).equals( "local" )){
+ this.binaryStore = localFileBinaryStore;
+ }
+ else{
+ this.binaryStore = awsSdkS3BinaryStore;
+ }
+
+ if (uploadedInputStream != null ) {
UUID assetId = UUID.fromString( entityId.getPath() );
logger.info( "In AssetsResource.uploadData with id: {}", assetId );
EntityManager em = emf.getEntityManager( getApplicationId() );
@@ -131,6 +150,13 @@ public class AssetsResource extends ServiceResource {
public Response uploadDataStream( @PathParam("entityId") PathSegment entityId, InputStream uploadedInputStream )
throws Exception {
+ if(properties.getProperty( PROPERTIES_USERGRID_BINARY_UPLOADER ).equals( "local" )){
+ this.binaryStore = localFileBinaryStore;
+ }
+ else{
+ this.binaryStore = awsSdkS3BinaryStore;
+ }
+
UUID assetId = UUID.fromString( entityId.getPath() );
logger.info( "In AssetsResource.uploadDataStream with id: {}", assetId );
EntityManager em = emf.getEntityManager( getApplicationId() );
@@ -148,6 +174,13 @@ public class AssetsResource extends ServiceResource {
public Response findAsset( @Context UriInfo ui, @QueryParam("callback") @DefaultValue("callback") String callback,
@PathParam("entityId") PathSegment entityId, @HeaderParam("range") String range,
@HeaderParam("if-modified-since") String modifiedSince ) throws Exception {
+ if(properties.getProperty( PROPERTIES_USERGRID_BINARY_UPLOADER ).equals( "local" )){
+ this.binaryStore = localFileBinaryStore;
+ }
+ else{
+ this.binaryStore = awsSdkS3BinaryStore;
+ }
+
UUID assetId = UUID.fromString( entityId.getPath() );
logger.info( "In AssetsResource.findAsset with id: {}, range: {}, modifiedSince: {}",
new Object[] { assetId, range, modifiedSince } );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/fb1d552c/stack/rest/src/main/resources/usergrid-rest-context.xml
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/resources/usergrid-rest-context.xml b/stack/rest/src/main/resources/usergrid-rest-context.xml
index 438cd1c..23312f9 100644
--- a/stack/rest/src/main/resources/usergrid-rest-context.xml
+++ b/stack/rest/src/main/resources/usergrid-rest-context.xml
@@ -75,9 +75,6 @@
</bean>
<bean id="awsS3BinaryStore" class="org.apache.usergrid.services.assets.data.AwsSdkS3BinaryStore">
- <constructor-arg name="accessId" value="xx" />
- <constructor-arg name="secretKey" value="xx" />
- <constructor-arg name="bucketName" value="xx" />
</bean>
[4/4] incubator-usergrid git commit: Merge remote-tracking branch
'origin/asset-rest-fix' into USERGRID-880
Posted by gr...@apache.org.
Merge remote-tracking branch 'origin/asset-rest-fix' into USERGRID-880
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/b7fd3005
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/b7fd3005
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/b7fd3005
Branch: refs/heads/two-dot-o-dev
Commit: b7fd3005131a949c6d307e4bff4d54827af90834
Parents: ab059f6 2c07cd9
Author: Shawn Feldman <sf...@apache.org>
Authored: Tue Jul 28 08:13:41 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Tue Jul 28 08:13:41 2015 -0600
----------------------------------------------------------------------
.../applications/assets/AssetsResource.java | 37 ++++++++++++++++++--
.../main/resources/usergrid-rest-context.xml | 5 +--
2 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
[3/4] incubator-usergrid git commit: Fixed spelling in spring
Posted by gr...@apache.org.
Fixed spelling in spring
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/2c07cd9d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/2c07cd9d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/2c07cd9d
Branch: refs/heads/two-dot-o-dev
Commit: 2c07cd9d17b8e6a5913f3db30b91c9a3f46c0f39
Parents: fb1d552
Author: GERey <gr...@apigee.com>
Authored: Mon Jul 27 16:51:54 2015 -0700
Committer: GERey <gr...@apigee.com>
Committed: Mon Jul 27 16:51:54 2015 -0700
----------------------------------------------------------------------
stack/rest/src/main/resources/usergrid-rest-context.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2c07cd9d/stack/rest/src/main/resources/usergrid-rest-context.xml
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/resources/usergrid-rest-context.xml b/stack/rest/src/main/resources/usergrid-rest-context.xml
index 23312f9..d7ff92c 100644
--- a/stack/rest/src/main/resources/usergrid-rest-context.xml
+++ b/stack/rest/src/main/resources/usergrid-rest-context.xml
@@ -74,7 +74,7 @@
<property name="reposLocation" value="${usergrid.temp.files}"/>
</bean>
- <bean id="awsS3BinaryStore" class="org.apache.usergrid.services.assets.data.AwsSdkS3BinaryStore">
+ <bean id="awsSdkS3BinaryStore" class="org.apache.usergrid.services.assets.data.AwsSdkS3BinaryStore">
</bean>