Skip to content

Commit 2b0a344

Browse files
authored
Bugfix/collection like mapping (#179)
* readObjectFieldFromCollectionLike failing test * bugfix readObjectFieldFromCollectionLike
1 parent 78fe4fe commit 2b0a344

File tree

2 files changed

+44
-72
lines changed

2 files changed

+44
-72
lines changed

src/main/java/com/arangodb/springframework/core/convert/DefaultArangoConverter.java

Lines changed: 30 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,22 @@
2020

2121
package com.arangodb.springframework.core.convert;
2222

23-
import java.lang.annotation.Annotation;
24-
import java.lang.reflect.Array;
25-
import java.math.BigDecimal;
26-
import java.math.BigInteger;
27-
import java.sql.Timestamp;
28-
import java.text.ParseException;
29-
import java.time.Instant;
30-
import java.time.LocalDate;
31-
import java.time.LocalDateTime;
32-
import java.time.OffsetDateTime;
33-
import java.time.ZonedDateTime;
34-
import java.util.Collection;
35-
import java.util.Collections;
36-
import java.util.Date;
37-
import java.util.Iterator;
38-
import java.util.Map;
39-
import java.util.Map.Entry;
40-
import java.util.Optional;
41-
23+
import com.arangodb.entity.BaseDocument;
24+
import com.arangodb.entity.BaseEdgeDocument;
25+
import com.arangodb.springframework.annotation.*;
26+
import com.arangodb.springframework.core.convert.resolver.LazyLoadingProxy;
27+
import com.arangodb.springframework.core.convert.resolver.ReferenceResolver;
28+
import com.arangodb.springframework.core.convert.resolver.RelationResolver;
29+
import com.arangodb.springframework.core.convert.resolver.ResolverFactory;
30+
import com.arangodb.springframework.core.mapping.ArangoPersistentEntity;
31+
import com.arangodb.springframework.core.mapping.ArangoPersistentProperty;
32+
import com.arangodb.springframework.core.mapping.ArangoSimpleTypes;
33+
import com.arangodb.springframework.core.util.MetadataUtils;
34+
import com.arangodb.velocypack.VPackBuilder;
35+
import com.arangodb.velocypack.VPackSlice;
36+
import com.arangodb.velocypack.ValueType;
37+
import com.arangodb.velocypack.internal.util.DateUtil;
38+
import com.arangodb.velocypack.module.jdk8.internal.util.JavaTimeUtil;
4239
import org.springframework.core.CollectionFactory;
4340
import org.springframework.core.convert.support.DefaultConversionService;
4441
import org.springframework.core.convert.support.GenericConversionService;
@@ -58,27 +55,15 @@
5855
import org.springframework.util.ClassUtils;
5956
import org.springframework.util.CollectionUtils;
6057

61-
import com.arangodb.entity.BaseDocument;
62-
import com.arangodb.entity.BaseEdgeDocument;
63-
import com.arangodb.springframework.annotation.Document;
64-
import com.arangodb.springframework.annotation.Edge;
65-
import com.arangodb.springframework.annotation.From;
66-
import com.arangodb.springframework.annotation.Ref;
67-
import com.arangodb.springframework.annotation.Relations;
68-
import com.arangodb.springframework.annotation.To;
69-
import com.arangodb.springframework.core.convert.resolver.LazyLoadingProxy;
70-
import com.arangodb.springframework.core.convert.resolver.ReferenceResolver;
71-
import com.arangodb.springframework.core.convert.resolver.RelationResolver;
72-
import com.arangodb.springframework.core.convert.resolver.ResolverFactory;
73-
import com.arangodb.springframework.core.mapping.ArangoPersistentEntity;
74-
import com.arangodb.springframework.core.mapping.ArangoPersistentProperty;
75-
import com.arangodb.springframework.core.mapping.ArangoSimpleTypes;
76-
import com.arangodb.springframework.core.util.MetadataUtils;
77-
import com.arangodb.velocypack.VPackBuilder;
78-
import com.arangodb.velocypack.VPackSlice;
79-
import com.arangodb.velocypack.ValueType;
80-
import com.arangodb.velocypack.internal.util.DateUtil;
81-
import com.arangodb.velocypack.module.jdk8.internal.util.JavaTimeUtil;
58+
import java.lang.annotation.Annotation;
59+
import java.lang.reflect.Array;
60+
import java.math.BigDecimal;
61+
import java.math.BigInteger;
62+
import java.sql.Timestamp;
63+
import java.text.ParseException;
64+
import java.time.*;
65+
import java.util.*;
66+
import java.util.Map.Entry;
8267

8368
/**
8469
* @author Mark Vollmary
@@ -290,16 +275,18 @@ private Object readMap(final TypeInformation<?> type, final VPackSlice source) {
290275
return map;
291276
}
292277

293-
private Object readCollection(final TypeInformation<?> type, final VPackSlice source) {
278+
private Collection<?> readCollection(final TypeInformation<?> type, final VPackSlice source) {
294279
if (!source.isArray()) {
295280
throw new MappingException(
296281
String.format("Can't read collection type %s from VPack type %s!", type, source.getType()));
297282
}
298283

299284
final TypeInformation<?> componentType = getNonNullComponentType(type);
300285
final Class<?> collectionType = Iterable.class.equals(type.getType()) ? Collection.class : type.getType();
301-
final Collection<Object> collection = CollectionFactory.createCollection(collectionType,
302-
componentType.getType(), source.getLength());
286+
287+
final Collection<Object> collection = Collection.class == collectionType || List.class == collectionType ?
288+
new ArrayList<>(source.getLength()) :
289+
CollectionFactory.createCollection(collectionType, componentType.getType(), source.getLength());
303290

304291
final Iterator<VPackSlice> iterator = source.arrayIterator();
305292

src/test/java/com/arangodb/springframework/core/mapping/GeneralMappingTest.java

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,6 @@
2020

2121
package com.arangodb.springframework.core.mapping;
2222

23-
import static org.hamcrest.Matchers.is;
24-
import static org.hamcrest.Matchers.isOneOf;
25-
import static org.hamcrest.Matchers.notNullValue;
26-
import static org.hamcrest.Matchers.nullValue;
27-
import static org.junit.Assert.assertThat;
28-
29-
import java.math.BigDecimal;
30-
import java.math.BigInteger;
31-
import java.sql.Timestamp;
32-
import java.time.Instant;
33-
import java.util.Collection;
34-
import java.util.Collections;
35-
import java.util.Date;
36-
import java.util.HashMap;
37-
import java.util.List;
38-
import java.util.Map;
39-
import java.util.Optional;
40-
import java.util.UUID;
41-
42-
import org.joda.time.DateTimeZone;
43-
import org.junit.Test;
44-
import org.springframework.beans.factory.annotation.Autowired;
45-
import org.springframework.data.annotation.CreatedBy;
46-
import org.springframework.data.annotation.CreatedDate;
47-
import org.springframework.data.annotation.Id;
48-
import org.springframework.data.annotation.LastModifiedBy;
49-
import org.springframework.data.annotation.LastModifiedDate;
50-
5123
import com.arangodb.entity.DocumentEntity;
5224
import com.arangodb.model.AqlQueryOptions;
5325
import com.arangodb.springframework.AbstractArangoTest;
@@ -65,6 +37,19 @@
6537
import com.arangodb.springframework.testdata.Role;
6638
import com.arangodb.util.MapBuilder;
6739
import com.arangodb.velocypack.VPackSlice;
40+
import org.joda.time.DateTimeZone;
41+
import org.junit.Test;
42+
import org.springframework.beans.factory.annotation.Autowired;
43+
import org.springframework.data.annotation.*;
44+
45+
import java.math.BigDecimal;
46+
import java.math.BigInteger;
47+
import java.sql.Timestamp;
48+
import java.time.Instant;
49+
import java.util.*;
50+
51+
import static org.hamcrest.Matchers.*;
52+
import static org.junit.Assert.assertThat;
6853

6954
/**
7055
* @author Mark Vollmary
@@ -565,7 +550,7 @@ public void readObjectFieldFromMap() {
565550
@Test
566551
public void readObjectFieldFromCollectionLike() {
567552
final ObjectFieldTestEntity entity = new ObjectFieldTestEntity();
568-
final Collection<String> collection = Collections.singleton("test");
553+
final Collection<String> collection = Arrays.asList("test", "test");
569554
entity.value = collection;
570555
template.insert(entity);
571556
final Optional<ObjectFieldTestEntity> find = template.find(entity.id, ObjectFieldTestEntity.class);

0 commit comments

Comments
 (0)