You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/01/18 08:47:06 UTC

git commit: [OLINGO-87] Fixed issue with annotated class loading.

Updated Branches:
  refs/heads/master 1fc260e61 -> f6591e3db


[OLINGO-87] Fixed issue with annotated class loading.


Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/f6591e3d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/f6591e3d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/f6591e3d

Branch: refs/heads/master
Commit: f6591e3db0f5db61f54817c1a24c8d6f46a38a14
Parents: 1fc260e
Author: Michael Bolz <mi...@apache.org>
Authored: Sat Jan 18 08:18:36 2014 +0100
Committer: Michael Bolz <mi...@apache.org>
Committed: Sat Jan 18 08:44:40 2014 +0100

----------------------------------------------------------------------
 .../core/datasource/AnnotationInMemoryDs.java   |   9 +-
 .../datasource/AnnotationsInMemoryDsTest.java   | 131 ++++++++++++++-----
 2 files changed, 103 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/f6591e3d/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
index db5b79b..2096785 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/annotation/processor/core/datasource/AnnotationInMemoryDs.java
@@ -76,9 +76,14 @@ public class AnnotationInMemoryDs implements DataSource {
   private void init(final Collection<Class<?>> annotatedClasses) throws ODataException {
     try {
       for (Class<?> clz : annotatedClasses) {
-        DataStore<Object> dhs = (DataStore<Object>) DataStore.createInMemory(clz, persistInMemory);
         String entitySetName = ANNOTATION_HELPER.extractEntitySetName(clz);
-        dataStores.put(entitySetName, dhs);
+        if(entitySetName != null) {
+          DataStore<Object> dhs = (DataStore<Object>) DataStore.createInMemory(clz, persistInMemory);
+          dataStores.put(entitySetName, dhs);
+        } else if(!ANNOTATION_HELPER.isEdmAnnotated(clz)) {
+          throw new ODataException("Found not annotated class during DataStore initilization of type: " 
+                  + clz.getName());
+        }
       }
     } catch (DataStore.DataStoreException e) {
       throw new ODataException("Error in DataStore initilization with message: " + e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/f6591e3d/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 3213556..ddf4ce5 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
@@ -20,17 +20,25 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.olingo.odata2.annotation.processor.core.datasource.DataSource.BinaryData;
 import org.apache.olingo.odata2.annotation.processor.core.edm.AnnotationEdmProvider;
 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.Location;
+import org.apache.olingo.odata2.annotation.processor.core.model.Manager;
 import org.apache.olingo.odata2.annotation.processor.core.model.ModelSharedConstants;
 import org.apache.olingo.odata2.annotation.processor.core.model.Photo;
+import org.apache.olingo.odata2.annotation.processor.core.model.RefBase;
 import org.apache.olingo.odata2.annotation.processor.core.model.Room;
+import org.apache.olingo.odata2.annotation.processor.core.model.Team;
 import org.apache.olingo.odata2.annotation.processor.core.util.AnnotationHelper;
 import org.apache.olingo.odata2.api.annotation.edm.EdmKey;
 import org.apache.olingo.odata2.api.annotation.edm.EdmProperty;
@@ -51,6 +59,23 @@ import org.mockito.Mockito;
  */
 public class AnnotationsInMemoryDsTest {
 
+  final static Set<Class<?>> ANNOTATED_MODEL_CLASSES = new HashSet<Class<?>>();
+  final static Set<Class<?>> ANNOTATED_ENTITY_SET_CLASSES = new HashSet<Class<?>>();
+
+  static {
+    ANNOTATED_ENTITY_SET_CLASSES.add(Building.class);
+    ANNOTATED_ENTITY_SET_CLASSES.add(Employee.class);
+    ANNOTATED_ENTITY_SET_CLASSES.add(Manager.class);
+    ANNOTATED_ENTITY_SET_CLASSES.add(Photo.class);
+    ANNOTATED_ENTITY_SET_CLASSES.add(Room.class);
+    ANNOTATED_ENTITY_SET_CLASSES.add(Team.  class);
+    
+    ANNOTATED_MODEL_CLASSES.addAll(ANNOTATED_ENTITY_SET_CLASSES);
+    ANNOTATED_MODEL_CLASSES.add(Location.class);
+    ANNOTATED_MODEL_CLASSES.add(City.class);
+    ANNOTATED_MODEL_CLASSES.add(RefBase.class);
+  }
+
   private final AnnotationInMemoryDs datasource;
   private final AnnotationEdmProvider edmProvider;
   private static final String DEFAULT_CONTAINER = ModelSharedConstants.CONTAINER_1;
@@ -59,6 +84,45 @@ public class AnnotationsInMemoryDsTest {
     datasource = new AnnotationInMemoryDs(Building.class.getPackage().getName(), false);
     edmProvider = new AnnotationEdmProvider(Building.class.getPackage().getName());
   }
+  
+  @Test
+  public void initFromPackage() throws Exception {
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs(Building.class.getPackage().getName(), false);
+    Assert.assertNotNull(ds);
+  }
+
+  @Test(expected = IllegalArgumentException.class)
+  public void initFromNotExistingPackage() throws Exception {
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs("does.not.exist", false);
+    Assert.assertNotNull(ds);
+  }
+
+  @Test
+  public void initFromPackageWithoutAnnotatedClasses() throws Exception {
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs(this.getClass().getPackage().getName(), false);
+    Assert.assertNotNull(ds);
+  }
+
+  @Test
+  public void initFromClassCollectionEntitySets() throws Exception {
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs(ANNOTATED_ENTITY_SET_CLASSES, false);
+    Assert.assertNotNull(ds);
+  }
+
+  @Test
+  public void initFromClassCollectionModel() throws Exception {
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs(ANNOTATED_MODEL_CLASSES, false);
+    Assert.assertNotNull(ds);
+  }
+
+  @Test(expected = ODataException.class)
+  public void initFromClassCollectionNotAnnotated() throws Exception {
+    Set<Class<?>> annotatedClassesAndMore = new HashSet<Class<?>>(ANNOTATED_ENTITY_SET_CLASSES);
+    annotatedClassesAndMore.add(String.class);
+    annotatedClassesAndMore.add(Object.class);
+    AnnotationInMemoryDs ds = new AnnotationInMemoryDs(annotatedClassesAndMore, false);
+    Assert.assertNotNull(ds);
+  }
 
   @Test
   @Ignore
@@ -88,6 +152,7 @@ public class AnnotationsInMemoryDsTest {
   @org.apache.olingo.odata2.api.annotation.edm.EdmEntitySet
   @org.apache.olingo.odata2.api.annotation.edm.EdmEntityType
   private static class SimpleEntity {
+
     @EdmKey
     @EdmProperty
     public Integer id;
@@ -119,7 +184,7 @@ public class AnnotationsInMemoryDsTest {
             localDs.createData(edmEntitySet, se);
           } catch (Exception ex) {
             throw new RuntimeException(ex);
-          }finally{
+          } finally {
             latch.countDown();
           }
         }
@@ -140,7 +205,7 @@ public class AnnotationsInMemoryDsTest {
   }
 
   private Thread createBuildingThread(final CountDownLatch latch, final DataSource datasource,
-      final EdmEntitySet edmEntitySet, final String id) {
+          final EdmEntitySet edmEntitySet, final String id) {
     Runnable run = new Runnable() {
       @Override
       public void run() {
@@ -160,7 +225,7 @@ public class AnnotationsInMemoryDsTest {
 
     return new Thread(run);
   }
-  
+
   @Test
   public void readBinaryData() throws Exception {
     EdmEntitySet entitySet = createMockedEdmEntitySet("Photos");
@@ -178,7 +243,7 @@ public class AnnotationsInMemoryDsTest {
     keys.put("Name", "SomePic");
     keys.put("ImageFormat", "PNG");
     Photo toReadPhoto = (Photo) datasource.readData(entitySet, keys);
-    
+
     // execute
     BinaryData readBinaryData = datasource.readBinaryData(entitySet, toReadPhoto);
 
@@ -200,7 +265,7 @@ public class AnnotationsInMemoryDsTest {
     photo.setImage(image);
     photo.setImageType("image/png");
     photoDataStore.create(photo);
-    
+
     Photo toReadPhoto = new Photo();
     toReadPhoto.setName("SomePic");
     toReadPhoto.setType("PNG");
@@ -208,13 +273,12 @@ public class AnnotationsInMemoryDsTest {
     toReadPhoto.setImageType(null);
 
     BinaryData readBinaryData = datasource.readBinaryData(entitySet, toReadPhoto);
-    
+
     Assert.assertEquals("binary", new String(readBinaryData.getData(), Charset.defaultCharset()));
     Assert.assertArrayEquals(image, readBinaryData.getData());
     Assert.assertEquals("image/png", readBinaryData.getMimeType());
   }
 
-  
   @Test
   public void writeBinaryData() throws Exception {
     EdmEntitySet entitySet = createMockedEdmEntitySet("Photos");
@@ -241,7 +305,7 @@ public class AnnotationsInMemoryDsTest {
     Assert.assertEquals("image/png", storedPhoto.getImageType());
   }
 
-  @Test(expected=ODataNotFoundException.class)
+  @Test(expected = ODataNotFoundException.class)
   public void writeBinaryDataNotFound() throws Exception {
     EdmEntitySet entitySet = createMockedEdmEntitySet("Photos");
 
@@ -255,12 +319,11 @@ public class AnnotationsInMemoryDsTest {
     datasource.writeBinaryData(entitySet, toWritePhoto, writeBinaryData);
   }
 
-  
   @Test
   public void newDataObject() throws Exception {
     EdmEntitySet roomsEntitySet = createMockedEdmEntitySet("Rooms");
     Room room = (Room) datasource.newDataObject(roomsEntitySet);
-    
+
     Assert.assertNotNull(room);
   }
 
@@ -294,7 +357,7 @@ public class AnnotationsInMemoryDsTest {
     Building readBuilding = (Building) relatedData;
     Assert.assertEquals("Common Building", readBuilding.getName());
     Assert.assertEquals("1", readBuilding.getId());
-    
+
     Collection<Room> relatedRooms = readBuilding.getRooms();
     Assert.assertEquals(roomsCount, relatedRooms.size());
     for (Room room : relatedRooms) {
@@ -304,7 +367,7 @@ public class AnnotationsInMemoryDsTest {
     }
   }
 
-  @Test(expected=ODataRuntimeException.class)
+  @Test(expected = ODataRuntimeException.class)
   public void readUnknownEntity() throws Exception {
     EdmEntitySet unknownEntitySet = Mockito.mock(EdmEntitySet.class);
     Mockito.when(unknownEntitySet.getName()).thenReturn("UnknownEntity");
@@ -315,7 +378,7 @@ public class AnnotationsInMemoryDsTest {
     datasource.readData(unknownEntitySet, keys);
   }
 
-  @Test(expected=ODataRuntimeException.class)
+  @Test(expected = ODataRuntimeException.class)
   public void readUnknownEntities() throws Exception {
     EdmEntitySet unknownEntitySet = Mockito.mock(EdmEntitySet.class);
     Mockito.when(unknownEntitySet.getName()).thenReturn("UnknownEntity");
@@ -354,7 +417,6 @@ public class AnnotationsInMemoryDsTest {
     }
   }
 
-  
   @Test
   @SuppressWarnings("unchecked")
   public void readRelatedEntities() throws Exception {
@@ -385,7 +447,7 @@ public class AnnotationsInMemoryDsTest {
 
     // execute
     Object relatedData = datasource.readRelatedData(
-        buildingsEntitySet, building, roomsEntitySet, Collections.EMPTY_MAP);
+            buildingsEntitySet, building, roomsEntitySet, Collections.EMPTY_MAP);
 
     // validate
     Assert.assertTrue("Result is no collection.", relatedData instanceof Collection);
@@ -417,10 +479,10 @@ public class AnnotationsInMemoryDsTest {
     Room read = (Room) datasource.readData(roomsEntitySet, keys);
     Assert.assertEquals("Room 12", read.getName());
     Assert.assertEquals("12", read.getId());
-    
+
     // execute
     Object relatedData = datasource.readRelatedData(
-        roomsEntitySet, room, buildingsEntitySet, Collections.EMPTY_MAP);
+            roomsEntitySet, room, buildingsEntitySet, Collections.EMPTY_MAP);
 
     // validate
     Assert.assertTrue("Result is no room.", relatedData instanceof Building);
@@ -450,7 +512,7 @@ public class AnnotationsInMemoryDsTest {
 
     // execute
     Object relatedData = datasource.readRelatedData(
-        roomsEntitySet, room, buildingsEntitySet, Collections.EMPTY_MAP);
+            roomsEntitySet, room, buildingsEntitySet, Collections.EMPTY_MAP);
 
     // validate
     Assert.assertNull("Related data must be null.", relatedData);
@@ -487,7 +549,7 @@ public class AnnotationsInMemoryDsTest {
     Map<String, Object> targetKeys = new HashMap<String, Object>();
     targetKeys.put("Id", 3);
     Object relatedData = datasource.readRelatedData(
-        buildingsEntitySet, building, roomsEntitySet, targetKeys);
+            buildingsEntitySet, building, roomsEntitySet, targetKeys);
 
     // validate
     Assert.assertTrue("Result is no Room.", relatedData instanceof Room);
@@ -622,8 +684,7 @@ public class AnnotationsInMemoryDsTest {
     Assert.assertEquals("image/jpg", readUpdated.getImageType());
     Assert.assertEquals("https://localhost/image.jpg", readUpdated.getImageUri());
   }
-  
-  
+
   @Test
   public void deleteSimpleEntity() throws Exception {
     EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings");
@@ -642,15 +703,16 @@ public class AnnotationsInMemoryDsTest {
 
     //
     datasource.deleteData(edmEntitySet, keys);
-    
+
     // validate
     try {
       Building readAfterDelete = (Building) datasource.readData(edmEntitySet, keys);
       Assert.fail("Expected " + ODataNotFoundException.class + "was not thrown for '" + readAfterDelete + "'.");
-    } catch (ODataNotFoundException e) { }
+    } catch (ODataNotFoundException e) {
+    }
   }
 
-  @Test(expected=ODataRuntimeException.class)
+  @Test(expected = ODataRuntimeException.class)
   public void unknownEntitySetForEntity() throws Exception {
     String entitySetName = "Unknown";
     FullQualifiedName entityType = new FullQualifiedName(DEFAULT_CONTAINER, entitySetName);
@@ -660,14 +722,14 @@ public class AnnotationsInMemoryDsTest {
     EdmEntityType edmEntityType = Mockito.mock(EdmEntityType.class);
     Mockito.when(edmEntitySet.getEntityType()).thenReturn(edmEntityType);
     Mockito.when(edmEntityType.getName()).thenReturn(entityType.getName());
-      
+
     Map<String, Object> keys = new HashMap<String, Object>();
     keys.put("Id", "1");
     //
     datasource.readData(edmEntitySet, keys);
   }
 
-  @Test(expected=ODataRuntimeException.class)
+  @Test(expected = ODataRuntimeException.class)
   public void unknownEntitySetForEntities() throws Exception {
     String entitySetName = "Unknown";
     FullQualifiedName entityType = new FullQualifiedName(DEFAULT_CONTAINER, entitySetName);
@@ -677,12 +739,11 @@ public class AnnotationsInMemoryDsTest {
     EdmEntityType edmEntityType = Mockito.mock(EdmEntityType.class);
     Mockito.when(edmEntitySet.getEntityType()).thenReturn(edmEntityType);
     Mockito.when(edmEntityType.getName()).thenReturn(entityType.getName());
-      
+
     //
     datasource.readData(edmEntitySet);
   }
 
-
   @Test
   public void writeRelations() throws Exception {
     DataStore<Building> buildingStore = DataStore.createInMemory(Building.class, true);
@@ -699,33 +760,33 @@ public class AnnotationsInMemoryDsTest {
     room.setSeats(123);;
     room.setVersion(4711);
     roomStore.create(room);
-    
+
     Map<String, Object> targetEntityKeyValues = new HashMap<String, Object>();
     targetEntityKeyValues.put("Id", 42);
-    
+
     // execute
     datasource.writeRelation(buildingsEntitySet, building, roomsEntitySet, targetEntityKeyValues);
-    
+
     // validate
     Building readBuilding = buildingStore.read(created);
     Room readRoom = roomStore.read(new Room(42, ""));
-    
+
     List<Room> readRooms = readBuilding.getRooms();
     Assert.assertEquals(1, readRooms.size());
     Assert.assertEquals(readRoom, readRooms.get(0));
-    
+
     Assert.assertEquals("42", readRoom.getId());
     Assert.assertEquals(123, readRoom.getSeats());
     Assert.assertEquals(4711, readRoom.getVersion());
     Assert.assertEquals(readBuilding, readRoom.getBuilding());
   }
-  
+
   private EdmEntitySet createMockedEdmEntitySet(final String entitySetName) throws ODataException {
     return createMockedEdmEntitySet(edmProvider, entitySetName);
   }
 
   private EdmEntitySet createMockedEdmEntitySet(AnnotationEdmProvider edmProvider, final String entitySetName)
-      throws ODataException {
+          throws ODataException {
     EntitySet entitySet = edmProvider.getEntitySet(DEFAULT_CONTAINER, entitySetName);
     FullQualifiedName entityType = entitySet.getEntityType();