You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2015/04/20 16:28:28 UTC

[08/22] olingo-odata4 git commit: [OLINGO-603] Delete core dependecies in Tec Scenario

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
index d47aa46..a203750 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
@@ -40,17 +40,12 @@ import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.EdmStructuredType;
-import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.data.ComplexValueImpl;
-import org.apache.olingo.commons.core.data.EntityImpl;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmString;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.deserializer.DeserializerException;
@@ -137,7 +132,7 @@ public class DataProvider {
     final EntitySet entitySet = readAll(edmEntitySet);
     final List<Entity> entities = entitySet.getEntities();
     final Map<String, Object> newKey = findFreeComposedKey(entities, edmEntitySet.getEntityType());
-    final Entity newEntity = new EntityImpl();
+    final Entity newEntity = new Entity();
     newEntity.setType(edmEntityType.getFullQualifiedName().getFullQualifiedNameAsString());
     for (final String keyName : edmEntityType.getKeyPredicateNames()) {
       newEntity.addProperty(DataCreator.createPrimitive(keyName, newKey.get(keyName)));
@@ -154,17 +149,19 @@ public class DataProvider {
     // Weak key construction
     final HashMap<String, Object> keys = new HashMap<String, Object>();
     for (final String keyName : entityType.getKeyPredicateNames()) {
-      final EdmType type = entityType.getProperty(keyName).getType();
+      final FullQualifiedName typeName = entityType.getProperty(keyName).getType().getFullQualifiedName();
       Object newValue = null;
 
-      if (type instanceof EdmInt16 || type instanceof EdmInt32 || type instanceof EdmInt64) {
+      if (EdmPrimitiveTypeKind.Int16.getFullQualifiedName().equals(typeName)
+          || EdmPrimitiveTypeKind.Int32.getFullQualifiedName().equals(typeName)
+          || EdmPrimitiveTypeKind.Int64.getFullQualifiedName().equals(typeName)) {
         // Integer keys
         newValue = Integer.valueOf(1);
 
         while (!isFree(newValue, keyName, entities)) {
           newValue = ((Integer) newValue) + 1;
         }
-      } else if (type instanceof EdmString) {
+      } else if (EdmPrimitiveTypeKind.String.getFullQualifiedName().equals(typeName)) {
         // String keys
         newValue = String.valueOf(1);
         int i = 0;
@@ -431,7 +428,7 @@ public class DataProvider {
 
   private ComplexValue createComplexValue(final EdmProperty edmProperty, final ComplexValue complexValue,
       final boolean patch) throws DataProviderException {
-    final ComplexValueImpl result = new ComplexValueImpl();
+    final ComplexValue result = new ComplexValue();
     final EdmComplexType edmType = (EdmComplexType) edmProperty.getType();
     final List<Property> givenProperties = complexValue.getValue();
 
@@ -446,7 +443,7 @@ public class DataProvider {
         updateProperty(innerEdmProperty, newProperty, currentProperty, patch);
       } else {
         if (innerEdmProperty.isNullable()) {
-          // Check complex properties ... maybe null is not allowed
+          // Check complex properties ... may be null is not allowed
           if (edmProperty.getType().getKind() == EdmTypeKind.COMPLEX) {
             updateProperty(innerEdmProperty, newProperty, null, patch);
           }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
index 5451d5d..1028cd8 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
@@ -6,9 +6,9 @@
  * 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
@@ -27,8 +27,7 @@ import org.apache.olingo.commons.api.data.EntitySet;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
-import org.apache.olingo.commons.core.data.EntitySetImpl;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.uri.UriParameter;
 import org.apache.olingo.server.tecsvc.data.DataProvider.DataProviderException;
 
@@ -38,7 +37,7 @@ public class FunctionData {
       final Map<String, EntitySet> data) throws DataProviderException {
     if (name.equals("UFCRTCollETTwoKeyNavParam")) {
       final List<Entity> esTwoKeyNav = data.get("ESTwoKeyNav").getEntities();
-      EntitySet result = new EntitySetImpl();
+      EntitySet result = new EntitySet();
       final int endIndex = parameters.isEmpty() ? 0 : Short.valueOf(parameters.get(0).getText());
       result.getEntities().addAll(
           esTwoKeyNav.subList(0,
@@ -85,15 +84,16 @@ public class FunctionData {
           DataCreator.createPrimitive("PropertyString", "UFCRTCTTwoPrim string value"));
     } else if (name.equals("UFCRTCTTwoPrimParam")) {
       try {
+
+        OData oData = OData.newInstance();
         return DataCreator.createComplex(name,
-            DataCreator.createPrimitive("PropertyInt16",
-                EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int16).valueOfString(
-                    getParameterText("ParameterInt16", parameters),
+            DataCreator.createPrimitive("PropertyInt16", oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16)
+                .valueOfString(getParameterText("ParameterInt16", parameters),
                     null, null, null, null, null, Short.class)),
-            DataCreator.createPrimitive("PropertyString",
-                EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String).valueOfString(
-                    EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String).fromUriLiteral(
-                        getParameterText("ParameterString", parameters)),
+            DataCreator.createPrimitive("PropertyString", oData
+                .createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String)
+                .valueOfString(oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String)
+                    .fromUriLiteral(getParameterText("ParameterString", parameters)),
                     null, null, null, null, null, String.class)));
       } catch (final EdmPrimitiveTypeException e) {
         throw new DataProviderException("Error in function " + name + ".", e);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index a2774e3..858963d 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -34,7 +34,6 @@ import org.apache.olingo.commons.api.http.HttpContentType;
 import org.apache.olingo.commons.api.http.HttpHeader;
 import org.apache.olingo.commons.api.http.HttpMethod;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.data.EntitySetImpl;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.ODataRequest;
 import org.apache.olingo.server.api.ODataResponse;
@@ -77,11 +76,8 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
     EntityProcessor, ActionEntityProcessor, MediaEntityProcessor,
     ActionVoidProcessor {
 
-  private final ServiceMetadata serviceMetadata;
-
   public TechnicalEntityProcessor(final DataProvider dataProvider, ServiceMetadata serviceMetadata) {
-    super(dataProvider);
-    this.serviceMetadata = serviceMetadata;
+    super(dataProvider, serviceMetadata);
   }
 
   @Override
@@ -101,7 +97,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
     } else {
       // Modifying the original entitySet means modifying the "database", so we have to make a shallow
       // copy of the entity set (new EntitySet, but exactly the same data)
-      EntitySet entitySet = new EntitySetImpl();
+      EntitySet entitySet = new EntitySet();
       entitySet.getEntities().addAll(entitySetInitial.getEntities());
 
       // Apply system query options

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
index 8a9968f..303800f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
@@ -6,9 +6,9 @@
  * 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
@@ -40,7 +40,6 @@ import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.api.http.HttpHeader;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.ODataRequest;
 import org.apache.olingo.server.api.ODataResponse;
@@ -82,12 +81,9 @@ public class TechnicalPrimitiveComplexProcessor extends TechnicalProcessor
     ComplexProcessor, ActionComplexProcessor,
     ComplexCollectionProcessor, ActionComplexCollectionProcessor {
 
-  private final ServiceMetadata serviceMetadata;
-
   public TechnicalPrimitiveComplexProcessor(final DataProvider dataProvider,
       ServiceMetadata serviceMetadata) {
-    super(dataProvider);
-    this.serviceMetadata = serviceMetadata;
+    super(dataProvider, serviceMetadata);
   }
 
   @Override
@@ -251,7 +247,7 @@ public class TechnicalPrimitiveComplexProcessor extends TechnicalProcessor
                   .build()).getContent());
           break;
         case COMPLEX:
-          response.setContent(serializer.complex(this.serviceMetadata,(EdmComplexType) type, property,
+          response.setContent(serializer.complex(this.serviceMetadata, (EdmComplexType) type, property,
               ComplexSerializerOptions.with().contextURL(contextURL)
                   .expand(expand).select(select)
                   .build()).getContent());
@@ -388,7 +384,7 @@ public class TechnicalPrimitiveComplexProcessor extends TechnicalProcessor
       final EdmReturnType returnType = resourceParts.get(0) instanceof UriResourceFunction ?
           ((UriResourceFunction) resourceParts.get(0)).getFunction().getReturnType() : null;
       final FixedFormatSerializer serializer = odata.createFixedFormatSerializer();
-      response.setContent(type == EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Binary) ?
+      response.setContent(type == odata.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Binary) ?
           serializer.binary((byte[]) property.getValue()) :
           serializer.primitiveValue(type, property.getValue(),
               PrimitiveValueSerializerOptions.with()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
index 4fb2e5e..33cd98f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
@@ -54,6 +54,11 @@ public abstract class TechnicalProcessor implements Processor {
   protected TechnicalProcessor(final DataProvider dataProvider) {
     this.dataProvider = dataProvider;
   }
+  
+  protected TechnicalProcessor(final DataProvider dataProvider, ServiceMetadata serviceMetadata) {
+    this.dataProvider = dataProvider;
+    this.serviceMetadata = serviceMetadata;
+  }
 
   @Override
   public void init(final OData odata, final ServiceMetadata serviceMetadata) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
index ce1b774..e6b9849 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/ExpandSystemQueryOptionHandler.java
@@ -31,9 +31,6 @@ import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.data.EntityImpl;
-import org.apache.olingo.commons.core.data.EntitySetImpl;
-import org.apache.olingo.commons.core.data.LinkImpl;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.uri.UriResource;
 import org.apache.olingo.server.api.uri.UriResourceNavigation;
@@ -132,9 +129,7 @@ public class ExpandSystemQueryOptionHandler {
   
   public Entity transformEntityGraphToTree(final Entity entity, EdmBindingTarget edmEntitySet, 
       final ExpandOption expand) throws ODataApplicationException {
-
     final Entity newEntity = newEntity(entity);
-
     if (hasExpandItems(expand)) {
       final boolean expandAll = expandAll(expand);
       final Set<String> expanded = expandAll ? null : getExpandedPropertyNames(expand.getExpandItems());
@@ -167,7 +162,7 @@ public class ExpandSystemQueryOptionHandler {
   }
   
   public EntitySet newEntitySet(final EntitySet entitySet) {
-    final EntitySet newEntitySet = new EntitySetImpl();
+    final EntitySet newEntitySet = new EntitySet();
     newEntitySet.setCount(entitySet.getCount());
     newEntitySet.setDeltaLink(entitySet.getDeltaLink());
     newEntitySet.setNext(entitySet.getNext());
@@ -176,7 +171,7 @@ public class ExpandSystemQueryOptionHandler {
   }
   
   private Entity newEntity(final Entity entity) {
-    final Entity newEntity = new EntityImpl();
+    final Entity newEntity = new Entity();
     
     newEntity.getProperties().addAll(entity.getProperties());
     newEntity.getAnnotations().addAll(entity.getAnnotations());
@@ -195,7 +190,7 @@ public class ExpandSystemQueryOptionHandler {
   }
   
   private Link newLink(Link link) {
-    final Link newLink = new LinkImpl();
+    final Link newLink = new Link();
     newLink.setMediaETag(link.getMediaETag());
     newLink.setTitle(link.getTitle());
     newLink.setType(link.getType());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
index d45e8a9..6391390 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
@@ -26,14 +26,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDecimal;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.primitive.EdmNull;
 
@@ -73,13 +65,11 @@ public class TypedOperand extends VisitorOperand {
     Object newValue = null;
     for (EdmPrimitiveType asType : asTypes) {
       // Use BigDecimal for unlimited precision
-      if (asType.equals(EdmDouble.getInstance())
-          || asType.equals(EdmSingle.getInstance())
-          || asType.equals(EdmDecimal.getInstance())) {
-        
+      if (asType.equals(primDouble) || asType.equals(primSingle) || asType.equals(primDecimal)) {
+
         try {
           newValue = new BigDecimal(value.toString());
-        } catch(NumberFormatException e) {
+        } catch (NumberFormatException e) {
           // Nothing to do
         }
       } else {
@@ -117,18 +107,18 @@ public class TypedOperand extends VisitorOperand {
       return this;
     }
 
-    if (type.equals(EdmDouble.getInstance()) || oType.equals(EdmDouble.getInstance())) {
-      return asTypedOperand(EdmDouble.getInstance());
-    } else if (type.equals(EdmSingle.getInstance()) || oType.equals(EdmSingle.getInstance())) {
-      return asTypedOperand(EdmSingle.getInstance());
-    } else if (type.equals(EdmDecimal.getInstance()) || oType.equals(EdmDecimal.getInstance())) {
-      return asTypedOperand(EdmDecimal.getInstance());
-    } else if (type.equals(EdmInt64.getInstance()) || oType.equals(EdmInt64.getInstance())) {
-      return asTypedOperand(EdmInt64.getInstance());
-    } else if (type.equals(EdmInt32.getInstance()) || oType.equals(EdmInt32.getInstance())) {
-      return asTypedOperand(EdmInt32.getInstance());
-    } else if (type.equals(EdmInt16.getInstance()) || oType.equals(EdmInt16.getInstance())) {
-      return asTypedOperand(EdmInt16.getInstance());
+    if (type.equals(primDouble) || oType.equals(primDouble)) {
+      return asTypedOperand(primDouble);
+    } else if (type.equals(primSingle) || oType.equals(primSingle)) {
+      return asTypedOperand(primSingle);
+    } else if (type.equals(primDecimal) || oType.equals(primDecimal)) {
+      return asTypedOperand(primDecimal);
+    } else if (type.equals(primInt64) || oType.equals(primInt64)) {
+      return asTypedOperand(primInt64);
+    } else if (type.equals(primInt32) || oType.equals(primInt32)) {
+      return asTypedOperand(primInt32);
+    } else if (type.equals(primInt16) || oType.equals(primInt16)) {
+      return asTypedOperand(primInt16);
     } else {
       return asTypedOperand((EdmPrimitiveType) type);
     }
@@ -151,17 +141,19 @@ public class TypedOperand extends VisitorOperand {
   }
 
   public boolean isIntegerType() {
-    return is(EdmByte.getInstance(),
-        EdmSByte.getInstance(),
-        EdmInt16.getInstance(),
-        EdmInt32.getInstance(),
-        EdmInt64.getInstance());
+    return is(
+        primByte,
+        primSByte,
+        primInt16,
+        primInt32,
+        primInt64);
   }
 
   public boolean isDecimalType() {
-    return is(EdmSingle.getInstance(),
-        EdmDouble.getInstance(),
-        EdmDecimal.getInstance());
+    return is(
+        primSingle,
+        primDouble,
+        primDecimal);
   }
 
   public boolean is(EdmPrimitiveType... types) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/UntypedOperand.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/UntypedOperand.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/UntypedOperand.java
index ddb33af..f9652da 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/UntypedOperand.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/UntypedOperand.java
@@ -23,20 +23,6 @@ import java.util.Locale;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDecimal;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmString;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.primitive.EdmNull;
 
@@ -84,65 +70,65 @@ public class UntypedOperand extends VisitorOperand {
     }
 
     // String
-    if ((newValue = tryCast(literal, EdmString.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmString.getInstance());
+    if ((newValue = tryCast(literal, primString)) != null) {
+      return new TypedOperand(newValue, primString);
     }
 
     // Boolean
-    if ((newValue = tryCast(literal, EdmBoolean.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmBoolean.getInstance());
+    if ((newValue = tryCast(literal, primBoolean)) != null) {
+      return new TypedOperand(newValue, primBoolean);
     }
 
     // Date
-    if ((newValue = tryCast(literal, EdmDateTimeOffset.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmDateTimeOffset.getInstance());
+    if ((newValue = tryCast(literal, primDateTimeOffset)) != null) {
+      return new TypedOperand(newValue, primDateTimeOffset);
     }
 
-    if ((newValue = tryCast(literal, EdmDate.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmDate.getInstance());
+    if ((newValue = tryCast(literal, primDate)) != null) {
+      return new TypedOperand(newValue, primDate);
     }
 
-    if ((newValue = tryCast(literal, EdmTimeOfDay.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmTimeOfDay.getInstance());
+    if ((newValue = tryCast(literal, primTimeOfDay)) != null) {
+      return new TypedOperand(newValue, primTimeOfDay);
     }
 
-    if ((newValue = tryCast(literal, EdmDuration.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmDuration.getInstance());
+    if ((newValue = tryCast(literal, primDuration)) != null) {
+      return new TypedOperand(newValue, primDuration);
     }
 
     // Integer
-    if ((newValue = tryCast(literal, EdmSByte.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmSByte.getInstance());
+    if ((newValue = tryCast(literal, primSByte)) != null) {
+      return new TypedOperand(newValue, primSByte);
     }
 
-    if ((newValue = tryCast(literal, EdmByte.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmByte.getInstance());
+    if ((newValue = tryCast(literal, primByte)) != null) {
+      return new TypedOperand(newValue, primByte);
     }
 
-    if ((newValue = tryCast(literal, EdmInt16.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmInt16.getInstance());
+    if ((newValue = tryCast(literal, primInt16)) != null) {
+      return new TypedOperand(newValue, primInt16);
     }
 
-    if ((newValue = tryCast(literal, EdmInt32.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmInt32.getInstance());
+    if ((newValue = tryCast(literal, primInt32)) != null) {
+      return new TypedOperand(newValue, primInt32);
     }
 
-    if ((newValue = tryCast(literal, EdmInt64.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmInt64.getInstance());
+    if ((newValue = tryCast(literal, primInt64)) != null) {
+      return new TypedOperand(newValue, primInt64);
     }
 
     // Decimal
-    if ((newValue = tryCast(literal, EdmDecimal.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmDecimal.getInstance());
+    if ((newValue = tryCast(literal, primDecimal)) != null) {
+      return new TypedOperand(newValue, primDecimal);
     }
 
     // Float
-    if ((newValue = tryCast(literal, EdmSingle.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmSingle.getInstance());
+    if ((newValue = tryCast(literal, primSingle)) != null) {
+      return new TypedOperand(newValue, primSingle);
     }
 
-    if ((newValue = tryCast(literal, EdmDouble.getInstance())) != null) {
-      return new TypedOperand(newValue, EdmDouble.getInstance());
+    if ((newValue = tryCast(literal, primDouble)) != null) {
+      return new TypedOperand(newValue, primDouble);
     }
 
     throw new ODataApplicationException("Could not determine type for literal " + literal,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/VisitorOperand.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/VisitorOperand.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/VisitorOperand.java
index ed9f60e..5c0e65a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/VisitorOperand.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/VisitorOperand.java
@@ -24,32 +24,57 @@ import java.util.HashMap;
 
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.EdmType;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDecimal;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 
 public abstract class VisitorOperand {
   final static private HashMap<EdmType, Class<?>> defaultTypeMapping = new HashMap<EdmType, Class<?>>();
   protected Object value;
+  protected static final OData oData;
+  protected static final EdmPrimitiveType primString;
+  protected static final EdmPrimitiveType primBoolean;
+  protected static final EdmPrimitiveType primDateTimeOffset;
+  protected static final EdmPrimitiveType primDate;
+  protected static final EdmPrimitiveType primTimeOfDay;
+  protected static final EdmPrimitiveType primDuration;
+  protected static final EdmPrimitiveType primSByte;
+  protected static final EdmPrimitiveType primByte;
+  protected static final EdmPrimitiveType primInt16;
+  protected static final EdmPrimitiveType primInt32;
+  protected static final EdmPrimitiveType primInt64;
+  protected static final EdmPrimitiveType primDecimal;
+  protected static final EdmPrimitiveType primSingle;
+  protected static final EdmPrimitiveType primDouble;
 
   static {
-    defaultTypeMapping.put(EdmByte.getInstance(), BigInteger.class);
-    defaultTypeMapping.put(EdmSByte.getInstance(), BigInteger.class);
-    defaultTypeMapping.put(EdmInt16.getInstance(), BigInteger.class);
-    defaultTypeMapping.put(EdmInt32.getInstance(), BigInteger.class);
-    defaultTypeMapping.put(EdmInt64.getInstance(), BigInteger.class);
+    oData = OData.newInstance();
+    primString = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String);
+    primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
+    primDateTimeOffset = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.DateTimeOffset);
+    primDate = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date);
+    primTimeOfDay = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.TimeOfDay);
+    primDuration = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration);
+    primSByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte);
+    primByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte);
+    primInt16 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16);
+    primInt32 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32);
+    primInt64 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64);
+    primDecimal = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal);
+    primSingle = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Single);
+    primDouble = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double);
+    
+    defaultTypeMapping.put(primByte, BigInteger.class);
+    defaultTypeMapping.put(primSByte, BigInteger.class);
+    defaultTypeMapping.put(primInt16, BigInteger.class);
+    defaultTypeMapping.put(primInt32, BigInteger.class);
+    defaultTypeMapping.put(primInt64, BigInteger.class);
 
-    defaultTypeMapping.put(EdmSingle.getInstance(), BigDecimal.class);
-    defaultTypeMapping.put(EdmDouble.getInstance(), BigDecimal.class);
-    defaultTypeMapping.put(EdmDecimal.getInstance(), BigDecimal.class);
+    defaultTypeMapping.put(primSingle, BigDecimal.class);
+    defaultTypeMapping.put(primDouble, BigDecimal.class);
+    defaultTypeMapping.put(primDecimal, BigDecimal.class);
   }
 
   public VisitorOperand(Object value) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
index 9d9e23f..6d49243 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
@@ -24,19 +24,11 @@ import java.sql.Timestamp;
 import java.util.Calendar;
 import java.util.Locale;
 
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt16;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt64;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSByte;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmSingle;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.uri.queryoption.expression.BinaryOperatorKind;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.TypedOperand;
@@ -62,6 +54,40 @@ public class BinaryOperator {
   private static final int EQUALS = 0;
   private static final int LESS_THAN = -1;
   private static final int GREATER_THAN = 1;
+  
+  protected static final OData oData;
+  protected static final EdmPrimitiveType primString;
+  protected static final EdmPrimitiveType primBoolean;
+  protected static final EdmPrimitiveType primDateTimeOffset;
+  protected static final EdmPrimitiveType primDate;
+  protected static final EdmPrimitiveType primTimeOfDay;
+  protected static final EdmPrimitiveType primDuration;
+  protected static final EdmPrimitiveType primSByte;
+  protected static final EdmPrimitiveType primByte;
+  protected static final EdmPrimitiveType primInt16;
+  protected static final EdmPrimitiveType primInt32;
+  protected static final EdmPrimitiveType primInt64;
+  protected static final EdmPrimitiveType primDecimal;
+  protected static final EdmPrimitiveType primSingle;
+  protected static final EdmPrimitiveType primDouble;
+
+  static {
+    oData = OData.newInstance();
+    primString = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String);
+    primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
+    primDateTimeOffset = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.DateTimeOffset);
+    primDate = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date);
+    primTimeOfDay = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.TimeOfDay);
+    primDuration = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration);
+    primSByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte);
+    primByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte);
+    primInt16 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16);
+    primInt32 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32);
+    primInt64 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64);
+    primDecimal = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal);
+    primSingle = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Single);
+    primDouble = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double);
+  }
 
   private TypedOperand right;
   private TypedOperand left;
@@ -77,14 +103,14 @@ public class BinaryOperator {
 
   public VisitorOperand andOperator() throws ODataApplicationException {
     Boolean result = null;
-    if (left.is(EdmBoolean.getInstance()) && right.is(EdmBoolean.getInstance())) {
+    if (left.is(primBoolean) && right.is(primBoolean)) {
       if (Boolean.TRUE.equals(left.getValue()) && Boolean.TRUE.equals(right.getValue())) {
         result = true;
       } else if (Boolean.FALSE.equals(left.getValue()) || Boolean.FALSE.equals(right.getValue())) {
         result = false;
       }
 
-      return new TypedOperand(result, EdmBoolean.getInstance());
+      return new TypedOperand(result, primBoolean);
     } else {
       throw new ODataApplicationException("Add operator needs two binary operands",
           HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
@@ -93,14 +119,14 @@ public class BinaryOperator {
 
   public VisitorOperand orOperator() throws ODataApplicationException {
     Boolean result = null;
-    if (left.is(EdmBoolean.getInstance()) && right.is(EdmBoolean.getInstance())) {
+    if (left.is(primBoolean) && right.is(primBoolean)) {
       if (Boolean.TRUE.equals(left.getValue()) || Boolean.TRUE.equals(right.getValue())) {
         result = true;
       } else if (Boolean.FALSE.equals(left.getValue()) && Boolean.FALSE.equals(right.getValue())) {
         result = false;
       }
 
-      return new TypedOperand(result, EdmBoolean.getInstance());
+      return new TypedOperand(result, primBoolean);
     } else {
       throw new ODataApplicationException("Or operator needs two binary operands",
           HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
@@ -109,12 +135,12 @@ public class BinaryOperator {
 
   public VisitorOperand equalsOperator() {
     final boolean result = isBinaryComparisonNecessary() && binaryComparison(EQUALS);
-    return new TypedOperand(result, EdmBoolean.getInstance());
+    return new TypedOperand(result, primBoolean);
   }
 
   public VisitorOperand notEqualsOperator() {
     final VisitorOperand equalsOperator = equalsOperator();
-    return new TypedOperand(!(Boolean) equalsOperator.getValue(), EdmBoolean.getInstance());
+    return new TypedOperand(!(Boolean) equalsOperator.getValue(), primBoolean);
   }
 
   private boolean isBinaryComparisonNecessary() {
@@ -124,22 +150,22 @@ public class BinaryOperator {
 
   public VisitorOperand greaterEqualsOperator() {
     final boolean result = isBinaryComparisonNecessary() && binaryComparison(GREATER_THAN, EQUALS);
-    return new TypedOperand(result, EdmBoolean.getInstance());
+    return new TypedOperand(result, primBoolean);
   }
 
   public VisitorOperand greaterThanOperator() {
     final boolean result = isBinaryComparisonNecessary() && binaryComparison(GREATER_THAN);
-    return new TypedOperand(result, EdmBoolean.getInstance());
+    return new TypedOperand(result, primBoolean);
   }
 
   public VisitorOperand lessEqualsOperator() {
     final boolean result = isBinaryComparisonNecessary() && binaryComparison(LESS_THAN, EQUALS);
-    return new TypedOperand(result, EdmBoolean.getInstance());
+    return new TypedOperand(result, primBoolean);
   }
 
   public VisitorOperand lessThanOperator() {
     final boolean result = isBinaryComparisonNecessary() && binaryComparison(LESS_THAN);
-    return new TypedOperand(result, EdmBoolean.getInstance());
+    return new TypedOperand(result, primBoolean);
   }
 
   private boolean binaryComparison(int... expect) {
@@ -176,7 +202,7 @@ public class BinaryOperator {
       } else if (left.isDecimalType()) {
         final BigDecimal result = decimalArithmeticOperation(operator);
         return new TypedOperand(result, determineResultType(result, left));
-      } else if (left.is(EdmDate.getInstance(), EdmDuration.getInstance(), EdmDateTimeOffset.getInstance())) {
+      } else if (left.is(primDate, primDuration, primDateTimeOffset)) {
         return dateArithmeticOperation(operator);
       } else {
         throw new ODataApplicationException("Invalid type", HttpStatusCode.BAD_REQUEST.getStatusCode(),
@@ -190,81 +216,81 @@ public class BinaryOperator {
     if (leftOperand.isDecimalType()) {
       final BigDecimal value = (BigDecimal) arithmeticResult;
       if (value.compareTo(EDM_SINGLE_MIN) >= 0 && value.compareTo(EDM_SINGLE_MAX) <= 0) {
-        return EdmSingle.getInstance();
+        return primSingle;
       } else {
-        return EdmDouble.getInstance();
+        return primDouble;
       }
     } else {
       final BigInteger value = (BigInteger) arithmeticResult;
 
       if (value.compareTo(EDN_SBYTE_MAX) <= 0 && value.compareTo(EDM_SBYTE_MIN) >= 0) {
-        return EdmSByte.getInstance();
+        return primSByte;
       }
       if (value.compareTo(EDM_BYTE_MAX) <= 0 && value.compareTo(EDM_BYTE_MIN) >= 0) {
-        return EdmByte.getInstance();
+        return primByte;
       }
       if (value.compareTo(EDM_INT16_MAX) <= 0 && value.compareTo(EDM_INT16_MIN) >= 0) {
-        return EdmInt16.getInstance();
+        return primInt16;
       }
       if (value.compareTo(EDM_INT32_MAX) <= 0 && value.compareTo(EDM_INT32_MIN) >= 0) {
-        return EdmInt32.getInstance();
+        return primInt32;
       }
       if (value.compareTo(EDM_INT64_MAX) <= 0 && value.compareTo(EDM_INT64_MIN) >= 0) {
-        return EdmInt64.getInstance();
+        return primInt64;
       }
       // Choose double instead single because precision is higher (52 bits instead of 23)
-      return EdmDouble.getInstance();
+      return primDouble;
     }
   }
 
   private VisitorOperand dateArithmeticOperation(BinaryOperatorKind operator) throws ODataApplicationException {
     VisitorOperand result = null;
 
-    if (left.is(EdmDate.getInstance())) {
-      if (right.is(EdmDate.getInstance()) && operator == BinaryOperatorKind.SUB) {
+    if (left.is(primDate)) {
+      if (right.is(primDate) && operator == BinaryOperatorKind.SUB) {
         long millis = left.getTypedValue(Calendar.class).getTimeInMillis()
             - left.getTypedValue(Calendar.class).getTimeInMillis();
 
-        result = new TypedOperand(new BigDecimal(millis).divide(FACTOR_SECOND), EdmDuration.getInstance());
-      } else if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.ADD) {
+        result = new TypedOperand(new BigDecimal(millis).divide(FACTOR_SECOND), primDuration);
+      } else if (right.is(primDuration) && operator == BinaryOperatorKind.ADD) {
         long millis = left.getTypedValue(Calendar.class).getTimeInMillis()
             + (right.getTypedValue(BigDecimal.class).longValue() * FACTOR_SECOND_INT);
 
-        result = new TypedOperand(new Timestamp(millis), EdmDateTimeOffset.getInstance());
-      } else if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.SUB) {
+        result = new TypedOperand(new Timestamp(millis), primDateTimeOffset);
+      } else if (right.is(primDuration) && operator == BinaryOperatorKind.SUB) {
         long millis = left.getTypedValue(Calendar.class).getTimeInMillis()
             - (right.getTypedValue(BigDecimal.class).longValue() * FACTOR_SECOND_INT);
 
-        result = new TypedOperand(new Timestamp(millis), EdmDateTimeOffset.getInstance());
+        result = new TypedOperand(new Timestamp(millis), primDateTimeOffset);
       }
-    } else if (left.is(EdmDuration.getInstance())) {
-      if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.ADD) {
+    } else if (left.is(primDuration)) {
+      if (right.is(primDuration) && operator == BinaryOperatorKind.ADD) {
         long seconds = left.getTypedValue(BigDecimal.class).longValue()
             + right.getTypedValue(BigDecimal.class).longValue();
 
-        result = new TypedOperand(new BigDecimal(seconds), EdmDuration.getInstance());
-      } else if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.SUB) {
+        result = new TypedOperand(new BigDecimal(seconds), primDuration);
+      } else if (right.is(primDuration) && operator == BinaryOperatorKind.SUB) {
         long seconds = left.getTypedValue(BigDecimal.class).longValue()
             - right.getTypedValue(BigDecimal.class).longValue();
 
-        result = new TypedOperand(new BigDecimal(seconds), EdmDuration.getInstance());
+        result = new TypedOperand(new BigDecimal(seconds), primDuration);
       }
-    } else if (left.is(EdmDateTimeOffset.getInstance())) {
-      if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.ADD) {
+    } else if (left.is(primDateTimeOffset)) {
+      if (right.is(primDuration) && operator == BinaryOperatorKind.ADD) {
         long millis = left.getTypedValue(Timestamp.class).getTime()
             + (right.getTypedValue(BigDecimal.class).longValue() * FACTOR_SECOND_INT);
 
-        result = new TypedOperand(new Timestamp(millis), EdmDateTimeOffset.getInstance());
-      } else if (right.is(EdmDuration.getInstance()) && operator == BinaryOperatorKind.SUB) {
+        result = new TypedOperand(new Timestamp(millis), primDateTimeOffset);
+      } else if (right.is(primDuration) && operator == BinaryOperatorKind.SUB) {
         long millis = left.getTypedValue(Timestamp.class).getTime()
             - (right.getTypedValue(BigDecimal.class).longValue() * FACTOR_SECOND_INT);
 
-        result = new TypedOperand(new Timestamp(millis), EdmDateTimeOffset.getInstance());
-      } else if (right.is(EdmDateTimeOffset.getInstance()) && operator == BinaryOperatorKind.SUB) {
+        result = new TypedOperand(new Timestamp(millis), primDateTimeOffset);
+      } else if (right.is(primDateTimeOffset) && operator == BinaryOperatorKind.SUB) {
         long millis = left.getTypedValue(Timestamp.class).getTime()
             - right.getTypedValue(Timestamp.class).getTime();
 
-        result = new TypedOperand(new BigDecimal(millis).divide(FACTOR_SECOND), EdmDuration.getInstance());
+        result = new TypedOperand(new BigDecimal(millis).divide(FACTOR_SECOND), primDuration);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/MethodCallOperator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/MethodCallOperator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/MethodCallOperator.java
index 62fbb6d..5f8575b 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/MethodCallOperator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/MethodCallOperator.java
@@ -30,21 +30,50 @@ import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDecimal;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmString;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmTimeOfDay;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.TypedOperand;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.VisitorOperand;
 
 public class MethodCallOperator {
 
+  protected static final OData oData;
+  protected static final EdmPrimitiveType primString;
+  protected static final EdmPrimitiveType primBoolean;
+  protected static final EdmPrimitiveType primDateTimeOffset;
+  protected static final EdmPrimitiveType primDate;
+  protected static final EdmPrimitiveType primTimeOfDay;
+  protected static final EdmPrimitiveType primDuration;
+  protected static final EdmPrimitiveType primSByte;
+  protected static final EdmPrimitiveType primByte;
+  protected static final EdmPrimitiveType primInt16;
+  protected static final EdmPrimitiveType primInt32;
+  protected static final EdmPrimitiveType primInt64;
+  protected static final EdmPrimitiveType primDecimal;
+  protected static final EdmPrimitiveType primSingle;
+  protected static final EdmPrimitiveType primDouble;
+
+  static {
+    oData = OData.newInstance();
+    primString = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String);
+    primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
+    primDateTimeOffset = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.DateTimeOffset);
+    primDate = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date);
+    primTimeOfDay = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.TimeOfDay);
+    primDuration = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration);
+    primSByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte);
+    primByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte);
+    primInt16 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16);
+    primInt32 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32);
+    primInt64 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64);
+    primDecimal = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal);
+    primSingle = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Single);
+    primDouble = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double);
+  }
+  
   final private List<VisitorOperand> parameters;
 
   public MethodCallOperator(List<VisitorOperand> parameters) {
@@ -57,7 +86,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).endsWith(params.get(1));
       }
-    }, EdmBoolean.getInstance());
+    }, primBoolean);
   }
 
   public VisitorOperand indexOf() throws ODataApplicationException {
@@ -67,7 +96,7 @@ public class MethodCallOperator {
         // If the first string do not contain the second string, return -1. See OASIS JIRA ODATA-780
         return params.get(0).indexOf(params.get(1));
       }
-    }, EdmInt32.getInstance());
+    }, primInt32);
   }
 
   public VisitorOperand startsWith() throws ODataApplicationException {
@@ -76,7 +105,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).startsWith(params.get(1));
       }
-    }, EdmBoolean.getInstance());
+    }, primBoolean);
   }
 
   public VisitorOperand toLower() throws ODataApplicationException {
@@ -85,7 +114,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).toLowerCase();
       }
-    }, EdmString.getInstance());
+    }, primString);
   }
 
   public VisitorOperand toUpper() throws ODataApplicationException {
@@ -94,7 +123,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).toUpperCase();
       }
-    }, EdmString.getInstance());
+    }, primString);
   }
 
   public VisitorOperand trim() throws ODataApplicationException {
@@ -103,7 +132,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).trim();
       }
-    }, EdmString.getInstance());
+    }, primString);
   }
 
   public VisitorOperand substring() throws ODataApplicationException {
@@ -113,8 +142,8 @@ public class MethodCallOperator {
     final TypedOperand startOperand = parameters.get(1).asTypedOperand();
 
     if (valueOperand.isNull() || startOperand.isNull()) {
-      return new TypedOperand(null, EdmString.getInstance());
-    } else if (valueOperand.is(EdmString.getInstance()) && startOperand.isIntegerType()) {
+      return new TypedOperand(null, primString);
+    } else if (valueOperand.is(primString) && startOperand.isIntegerType()) {
       final String value = valueOperand.getTypedValue(String.class);
       int start = Math.min(startOperand.getTypedValue(BigInteger.class).intValue(), value.length());
       start = start < 0 ? 0 : start;
@@ -125,7 +154,7 @@ public class MethodCallOperator {
         final TypedOperand lengthOperand = parameters.get(2).asTypedOperand();
 
         if (lengthOperand.isNull()) {
-          return new TypedOperand(null, EdmString.getInstance());
+          return new TypedOperand(null, primString);
         } else if (lengthOperand.isIntegerType()) {
           end = Math.min(start + lengthOperand.getTypedValue(BigInteger.class).intValue(), value.length());
           end = end < 0 ? 0 : end;
@@ -136,7 +165,7 @@ public class MethodCallOperator {
       }
 
       return new TypedOperand(value.substring(start, end),
-          EdmString.getInstance());
+          primString);
     } else {
       throw new ODataApplicationException("Substring has invalid parameters. First parameter should be Edm.String,"
           + " second parameter should be Edm.Int32", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
@@ -149,7 +178,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).contains(params.get(1));
       }
-    }, EdmBoolean.getInstance());
+    }, primBoolean);
   }
 
   public VisitorOperand concat() throws ODataApplicationException {
@@ -158,7 +187,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0) + params.get(1);
       }
-    }, EdmString.getInstance());
+    }, primString);
   }
 
   public VisitorOperand length() throws ODataApplicationException {
@@ -167,7 +196,7 @@ public class MethodCallOperator {
       public Object perform(List<String> params) {
         return params.get(0).length();
       }
-    }, EdmInt32.getInstance());
+    }, primInt32);
   }
 
   public VisitorOperand year() throws ODataApplicationException {
@@ -176,7 +205,7 @@ public class MethodCallOperator {
       public Object perform(Calendar calendar, TypedOperand operand) {
         return calendar.get(Calendar.YEAR);
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmDate.getInstance());
+    }, primInt32, primDateTimeOffset, primDate);
   }
 
   public VisitorOperand month() throws ODataApplicationException {
@@ -186,7 +215,7 @@ public class MethodCallOperator {
         // Month is 0-based!
         return calendar.get(Calendar.MONTH) + 1;
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmDate.getInstance());
+    }, primInt32, primDateTimeOffset, primDate);
   }
 
   public VisitorOperand day() throws ODataApplicationException {
@@ -195,7 +224,7 @@ public class MethodCallOperator {
       public Object perform(Calendar calendar, TypedOperand operand) {
         return calendar.get(Calendar.DAY_OF_MONTH);
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmDate.getInstance());
+    }, primInt32, primDateTimeOffset, primDate);
   }
 
   public VisitorOperand hour() throws ODataApplicationException {
@@ -204,7 +233,7 @@ public class MethodCallOperator {
       public Object perform(Calendar calendar, TypedOperand operand) {
         return calendar.get(Calendar.HOUR_OF_DAY);
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmTimeOfDay.getInstance());
+    }, primInt32, primDateTimeOffset, primTimeOfDay);
   }
 
   public VisitorOperand minute() throws ODataApplicationException {
@@ -213,7 +242,7 @@ public class MethodCallOperator {
       public Object perform(Calendar calendar, TypedOperand operand) {
         return calendar.get(Calendar.MINUTE);
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmTimeOfDay.getInstance());
+    }, primInt32, primDateTimeOffset, primTimeOfDay);
   }
 
   public VisitorOperand second() throws ODataApplicationException {
@@ -222,7 +251,7 @@ public class MethodCallOperator {
       public Object perform(Calendar calendar, TypedOperand operand) {
         return calendar.get(Calendar.SECOND);
       }
-    }, EdmInt32.getInstance(), EdmDateTimeOffset.getInstance(), EdmTimeOfDay.getInstance());
+    }, primInt32, primDateTimeOffset, primTimeOfDay);
   }
 
   public VisitorOperand fractionalseconds() throws ODataApplicationException {
@@ -236,7 +265,7 @@ public class MethodCallOperator {
           return new BigDecimal(calendar.get(Calendar.MILLISECOND)).divide(BigDecimal.valueOf(1000));
         }
       }
-    }, EdmDecimal.getInstance(), EdmDateTimeOffset.getInstance(), EdmTimeOfDay.getInstance());
+    }, primDecimal, primDateTimeOffset, primTimeOfDay);
   }
 
   public VisitorOperand round() throws ODataApplicationException {
@@ -290,13 +319,13 @@ public class MethodCallOperator {
     if (operand.is(expectedTypes)) {
       if (!operand.isNull()) {
         Calendar calendar = null;
-        if (operand.is(EdmDate.getInstance())) {
+        if (operand.is(primDate)) {
           calendar = operand.getTypedValue(Calendar.class);
-        } else if (operand.is(EdmDateTimeOffset.getInstance())) {
+        } else if (operand.is(primDateTimeOffset)) {
           final Timestamp timestamp = operand.getTypedValue(Timestamp.class);
           calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
           calendar.setTimeInMillis(timestamp.getTime());
-        } else if (operand.is(EdmTimeOfDay.getInstance())) {
+        } else if (operand.is(primTimeOfDay)) {
           calendar = operand.getTypedValue(Calendar.class);
         } else {
           throw new ODataApplicationException("Invalid type", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
@@ -327,7 +356,7 @@ public class MethodCallOperator {
       TypedOperand operand = param.asTypedOperand();
       if (operand.isNull()) {
         result.add(null);
-      } else if (operand.is(EdmString.getInstance())) {
+      } else if (operand.is(primString)) {
         result.add(operand.getTypedValue(String.class));
       } else {
         throw new ODataApplicationException("Invalid parameter. Expected Edm.String", HttpStatusCode.BAD_REQUEST

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/UnaryOperator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/UnaryOperator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/UnaryOperator.java
index 7f5ba21..5e0c2bc 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/UnaryOperator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/UnaryOperator.java
@@ -23,14 +23,26 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Locale;
 
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.TypedOperand;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.VisitorOperand;
 
 public class UnaryOperator {
+  
+  protected static final OData oData;
+  protected static final EdmPrimitiveType primBoolean;
+  protected static final EdmPrimitiveType primDuration;
+
+  static {
+    oData = OData.newInstance();
+    primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
+    primDuration = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration);
+  }
+  
   final private TypedOperand operand;
 
   public UnaryOperator(VisitorOperand operand) throws ODataApplicationException {
@@ -42,7 +54,7 @@ public class UnaryOperator {
       return operand;
     } else if (operand.isIntegerType()) {
       return new TypedOperand(operand.getTypedValue(BigInteger.class).negate(), operand.getType());
-    } else if (operand.isDecimalType() || operand.is(EdmDuration.getInstance())) {
+    } else if (operand.isDecimalType() || operand.is(primDuration)) {
       return new TypedOperand(operand.getTypedValue(BigDecimal.class).negate(), operand.getType());
     } else {
       throw new ODataApplicationException("Unsupported type", HttpStatusCode.BAD_REQUEST.getStatusCode(),
@@ -53,7 +65,7 @@ public class UnaryOperator {
   public VisitorOperand notOperation() throws ODataApplicationException {
     if (operand.isNull()) {
       return operand;
-    } else if (operand.is(EdmBoolean.getInstance())) {
+    } else if (operand.is(primBoolean)) {
       return new TypedOperand(!operand.getTypedValue(Boolean.class), operand.getType());
     } else {
       throw new ODataApplicationException("Unsupported type", HttpStatusCode.BAD_REQUEST.getStatusCode(),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/primitive/EdmNull.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/primitive/EdmNull.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/primitive/EdmNull.java
index b46aa28..156e2cb 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/primitive/EdmNull.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/primitive/EdmNull.java
@@ -18,11 +18,13 @@
  */
 package org.apache.olingo.server.tecsvc.processor.queryoptions.expression.primitive;
 
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.core.edm.primitivetype.SingletonPrimitiveType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 
-public final class EdmNull extends SingletonPrimitiveType {
+public final class EdmNull implements EdmPrimitiveType {
   
   private static final EdmNull instance = new EdmNull();
   
@@ -34,8 +36,88 @@ public final class EdmNull extends SingletonPrimitiveType {
   public Class<?> getDefaultType() {
     return Object.class;
   }
+  
+  protected String uriPrefix = "";
+
+  protected String uriSuffix = "";
+
+  @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(getNamespace(), getName());
+  }
+
+  @Override
+  public boolean isCompatible(final EdmPrimitiveType primitiveType) {
+    return equals(primitiveType);
+  }
+
+  @Override
+  public boolean validate(final String value,
+      final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale,
+      final Boolean isUnicode) {
+
+    try {
+      valueOfString(value, isNullable, maxLength, precision, scale, isUnicode, getDefaultType());
+      return true;
+    } catch (final EdmPrimitiveTypeException e) {
+      return false;
+    }
+  }
+
+  @Override
+  public final <T> T valueOfString(final String value,
+      final Boolean isNullable, final Integer maxLength, final Integer precision,
+      final Integer scale, final Boolean isUnicode, final Class<T> returnType)
+      throws EdmPrimitiveTypeException {
+
+    if (value == null) {
+      if (isNullable != null && !isNullable) {
+        throw new EdmPrimitiveTypeException("The literal 'null' is not allowed.");
+      }
+      return null;
+    }
+    return internalValueOfString(value, isNullable, maxLength, precision, scale, isUnicode, returnType);
+  }
+
+  @Override
+  public final String valueToString(final Object value,
+      final Boolean isNullable, final Integer maxLength, final Integer precision,
+      final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
+    if (value == null) {
+      if (isNullable != null && !isNullable) {
+        throw new EdmPrimitiveTypeException("The value NULL is not allowed.");
+      }
+      return null;
+    }
+    return internalValueToString(value, isNullable, maxLength, precision, scale, isUnicode);
+  }
+
+  @Override
+  public String toUriLiteral(final String literal) {
+    return literal == null ? null :
+        uriPrefix.isEmpty() && uriSuffix.isEmpty() ? literal : uriPrefix + literal + uriSuffix;
+  }
 
   @Override
+  public String fromUriLiteral(final String literal) throws EdmPrimitiveTypeException {
+    if (literal == null) {
+      return null;
+    } else if (uriPrefix.isEmpty() && uriSuffix.isEmpty()) {
+      return literal;
+    } else if (literal.length() >= uriPrefix.length() + uriSuffix.length()
+        && literal.startsWith(uriPrefix) && literal.endsWith(uriSuffix)) {
+
+      return literal.substring(uriPrefix.length(), literal.length() - uriSuffix.length());
+    } else {
+      throw new EdmPrimitiveTypeException("The literal '" + literal + "' has illegal content.");
+    }
+  }
+
+  @Override
+  public String toString() {
+    return new FullQualifiedName(getNamespace(), getName()).getFullQualifiedNameAsString();
+  }
+
   protected <T> T internalValueOfString(String value, Boolean isNullable, Integer maxLength, Integer precision,
       Integer scale, Boolean isUnicode, Class<T> returnType) throws EdmPrimitiveTypeException {
     if (!value.equals("null")) {
@@ -49,10 +131,34 @@ public final class EdmNull extends SingletonPrimitiveType {
     }
   }
 
-  @Override
   protected <T> String internalValueToString(T value, Boolean isNullable, Integer maxLength, Integer precision,
       Integer scale, Boolean isUnicode) throws EdmPrimitiveTypeException {
     return "null";
   }
 
+  @Override
+  public boolean equals(final Object obj) {
+    return this == obj || obj != null && getClass() == obj.getClass();
+  }
+
+  @Override
+  public int hashCode() {
+    return getClass().hashCode();
+  }
+
+  @Override
+  public String getNamespace() {
+    return EDM_NAMESPACE;
+  }
+
+  @Override
+  public String getName() {
+    return getClass().getSimpleName().substring(3);
+  }
+
+  @Override
+  public EdmTypeKind getKind() {
+    return EdmTypeKind.PRIMITIVE;
+  }
+  
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
index d4068a1..69fa2e4 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
@@ -24,34 +24,26 @@ import java.util.Locale;
 import org.apache.olingo.commons.api.data.Entity;
 import org.apache.olingo.commons.api.data.EntitySet;
 import org.apache.olingo.commons.api.edm.EdmBindingTarget;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmBoolean;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.uri.queryoption.FilterOption;
 import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitException;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.ExpressionVisitorImpl;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. 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.
- */
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.TypedOperand;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.VisitorOperand;
 
 public class FilterHandler {
+  
+  protected static final OData oData;
+  protected static final EdmPrimitiveType primBoolean;
+  
+  static {
+    oData = OData.newInstance();
+    primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
+  }
 
   public static void applyFilterSystemQuery(FilterOption filterOption, EntitySet entitySet, 
       EdmBindingTarget edmEntitySet) throws ODataApplicationException {
@@ -68,7 +60,7 @@ public class FilterHandler {
             .accept(new ExpressionVisitorImpl(iter.next(), edmEntitySet));
         final TypedOperand typedOperand = operand.asTypedOperand();
 
-        if (!(typedOperand.is(EdmBoolean.getInstance())
+        if (!(typedOperand.is(primBoolean)
         && Boolean.TRUE.equals(typedOperand.getTypedValue(Boolean.class)))) {
           iter.remove();
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/ServerSidePagingHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/ServerSidePagingHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/ServerSidePagingHandler.java
index b5aedac..a945edb 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/ServerSidePagingHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/ServerSidePagingHandler.java
@@ -25,10 +25,10 @@ import java.util.Locale;
 import org.apache.olingo.commons.api.data.EntitySet;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.commons.core.Encoder;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.uri.queryoption.SkipTokenOption;
 import org.apache.olingo.server.api.uri.queryoption.SystemQueryOptionKind;
+import org.apache.olingo.server.tecsvc.Encoder;
 
 public class ServerSidePagingHandler {
   private static final int MAX_PAGE_SIZE = 10;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index f8b1dab..801377e 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -39,7 +39,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.commons.core.data.PropertyImpl;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ServiceMetadata;
 import org.apache.olingo.server.api.edmx.EdmxReference;
@@ -615,7 +614,7 @@ public class ODataJsonSerializerTest {
   public void primitivePropertyNull() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
     final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString");
-    final Property property = new PropertyImpl("Edm.String", edmProperty.getName(), ValueType.PRIMITIVE, null);
+    final Property property = new Property("Edm.String", edmProperty.getName(), ValueType.PRIMITIVE, null);
     serializer.primitive((EdmPrimitiveType) edmProperty.getType(), property,
         PrimitiveSerializerOptions.with()
             .contextURL(ContextURL.with()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/05935a0c/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java
----------------------------------------------------------------------
diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java b/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java
index 2e44e35..b8789bd 100644
--- a/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java
+++ b/samples/server/src/main/java/org/apache/olingo/server/sample/data/DataProvider.java
@@ -33,9 +33,6 @@ import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmProperty;
-import org.apache.olingo.commons.core.data.EntityImpl;
-import org.apache.olingo.commons.core.data.EntitySetImpl;
-import org.apache.olingo.commons.core.data.PropertyImpl;
 import org.apache.olingo.server.api.uri.UriParameter;
 import org.apache.olingo.server.sample.edmprovider.CarsEdmProvider;
 
@@ -97,37 +94,37 @@ public class DataProvider {
   }
 
   private EntitySet createCars() {
-    EntitySet entitySet = new EntitySetImpl();
+    EntitySet entitySet = new EntitySet();
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 1))
         .addProperty(createPrimitive("Model", "F1 W03"))
         .addProperty(createPrimitive("ModelYear", "2012"))
         .addProperty(createPrimitive("Price", 189189.43))
         .addProperty(createPrimitive("Currency", "EUR")));
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 2))
         .addProperty(createPrimitive("Model", "F1 W04"))
         .addProperty(createPrimitive("ModelYear", "2013"))
         .addProperty(createPrimitive("Price", 199999.99))
         .addProperty(createPrimitive("Currency", "EUR")));
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 3))
         .addProperty(createPrimitive("Model", "F2012"))
         .addProperty(createPrimitive("ModelYear", "2012"))
         .addProperty(createPrimitive("Price", 137285.33))
         .addProperty(createPrimitive("Currency", "EUR")));
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 4))
         .addProperty(createPrimitive("Model", "F2013"))
         .addProperty(createPrimitive("ModelYear", "2013"))
         .addProperty(createPrimitive("Price", 145285.00))
         .addProperty(createPrimitive("Currency", "EUR")));
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 5))
         .addProperty(createPrimitive("Model", "F1 W02"))
         .addProperty(createPrimitive("ModelYear", "2011"))
@@ -141,14 +138,14 @@ public class DataProvider {
   }
 
   private EntitySet createManufacturers() {
-    EntitySet entitySet = new EntitySetImpl();
+    EntitySet entitySet = new EntitySet();
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 1))
         .addProperty(createPrimitive("Name", "Star Powered Racing"))
         .addProperty(createAddress("Star Street 137", "Stuttgart", "70173", "Germany")));
 
-    entitySet.getEntities().add(new EntityImpl()
+    entitySet.getEntities().add(new Entity()
         .addProperty(createPrimitive("Id", 2))
         .addProperty(createPrimitive("Name", "Horse Powered Racing"))
         .addProperty(createAddress("Horse Street 1", "Maranello", "41053", "Italy")));
@@ -165,10 +162,10 @@ public class DataProvider {
     addressProperties.add(createPrimitive("City", city));
     addressProperties.add(createPrimitive("ZipCode", zipCode));
     addressProperties.add(createPrimitive("Country", country));
-    return new PropertyImpl(null, "Address", ValueType.COMPLEX, addressProperties);
+    return new Property(null, "Address", ValueType.COMPLEX, addressProperties);
   }
 
   private Property createPrimitive(final String name, final Object value) {
-    return new PropertyImpl(null, name, ValueType.PRIMITIVE, value);
+    return new Property(null, name, ValueType.PRIMITIVE, value);
   }
 }