[OLINGO-1011] Added UUID generation to DataStore.KeyAccess.createKey. Signed-off-by: mibo <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/cd4810b9 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/cd4810b9 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/cd4810b9 Branch: refs/heads/master Commit: cd4810b9b8bcd542c4ece8656cab580421152404 Parents: 07984dc Author: Michael Strasser <[email protected]> Authored: Thu Aug 25 20:48:47 2016 +1000 Committer: mibo <[email protected]> Committed: Sun Aug 28 08:53:40 2016 +0200 ---------------------------------------------------------------------- .../processor/core/datasource/DataStore.java | 3 ++ .../datasource/AnnotationsInMemoryDsTest.java | 35 ++++++++++++ .../processor/core/model/GuidKeyEntity.java | 56 ++++++++++++++++++++ 3 files changed, 94 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cd4810b9/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/DataStore.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/DataStore.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/DataStore.java index c03a557..98f86f1 100644 --- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/DataStore.java +++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/DataStore.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.apache.olingo.odata2.annotation.processor.core.util.AnnotationHelper; @@ -263,6 +264,8 @@ public class DataStore<T> { return Integer.valueOf(idCounter.getAndIncrement()); } else if (type == Long.class || type == long.class) { return Long.valueOf(idCounter.getAndIncrement()); + } else if (type == UUID.class) { + return UUID.randomUUID(); } throw new UnsupportedOperationException("Automated key generation for type '" + type http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cd4810b9/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationsInMemoryDsTest.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationsInMemoryDsTest.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationsInMemoryDsTest.java index 7b2ee4b..089b6d4 100644 --- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationsInMemoryDsTest.java +++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationsInMemoryDsTest.java @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -32,6 +33,7 @@ import org.apache.olingo.odata2.annotation.processor.core.edm.AnnotationEdmProvi import org.apache.olingo.odata2.annotation.processor.core.model.Building; import org.apache.olingo.odata2.annotation.processor.core.model.City; import org.apache.olingo.odata2.annotation.processor.core.model.Employee; +import org.apache.olingo.odata2.annotation.processor.core.model.GuidKeyEntity; import org.apache.olingo.odata2.annotation.processor.core.model.Location; import org.apache.olingo.odata2.annotation.processor.core.model.Manager; import org.apache.olingo.odata2.annotation.processor.core.model.ModelSharedConstants; @@ -686,6 +688,39 @@ public class AnnotationsInMemoryDsTest { } @Test + public void createGuidKeyEntity() throws Exception { + EdmEntitySet edmEntitySet = createMockedEdmEntitySet(GuidKeyEntity.GUID_KEY_ENTITIES); + + final String entityName = "Entity name"; + GuidKeyEntity testEntity = new GuidKeyEntity(); + testEntity.setName(entityName); + datasource.createData(edmEntitySet, testEntity); + + List entities = datasource.readData(edmEntitySet); + GuidKeyEntity readEntity = (GuidKeyEntity) entities.get(0); + Assert.assertEquals(entityName, readEntity.getName()); + } + + @Test + public void createGuidKeyEntityWithOwnKey() throws Exception { + EdmEntitySet edmEntitySet = createMockedEdmEntitySet(GuidKeyEntity.GUID_KEY_ENTITIES); + + final UUID entityId = UUID.randomUUID(); + final String entityName = "Entity name"; + GuidKeyEntity testEntity = new GuidKeyEntity(); + testEntity.setId(entityId); + testEntity.setName(entityName); + datasource.createData(edmEntitySet, testEntity); + + Map<String, Object> keys = new HashMap<String, Object>(); + keys.put("Id", entityId); + + GuidKeyEntity readEntity = (GuidKeyEntity) datasource.readData(edmEntitySet, keys); + Assert.assertEquals(entityId, readEntity.getId()); + Assert.assertEquals(entityName, readEntity.getName()); + } + + @Test public void deleteSimpleEntity() throws Exception { EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings"); DataStore<Building> datastore = datasource.getDataStore(Building.class); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cd4810b9/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/model/GuidKeyEntity.java ---------------------------------------------------------------------- diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/model/GuidKeyEntity.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/model/GuidKeyEntity.java new file mode 100644 index 0000000..36feabe --- /dev/null +++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/annotation/processor/core/model/GuidKeyEntity.java @@ -0,0 +1,56 @@ +/* + * Copyright 2013 The Apache Software Foundation. + * + * Licensed 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. + */ +package org.apache.olingo.odata2.annotation.processor.core.model; + +import org.apache.olingo.odata2.api.annotation.edm.EdmEntitySet; +import org.apache.olingo.odata2.api.annotation.edm.EdmEntityType; +import org.apache.olingo.odata2.api.annotation.edm.EdmFacets; +import org.apache.olingo.odata2.api.annotation.edm.EdmKey; +import org.apache.olingo.odata2.api.annotation.edm.EdmProperty; +import org.apache.olingo.odata2.api.annotation.edm.EdmType; + +import java.util.AbstractMap; +import java.util.UUID; + +@EdmEntityType(name = "GuidKeyEntity", namespace = ModelSharedConstants.NAMESPACE_1) +@EdmEntitySet(name = GuidKeyEntity.GUID_KEY_ENTITIES) +public class GuidKeyEntity { + + public static final String GUID_KEY_ENTITIES = "GuidKeyEntities"; + @EdmProperty(name = "Id", type = EdmType.GUID, facets = @EdmFacets(nullable = false)) + @EdmKey + protected UUID id; + + @EdmProperty(name = "Name") + protected String name; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +}
