You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2016/02/04 14:02:23 UTC

[6/7] olingo-odata4 git commit: [OLINGO-852] less warnings + general clean-up

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5d7c1287/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
deleted file mode 100644
index c287e5b..0000000
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ /dev/null
@@ -1,1947 +0,0 @@
-/*
- * 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.
- */
-package org.apache.olingo.fit;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.net.URI;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.ConcurrentModificationException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.mail.Header;
-import javax.mail.internet.MimeBodyPart;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.NotFoundException;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedHashMap;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.ext.multipart.Attachment;
-import org.apache.cxf.jaxrs.ext.multipart.Multipart;
-import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;
-import org.apache.olingo.client.api.data.ResWrap;
-import org.apache.olingo.client.api.serialization.ODataDeserializer;
-import org.apache.olingo.client.api.serialization.ODataSerializer;
-import org.apache.olingo.client.core.serialization.AtomSerializer;
-import org.apache.olingo.client.core.serialization.JsonDeserializer;
-import org.apache.olingo.client.core.serialization.JsonSerializer;
-import org.apache.olingo.commons.api.data.ComplexValue;
-import org.apache.olingo.commons.api.data.Entity;
-import org.apache.olingo.commons.api.data.EntityCollection;
-import org.apache.olingo.commons.api.data.Link;
-import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.data.ValueType;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
-import org.apache.olingo.fit.metadata.EntityType;
-import org.apache.olingo.fit.metadata.Metadata;
-import org.apache.olingo.fit.metadata.NavigationProperty;
-import org.apache.olingo.fit.methods.PATCH;
-import org.apache.olingo.fit.serializer.FITAtomDeserializer;
-import org.apache.olingo.fit.utils.AbstractUtilities;
-import org.apache.olingo.fit.utils.Accept;
-import org.apache.olingo.fit.utils.Commons;
-import org.apache.olingo.fit.utils.ConstantKey;
-import org.apache.olingo.fit.utils.Constants;
-import org.apache.olingo.fit.utils.FSManager;
-import org.apache.olingo.fit.utils.JSONUtilities;
-import org.apache.olingo.fit.utils.LinkInfo;
-import org.apache.olingo.fit.utils.XMLUtilities;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public abstract class AbstractServices {
-
-  /**
-   * Logger.
-   */
-  protected static final Logger LOG = LoggerFactory.getLogger(AbstractServices.class);
-
-  private static final Pattern REQUEST_PATTERN = Pattern.compile("(.*) (http://.*) HTTP/.*");
-
-  private static final Pattern BATCH_REQUEST_REF_PATTERN = Pattern.compile("(.*) ([$]\\d+)(.*) HTTP/.*");
-
-  private static final Pattern REF_PATTERN = Pattern.compile("([$]\\d+)");
-
-  protected static final String BOUNDARY = "batch_243234_25424_ef_892u748";
-
-  protected static final String MULTIPART_MIXED = "multipart/mixed";
-
-  protected static final String APPLICATION_OCTET_STREAM = "application/octet-stream";
-
-  protected final ODataServiceVersion version;
-
-  protected final Metadata metadata;
-
-  protected final ODataDeserializer atomDeserializer;
-
-  protected final ODataDeserializer jsonDeserializer;
-
-  protected final ODataSerializer atomSerializer;
-
-  protected final ODataSerializer jsonSerializer;
-
-  protected final XMLUtilities xml;
-
-  protected final JSONUtilities json;
-
-  public AbstractServices(final ODataServiceVersion version, final Metadata metadata) throws IOException {
-    this.version = version;
-    this.metadata = metadata;
-
-    atomDeserializer = new FITAtomDeserializer();
-    jsonDeserializer = new JsonDeserializer(true);
-    atomSerializer = new AtomSerializer(true);
-    jsonSerializer = new JsonSerializer(true, ContentType.JSON_FULL_METADATA);
-
-    xml = new XMLUtilities(metadata);
-    json = new JSONUtilities(metadata);
-  }
-
-  /**
-   * Provide sample services.
-   *
-   * @param accept Accept header.
-   * @return OData services.
-   */
-  @GET
-  public Response getSevices(@HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept) {
-    try {
-      final Accept acceptType = Accept.parse(accept);
-
-      if (acceptType == Accept.ATOM) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      return xml.createResponse(
-          null,
-          FSManager.instance(version).readFile(Constants.get(ConstantKey.SERVICES), acceptType),
-          null, acceptType);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  /**
-   * Provide sample getMetadata().
-   *
-   * @return getMetadata().
-   */
-  @GET
-  @Path("/$metadata")
-  @Produces(MediaType.APPLICATION_XML)
-  public Response getMetadata() {
-    return getMetadata(Constants.get(ConstantKey.METADATA));
-  }
-
-  protected Response getMetadata(final String filename) {
-    try {
-      return xml.createResponse(null, FSManager.instance(version).readRes(filename, Accept.XML), null, Accept.XML);
-    } catch (Exception e) {
-      return xml.createFaultResponse(Accept.XML.toString(), e);
-    }
-  }
-
-  @POST
-  @Path("/$batch")
-  @Consumes(MULTIPART_MIXED)
-  @Produces(APPLICATION_OCTET_STREAM + ";boundary=" + BOUNDARY)
-  public Response batch(
-      @HeaderParam("Authorization") @DefaultValue(StringUtils.EMPTY) final String authorization,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      final @Multipart MultipartBody attachment) {
-    try {
-      final boolean continueOnError = prefer.contains("odata.continue-on-error");
-      return xml.createBatchResponse(
-          exploreMultipart(attachment.getAllAttachments(), BOUNDARY, continueOnError));
-    } catch (IOException e) {
-      return xml.createFaultResponse(Accept.XML.toString(), e);
-    }
-  }
-
-  // ----------------------------------------------
-  // just for non nullable property test into PropertyTestITCase
-  // ----------------------------------------------
-  @PATCH
-  @Path("/Driver('2')")
-  public Response patchDriver() {
-    return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(), new Exception("Non nullable properties"));
-  }
-
-  @GET
-  @Path("/StoredPIs(1000)")
-  public Response getStoredPI(@Context final UriInfo uriInfo) {
-    final Entity entity = new Entity();
-    entity.setType("Microsoft.Test.OData.Services.ODataWCFService.StoredPI");
-    final Property id = new Property();
-    id.setType("Edm.Int32");
-    id.setName("StoredPIID");
-    id.setValue(ValueType.PRIMITIVE, 1000);
-    entity.getProperties().add(id);
-    final Link edit = new Link();
-    edit.setHref(uriInfo.getRequestUri().toASCIIString());
-    edit.setRel("edit");
-    edit.setTitle("StoredPI");
-    entity.setEditLink(edit);
-
-    final ByteArrayOutputStream content = new ByteArrayOutputStream();
-    final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
-    try {
-      jsonSerializer.write(writer, new ResWrap<Entity>((URI) null, null, entity));
-      return xml.createResponse(new ByteArrayInputStream(content.toByteArray()), null, Accept.JSON_FULLMETA);
-    } catch (Exception e) {
-      LOG.error("While creating StoredPI", e);
-      return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(), e);
-    }
-  }
-
-  @PATCH
-  @Path("/StoredPIs(1000)")
-  public Response patchStoredPI() {
-    // just for non nullable property test into PropertyTestITCase
-    return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(), new Exception("Non nullable properties"));
-  }
-
-  // ----------------------------------------------
-
-  protected Response bodyPartRequest(final MimeBodyPart body) throws Exception {
-    return bodyPartRequest(body, Collections.<String, String> emptyMap());
-  }
-
-  protected Response bodyPartRequest(final MimeBodyPart body, final Map<String, String> references) throws Exception {
-    @SuppressWarnings("unchecked")
-    final Enumeration<Header> en = body.getAllHeaders();
-
-    Header header = en.nextElement();
-    final String request =
-        header.getName() + (StringUtils.isNotBlank(header.getValue()) ? ":" + header.getValue() : "");
-
-    final Matcher matcher = REQUEST_PATTERN.matcher(request);
-    final Matcher matcherRef = BATCH_REQUEST_REF_PATTERN.matcher(request);
-
-    final MultivaluedMap<String, String> headers = new MultivaluedHashMap<String, String>();
-
-    while (en.hasMoreElements()) {
-      header = en.nextElement();
-      headers.putSingle(header.getName(), header.getValue());
-    }
-
-    final Response res;
-    final String url;
-    final String method;
-
-    if (matcher.find()) {
-      url = matcher.group(2);
-      method = matcher.group(1);
-    } else if (matcherRef.find()) {
-      url = references.get(matcherRef.group(2)) + matcherRef.group(3);
-      method = matcherRef.group(1);
-    } else {
-      url = null;
-      method = null;
-    }
-
-    if (url == null) {
-      res = null;
-    } else {
-      final WebClient client = WebClient.create(url, "odatajclient", "odatajclient", null);
-      client.headers(headers);
-
-      if ("DELETE".equals(method)) {
-        res = client.delete();
-      } else {
-        final InputStream is = body.getDataHandler().getInputStream();
-        String content = IOUtils.toString(is);
-        IOUtils.closeQuietly(is);
-
-        final Matcher refs = REF_PATTERN.matcher(content);
-
-        while (refs.find()) {
-          content = content.replace(refs.group(1), references.get(refs.group(1)));
-        }
-
-        if ("PATCH".equals(method) || "MERGE".equals(method)) {
-          client.header("X-HTTP-METHOD", method);
-          res = client.invoke("POST", IOUtils.toInputStream(content));
-        } else {
-          res = client.invoke(method, IOUtils.toInputStream(content));
-        }
-      }
-
-      // When updating to CXF 3.0.1, uncomment the following line, see CXF-5865
-      // client.close();
-    }
-
-    return res;
-  }
-
-  protected abstract InputStream exploreMultipart(
-      final List<Attachment> attachments, final String boundary, final boolean continueOnError)
-          throws IOException;
-
-  protected void addItemIntro(final ByteArrayOutputStream bos) throws IOException {
-    addItemIntro(bos, null);
-  }
-
-  protected void addItemIntro(final ByteArrayOutputStream bos, final String contentId) throws IOException {
-    bos.write("Content-Type: application/http".getBytes());
-    bos.write(Constants.CRLF);
-    bos.write("Content-Transfer-Encoding: binary".getBytes());
-    bos.write(Constants.CRLF);
-
-    if (StringUtils.isNotBlank(contentId)) {
-      bos.write(("Content-ID: " + contentId).getBytes());
-      bos.write(Constants.CRLF);
-    }
-
-    bos.write(Constants.CRLF);
-  }
-
-  protected void addChangesetItemIntro(
-      final ByteArrayOutputStream bos, final String contentId, final String cboundary) throws IOException {
-    bos.write(("--" + cboundary).getBytes());
-    bos.write(Constants.CRLF);
-    bos.write(("Content-ID: " + contentId).getBytes());
-    bos.write(Constants.CRLF);
-    addItemIntro(bos);
-  }
-
-  protected void addSingleBatchResponse(
-      final Response response, final ByteArrayOutputStream bos) throws IOException {
-    addSingleBatchResponse(response, null, bos);
-  }
-
-  protected void addSingleBatchResponse(
-      final Response response, final String contentId, final ByteArrayOutputStream bos) throws IOException {
-    bos.write("HTTP/1.1 ".getBytes());
-    bos.write(String.valueOf(response.getStatusInfo().getStatusCode()).getBytes());
-    bos.write(" ".getBytes());
-    bos.write(response.getStatusInfo().getReasonPhrase().getBytes());
-    bos.write(Constants.CRLF);
-
-    for (Map.Entry<String, List<Object>> header : response.getHeaders().entrySet()) {
-      final StringBuilder builder = new StringBuilder();
-      for (Object value : header.getValue()) {
-        if (builder.length() > 0) {
-          builder.append(", ");
-        }
-        builder.append(value.toString());
-      }
-      builder.insert(0, ": ").insert(0, header.getKey());
-      bos.write(builder.toString().getBytes());
-      bos.write(Constants.CRLF);
-    }
-
-    if (StringUtils.isNotBlank(contentId)) {
-      bos.write(("Content-ID: " + contentId).getBytes());
-      bos.write(Constants.CRLF);
-    }
-
-    bos.write(Constants.CRLF);
-
-    final Object entity = response.getEntity();
-    if (entity != null) {
-      bos.write(IOUtils.toByteArray((InputStream) entity));
-      bos.write(Constants.CRLF);
-    }
-
-    bos.write(Constants.CRLF);
-  }
-
-  protected void addErrorBatchResponse(final Exception e, final ByteArrayOutputStream bos)
-      throws IOException {
-    addErrorBatchResponse(e, null, bos);
-  }
-
-  protected void addErrorBatchResponse(final Exception e, final String contentId, final ByteArrayOutputStream bos)
-      throws IOException {
-    addSingleBatchResponse(xml.createFaultResponse(Accept.XML.toString(), e), contentId, bos);
-  }
-
-  @PATCH
-  @Path("/{entitySetName}({entityId})")
-  @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  @Consumes({ MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  public Response patchEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @HeaderParam("If-Match") @DefaultValue(StringUtils.EMPTY) final String ifMatch,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      final String changes) {
-
-    try {
-      final Accept acceptType = Accept.parse(accept);
-
-      if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final Map.Entry<String, InputStream> entityInfo = xml.readEntity(entitySetName, entityId, Accept.ATOM);
-
-      final String etag = Commons.getETag(entityInfo.getKey());
-      if (StringUtils.isNotBlank(ifMatch) && !ifMatch.equals(etag)) {
-        throw new ConcurrentModificationException("Concurrent modification");
-      }
-
-      final Accept contentTypeValue = Accept.parse(contentType);
-
-      final Entity entryChanges;
-
-      if (contentTypeValue == Accept.XML || contentTypeValue == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      } else if (contentTypeValue == Accept.ATOM) {
-        entryChanges = atomDeserializer.toEntity(
-            IOUtils.toInputStream(changes, Constants.ENCODING)).getPayload();
-      } else {
-        final ResWrap<Entity> jcont = jsonDeserializer.toEntity(IOUtils.toInputStream(changes, Constants.ENCODING));
-        entryChanges = jcont.getPayload();
-      }
-
-      final ResWrap<Entity> container = atomDeserializer.toEntity(entityInfo.getValue());
-
-      for (Property property : entryChanges.getProperties()) {
-        final Property _property = container.getPayload().getProperty(property.getName());
-        if (_property == null) {
-          container.getPayload().getProperties().add(property);
-        } else {
-          _property.setValue(property.getValueType(), property.getValue());
-        }
-      }
-
-      for (Link link : entryChanges.getNavigationLinks()) {
-        container.getPayload().getNavigationLinks().add(link);
-      }
-
-      final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
-      atomSerializer.write(writer, container);
-      writer.flush();
-      writer.close();
-
-      final InputStream res = xml.addOrReplaceEntity(
-          entityId, entitySetName, new ByteArrayInputStream(content.toByteArray()), container.getPayload());
-
-      final ResWrap<Entity> cres = atomDeserializer.toEntity(res);
-
-      normalizeAtomEntry(cres.getPayload(), entitySetName, entityId);
-
-      final String path = Commons.getEntityBasePath(entitySetName, entityId);
-      FSManager.instance(version).putInMemory(
-          cres, path + File.separatorChar + Constants.get(ConstantKey.ENTITY));
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            xml.readEntity(entitySetName, entityId, acceptType).getValue(),
-            null, acceptType, Response.Status.OK);
-      } else {
-        res.close();
-        response = xml.createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            null,
-            null,
-            acceptType, Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @PUT
-  @Path("/{entitySetName}({entityId})")
-  @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  @Consumes({ MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  public Response replaceEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      final String entity) {
-
-    try {
-      final Accept acceptType = Accept.parse(accept);
-
-      if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final InputStream res = getUtilities(acceptType).addOrReplaceEntity(entityId, entitySetName,
-          IOUtils.toInputStream(entity, Constants.ENCODING),
-          xml.readEntity(acceptType, IOUtils.toInputStream(entity, Constants.ENCODING)));
-
-      final ResWrap<Entity> cres;
-      if (acceptType == Accept.ATOM) {
-        cres = atomDeserializer.toEntity(res);
-      } else {
-        cres = jsonDeserializer.toEntity(res);
-      }
-
-      final String path = Commons.getEntityBasePath(entitySetName, entityId);
-      FSManager.instance(version).putInMemory(
-          cres, path + File.separatorChar + Constants.get(ConstantKey.ENTITY));
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            xml.readEntity(entitySetName, entityId, acceptType).getValue(),
-            null,
-            acceptType,
-            Response.Status.OK);
-      } else {
-        res.close();
-        response = xml.createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            null,
-            null,
-            acceptType,
-            Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @POST
-  @Path("/{entitySetName}")
-  @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  @Consumes({ MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM })
-  public Response postNewEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      final String entity) {
-
-    try {
-      final Accept acceptType = Accept.parse(accept);
-      if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final ResWrap<Entity> container;
-
-      final org.apache.olingo.fit.metadata.EntitySet entitySet = metadata.getEntitySet(entitySetName);
-
-      final Entity entry;
-      final String entityKey;
-      if (xml.isMediaContent(entitySetName)) {
-        entry = new Entity();
-        entry.setMediaContentType(ContentType.APPLICATION_OCTET_STREAM.toContentTypeString());
-        entry.setType(entitySet.getType());
-
-        entityKey = xml.getDefaultEntryKey(entitySetName, entry);
-
-        xml.addMediaEntityValue(entitySetName, entityKey, IOUtils.toInputStream(entity, Constants.ENCODING));
-
-        final Pair<String, EdmPrimitiveTypeKind> id = Commons.getMediaContent().get(entitySetName);
-        if (id != null) {
-          final Property prop = new Property();
-          prop.setName(id.getKey());
-          prop.setType(id.getValue().toString());
-          prop.setValue(ValueType.PRIMITIVE,
-              id.getValue() == EdmPrimitiveTypeKind.Int32
-              ? Integer.parseInt(entityKey)
-                  : id.getValue() == EdmPrimitiveTypeKind.Guid
-                  ? UUID.fromString(entityKey)
-                      : entityKey);
-          entry.getProperties().add(prop);
-        }
-
-        final Link editLink = new Link();
-        editLink.setHref(Commons.getEntityURI(entitySetName, entityKey));
-        editLink.setRel("edit");
-        editLink.setTitle(entitySetName);
-        entry.setEditLink(editLink);
-
-        entry.setMediaContentSource(URI.create(editLink.getHref() + "/$value"));
-
-        container = new ResWrap<Entity>((URI) null, null, entry);
-      } else {
-        final Accept contentTypeValue = Accept.parse(contentType);
-        if (Accept.ATOM == contentTypeValue) {
-          container = atomDeserializer.toEntity(IOUtils.toInputStream(entity, Constants.ENCODING));
-        } else {
-          container = jsonDeserializer.toEntity(IOUtils.toInputStream(entity, Constants.ENCODING));
-        }
-        entry = container.getPayload();
-        updateInlineEntities(entry);
-
-        entityKey = xml.getDefaultEntryKey(entitySetName, entry);
-      }
-
-      normalizeAtomEntry(entry, entitySetName, entityKey);
-
-      final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
-      atomSerializer.write(writer, container);
-      writer.flush();
-      writer.close();
-
-      final InputStream serialization =
-          xml.addOrReplaceEntity(entityKey, entitySetName, new ByteArrayInputStream(content.toByteArray()), entry);
-
-      ResWrap<Entity> result = atomDeserializer.toEntity(serialization);
-      result = new ResWrap<Entity>(
-          URI.create(Constants.get(ConstantKey.ODATA_METADATA_PREFIX)
-              + entitySetName + Constants.get(ConstantKey.ODATA_METADATA_ENTITY_SUFFIX)),
-              null, result.getPayload());
-
-      final String path = Commons.getEntityBasePath(entitySetName, entityKey);
-      FSManager.instance(version).putInMemory(result, path + Constants.get(ConstantKey.ENTITY));
-
-      final String location;
-
-      if ((this instanceof KeyAsSegment)) {
-        location = uriInfo.getRequestUri().toASCIIString() + "/" + entityKey;
-
-        final Link editLink = new Link();
-        editLink.setRel("edit");
-        editLink.setTitle(entitySetName);
-        editLink.setHref(location);
-
-        result.getPayload().setEditLink(editLink);
-      } else {
-        location = uriInfo.getRequestUri().toASCIIString() + "(" + entityKey + ")";
-      }
-
-      final Response response;
-      if ("return-no-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(
-            location,
-            null,
-            null,
-            acceptType,
-            Response.Status.NO_CONTENT);
-      } else {
-        response = xml.createResponse(
-            location,
-            xml.writeEntity(acceptType, result),
-            null,
-            acceptType,
-            Response.Status.CREATED);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-    } catch (Exception e) {
-      LOG.error("While creating new entity", e);
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @POST
-  @Path("/Person({entityId})/{type:.*}/Sack")
-  public Response actionSack(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @PathParam("type") final String type,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    if (utils.getKey() == Accept.XML || utils.getKey() == Accept.TEXT) {
-      throw new UnsupportedMediaTypeException("Unsupported media type");
-    }
-
-    try {
-      final Map.Entry<String, InputStream> entityInfo = xml.readEntity("Person", entityId, Accept.ATOM);
-
-      final InputStream entity = entityInfo.getValue();
-      final ResWrap<Entity> container = atomDeserializer.toEntity(entity);
-
-      container.getPayload().getProperty("Salary").setValue(ValueType.PRIMITIVE, 0);
-      container.getPayload().getProperty("Title").setValue(ValueType.PRIMITIVE, "[Sacked]");
-
-      final FSManager fsManager = FSManager.instance(version);
-      fsManager.putInMemory(xml.writeEntity(Accept.ATOM, container),
-          fsManager.getAbsolutePath(Commons.getEntityBasePath("Person", entityId) + Constants.get(
-              ConstantKey.ENTITY), Accept.ATOM));
-
-      return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @POST
-  @Path("/Person/{type:.*}/IncreaseSalaries")
-  public Response actionIncreaseSalaries(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("type") final String type,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String body) {
-
-    final String name = "Person";
-    try {
-      final Accept acceptType = Accept.parse(accept);
-      if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final JsonNode tree = new ObjectMapper().readTree(body);
-      if (!tree.has("n")) {
-        throw new Exception("Missing parameter: n");
-      }
-      final int n = tree.get("n").asInt();
-
-      final StringBuilder path = new StringBuilder(name).
-          append(File.separatorChar).append(type).
-          append(File.separatorChar);
-
-      path.append(metadata.getEntitySet(name).isSingleton()
-          ? Constants.get(ConstantKey.ENTITY)
-              : Constants.get(ConstantKey.FEED));
-
-      final InputStream feed = FSManager.instance(version).readFile(path.toString(), acceptType);
-
-      final ByteArrayOutputStream copy = new ByteArrayOutputStream();
-      IOUtils.copy(feed, copy);
-      IOUtils.closeQuietly(feed);
-
-      String newContent = new String(copy.toByteArray(), "UTF-8");
-      final Pattern salary = Pattern.compile(acceptType == Accept.ATOM
-          ? "\\<d:Salary m:type=\"Edm.Int32\"\\>(-?\\d+)\\</d:Salary\\>"
-              : "\"Salary\":(-?\\d+),");
-      final Matcher salaryMatcher = salary.matcher(newContent);
-      while (salaryMatcher.find()) {
-        final Long newSalary = Long.valueOf(salaryMatcher.group(1)) + n;
-        newContent = newContent.
-            replaceAll("\"Salary\":" + salaryMatcher.group(1) + ",",
-                "\"Salary\":" + newSalary + ",").
-                replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>" + salaryMatcher.group(1) + "</d:Salary\\>",
-                    "<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
-      }
-
-      FSManager.instance(version).putInMemory(IOUtils.toInputStream(newContent, Constants.ENCODING),
-          FSManager.instance(version).getAbsolutePath(path.toString(), acceptType));
-
-      return xml.createResponse(null, null, null, acceptType, Response.Status.NO_CONTENT);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @POST
-  @Path("/Product({entityId})/ChangeProductDimensions")
-  public Response actionChangeProductDimensions(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String argument) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    if (utils.getKey() == Accept.XML || utils.getKey() == Accept.TEXT) {
-      throw new UnsupportedMediaTypeException("Unsupported media type");
-    }
-
-    try {
-      final Map.Entry<String, InputStream> entityInfo = xml.readEntity("Product", entityId, Accept.ATOM);
-
-      final InputStream entity = entityInfo.getValue();
-      final ResWrap<Entity> container = atomDeserializer.toEntity(entity);
-
-      final Entity param = xml.readEntity(utils.getKey(), IOUtils.toInputStream(argument, Constants.ENCODING));
-
-      final Property property = param.getProperty("dimensions");
-      container.getPayload().getProperty("Dimensions").setValue(property.getValueType(), property.getValue());
-
-      final FSManager fsManager = FSManager.instance(version);
-      fsManager.putInMemory(xml.writeEntity(Accept.ATOM, container),
-          fsManager.getAbsolutePath(Commons.getEntityBasePath("Product", entityId) + Constants.get(
-              ConstantKey.ENTITY), Accept.ATOM));
-
-      return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @POST
-  @Path("/ComputerDetail({entityId})/ResetComputerDetailsSpecifications")
-  public Response actionResetComputerDetailsSpecifications(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String argument) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    if (utils.getKey() == Accept.XML || utils.getKey() == Accept.TEXT) {
-      throw new UnsupportedMediaTypeException("Unsupported media type");
-    }
-
-    try {
-      final Map.Entry<String, InputStream> entityInfo = xml.readEntity("ComputerDetail", entityId, Accept.ATOM);
-
-      final InputStream entity = entityInfo.getValue();
-      final ResWrap<Entity> container = atomDeserializer.toEntity(entity);
-
-      final Entity param = xml.readEntity(utils.getKey(), IOUtils.toInputStream(argument, Constants.ENCODING));
-
-      Property property = param.getProperty("specifications");
-      container.getPayload().getProperty("SpecificationsBag").setValue(property.getValueType(), property.getValue());
-      property = param.getProperty("purchaseTime");
-      container.getPayload().getProperty("PurchaseDate").setValue(property.getValueType(), property.getValue());
-
-      final FSManager fsManager = FSManager.instance(version);
-      fsManager.putInMemory(xml.writeEntity(Accept.ATOM, container),
-          fsManager.getAbsolutePath(Commons.getEntityBasePath("ComputerDetail", entityId) + Constants.get(
-              ConstantKey.ENTITY), Accept.ATOM));
-
-      return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  /**
-   * Retrieve entities from the given entity set and the given type.
-   *
-   * @param accept Accept header.
-   * @param name entity set.
-   * @param type entity type.
-   * @return entity set.
-   */
-  @GET
-  @Path("/{name}/{type:[a-zA-Z].*}")
-  public Response getEntitySet(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("name") final String name,
-      @PathParam("type") final String type) {
-
-    try {
-      final Accept acceptType = Accept.parse(accept);
-      if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final String basePath = name + File.separatorChar;
-      final StringBuilder path = new StringBuilder(name).
-          append(File.separatorChar).append(type).
-          append(File.separatorChar);
-
-      path.append(metadata.getEntitySet(name).isSingleton()
-          ? Constants.get(ConstantKey.ENTITY)
-              : Constants.get(ConstantKey.FEED));
-
-      final InputStream feed = FSManager.instance(version).readFile(path.toString(), acceptType);
-      return xml.createResponse(null, feed, Commons.getETag(basePath), acceptType);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @GET
-  @Path("/{name}/{type:[a-zA-Z].*}")
-  public Response getEntitySet(@Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("name") final String name,
-      @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) final String top,
-      @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) final String skip,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      @QueryParam("$count") @DefaultValue(StringUtils.EMPTY) final String count,
-      @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) final String filter,
-      @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) final String orderby,
-      @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) final String skiptoken,
-      @PathParam("type") final String type) {
-
-    try {
-      final Accept acceptType;
-      if (StringUtils.isNotBlank(format)) {
-        acceptType = Accept.valueOf(format.toUpperCase());
-      } else {
-        acceptType = Accept.parse(accept);
-      }
-
-      final String location = uriInfo.getRequestUri().toASCIIString();
-      try {
-        // search for function ...
-        final InputStream func = FSManager.instance(version).readFile(name, acceptType);
-        return xml.createResponse(location, func, null, acceptType);
-      } catch (NotFoundException e) {
-        if (acceptType == Accept.XML || acceptType == Accept.TEXT) {
-          throw new UnsupportedMediaTypeException("Unsupported media type");
-        }
-
-        // search for entitySet ...
-        final String basePath = name + File.separatorChar;
-
-        final StringBuilder builder = new StringBuilder();
-        builder.append(basePath);
-
-        if (type != null) {
-          builder.append(type).append(File.separatorChar);
-        }
-
-        if (StringUtils.isNotBlank(orderby)) {
-          builder.append(Constants.get(ConstantKey.ORDERBY)).append(File.separatorChar).
-          append(orderby).append(File.separatorChar);
-        }
-
-        if (StringUtils.isNotBlank(filter)) {
-          builder.append(Constants.get(ConstantKey.FILTER)).append(File.separatorChar).
-          append(filter.replaceAll("/", "."));
-        } else if (StringUtils.isNotBlank(skiptoken)) {
-          builder.append(Constants.get(ConstantKey.SKIP_TOKEN)).append(File.separatorChar).
-          append(skiptoken);
-        } else {
-          builder.append(metadata.getEntitySet(name).isSingleton()
-              ? Constants.get(ConstantKey.ENTITY)
-                  : Constants.get(ConstantKey.FEED));
-        }
-
-        final InputStream feed = FSManager.instance(version).readFile(builder.toString(), Accept.ATOM);
-
-        final ResWrap<EntityCollection> container = atomDeserializer.toEntitySet(feed);
-
-        setInlineCount(container.getPayload(), count);
-
-        final ByteArrayOutputStream content = new ByteArrayOutputStream();
-        final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
-
-        // -----------------------------------------------
-        // Evaluate $skip and $top
-        // -----------------------------------------------
-        List<Entity> entries = new ArrayList<Entity>(container.getPayload().getEntities());
-
-        if (StringUtils.isNotBlank(skip)) {
-          entries = entries.subList(Integer.valueOf(skip), entries.size());
-        }
-
-        if (StringUtils.isNotBlank(top)) {
-          entries = entries.subList(0, Integer.valueOf(top));
-        }
-
-        container.getPayload().getEntities().clear();
-        container.getPayload().getEntities().addAll(entries);
-        // -----------------------------------------------
-
-        if (acceptType == Accept.ATOM) {
-          atomSerializer.write(writer, container);
-        } else {
-          jsonSerializer.write(writer, container);
-        }
-        writer.flush();
-        writer.close();
-
-        return xml.createResponse(
-            location,
-            new ByteArrayInputStream(content.toByteArray()),
-            Commons.getETag(basePath),
-            acceptType);
-      }
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  /**
-   * Retrieve entity set or function execution sample.
-   *
-   * @param accept Accept header.
-   * @param name entity set or function name.
-   * @param format format query option.
-   * @param count count query option.
-   * @param filter filter query option.
-   * @param orderby orderby query option.
-   * @param skiptoken skiptoken query option.
-   * @return entity set or function result.
-   */
-  @GET
-  @Path("/{name}")
-  public Response getEntitySet(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("name") final String name,
-      @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) final String top,
-      @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) final String skip,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      @QueryParam("$count") @DefaultValue(StringUtils.EMPTY) final String count,
-      @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) final String filter,
-      @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) final String orderby,
-      @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) final String skiptoken) {
-
-    return getEntitySet(uriInfo, accept, name, top, skip, format, count, filter, orderby, skiptoken, null);
-  }
-
-  protected abstract void setInlineCount(final EntityCollection feed, final String count);
-
-  @GET
-  @Path("/Person({entityId})")
-  public Response getPerson(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    final Response internal = getEntityInternal(
-        uriInfo.getRequestUri().toASCIIString(), accept, "Person", entityId, format, null, null);
-    if (internal.getStatus() == 200) {
-      InputStream entity = (InputStream) internal.getEntity();
-      try {
-        if (utils.getKey() == Accept.JSON_FULLMETA || utils.getKey() == Accept.ATOM) {
-          entity = utils.getValue().addOperation(entity, "Sack", "#DefaultContainer.Sack",
-              uriInfo.getAbsolutePath().toASCIIString()
-              + "/Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee/Sack");
-        }
-
-        return utils.getValue().createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            entity,
-            internal.getHeaderString("ETag"),
-            utils.getKey());
-      } catch (Exception e) {
-        LOG.error("Error retrieving entity", e);
-        return xml.createFaultResponse(accept, e);
-      }
-    } else {
-      return internal;
-    }
-  }
-
-  @GET
-  @Path("/Product({entityId})")
-  public Response getProduct(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    final Response internal = getEntityInternal(
-        uriInfo.getRequestUri().toASCIIString(), accept, "Product", entityId, format, null, null);
-    if (internal.getStatus() == 200) {
-      InputStream entity = (InputStream) internal.getEntity();
-      try {
-        if (utils.getKey() == Accept.JSON_FULLMETA || utils.getKey() == Accept.ATOM) {
-          entity = utils.getValue().addOperation(entity,
-              "ChangeProductDimensions", "#DefaultContainer.ChangeProductDimensions",
-              uriInfo.getAbsolutePath().toASCIIString() + "/ChangeProductDimensions");
-        }
-
-        return utils.getValue().createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            entity,
-            internal.getHeaderString("ETag"),
-            utils.getKey());
-      } catch (Exception e) {
-        LOG.error("Error retrieving entity", e);
-        return xml.createFaultResponse(accept, e);
-      }
-    } else {
-      return internal;
-    }
-  }
-
-  @GET
-  @Path("/ComputerDetail({entityId})")
-  public Response getComputerDetail(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-    final Response internal = getEntityInternal(
-        uriInfo.getRequestUri().toASCIIString(), accept, "ComputerDetail", entityId, format, null, null);
-    if (internal.getStatus() == 200) {
-      InputStream entity = (InputStream) internal.getEntity();
-      try {
-        if (utils.getKey() == Accept.JSON_FULLMETA || utils.getKey() == Accept.ATOM) {
-          entity = utils.getValue().addOperation(entity,
-              "ResetComputerDetailsSpecifications", "#DefaultContainer.ResetComputerDetailsSpecifications",
-              uriInfo.getAbsolutePath().toASCIIString() + "/ResetComputerDetailsSpecifications");
-        }
-
-        return utils.getValue().createResponse(
-            uriInfo.getRequestUri().toASCIIString(),
-            entity,
-            internal.getHeaderString("ETag"),
-            utils.getKey());
-      } catch (Exception e) {
-        LOG.error("Error retrieving entity", e);
-        return xml.createFaultResponse(accept, e);
-      }
-    } else {
-      return internal;
-    }
-  }
-
-  /**
-   * Retrieve entity sample.
-   *
-   * @param accept Accept header.
-   * @param entitySetName Entity set name.
-   * @param entityId entity id.
-   * @param format format query option.
-   * @param expand expand query option.
-   * @param select select query option.
-   * @return entity.
-   */
-  @GET
-  @Path("/{entitySetName}({entityId})")
-  public Response getEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
-      @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
-
-    return getEntityInternal(
-        uriInfo.getRequestUri().toASCIIString(), accept, entitySetName, entityId, format, expand, select);
-  }
-
-  protected Response getEntityInternal(
-      final String location,
-      final String accept,
-      final String entitySetName,
-      final String entityId,
-      final String format,
-      final String expand,
-      final String select) {
-
-    try {
-      final Map.Entry<Accept, AbstractUtilities> utils = getUtilities(accept, format);
-
-      if (utils.getKey() == Accept.XML || utils.getKey() == Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final Map.Entry<String, InputStream> entityInfo =
-          utils.getValue().readEntity(entitySetName, entityId, Accept.ATOM);
-
-      final InputStream entity = entityInfo.getValue();
-
-      ResWrap<Entity> container = atomDeserializer.toEntity(entity);
-      if (container.getContextURL() == null) {
-        container = new ResWrap<Entity>(URI.create(Constants.get(ConstantKey.ODATA_METADATA_PREFIX)
-            + entitySetName + Constants.get(ConstantKey.ODATA_METADATA_ENTITY_SUFFIX)),
-            container.getMetadataETag(), container.getPayload());
-      }
-      final Entity entry = container.getPayload();
-
-      if ((this instanceof KeyAsSegment)) {
-        final Link editLink = new Link();
-        editLink.setRel("edit");
-        editLink.setTitle(entitySetName);
-        editLink.setHref(Constants.get(ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "/" + entityId);
-
-        entry.setEditLink(editLink);
-      }
-
-      if (StringUtils.isNotBlank(select)) {
-        final List<String> properties = Arrays.asList(select.split(","));
-        final Set<Property> toBeRemoved = new HashSet<Property>();
-
-        for (Property property : entry.getProperties()) {
-          if (!properties.contains(property.getName())) {
-            toBeRemoved.add(property);
-          }
-        }
-
-        entry.getProperties().removeAll(toBeRemoved);
-
-        final Set<Link> linkToBeRemoved = new HashSet<Link>();
-
-        for (Link link : entry.getNavigationLinks()) {
-          if (!properties.contains(link.getTitle().replaceAll("@.*$", "")) && !properties.contains(link.getTitle())) {
-            linkToBeRemoved.add(link);
-          }
-        }
-
-        entry.getNavigationLinks().removeAll(linkToBeRemoved);
-      }
-
-      String tempExpand = expand;
-      if (StringUtils.isNotBlank(tempExpand)) {
-        tempExpand = StringUtils.substringBefore(tempExpand, "(");
-        final List<String> links = Arrays.asList(tempExpand.split(","));
-
-        final Map<Link, Link> replace = new HashMap<Link, Link>();
-
-        for (Link link : entry.getNavigationLinks()) {
-          if (links.contains(link.getTitle())) {
-            // expand link
-            final Link rep = new Link();
-            rep.setHref(link.getHref());
-            rep.setRel(link.getRel());
-            rep.setTitle(link.getTitle());
-            rep.setType(link.getType());
-            if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_ENTRY))) {
-              // inline entry
-              final Entity inline = atomDeserializer.toEntity(
-                  xml.expandEntity(entitySetName, entityId, link.getTitle())).getPayload();
-              rep.setInlineEntity(inline);
-            } else if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_FEED))) {
-              // inline feed
-              final EntityCollection inline = atomDeserializer.toEntitySet(
-                  xml.expandEntity(entitySetName, entityId, link.getTitle())).getPayload();
-              rep.setInlineEntitySet(inline);
-            }
-            replace.put(link, rep);
-          }
-        }
-
-        for (Map.Entry<Link, Link> link : replace.entrySet()) {
-          entry.getNavigationLinks().remove(link.getKey());
-          entry.getNavigationLinks().add(link.getValue());
-        }
-      }
-
-      return xml.createResponse(
-          location,
-          xml.writeEntity(utils.getKey(), container),
-          Commons.getETag(entityInfo.getKey()),
-          utils.getKey());
-    } catch (Exception e) {
-      LOG.error("Error retrieving entity", e);
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @GET
-  @Path("/{entitySetName}({entityId})/$value")
-  public Response getMediaEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId) {
-
-    try {
-      if (!accept.contains("*/*") && !accept.contains("application/octet-stream")) {
-        throw new UnsupportedMediaTypeException("Unsupported media type");
-      }
-
-      final AbstractUtilities utils = getUtilities(null);
-      final Map.Entry<String, InputStream> entityInfo = utils.readMediaEntity(entitySetName, entityId);
-      return utils.createResponse(
-          uriInfo.getRequestUri().toASCIIString(),
-          entityInfo.getValue(),
-          Commons.getETag(entityInfo.getKey()),
-          null);
-
-    } catch (Exception e) {
-      LOG.error("Error retrieving entity", e);
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  @DELETE
-  @Path("/{entitySetName}({entityId})")
-  public Response removeEntity(
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId) {
-
-    try {
-      final String basePath = entitySetName + File.separatorChar + Commons.getEntityKey(entityId);
-
-      FSManager.instance(version).deleteEntity(basePath);
-
-      return xml.createResponse(null, null, null, null, Response.Status.NO_CONTENT);
-    } catch (Exception e) {
-      return xml.createFaultResponse(Accept.XML.toString(), e);
-    }
-  }
-
-  private Response replaceProperty(
-      final String location,
-      final String accept,
-      final String contentType,
-      final String prefer,
-      final String entitySetName,
-      final String entityId,
-      final String path,
-      final String format,
-      final String changes,
-      final boolean justValue) {
-
-    // if the given path is not about any link then search for property
-    LOG.info("Retrieve property {}", path);
-
-    try {
-      final FSManager fsManager = FSManager.instance(version);
-      final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
-
-      final ResWrap<Entity> container = xml.readContainerEntity(Accept.ATOM,
-          fsManager.readFile(basePath + Constants.get(ConstantKey.ENTITY), Accept.ATOM));
-
-      final Entity entry = container.getPayload();
-
-      Property toBeReplaced = null;
-      for (String element : path.split("/")) {
-        if (toBeReplaced == null) {
-          toBeReplaced = entry.getProperty(element.trim());
-        } else {
-          List<Property> value = toBeReplaced.asComplex().getValue();
-          for (Property field : value) {
-            if (field.getName().equalsIgnoreCase(element)) {
-              toBeReplaced = field;
-            }
-          }
-        }
-      }
-
-      if (toBeReplaced == null) {
-        throw new NotFoundException();
-      }
-
-      if (justValue) {
-        // just for primitive values
-        toBeReplaced.setValue(ValueType.PRIMITIVE, changes);
-      } else {
-        final Property pchanges = xml.readProperty(
-            Accept.parse(contentType),
-            IOUtils.toInputStream(changes, Constants.ENCODING));
-
-        toBeReplaced.setValue(pchanges.getValueType(), pchanges.getValue());
-      }
-
-      fsManager.putInMemory(xml.writeEntity(Accept.ATOM, container),
-          fsManager.getAbsolutePath(basePath + Constants.get(ConstantKey.ENTITY), Accept.ATOM));
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = getEntityInternal(location, accept, entitySetName, entityId, format, null, null);
-      } else {
-        Accept acceptType = null;
-        if (StringUtils.isNotBlank(format)) {
-          acceptType = Accept.valueOf(format.toUpperCase());
-        } else if (StringUtils.isNotBlank(accept)) {
-          acceptType = Accept.parse(accept, null);
-        }
-
-        response = xml.createResponse(null, null, null, acceptType, Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  private Response deletePropertyValue(
-      final String accept,
-      final String prefer,
-      final String entitySetName,
-      final String entityId,
-      final String path,
-      final String format) {
-    try {
-      Accept acceptType = null;
-      if (StringUtils.isNotBlank(format)) {
-        acceptType = Accept.valueOf(format.toUpperCase());
-      } else if (StringUtils.isNotBlank(accept)) {
-        acceptType = Accept.parse(accept, null);
-      }
-
-      // if the given path is not about any link then search for property
-      LOG.info("Retrieve property {}", path);
-
-      final AbstractUtilities utils = getUtilities(acceptType);
-
-      final InputStream changed = utils.deleteProperty(
-          entitySetName,
-          entityId,
-          Arrays.asList(path.split("/")),
-          acceptType);
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(null, changed, null, acceptType, Response.Status.OK);
-      } else {
-        changed.close();
-        response = xml.createResponse(null, null, null, acceptType, Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  /**
-   * Replace property value.
-   *
-   * @param accept
-   * @param entitySetName
-   * @param entityId
-   * @param path
-   * @param format
-   * @param changes
-   * @return response
-   */
-  @PUT
-  @Path("/{entitySetName}({entityId})/{path:.*}/$value")
-  public Response replacePropertyValue(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String changes) {
-
-    return replaceProperty(uriInfo.getRequestUri().toASCIIString(),
-        accept, contentType, prefer, entitySetName, entityId, path, format, changes, true);
-  }
-
-  /**
-   * Replace property.
-   *
-   * @param accept
-   * @param entitySetName
-   * @param entityId
-   * @param path
-   * @param format
-   * @param changes
-   * @return response
-   */
-  @PATCH
-  @Path("/{entitySetName}({entityId})/{path:.*}")
-  public Response patchProperty(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String changes) {
-
-    return replaceProperty(uriInfo.getRequestUri().toASCIIString(),
-        accept, contentType, prefer, entitySetName, entityId, path, format, changes, false);
-  }
-
-  @PUT
-  @Produces({ MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON })
-  @Consumes({ MediaType.WILDCARD, MediaType.APPLICATION_OCTET_STREAM })
-  @Path("/{entitySetName}({entityId})/$value")
-  public Response replaceMediaEntity(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String value) {
-    try {
-
-      final AbstractUtilities utils = getUtilities(null);
-
-      final InputStream res = utils.putMediaInMemory(
-          entitySetName, entityId, IOUtils.toInputStream(value, Constants.ENCODING));
-
-      final String location = uriInfo.getRequestUri().toASCIIString().replace("/$value", "");
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(location, res, null, null, Response.Status.OK);
-      } else {
-        res.close();
-        response = xml.createResponse(location, null, null, null, Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-
-    } catch (Exception e) {
-      LOG.error("Error retrieving entity", e);
-      return xml.createFaultResponse(Accept.JSON.toString(), e);
-    }
-  }
-
-  /**
-   * Replace property.
-   *
-   * @param accept
-   * @param entitySetName
-   * @param entityId
-   * @param path
-   * @param format
-   * @param changes
-   * @return response
-   */
-  @PUT
-  @Path("/{entitySetName}({entityId})/{path:.*}")
-  public Response replaceProperty(
-      @Context final UriInfo uriInfo,
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-      final String changes) {
-
-    if (xml.isMediaContent(entitySetName + "/" + path)) {
-      return replaceMediaProperty(prefer, entitySetName, entityId, path, changes);
-    } else {
-      return replaceProperty(uriInfo.getRequestUri().toASCIIString(),
-          accept, contentType, prefer, entitySetName, entityId, path, format, changes, false);
-    }
-  }
-
-  private Response replaceMediaProperty(
-      final String prefer,
-      final String entitySetName,
-      final String entityId,
-      final String path,
-      final String value) {
-
-    try {
-      final AbstractUtilities utils = getUtilities(null);
-
-      InputStream res = utils.putMediaInMemory(
-          entitySetName, entityId, path, IOUtils.toInputStream(value, Constants.ENCODING));
-
-      final Response response;
-      if ("return-content".equalsIgnoreCase(prefer)) {
-        response = xml.createResponse(null, res, null, null, Response.Status.OK);
-      } else {
-        res.close();
-        response = xml.createResponse(null, null, null, null, Response.Status.NO_CONTENT);
-      }
-
-      if (StringUtils.isNotBlank(prefer)) {
-        response.getHeaders().put("Preference-Applied", Collections.<Object> singletonList(prefer));
-      }
-
-      return response;
-    } catch (Exception e) {
-      LOG.error("Error retrieving entity", e);
-      return xml.createFaultResponse(Accept.JSON.toString(), e);
-    }
-  }
-
-  /**
-   * Nullify property value.
-   *
-   * @param accept
-   * @param entitySetName
-   * @param entityId
-   * @param path
-   * @param format
-   * @return response
-   */
-  @DELETE
-  @Path("/{entitySetName}({entityId})/{path:.*}/$value")
-  public Response deleteProperty(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-    return deletePropertyValue(accept, prefer, entitySetName, entityId, path, format);
-  }
-
-  /**
-   * Retrieve property sample.
-   *
-   * @param accept Accept header.
-   * @param entitySetName Entity set name.
-   * @param entityId entity id.
-   * @param path path.
-   * @param format format query option.
-   * @return property.
-   */
-  @GET
-  @Path("/{entitySetName}({entityId})/{path:.*}/$value")
-  public Response getPathValue(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    try {
-      Accept acceptType = null;
-      if (StringUtils.isNotBlank(format)) {
-        acceptType = Accept.valueOf(format.toUpperCase());
-      } else if (StringUtils.isNotBlank(accept)) {
-        acceptType = Accept.parse(accept, null);
-      }
-
-      return navigateProperty(acceptType, entitySetName, entityId, path, true);
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  /**
-   * Retrieve property sample.
-   *
-   * @param accept Accept header.
-   * @param entitySetName Entity set name.
-   * @param entityId entity id.
-   * @param path path.
-   * @param format format query option.
-   * @return property.
-   */
-  @GET
-  @Path("/{entitySetName}({entityId})/{path:.*}")
-  public Response getPath(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entitySetName") final String entitySetName,
-      @PathParam("entityId") final String entityId,
-      @PathParam("path") final String path,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format) {
-
-    // default utilities
-    final AbstractUtilities utils = xml;
-
-    try {
-      if (utils.isMediaContent(entitySetName + "/" + path)) {
-        return navigateStreamedEntity(entitySetName, entityId, path);
-      } else {
-        Accept acceptType = null;
-        if (StringUtils.isNotBlank(format)) {
-          acceptType = Accept.valueOf(format.toUpperCase());
-        } else if (StringUtils.isNotBlank(accept)) {
-          acceptType = Accept.parse(accept, null);
-        }
-
-        try {
-          final LinkInfo linkInfo = xml.readLinks(entitySetName, entityId, path, Accept.XML);
-          final Map.Entry<String, List<String>> links = xml.extractLinkURIs(linkInfo.getLinks());
-          final InputStream stream = xml.readEntities(links.getValue(), path, links.getKey(), linkInfo.isFeed());
-
-          final ByteArrayOutputStream content = new ByteArrayOutputStream();
-          final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
-
-          final ResWrap<?> container = linkInfo.isFeed() ? atomDeserializer.toEntitySet(stream) : atomDeserializer.
-              toEntity(stream);
-          if (acceptType == Accept.ATOM) {
-            atomSerializer.write(writer, container);
-          } else {
-            jsonSerializer.write(writer, container);
-          }
-          writer.flush();
-          writer.close();
-
-          final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
-
-          return xml.createResponse(
-              null,
-              new ByteArrayInputStream(content.toByteArray()),
-              Commons.getETag(basePath),
-              acceptType);
-
-        } catch (NotFoundException e) {
-          // if the given path is not about any link then search for property
-          return navigateProperty(acceptType, entitySetName, entityId, path, false);
-        }
-      }
-    } catch (Exception e) {
-      return utils.createFaultResponse(accept, e);
-    }
-  }
-
-  private Response navigateStreamedEntity(
-      final String entitySetName,
-      final String entityId,
-      final String path) throws Exception {
-
-    final AbstractUtilities utils = getUtilities(null);
-    final Map.Entry<String, InputStream> entityInfo = utils.readMediaEntity(entitySetName, entityId, path);
-    return utils.createResponse(null, entityInfo.getValue(), Commons.getETag(entityInfo.getKey()), null);
-  }
-
-  private Response navigateProperty(
-      final Accept acceptType,
-      final String entitySetName,
-      final String entityId,
-      final String path,
-      final boolean searchForValue) throws Exception {
-
-    if ((searchForValue && acceptType != null && acceptType != Accept.TEXT) || acceptType == Accept.ATOM) {
-      throw new UnsupportedMediaTypeException("Unsupported media type " + acceptType);
-    }
-
-    final AbstractUtilities utils = getUtilities(acceptType);
-
-    final Map.Entry<String, InputStream> entityInfo = utils.readEntity(entitySetName, entityId, Accept.ATOM);
-
-    final InputStream entity = entityInfo.getValue();
-
-    final ResWrap<Entity> entryContainer = atomDeserializer.toEntity(entity);
-
-    final String[] pathElems = StringUtils.split(path, "/");
-    Property property = entryContainer.getPayload().getProperty(pathElems[0]);
-    if (pathElems.length > 1 && property.isComplex()) {
-      for (Property sub : property.asComplex().getValue()) {
-        if (pathElems[1].equals(sub.getName())) {
-          property = sub;
-          if (pathElems.length > 2 && property.isComplex()) {
-            for (Property subsub : property.asComplex().getValue()) {
-              if (pathElems[2].equals(subsub.getName())) {
-                property = subsub;
-              }
-            }
-          }
-        }
-      }
-    }
-
-    final ResWrap<Property> container = new ResWrap<Property>(
-        URI.create(Constants.get(ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "(" + entityId + ")/" + path),
-        entryContainer.getMetadataETag(),
-        property);
-
-    return xml.createResponse(null,
-        searchForValue ? IOUtils.toInputStream(
-            container.getPayload().isNull() ? StringUtils.EMPTY : stringValue(container.getPayload()),
-                Constants.ENCODING) : utils.writeProperty(acceptType, container),
-                Commons.getETag(Commons.getEntityBasePath(entitySetName, entityId)),
-                acceptType);
-  }
-
-  private String stringValue(final Property property) {
-    EdmPrimitiveTypeKind kind = EdmPrimitiveTypeKind.valueOfFQN(property.getType());
-    try {
-      return EdmPrimitiveTypeFactory.getInstance(kind)
-          .valueToString(property.asPrimitive(), null, null,
-              org.apache.olingo.commons.api.Constants.DEFAULT_PRECISION,
-              org.apache.olingo.commons.api.Constants.DEFAULT_SCALE, null);
-    } catch (final EdmPrimitiveTypeException e) {
-      return property.asPrimitive().toString();
-    }
-  }
-
-  /**
-   * Count sample.
-   *
-   * @param accept Accept header.
-   * @param entitySetName entity set name.
-   * @return count.
-   */
-  @GET
-  @Path("/{entitySetName}/$count")
-  public Response count(
-      @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-      @PathParam("entitySetName") final String entitySetName) {
-    try {
-      final Accept acceptType = Accept.parse(accept, Accept.TEXT);
-
-      if (acceptType != Accept.TEXT) {
-        throw new UnsupportedMediaTypeException("Unsupported type " + accept);
-      }
-
-      int count = xml.countAllElements(entitySetName);
-
-      final Response.ResponseBuilder builder = Response.ok();
-      builder.entity(count);
-
-      return builder.build();
-    } catch (Exception e) {
-      return xml.createFaultResponse(accept, e);
-    }
-  }
-
-  public Map.Entry<Accept, AbstractUtilities> getUtilities(final String accept, final String format) {
-    Accept acceptType;
-    if (StringUtils.isNotBlank(format)) {
-      try {
-        acceptType = Accept.valueOf(format.toUpperCase());
-      } catch (Exception e) {
-        acceptType = Accept.parse(format);
-      }
-    } else {
-      acceptType = Accept.parse(accept);
-    }
-
-    return new AbstractMap.SimpleEntry<Accept, AbstractUtilities>(acceptType, getUtilities(acceptType));
-  }
-
-  protected AbstractUtilities getUtilities(final Accept accept) {
-    final AbstractUtilities utils;
-    if (accept == Accept.XML || accept == Accept.TEXT || accept == Accept.ATOM) {
-      utils = xml;
-    } else {
-      utils = json;
-    }
-
-    return utils;
-  }
-
-  protected void updateInlineEntities(final Entity entity) {
-    final String type = entity.getType();
-    EntityType entityType;
-    Map<String, NavigationProperty> navProperties = Collections.emptyMap();
-    if (type != null && type.length() > 0) {
-      entityType = metadata.getEntityOrComplexType(type);
-      navProperties = entityType.getNavigationPropertyMap();
-    }
-
-    for (Property property : entity.getProperties()) {
-      if (navProperties.containsKey(property.getName())) {
-        Link alink = new Link();
-        alink.setTitle(property.getName());
-        alink.getAnnotations().addAll(property.getAnnotations());
-
-        alink.setType(navProperties.get(property.getName()).isEntitySet()
-            ? Constants.get(ConstantKey.ATOM_LINK_FEED)
-                : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
-
-        alink.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getName());
-
-        if (property.isCollection()) {
-          EntityCollection inline = new EntityCollection();
-          for (Object value : property.asCollection()) {
-            Entity inlineEntity = new Entity();
-            inlineEntity.setType(navProperties.get(property.getName()).getType());
-            for (Property prop : ((ComplexValue) value).getValue()) {
-              inlineEntity.getProperties().add(prop);
-            }
-            inline.getEntities().add(inlineEntity);
-          }
-          alink.setInlineEntitySet(inline);
-        } else if (property.isComplex()) {
-          Entity inline = new Entity();
-          inline.setType(navProperties.get(property.getName()).getType());
-          for (Property prop : property.asComplex().getValue()) {
-            inline.getProperties().add(prop);
-          }
-          alink.setInlineEntity(inline);
-
-        } else {
-          throw new IllegalStateException("Invalid navigation property " + property);
-        }
-        entity.getNavigationLinks().add(alink);
-      }
-    }
-  }
-
-  protected void normalizeAtomEntry(final Entity entry, final String entitySetName, final String entityKey) {
-    final org.apache.olingo.fit.metadata.EntitySet entitySet = metadata.getEntitySet(entitySetName);
-    final EntityType entityType = metadata.getEntityOrComplexType(entitySet.getType());
-    for (Map.Entry<String, org.apache.olingo.fit.metadata.Property> property : entityType.getPropertyMap().entrySet()) {
-      if (entry.getProperty(property.getKey()) == null && property.getValue().isNullable()) {
-        final Property prop = new Property();
-        prop.setName(property.getKey());
-        prop.setValue(ValueType.PRIMITIVE, null);
-        entry.getProperties().add(prop);
-      }
-    }
-
-    for (Map.Entry<String, NavigationProperty> property : entityType.getNavigationPropertyMap().entrySet()) {
-      boolean found = false;
-      for (Link link : entry.getNavigationLinks()) {
-        if (link.getTitle().equals(property.getKey())) {
-          found = true;
-        }
-      }
-
-      if (!found) {
-        final Link link = new Link();
-        link.setTitle(property.getKey());
-        link.setType(property.getValue().isEntitySet()
-            ? Constants.get(ConstantKey.ATOM_LINK_FEED)
-                : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
-        link.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getKey());
-        link.setHref(entitySetName + "(" + entityKey + ")/" + property.getKey());
-        entry.getNavigationLinks().add(link);
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5d7c1287/fit/src/main/java/org/apache/olingo/fit/Demo.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/Demo.java b/fit/src/main/java/org/apache/olingo/fit/Demo.java
index c591f01..697b7c9 100644
--- a/fit/src/main/java/org/apache/olingo/fit/Demo.java
+++ b/fit/src/main/java/org/apache/olingo/fit/Demo.java
@@ -40,7 +40,6 @@ import javax.ws.rs.core.UriInfo;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.fit.metadata.Metadata;
 import org.apache.olingo.fit.methods.PATCH;
 import org.apache.olingo.fit.utils.Accept;
@@ -54,7 +53,7 @@ import org.springframework.stereotype.Service;
 public class Demo extends Services {
 
   public Demo() throws IOException {
-    super(new Metadata(FSManager.instance(ODataServiceVersion.V40).
+    super(new Metadata(FSManager.instance().
         readRes("demo" + StringUtils.capitalize(Constants.get(ConstantKey.METADATA)), Accept.XML)));
   }
 
@@ -166,9 +165,8 @@ public class Demo extends Services {
       @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) final String prefer,
       @PathParam("entitySetName") final String entitySetName,
       @PathParam("entityId") final String entityId,
-      @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
       final String value) {
 
-    return super.replaceMediaEntity(uriInfo, prefer, entitySetName, entityId, format, value);
+    return super.replaceMediaEntity(uriInfo, prefer, entitySetName, entityId, value);
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5d7c1287/fit/src/main/java/org/apache/olingo/fit/OpenType.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/OpenType.java b/fit/src/main/java/org/apache/olingo/fit/OpenType.java
index e65c5bf..a15128e 100644
--- a/fit/src/main/java/org/apache/olingo/fit/OpenType.java
+++ b/fit/src/main/java/org/apache/olingo/fit/OpenType.java
@@ -40,7 +40,6 @@ import javax.ws.rs.core.UriInfo;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.fit.metadata.Metadata;
 import org.apache.olingo.fit.utils.Accept;
 import org.apache.olingo.fit.utils.ConstantKey;
@@ -53,8 +52,8 @@ import org.springframework.stereotype.Service;
 public class OpenType extends Services {
 
   public OpenType() throws IOException {
-    super(new Metadata(FSManager.instance(ODataServiceVersion.V40).
-        readRes("openType" + StringUtils.capitalize(Constants.get(ConstantKey.METADATA)), Accept.XML)));
+    super(new Metadata(FSManager.instance()
+        .readRes("openType" + StringUtils.capitalize(Constants.get(ConstantKey.METADATA)), Accept.XML)));
   }
 
   private Response replaceServiceName(final Response response) {