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/01/25 22:18:21 UTC
[29/35] usergrid git commit: Fix issue with multiple types within a
list causing class cast exceptions.
Fix issue with multiple types within a list causing class cast exceptions.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/2e37c211
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/2e37c211
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/2e37c211
Branch: refs/heads/USERGRID-1047
Commit: 2e37c21106613dc9b3244f41ace1ef09c41714ec
Parents: 46fb926
Author: Michael Russo <mi...@gmail.com>
Authored: Fri Jan 22 17:28:27 2016 -0800
Committer: Michael Russo <mi...@gmail.com>
Committed: Fri Jan 22 17:28:27 2016 -0800
----------------------------------------------------------------------
.../model/entity/MapToEntityConverter.java | 235 +++++++++++--------
.../persistence/model/field/ArrayField.java | 4 +-
.../persistence/model/field/BooleanField.java | 4 +-
.../persistence/model/field/ByteArrayField.java | 8 +-
.../persistence/model/field/DoubleField.java | 4 +-
.../persistence/model/field/FloatField.java | 4 +-
.../persistence/model/field/IntegerField.java | 4 +-
.../persistence/model/field/ListField.java | 4 +-
.../persistence/model/field/LocationField.java | 4 +-
.../persistence/model/field/LongField.java | 4 +-
.../persistence/model/field/NullField.java | 4 +-
.../model/field/SerializedObjectField.java | 8 +-
.../persistence/model/field/SetField.java | 6 +-
.../persistence/model/field/StringField.java | 6 +-
.../persistence/model/field/UUIDField.java | 4 +-
.../model/entity/MapToEntityConverterTest.java | 40 +++-
16 files changed, 211 insertions(+), 132 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/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 38d6631..7610489 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
@@ -41,12 +41,14 @@ public class MapToEntityConverter{
static final String lat = "latitude";
static final String lon = "longitude";
+
public Entity fromMap( Map<String, Object> map, boolean topLevel ) {
Entity entity = new Entity();
return fromMap( entity, map, null, null, topLevel );
}
+
public Entity fromMap(final Entity entity,final Map<String, Object> map,final
SchemaManager schemaManager, final String entityType, boolean topLevel) {
@@ -54,151 +56,118 @@ public class MapToEntityConverter{
Object value = map.get( fieldName );
boolean unique = schemaManager == null ? topLevel : topLevel && schemaManager.isPropertyUnique(entityType, fieldName);
- //cannot store fields that aren't locations
+ entity.setField( processField( fieldName, value, unique));
- if ( value instanceof String ) {
- String stringValue =(String)value;
- entity.setField(new StringField(fieldName, stringValue, unique));
+ }
- } else if ( value instanceof Boolean ) {
- entity.setField( new BooleanField( fieldName, (Boolean)value, unique ));
- } else if ( value instanceof Integer ) {
- entity.setField( new IntegerField( fieldName, (Integer)value, unique ));
+ return entity;
+ }
- } else if ( value instanceof Double ) {
- entity.setField( new DoubleField( fieldName, (Double)value, unique ));
- } else if ( value instanceof Float ) {
- entity.setField( new FloatField( fieldName, (Float)value, unique ));
+ private ListField processListValue(String fieldName, List list ) {
- } else if ( value instanceof Long ) {
+ if (list.isEmpty()) {
+ return new ArrayField( fieldName );
+ }
- entity.setField( new LongField( fieldName, (Long)value, unique ));
+ final List<Object> returnList = new ArrayList<>();
- } else if ( value instanceof List) {
- Field field = listToListField( fieldName, (List)value );
- if(field == null){
- entity.setField( new NullField( fieldName, unique));
- }else{
- entity.setField( listToListField( fieldName, (List)value ));
- }
+ list.forEach( sample -> {
+
+ if ( sample instanceof Map ) {
+
+ returnList.add( fromMap( (Map<String, Object>) sample, false ) );
- } else if ( value instanceof UUID) {
- entity.setField( new UUIDField( fieldName, (UUID)value, unique ));
+ } else if ( sample instanceof List ) {
- } else if ( value instanceof Map ) {
- processMapValue( value, fieldName, entity);
+ returnList.add( processListForListField( fieldName, (List) sample ) );
- } else if ( value instanceof Enum ) {
- entity.setField( new StringField( fieldName, value.toString(), unique ));
+ } else if ( sample != null ) {
- } else if ( value == null ){
- entity.setField( new NullField( fieldName, unique ));
+ returnList.add( sample );
} else {
- 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 );
+ returnList.add( new NullField(fieldName) );
+
}
- }
- return entity;
+ });
+
+
+ return new ArrayField<>( fieldName, returnList);
+
}
- private ListField listToListField( String fieldName, List list ) {
- if (list.isEmpty()) {
- return new ArrayField( fieldName );
+ private List processListForListField(String fieldName, List list ) {
+ if ( list.isEmpty() ) {
+ return list;
}
- Object sample = list.get(0);
+ List<Object> newList = new ArrayList<>();
- if ( sample instanceof Map ) {
- return new ArrayField( fieldName, processListForField( list ));
+ list.forEach( sample -> {
- } else if ( sample instanceof List ) {
- return new ArrayField<List>( fieldName, processListForField( list ));
+ if ( sample instanceof Map ) {
- } else if ( sample instanceof String ) {
- return new ArrayField<String>( fieldName, (List<String>)list );
+ newList.add( processMapValue( sample, fieldName) );
- } else if ( sample instanceof Boolean ) {
- return new ArrayField<Boolean>( fieldName, (List<Boolean>)list );
+ } else if ( sample instanceof List ) {
- } else if ( sample instanceof Integer ) {
- return new ArrayField<Integer>( fieldName, (List<Integer>)list );
+ for (Object o : list) {
- } else if ( sample instanceof Double ) {
- return new ArrayField<Double>( fieldName, (List<Double>)list );
+ newList.add(o);
- } else if ( sample instanceof Long ) {
- return new ArrayField<Long>( fieldName, (List<Long>)list );
+// if (o instanceof List) {
+// newList.add( processField( fieldName, (List) o, false));
+// } else {
+// newList.add(o);
+// }
- } else if ( sample == null ) {
- return new ArrayField<Object>( fieldName, (List<Object>)list );
+ }
- } else{
- throw new RuntimeException("Unknown type " + sample.getClass().getName());
- }
- }
- private List processListForField( List list ) {
- if ( list.isEmpty() ) {
- return list;
- }
- Object sample = list.get(0);
+ } else {
- if ( sample instanceof Map ) {
- List<Entity> newList = new ArrayList<Entity>();
- for ( Map<String, Object> map : (List<Map<String, Object>>)list ) {
- newList.add( fromMap( map, false ) );
+ newList.add( sample );
}
- return newList;
-
- } else if ( sample instanceof List ) {
- List<Object> newList = new ArrayList<Object>();
- for (Object o : list) {
- if (o instanceof List) {
- newList.add(processListForField((List) o));
- } else {
- newList.add(o);
- }
- }
- return newList;
- } else {
- return list;
- }
+
+ });
+
+ return newList;
+
+
}
- private void processMapValue( Object value, String fieldName, Entity entity) {
+ private Field processMapValue( Object value, String fieldName) {
- // is the map really a location element?
+ // check to see if the map is truly a location object
if ("location" .equals(fieldName.toString().toLowerCase()) ) {
- processLocationField((Map<String, Object>) value, fieldName, entity);
+ return processLocationField((Map<String, Object>) value, fieldName);
} else {
+
+
// not a location element, process it as map
- entity.setField(new EntityObjectField(fieldName,
- fromMap((Map<String, Object>) value, false))); // recursion
+ return processMapField( value, fieldName);
}
}
+
+ private Field processMapField ( Object value, String fieldName) {
+
+ return new EntityObjectField( fieldName, fromMap( (Map<String, Object>)value, false));
+ }
+
/**
* for location we need to parse two formats potentially and convert to a typed field
*/
- private void processLocationField(Map<String, Object> value, String fieldName, Entity entity) {
+ private Field processLocationField(Map<String, Object> value, String fieldName) {
// get the object to inspect
Map<String, Object> origMap = value;
Map<String, Object> m = new HashMap<String, Object>();
@@ -241,13 +210,85 @@ public class MapToEntityConverter{
+ "latitude and longitude, or lat and lon");
}
- entity.setField(new LocationField(fieldName, new Location(latVal, lonVal)));
+ return new LocationField(fieldName, new Location(latVal, lonVal));
} else {
//can't process non enties
logger.warn(
"entity cannot process location values that don't have valid location{latitude,longitude} values, changing to generic object"
);
- entity.setField(new EntityObjectField(fieldName,fromMap( value, false))); // recursion
+ return new EntityObjectField(fieldName,fromMap( value, false)); // recursion
}
}
+
+
+
+ private Field processField(final String fieldName, final Object value, final boolean unique) {
+
+ Field processedField;
+
+ if ( value instanceof String ) {
+
+ String stringValue =(String)value;
+ processedField = new StringField(fieldName, stringValue, unique);
+
+ } else if ( value instanceof Boolean ) {
+
+ processedField = new BooleanField( fieldName, (Boolean)value, unique );
+
+ } else if ( value instanceof Integer ) {
+
+ processedField = new IntegerField( fieldName, (Integer)value, unique );
+
+ } else if ( value instanceof Double ) {
+
+ processedField = new DoubleField( fieldName, (Double)value, unique );
+
+ } else if ( value instanceof Float ) {
+
+ processedField = new FloatField( fieldName, (Float)value, unique );
+
+ } else if ( value instanceof Long ) {
+
+ processedField = new LongField( fieldName, (Long)value, unique );
+
+ } else if ( value instanceof List) {
+
+ processedField = processListValue( fieldName, (List)value );
+
+ } else if ( value instanceof UUID) {
+
+ processedField = new UUIDField( fieldName, (UUID)value, unique );
+
+ } else if ( value instanceof Map ) {
+
+ processedField = processMapValue( value, fieldName);
+
+ } else if ( value instanceof Enum ) {
+
+ processedField = new StringField( fieldName, value.toString(), unique );
+
+ } else if ( value == null ){
+
+ processedField = new NullField( fieldName, unique );
+
+ } else {
+ 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() );
+ processedField = bf;
+ }
+
+
+ return processedField;
+
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ArrayField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ArrayField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ArrayField.java
index 0e7bc4a..be1d923 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ArrayField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ArrayField.java
@@ -23,7 +23,7 @@ import java.util.List;
/**
* A marker to signal array handling. Just delegates to list field for easier handling internally
*/
-public class ArrayField<T> extends ListField<T> {
+public final class ArrayField<T> extends ListField<T> {
/**
* Contructor that intializes with an empty set for adding to later
@@ -43,7 +43,7 @@ public class ArrayField<T> extends ListField<T> {
/**
* Add the value to the list
*/
- public void add( T listItem ) {
+ public final void add( T listItem ) {
value.add( listItem );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/BooleanField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/BooleanField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/BooleanField.java
index 7965855..2916096 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/BooleanField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/BooleanField.java
@@ -20,7 +20,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* @author: tnine
*/
-public class BooleanField extends AbstractField<Boolean> {
+public final class BooleanField extends AbstractField<Boolean> {
public BooleanField( String name, Boolean value ) {
super( name, value );
@@ -35,7 +35,7 @@ public class BooleanField extends AbstractField<Boolean> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.BOOLEAN;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ByteArrayField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ByteArrayField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ByteArrayField.java
index 2e116d7..58defed 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ByteArrayField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ByteArrayField.java
@@ -22,7 +22,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* A field for storing and array of bytes.
*/
-public class ByteArrayField extends AbstractField<byte[]> {
+public final class ByteArrayField extends AbstractField<byte[]> {
Class classinfo;
@@ -36,17 +36,17 @@ public class ByteArrayField extends AbstractField<byte[]> {
}
@Override
- public byte[] getValue() {
+ public final byte[] getValue() {
return value;
}
- public Class getClassinfo() {
+ public final Class getClassinfo() {
return classinfo;
}
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.BYTE_ARRAY;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DoubleField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DoubleField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DoubleField.java
index ccbc3e2..3b2c413 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DoubleField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/DoubleField.java
@@ -20,7 +20,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* @author: tnine
*/
-public class DoubleField extends AbstractField<Double> {
+public final class DoubleField extends AbstractField<Double> {
public DoubleField(String name, Double value) {
super(name, value);
@@ -35,7 +35,7 @@ public class DoubleField extends AbstractField<Double> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.DOUBLE;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FloatField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FloatField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FloatField.java
index 28c6f36..8c288f3 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FloatField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/FloatField.java
@@ -20,7 +20,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* Represents Float.
*/
-public class FloatField extends AbstractField<Float> {
+public final class FloatField extends AbstractField<Float> {
public FloatField(String name, Float value) {
super(name, value);
@@ -35,7 +35,7 @@ public class FloatField extends AbstractField<Float> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.FLOAT;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/IntegerField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/IntegerField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/IntegerField.java
index 3eb0330..b03ecf8 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/IntegerField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/IntegerField.java
@@ -20,7 +20,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* @author: tnine
*/
-public class IntegerField extends AbstractField<Integer> {
+public final class IntegerField extends AbstractField<Integer> {
public IntegerField(String name, Integer value) {
super(name, value);
@@ -35,7 +35,7 @@ public class IntegerField extends AbstractField<Integer> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.INTEGER;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ListField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ListField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ListField.java
index 5ec4237..d063b02 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ListField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/ListField.java
@@ -51,12 +51,12 @@ public class ListField<T> extends AbstractField<List<T>> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.LIST;
}
- public int size(){
+ public final int size(){
return this.value.size();
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LocationField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LocationField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LocationField.java
index 4605e1b..244110a 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LocationField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LocationField.java
@@ -23,7 +23,7 @@ import org.apache.usergrid.persistence.model.field.value.Location;
/**
* Basic field for storing location data
*/
-public class LocationField extends AbstractField<Location> {
+public final class LocationField extends AbstractField<Location> {
/**
* Create a location field with the given point
@@ -43,7 +43,7 @@ public class LocationField extends AbstractField<Location> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.LOCATION;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LongField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LongField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LongField.java
index d4b6297..f36c046 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LongField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/LongField.java
@@ -22,7 +22,7 @@ package org.apache.usergrid.persistence.model.field;
* @author: tnine
*
*/
-public class LongField extends AbstractField<Long> {
+public final class LongField extends AbstractField<Long> {
public LongField(String name, Long value) {
super(name, value);
@@ -37,7 +37,7 @@ public class LongField extends AbstractField<Long> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.LONG;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/NullField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/NullField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/NullField.java
index 6362bcb..94fca87 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/NullField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/NullField.java
@@ -21,7 +21,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* Created by russo on 1/14/16.
*/
-public class NullField extends AbstractField<Object>{
+public final class NullField extends AbstractField<Object>{
public NullField(String name) {
@@ -37,7 +37,7 @@ public class NullField extends AbstractField<Object>{
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.NULL;
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SerializedObjectField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SerializedObjectField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SerializedObjectField.java
index 5b16f89..3cc6d09 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SerializedObjectField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SerializedObjectField.java
@@ -22,7 +22,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* Classy class class.
*/
-public class SerializedObjectField extends AbstractField<String> {
+public final class SerializedObjectField extends AbstractField<String> {
Class classinfo;
public SerializedObjectField(String name, String value, Class classinfo) {
@@ -35,17 +35,17 @@ public class SerializedObjectField extends AbstractField<String> {
}
@Override
- public String getValue() {
+ public final String getValue() {
return value;
}
- public Class getClassinfo() {
+ public final Class getClassinfo() {
return classinfo;
}
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.SERIALIZED_OBJECT;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SetField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SetField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SetField.java
index 47a9c7c..8662c8d 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SetField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/SetField.java
@@ -24,7 +24,7 @@ import java.util.Set;
/**
* An object field that represents a set of objects
*/
-public class SetField<T> extends AbstractField<Set<T>> {
+public final class SetField<T> extends AbstractField<Set<T>> {
/**
* Constructor that initializes with an empty set for adding to later
@@ -44,13 +44,13 @@ public class SetField<T> extends AbstractField<Set<T>> {
/**
* Add an entry to the set
*/
- public void addEntry( T setItem ) {
+ public final void addEntry( T setItem ) {
value.add( setItem );
}
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.SET;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/StringField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/StringField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/StringField.java
index 48ff193..2b8124a 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/StringField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/StringField.java
@@ -20,7 +20,7 @@ package org.apache.usergrid.persistence.model.field;
/**
* A String field
*/
-public class StringField extends AbstractField<String> {
+public final class StringField extends AbstractField<String> {
public static final int MAX_LENGTH = 500;
@@ -39,13 +39,13 @@ public class StringField extends AbstractField<String> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.STRING;
}
@Override
- public void validate() {
+ public final void validate() {
//not unique, don't care
if(!unique){
return;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/UUIDField.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/UUIDField.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/UUIDField.java
index 4c67447..43f59ce 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/UUIDField.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/field/UUIDField.java
@@ -22,7 +22,7 @@ import java.util.UUID;
/**
* A String field
*/
-public class UUIDField extends AbstractField<UUID> {
+public final class UUIDField extends AbstractField<UUID> {
public UUIDField(String name, UUID value) {
super(name, value);
@@ -37,7 +37,7 @@ public class UUIDField extends AbstractField<UUID> {
@Override
- public FieldTypeName getTypeName() {
+ public final FieldTypeName getTypeName() {
return FieldTypeName.UUID;
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2e37c211/stack/corepersistence/model/src/test/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverterTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/test/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverterTest.java b/stack/corepersistence/model/src/test/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverterTest.java
index 03dfa11..acc8cfd 100644
--- a/stack/corepersistence/model/src/test/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverterTest.java
+++ b/stack/corepersistence/model/src/test/java/org/apache/usergrid/persistence/model/entity/MapToEntityConverterTest.java
@@ -22,13 +22,16 @@
package org.apache.usergrid.persistence.model.entity;
+import org.apache.usergrid.persistence.model.field.Field;
import org.apache.usergrid.persistence.model.field.FieldTypeName;
+import org.apache.usergrid.persistence.model.field.value.EntityObject;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -136,7 +139,42 @@ public class MapToEntityConverterTest {
List arrayReturned = (List) entity.getField("arrayNullValues").getValue();
- assertTrue( arrayReturned.get(0) == null);
+ Field convertedMapValue = (Field) arrayReturned.get(0);
+
+ assertTrue( convertedMapValue.getTypeName() == FieldTypeName.NULL);
+ }
+
+ @Test
+ public void testMultipleValueTypesWithinList() {
+
+ // build top-level map
+ final Map<String,Object> data = new HashMap<>(1);
+
+ final List<Object> arrayDifferentValueTypes = new ArrayList<>(2);
+
+ final Map<String, String> mapValue = new HashMap<>(1);
+ mapValue.put("mapkey", "mapvalue");
+
+ arrayDifferentValueTypes.add(mapValue);
+ arrayDifferentValueTypes.add("stringvalue");
+
+ // add the nested list to the map
+ data.put("arrayDifferentValueTypes", arrayDifferentValueTypes);
+
+ // convert the map to an entity
+ MapToEntityConverter converter = new MapToEntityConverter();
+ Entity entity = converter.fromMap(data, true);
+
+ // make sure the nested array got converted into a ListField
+ assertTrue(entity.getField("arrayDifferentValueTypes").getTypeName() == FieldTypeName.LIST);
+
+
+ List arrayReturned = (List) entity.getField("arrayDifferentValueTypes").getValue();
+
+ EntityObject convertedMapValue = (EntityObject) arrayReturned.get(0);
+ assertEquals( convertedMapValue.getField("mapkey").getValue(), mapValue.get("mapkey"));
+ assertEquals( arrayReturned.get(1), arrayDifferentValueTypes.get(1));
+
}
}