You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2013/09/24 14:42:41 UTC
[14/51] [partial] Refactored project structure
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
deleted file mode 100644
index d85e577..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
+++ /dev/null
@@ -1,559 +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.odata2.core.ep.producer;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.olingo.odata2.api.ODataCallback;
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings;
-import org.apache.olingo.odata2.api.edm.EdmEntitySet;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmFacets;
-import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
-import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
-import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
-import org.apache.olingo.odata2.api.edm.EdmSimpleType;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
-import org.apache.olingo.odata2.api.edm.EdmTargetPath;
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.api.ep.callback.OnWriteEntryContent;
-import org.apache.olingo.odata2.api.ep.callback.OnWriteFeedContent;
-import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackContext;
-import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackResult;
-import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackContext;
-import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackResult;
-import org.apache.olingo.odata2.api.exception.ODataApplicationException;
-import org.apache.olingo.odata2.api.uri.ExpandSelectTreeNode;
-import org.apache.olingo.odata2.core.commons.ContentType;
-import org.apache.olingo.odata2.core.commons.Encoder;
-import org.apache.olingo.odata2.core.edm.EdmDateTimeOffset;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
-import org.apache.olingo.odata2.core.ep.aggregator.NavigationPropertyInfo;
-import org.apache.olingo.odata2.core.ep.util.FormatXml;
-
-/**
- * Serializes an ATOM entry.
- *
- */
-public class AtomEntryEntityProducer {
-
- private String etag;
- private String location;
- private final EntityProviderWriteProperties properties;
-
- public AtomEntryEntityProducer(final EntityProviderWriteProperties properties) throws EntityProviderException {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final XMLStreamWriter writer, final EntityInfoAggregator eia, final Map<String, Object> data,
- final boolean isRootElement, final boolean isFeedPart) throws EntityProviderException {
- try {
- writer.writeStartElement(FormatXml.ATOM_ENTRY);
-
- if (isRootElement) {
- writer.writeDefaultNamespace(Edm.NAMESPACE_ATOM_2005);
- writer.writeNamespace(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
- writer.writeNamespace(Edm.PREFIX_D, Edm.NAMESPACE_D_2007_08);
- }
- if (!isFeedPart) {
- writer.writeAttribute(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998, FormatXml.XML_BASE, properties.getServiceRoot()
- .toASCIIString());
- }
-
- etag = createETag(eia, data);
- if (etag != null) {
- writer.writeAttribute(Edm.NAMESPACE_M_2007_08, FormatXml.M_ETAG, etag);
- }
-
- // write all atom infos (mandatory and optional)
- appendAtomMandatoryParts(writer, eia, data);
- appendAtomOptionalParts(writer, eia, data);
-
- if (eia.getEntityType().hasStream()) {
- // write all links
- appendAtomEditLink(writer, eia, data);
- appendAtomContentLink(writer, eia, data, properties.getMediaResourceMimeType());
- appendAtomNavigationLinks(writer, eia, data);
- // write properties/content
- appendCustomProperties(writer, eia, data);
- appendAtomContentPart(writer, eia, data, properties.getMediaResourceMimeType());
- appendProperties(writer, eia, data);
- } else {
- // write all links
- appendAtomEditLink(writer, eia, data);
- appendAtomNavigationLinks(writer, eia, data);
- // write properties/content
- appendCustomProperties(writer, eia, data);
- writer.writeStartElement(FormatXml.ATOM_CONTENT);
- writer.writeAttribute(FormatXml.ATOM_TYPE, ContentType.APPLICATION_XML.toString());
- appendProperties(writer, eia, data);
- writer.writeEndElement();
- }
-
- writer.writeEndElement();
-
- writer.flush();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (URISyntaxException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendCustomProperties(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException {
- List<String> noneSyndicationTargetPaths = eia.getNoneSyndicationTargetPathNames();
- for (String tpName : noneSyndicationTargetPaths) {
- EntityPropertyInfo info = eia.getTargetPathInfo(tpName);
- final String name = info.getName();
- XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer();
- aps.appendCustomProperty(writer, name, info, data.get(name));
- }
- }
-
- protected static String createETag(final EntityInfoAggregator eia, final Map<String, Object> data)
- throws EntityProviderException {
- try {
- String etag = null;
-
- Collection<EntityPropertyInfo> propertyInfos = eia.getETagPropertyInfos();
- for (EntityPropertyInfo propertyInfo : propertyInfos) {
- EdmType edmType = propertyInfo.getType();
- if (edmType instanceof EdmSimpleType) {
- EdmSimpleType edmSimpleType = (EdmSimpleType) edmType;
- if (etag == null) {
- etag =
- edmSimpleType.valueToString(data.get(propertyInfo.getName()), EdmLiteralKind.DEFAULT, propertyInfo
- .getFacets());
- } else {
- etag =
- etag
- + Edm.DELIMITER
- + edmSimpleType.valueToString(data.get(propertyInfo.getName()), EdmLiteralKind.DEFAULT,
- propertyInfo.getFacets());
- }
- }
- }
-
- if (etag != null) {
- etag = "W/\"" + etag + "\"";
- }
-
- return etag;
- } catch (EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomNavigationLinks(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException, EdmException, URISyntaxException {
- for (String name : eia.getSelectedNavigationPropertyNames()) {
- NavigationPropertyInfo info = eia.getNavigationPropertyInfo(name);
- boolean isFeed = (info.getMultiplicity() == EdmMultiplicity.MANY);
- String self = createSelfLink(eia, data, info.getName());
- appendAtomNavigationLink(writer, self, info.getName(), isFeed, eia, data);
- }
- }
-
- private void appendAtomNavigationLink(final XMLStreamWriter writer, final String self,
- final String navigationPropertyName, final boolean isFeed, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException, EdmException, URISyntaxException {
- try {
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, self);
- writer.writeAttribute(FormatXml.ATOM_REL, Edm.NAMESPACE_REL_2007_08 + navigationPropertyName);
- writer.writeAttribute(FormatXml.ATOM_TITLE, navigationPropertyName);
- if (isFeed) {
- writer.writeAttribute(FormatXml.ATOM_TYPE, ContentType.APPLICATION_ATOM_XML_FEED.toString());
- appendInlineFeed(writer, navigationPropertyName, eia, data, self);
- } else {
- writer.writeAttribute(FormatXml.ATOM_TYPE, ContentType.APPLICATION_ATOM_XML_ENTRY.toString());
- appendInlineEntry(writer, navigationPropertyName, eia, data);
- }
-
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendInlineFeed(final XMLStreamWriter writer, final String navigationPropertyName,
- final EntityInfoAggregator eia, final Map<String, Object> data, final String self)
- throws EntityProviderException, XMLStreamException, EdmException, URISyntaxException {
-
- if (eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
- if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
-
- EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
- WriteFeedCallbackContext context = new WriteFeedCallbackContext();
- context.setSourceEntitySet(eia.getEntitySet());
- context.setNavigationProperty(navProp);
- context.setEntryData(data);
- ExpandSelectTreeNode subNode = properties.getExpandSelectTree().getLinks().get(navigationPropertyName);
- context.setCurrentExpandSelectTreeNode(subNode);
- context.setSelfLink(new URI(self));
-
- ODataCallback callback = properties.getCallbacks().get(navigationPropertyName);
- if (callback == null) {
- throw new EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
- }
- WriteFeedCallbackResult result = null;
- try {
- result = ((OnWriteFeedContent) callback).retrieveFeedResult(context);
- } catch (ODataApplicationException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- List<Map<String, Object>> inlineData = result.getFeedData();
- if (inlineData == null) {
- inlineData = new ArrayList<Map<String, Object>>();
- }
-
- EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
- EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp);
- AtomFeedProducer inlineFeedProducer = new AtomFeedProducer(inlineProperties);
- EntityInfoAggregator inlineEia =
- EntityInfoAggregator.create(inlineEntitySet, inlineProperties.getExpandSelectTree());
- inlineFeedProducer.append(writer, inlineEia, inlineData, true);
-
- writer.writeEndElement();
- }
- }
- }
-
- private void appendInlineEntry(final XMLStreamWriter writer, final String navigationPropertyName,
- final EntityInfoAggregator eia, final Map<String, Object> data) throws EntityProviderException,
- XMLStreamException, EdmException {
-
- if (eia.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
- if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
-
- EdmNavigationProperty navProp = (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
- WriteEntryCallbackContext context = new WriteEntryCallbackContext();
- context.setSourceEntitySet(eia.getEntitySet());
- context.setNavigationProperty(navProp);
- context.setEntryData(data);
- ExpandSelectTreeNode subNode = properties.getExpandSelectTree().getLinks().get(navigationPropertyName);
- context.setCurrentExpandSelectTreeNode(subNode);
-
- ODataCallback callback = properties.getCallbacks().get(navigationPropertyName);
- if (callback == null) {
- throw new EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
- }
- WriteEntryCallbackResult result = null;
- try {
- result = ((OnWriteEntryContent) callback).retrieveEntryResult(context);
- } catch (ODataApplicationException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- Map<String, Object> inlineData = result.getEntryData();
- if (inlineData != null && !inlineData.isEmpty()) {
- EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
- EdmEntitySet inlineEntitySet = eia.getEntitySet().getRelatedEntitySet(navProp);
- AtomEntryEntityProducer inlineProducer = new AtomEntryEntityProducer(inlineProperties);
- EntityInfoAggregator inlineEia =
- EntityInfoAggregator.create(inlineEntitySet, inlineProperties.getExpandSelectTree());
- inlineProducer.append(writer, inlineEia, inlineData, false, false);
- }
-
- writer.writeEndElement();
- }
- }
-
- }
-
- private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException {
- try {
- String self = createSelfLink(eia, data, null);
-
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, self);
- writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT);
- writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntityType().getName());
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomContentLink(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data, String mediaResourceMimeType) throws EntityProviderException {
- try {
- String self = createSelfLink(eia, data, "$value");
-
- if (mediaResourceMimeType == null) {
- mediaResourceMimeType = ContentType.APPLICATION_OCTET_STREAM.toString();
- }
-
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, self);
- writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_EDIT_MEDIA);
- writer.writeAttribute(FormatXml.ATOM_TYPE, mediaResourceMimeType);
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomContentPart(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data, String mediaResourceMimeType) throws EntityProviderException {
- try {
- String self = createSelfLink(eia, data, "$value");
-
- if (mediaResourceMimeType == null) {
- mediaResourceMimeType = ContentType.APPLICATION_OCTET_STREAM.toString();
- }
-
- writer.writeStartElement(FormatXml.ATOM_CONTENT);
- writer.writeAttribute(FormatXml.ATOM_TYPE, mediaResourceMimeType);
- writer.writeAttribute(FormatXml.ATOM_SRC, self);
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomMandatoryParts(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException {
- try {
- writer.writeStartElement(FormatXml.ATOM_ID);
- location = properties.getServiceRoot().toASCIIString() + createSelfLink(eia, data, null);
- writer.writeCharacters(location);
- writer.writeEndElement();
-
- writer.writeStartElement(FormatXml.ATOM_TITLE);
- writer.writeAttribute(FormatXml.ATOM_TYPE, FormatXml.ATOM_TEXT);
- EntityPropertyInfo titleInfo = eia.getTargetPathInfo(EdmTargetPath.SYNDICATION_TITLE);
- if (titleInfo != null) {
- EdmSimpleType st = (EdmSimpleType) titleInfo.getType();
- Object object = data.get(titleInfo.getName());
- String title = st.valueToString(object, EdmLiteralKind.DEFAULT, titleInfo.getFacets());
- if (title != null) {
- writer.writeCharacters(title);
- }
- } else {
- writer.writeCharacters(eia.getEntitySetName());
- }
- writer.writeEndElement();
-
- writer.writeStartElement(FormatXml.ATOM_UPDATED);
-
- writer.writeCharacters(getUpdatedString(eia, data));
-
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- String getUpdatedString(final EntityInfoAggregator eia, final Map<String, Object> data)
- throws EdmSimpleTypeException {
- Object updateDate = null;
- EdmFacets updateFacets = null;
- EntityPropertyInfo updatedInfo = eia.getTargetPathInfo(EdmTargetPath.SYNDICATION_UPDATED);
- if (updatedInfo != null) {
- updateDate = data.get(updatedInfo.getName());
- if (updateDate != null) {
- updateFacets = updatedInfo.getFacets();
- }
- }
- if (updateDate == null) {
- updateDate = new Date();
- }
- String valueToString =
- EdmDateTimeOffset.getInstance().valueToString(updateDate, EdmLiteralKind.DEFAULT, updateFacets);
- return valueToString;
- }
-
- private String getTargetPathValue(final EntityInfoAggregator eia, final String targetPath,
- final Map<String, Object> data) throws EntityProviderException {
- try {
- EntityPropertyInfo info = eia.getTargetPathInfo(targetPath);
- if (info != null) {
- EdmSimpleType type = (EdmSimpleType) info.getType();
- Object value = data.get(info.getName());
- return type.valueToString(value, EdmLiteralKind.DEFAULT, info.getFacets());
- }
- return null;
- } catch (EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomOptionalParts(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException {
- try {
- String authorEmail = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_AUTHOREMAIL, data);
- String authorName = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_AUTHORNAME, data);
- String authorUri = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_AUTHORURI, data);
- if (authorEmail != null || authorName != null || authorUri != null) {
- writer.writeStartElement(FormatXml.ATOM_AUTHOR);
- appendAtomOptionalPart(writer, FormatXml.ATOM_AUTHOR_NAME, authorName, false);
- appendAtomOptionalPart(writer, FormatXml.ATOM_AUTHOR_EMAIL, authorEmail, false);
- appendAtomOptionalPart(writer, FormatXml.ATOM_AUTHOR_URI, authorUri, false);
- writer.writeEndElement();
- }
-
- String summary = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_SUMMARY, data);
- appendAtomOptionalPart(writer, FormatXml.ATOM_SUMMARY, summary, true);
-
- String contributorName = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_CONTRIBUTORNAME, data);
- String contributorEmail = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_CONTRIBUTOREMAIL, data);
- String contributorUri = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_CONTRIBUTORURI, data);
- if (contributorEmail != null || contributorName != null || contributorUri != null) {
- writer.writeStartElement(FormatXml.ATOM_CONTRIBUTOR);
- appendAtomOptionalPart(writer, FormatXml.ATOM_CONTRIBUTOR_NAME, contributorName, false);
- appendAtomOptionalPart(writer, FormatXml.ATOM_CONTRIBUTOR_EMAIL, contributorEmail, false);
- appendAtomOptionalPart(writer, FormatXml.ATOM_CONTRIBUTOR_URI, contributorUri, false);
- writer.writeEndElement();
- }
-
- String rights = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_RIGHTS, data);
- appendAtomOptionalPart(writer, FormatXml.ATOM_RIGHTS, rights, true);
- String published = getTargetPathValue(eia, EdmTargetPath.SYNDICATION_PUBLISHED, data);
- appendAtomOptionalPart(writer, FormatXml.ATOM_PUBLISHED, published, false);
-
- String term = eia.getEntityType().getNamespace() + Edm.DELIMITER + eia.getEntityType().getName();
- writer.writeStartElement(FormatXml.ATOM_CATEGORY);
- writer.writeAttribute(FormatXml.ATOM_CATEGORY_TERM, term);
- writer.writeAttribute(FormatXml.ATOM_CATEGORY_SCHEME, Edm.NAMESPACE_SCHEME_2007_08);
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomOptionalPart(final XMLStreamWriter writer, final String name, final String value,
- final boolean writeType) throws EntityProviderException {
- try {
- if (value != null) {
- writer.writeStartElement(name);
- if (writeType) {
- writer.writeAttribute(FormatXml.ATOM_TYPE, FormatXml.ATOM_TEXT);
- }
- writer.writeCharacters(value);
- writer.writeEndElement();
- }
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- static String createSelfLink(final EntityInfoAggregator eia, final Map<String, Object> data, final String extension)
- throws EntityProviderException {
- StringBuilder sb = new StringBuilder();
- if (!eia.isDefaultEntityContainer()) {
- sb.append(Encoder.encode(eia.getEntityContainerName())).append(Edm.DELIMITER);
- }
- sb.append(Encoder.encode(eia.getEntitySetName()));
-
- sb.append("(").append(createEntryKey(eia, data)).append(")").append(extension == null ? "" : ("/" + extension));
- return sb.toString();
- }
-
- private static String createEntryKey(final EntityInfoAggregator entityInfo, final Map<String, Object> data)
- throws EntityProviderException {
- final List<EntityPropertyInfo> keyPropertyInfos = entityInfo.getKeyPropertyInfos();
-
- StringBuilder keys = new StringBuilder();
- for (final EntityPropertyInfo keyPropertyInfo : keyPropertyInfos) {
- if (keys.length() > 0) {
- keys.append(',');
- }
-
- final String name = keyPropertyInfo.getName();
- if (keyPropertyInfos.size() > 1) {
- keys.append(Encoder.encode(name)).append('=');
- }
-
- final EdmSimpleType type = (EdmSimpleType) keyPropertyInfo.getType();
- try {
- keys.append(Encoder.encode(type.valueToString(data.get(name), EdmLiteralKind.URI,
- keyPropertyInfo.getFacets())));
- } catch (final EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- return keys.toString();
- }
-
- private void appendProperties(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> data) throws EntityProviderException {
- try {
- List<String> propertyNames = eia.getSelectedPropertyNames();
- if (!propertyNames.isEmpty()) {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_PROPERTIES);
-
- for (String propertyName : propertyNames) {
- EntityPropertyInfo propertyInfo = eia.getPropertyInfo(propertyName);
-
- if (isNotMappedViaCustomMapping(propertyInfo)) {
- Object value = data.get(propertyName);
- XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer();
- aps.append(writer, propertyInfo.getName(), propertyInfo, value);
- }
- }
-
- writer.writeEndElement();
- }
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private boolean isNotMappedViaCustomMapping(final EntityPropertyInfo propertyInfo) {
- EdmCustomizableFeedMappings customMapping = propertyInfo.getCustomMapping();
- if (customMapping != null && customMapping.isFcKeepInContent() != null) {
- return customMapping.isFcKeepInContent().booleanValue();
- }
- return true;
- }
-
- public String getETag() {
- return etag;
- }
-
- public String getLocation() {
- return location;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducer.java
deleted file mode 100644
index 5684814..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomFeedProducer.java
+++ /dev/null
@@ -1,229 +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.odata2.core.ep.producer;
-
-import java.net.URI;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.olingo.odata2.api.commons.InlineCount;
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmFacets;
-import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.api.ep.callback.TombstoneCallback;
-import org.apache.olingo.odata2.api.ep.callback.TombstoneCallbackResult;
-import org.apache.olingo.odata2.core.commons.Encoder;
-import org.apache.olingo.odata2.core.edm.EdmDateTimeOffset;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.util.FormatXml;
-
-/**
- * Serializes an ATOM feed.
- *
- */
-public class AtomFeedProducer {
-
- private final EntityProviderWriteProperties properties;
-
- public AtomFeedProducer(final EntityProviderWriteProperties properties) {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final List<Map<String, Object>> data, final boolean isInline) throws EntityProviderException {
- try {
- writer.writeStartElement(FormatXml.ATOM_FEED);
- TombstoneCallback callback = null;
- if (!isInline) {
- writer.writeDefaultNamespace(Edm.NAMESPACE_ATOM_2005);
- writer.writeNamespace(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
- writer.writeNamespace(Edm.PREFIX_D, Edm.NAMESPACE_D_2007_08);
- callback = getTombstoneCallback();
- if (callback != null) {
- writer.writeNamespace(TombstoneCallback.PREFIX_TOMBSTONE, TombstoneCallback.NAMESPACE_TOMBSTONE);
- }
- }
- writer.writeAttribute(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998, FormatXml.XML_BASE, properties.getServiceRoot()
- .toASCIIString());
-
- // write all atom infos (mandatory and optional)
- appendAtomMandatoryParts(writer, eia);
- appendAtomSelfLink(writer, eia);
- if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
- appendInlineCount(writer, properties.getInlineCount());
- }
-
- appendEntries(writer, eia, data);
-
- if (callback != null) {
- appendDeletedEntries(writer, eia, callback);
- }
-
- if (properties.getNextLink() != null) {
- appendNextLink(writer, properties.getNextLink());
- }
-
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private TombstoneCallback getTombstoneCallback() {
- if (properties.getCallbacks() != null
- && properties.getCallbacks().containsKey(TombstoneCallback.CALLBACK_KEY_TOMBSTONE)) {
- TombstoneCallback callback =
- (TombstoneCallback) properties.getCallbacks().get(TombstoneCallback.CALLBACK_KEY_TOMBSTONE);
- return callback;
- } else {
- return null;
- }
- }
-
- private void appendDeletedEntries(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final TombstoneCallback callback) throws EntityProviderException {
- TombstoneCallbackResult callbackResult = callback.getTombstoneCallbackResult();
- List<Map<String, Object>> tombstoneData = callbackResult.getDeletedEntriesData();
- if (tombstoneData != null) {
- TombstoneProducer tombstoneProducer = new TombstoneProducer();
- tombstoneProducer.appendTombstones(writer, eia, properties, tombstoneData);
- }
-
- String deltaLink = callbackResult.getDeltaLink();
- if (deltaLink != null) {
- try {
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_REL, FormatXml.ATOM_DELTA_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, deltaLink);
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
- }
-
- private void appendNextLink(final XMLStreamWriter writer, final String nextLink) throws EntityProviderException {
- try {
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, nextLink);
- writer.writeAttribute(FormatXml.ATOM_REL, FormatXml.ATOM_NEXT_LINK);
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendEntries(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final List<Map<String, Object>> data) throws EntityProviderException {
- AtomEntryEntityProducer entryProvider = new AtomEntryEntityProducer(properties);
- for (Map<String, Object> singleEntryData : data) {
- entryProvider.append(writer, eia, singleEntryData, false, true);
- }
- }
-
- private void appendInlineCount(final XMLStreamWriter writer, final Integer inlineCount)
- throws EntityProviderException {
- if (inlineCount == null || inlineCount < 0) {
- throw new EntityProviderException(EntityProviderException.INLINECOUNT_INVALID);
- }
- try {
- writer.writeStartElement(Edm.NAMESPACE_M_2007_08, FormatXml.M_COUNT);
- writer.writeCharacters(String.valueOf(inlineCount));
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendAtomSelfLink(final XMLStreamWriter writer, final EntityInfoAggregator eia)
- throws EntityProviderException {
-
- URI self = properties.getSelfLink();
- String selfLink = "";
- if (self == null) {
- selfLink = createSelfLink(eia);
- } else {
- selfLink = self.toASCIIString();
- }
- try {
- writer.writeStartElement(FormatXml.ATOM_LINK);
- writer.writeAttribute(FormatXml.ATOM_HREF, selfLink);
- writer.writeAttribute(FormatXml.ATOM_REL, Edm.LINK_REL_SELF);
- writer.writeAttribute(FormatXml.ATOM_TITLE, eia.getEntitySetName());
- writer.writeEndElement();
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private String createSelfLink(final EntityInfoAggregator eia) throws EntityProviderException {
- StringBuilder sb = new StringBuilder();
- if (!eia.isDefaultEntityContainer()) {
- final String entityContainerName = Encoder.encode(eia.getEntityContainerName());
- sb.append(entityContainerName).append(Edm.DELIMITER);
- }
- final String entitySetName = Encoder.encode(eia.getEntitySetName());
- sb.append(entitySetName);
- return sb.toString();
- }
-
- private void appendAtomMandatoryParts(final XMLStreamWriter writer, final EntityInfoAggregator eia)
- throws EntityProviderException {
- try {
- writer.writeStartElement(FormatXml.ATOM_ID);
- writer.writeCharacters(createAtomId(eia));
- writer.writeEndElement();
-
- writer.writeStartElement(FormatXml.ATOM_TITLE);
- writer.writeAttribute(FormatXml.M_TYPE, FormatXml.ATOM_TEXT);
- writer.writeCharacters(eia.getEntitySetName());
- writer.writeEndElement();
-
- writer.writeStartElement(FormatXml.ATOM_UPDATED);
-
- Object updateDate = null;
- EdmFacets updateFacets = null;
- updateDate = new Date();
- writer.writeCharacters(EdmDateTimeOffset.getInstance().valueToString(updateDate, EdmLiteralKind.DEFAULT,
- updateFacets));
- writer.writeEndElement();
-
- writer.writeStartElement(FormatXml.ATOM_AUTHOR);
- writer.writeStartElement(FormatXml.ATOM_AUTHOR_NAME);
- writer.writeEndElement();
- writer.writeEndElement();
-
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private String createAtomId(final EntityInfoAggregator eia) throws EntityProviderException {
- return properties.getServiceRoot() + createSelfLink(eia);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomServiceDocumentProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomServiceDocumentProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomServiceDocumentProducer.java
deleted file mode 100644
index 1c82ce2..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomServiceDocumentProducer.java
+++ /dev/null
@@ -1,123 +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.odata2.core.ep.producer;
-
-import java.io.Writer;
-import java.util.List;
-
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmEntitySetInfo;
-import org.apache.olingo.odata2.api.edm.EdmServiceMetadata;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.exception.ODataException;
-import org.apache.olingo.odata2.core.commons.ContentType;
-import org.apache.olingo.odata2.core.ep.util.FormatXml;
-
-/**
- * Writes the OData service document in XML.
- *
- */
-public class AtomServiceDocumentProducer {
-
- private static final String DEFAULT_CHARSET = ContentType.CHARSET_UTF_8;
- private static final String XML_VERSION = "1.0";
- private final Edm edm;
- private final String serviceRoot;
-
- public AtomServiceDocumentProducer(final Edm edm, final String serviceRoot) {
- this.edm = edm;
- this.serviceRoot = serviceRoot;
- }
-
- public void writeServiceDocument(final Writer writer) throws EntityProviderException {
-
- EdmServiceMetadata serviceMetadata = edm.getServiceMetadata();
-
- try {
- XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
-
- xmlStreamWriter.writeStartDocument(DEFAULT_CHARSET, XML_VERSION);
- xmlStreamWriter.setPrefix(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998);
- xmlStreamWriter.setPrefix(Edm.PREFIX_ATOM, Edm.NAMESPACE_ATOM_2005);
- xmlStreamWriter.setDefaultNamespace(Edm.NAMESPACE_APP_2007);
-
- xmlStreamWriter.writeStartElement(FormatXml.APP_SERVICE);
- xmlStreamWriter.writeAttribute(Edm.PREFIX_XML, Edm.NAMESPACE_XML_1998, FormatXml.XML_BASE, serviceRoot);
- xmlStreamWriter.writeDefaultNamespace(Edm.NAMESPACE_APP_2007);
- xmlStreamWriter.writeNamespace(Edm.PREFIX_ATOM, Edm.NAMESPACE_ATOM_2005);
-
- xmlStreamWriter.writeStartElement(FormatXml.APP_WORKSPACE);
- xmlStreamWriter.writeStartElement(Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_TITLE);
- xmlStreamWriter.writeCharacters(FormatXml.ATOM_TITLE_DEFAULT);
- xmlStreamWriter.writeEndElement();
-
- List<EdmEntitySetInfo> entitySetInfos = serviceMetadata.getEntitySetInfos();
- for (EdmEntitySetInfo info : entitySetInfos) {
- xmlStreamWriter.writeStartElement(FormatXml.APP_COLLECTION);
- xmlStreamWriter.writeAttribute(FormatXml.ATOM_HREF, info.getEntitySetUri().toASCIIString());
- xmlStreamWriter.writeStartElement(Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_TITLE);
- xmlStreamWriter.writeCharacters(info.getEntitySetName());
- xmlStreamWriter.writeEndElement();
- xmlStreamWriter.writeEndElement();
- }
-
- // Collection<Schema> schemas = edmProvider.getSchemas();
- // if (schemas != null) {
- // for (Schema schema : schemas) {
- // Collection<EntityContainer> entityContainers = schema.getEntityContainers();
- // if (entityContainers != null) {
- // for (EntityContainer entityContainer : entityContainers) {
- // Collection<EntitySet> entitySets = entityContainer.getEntitySets();
- // for (EntitySet entitySet : entitySets) {
- // xmlStreamWriter.writeStartElement(FormatXml.APP_COLLECTION);
- // if (entityContainer.isDefaultEntityContainer()) {
- // xmlStreamWriter.writeAttribute(FormatXml.ATOM_HREF, entitySet.getName());
- // } else {
- // xmlStreamWriter.writeAttribute(FormatXml.ATOM_HREF, entityContainer.getName() + Edm.DELIMITER +
- // entitySet.getName());
- // }
- // xmlStreamWriter.writeStartElement(Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_TITLE);
- // xmlStreamWriter.writeCharacters(entitySet.getName());
- // xmlStreamWriter.writeEndElement();
- // xmlStreamWriter.writeEndElement();
- // }
- // }
- // }
- // }
- // }
-
- xmlStreamWriter.writeEndElement();
- xmlStreamWriter.writeEndElement();
- xmlStreamWriter.writeEndDocument();
-
- xmlStreamWriter.flush();
- } catch (FactoryConfigurationError e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (ODataException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
deleted file mode 100644
index 48900bf..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
+++ /dev/null
@@ -1,79 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Provider for writing a collection of simple-type or complex-type instances in JSON.
- *
- */
-public class JsonCollectionEntityProducer {
-
- public void append(final Writer writer, final EntityPropertyInfo propertyInfo, final List<?> data)
- throws EntityProviderException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D)
- .beginObject();
-
- jsonStreamWriter.name(FormatJson.METADATA)
- .beginObject()
- .namedStringValueRaw(
- FormatJson.TYPE,
- "Collection(" + propertyInfo.getType().getNamespace() + Edm.DELIMITER + propertyInfo.getType().getName()
- + ")")
- .endObject()
- .separator();
-
- jsonStreamWriter.name(FormatJson.RESULTS)
- .beginArray();
- boolean first = true;
- for (final Object item : data) {
- if (first) {
- first = false;
- } else {
- jsonStreamWriter.separator();
- }
- JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter, propertyInfo, item);
- }
- jsonStreamWriter.endArray();
-
- jsonStreamWriter.endObject()
- .endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- } catch (final EdmException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
deleted file mode 100644
index 3d2d98f..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
+++ /dev/null
@@ -1,209 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.ODataCallback;
-import org.apache.olingo.odata2.api.commons.HttpContentType;
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmEntitySet;
-import org.apache.olingo.odata2.api.edm.EdmEntityType;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmMultiplicity;
-import org.apache.olingo.odata2.api.edm.EdmNavigationProperty;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.api.ep.callback.OnWriteEntryContent;
-import org.apache.olingo.odata2.api.ep.callback.OnWriteFeedContent;
-import org.apache.olingo.odata2.api.ep.callback.WriteCallbackContext;
-import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackContext;
-import org.apache.olingo.odata2.api.ep.callback.WriteEntryCallbackResult;
-import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackContext;
-import org.apache.olingo.odata2.api.ep.callback.WriteFeedCallbackResult;
-import org.apache.olingo.odata2.api.exception.ODataApplicationException;
-import org.apache.olingo.odata2.core.commons.Encoder;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Producer for writing an entity in JSON, also usable for function imports
- * returning a single instance of an entity type.
- *
- */
-public class JsonEntryEntityProducer {
-
- private final EntityProviderWriteProperties properties;
- private String eTag;
- private String location;
- private JsonStreamWriter jsonStreamWriter;
-
- public JsonEntryEntityProducer(final EntityProviderWriteProperties properties) throws EntityProviderException {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final Writer writer, final EntityInfoAggregator entityInfo, final Map<String, Object> data,
- final boolean isRootElement) throws EntityProviderException {
- final EdmEntityType type = entityInfo.getEntityType();
-
- try {
- jsonStreamWriter = new JsonStreamWriter(writer);
- if (isRootElement) {
- jsonStreamWriter.beginObject().name(FormatJson.D);
- }
-
- jsonStreamWriter.beginObject();
-
- jsonStreamWriter.name(FormatJson.METADATA)
- .beginObject();
- final String self = AtomEntryEntityProducer.createSelfLink(entityInfo, data, null);
- location = (properties.getServiceRoot() == null ? "" : properties.getServiceRoot().toASCIIString()) + self;
- jsonStreamWriter.namedStringValue(FormatJson.ID, location).separator()
- .namedStringValue(FormatJson.URI, location).separator()
- .namedStringValueRaw(FormatJson.TYPE,
- type.getNamespace() + Edm.DELIMITER + type.getName());
- eTag = AtomEntryEntityProducer.createETag(entityInfo, data);
- if (eTag != null) {
- jsonStreamWriter.separator()
- .namedStringValue(FormatJson.ETAG, eTag);
- }
- if (type.hasStream()) {
- jsonStreamWriter.separator()
- .namedStringValueRaw(
- FormatJson.CONTENT_TYPE,
- properties.getMediaResourceMimeType() == null ?
- type.getMapping() == null || type.getMapping().getMimeType() == null
- || data.get(type.getMapping().getMimeType()) == null ?
- HttpContentType.APPLICATION_OCTET_STREAM : data.get(type.getMapping().getMimeType()).toString()
- :
- properties.getMediaResourceMimeType())
- .separator()
- .namedStringValue(FormatJson.MEDIA_SRC, self + "/$value").separator()
- .namedStringValue(FormatJson.EDIT_MEDIA, location + "/$value");
- }
- jsonStreamWriter.endObject();
-
- for (final String propertyName : type.getPropertyNames()) {
- if (entityInfo.getSelectedPropertyNames().contains(propertyName)) {
- jsonStreamWriter.separator()
- .name(propertyName);
- JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter, entityInfo.getPropertyInfo(propertyName),
- data.get(propertyName));
- }
- }
-
- for (final String navigationPropertyName : type.getNavigationPropertyNames()) {
- if (entityInfo.getSelectedNavigationPropertyNames().contains(navigationPropertyName)) {
- jsonStreamWriter.separator()
- .name(navigationPropertyName);
- if (entityInfo.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
- if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
- final EdmNavigationProperty navigationProperty =
- (EdmNavigationProperty) type.getProperty(navigationPropertyName);
- final boolean isFeed = navigationProperty.getMultiplicity() == EdmMultiplicity.MANY;
- final EdmEntitySet entitySet = entityInfo.getEntitySet();
- final EdmEntitySet inlineEntitySet = entitySet.getRelatedEntitySet(navigationProperty);
-
- WriteCallbackContext context = isFeed ? new WriteFeedCallbackContext() : new WriteEntryCallbackContext();
- context.setSourceEntitySet(entitySet);
- context.setNavigationProperty(navigationProperty);
- context.setEntryData(data);
- context.setCurrentExpandSelectTreeNode(properties.getExpandSelectTree().getLinks().get(
- navigationPropertyName));
-
- ODataCallback callback = properties.getCallbacks().get(navigationPropertyName);
- if (callback == null) {
- throw new EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
- }
- try {
- if (isFeed) {
- final WriteFeedCallbackResult result =
- ((OnWriteFeedContent) callback).retrieveFeedResult((WriteFeedCallbackContext) context);
- List<Map<String, Object>> inlineData = result.getFeedData();
- if (inlineData == null) {
- inlineData = new ArrayList<Map<String, Object>>();
- }
- final EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
- final EntityInfoAggregator inlineEntityInfo =
- EntityInfoAggregator.create(inlineEntitySet, inlineProperties.getExpandSelectTree());
- new JsonFeedEntityProducer(inlineProperties).append(writer, inlineEntityInfo, inlineData, false);
-
- } else {
- final WriteEntryCallbackResult result =
- ((OnWriteEntryContent) callback).retrieveEntryResult((WriteEntryCallbackContext) context);
- Map<String, Object> inlineData = result.getEntryData();
- if (inlineData != null && !inlineData.isEmpty()) {
- final EntityProviderWriteProperties inlineProperties = result.getInlineProperties();
- final EntityInfoAggregator inlineEntityInfo =
- EntityInfoAggregator.create(inlineEntitySet, inlineProperties.getExpandSelectTree());
- new JsonEntryEntityProducer(inlineProperties).append(writer, inlineEntityInfo, inlineData, false);
- } else {
- jsonStreamWriter.unquotedValue("null");
- }
- }
- } catch (final ODataApplicationException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- } else {
- writeDeferredUri(navigationPropertyName);
- }
- } else {
- writeDeferredUri(navigationPropertyName);
- }
- }
- }
-
- jsonStreamWriter.endObject();
-
- if (isRootElement) {
- jsonStreamWriter.endObject();
- }
-
- writer.flush();
-
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- } catch (final EdmException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-
- private void writeDeferredUri(final String navigationPropertyName) throws IOException {
- jsonStreamWriter.beginObject()
- .name(FormatJson.DEFERRED);
- JsonLinkEntityProducer.appendUri(jsonStreamWriter, location + "/" + Encoder.encode(navigationPropertyName));
- jsonStreamWriter.endObject();
- }
-
- public String getETag() {
- return eTag;
- }
-
- public String getLocation() {
- return location;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonErrorDocumentProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonErrorDocumentProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonErrorDocumentProducer.java
deleted file mode 100644
index 54b5760..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonErrorDocumentProducer.java
+++ /dev/null
@@ -1,60 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Locale;
-
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- *
- */
-public class JsonErrorDocumentProducer {
-
- public void writeErrorDocument(final Writer writer, final String errorCode, final String message,
- final Locale locale, final String innerError) throws IOException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- jsonStreamWriter
- .beginObject()
- .name(FormatJson.ERROR)
- .beginObject()
- .namedStringValue(FormatJson.CODE, errorCode)
- .separator()
- .name(FormatJson.MESSAGE)
- .beginObject()
- .namedStringValueRaw(
- FormatJson.LANG,
- locale == null || locale.getLanguage() == null ? null :
- locale.getLanguage()
- + (locale.getCountry() == null || locale.getCountry().isEmpty() ? "" : ("-" + locale.getCountry())))
- .separator()
- .namedStringValue(FormatJson.VALUE, message)
- .endObject();
- if (innerError != null) {
- jsonStreamWriter.separator()
- .namedStringValue(FormatJson.INNER_ERROR, innerError);
- }
- jsonStreamWriter.endObject()
- .endObject();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
deleted file mode 100644
index 9be2fb0..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
+++ /dev/null
@@ -1,95 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.commons.InlineCount;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Producer for writing an entity collection (a feed) in JSON.
- *
- */
-public class JsonFeedEntityProducer {
-
- private final EntityProviderWriteProperties properties;
-
- public JsonFeedEntityProducer(final EntityProviderWriteProperties properties) throws EntityProviderException {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final Writer writer, final EntityInfoAggregator entityInfo, final List<Map<String, Object>> data,
- final boolean isRootElement) throws EntityProviderException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- try {
- jsonStreamWriter.beginObject();
-
- if (isRootElement) {
- jsonStreamWriter.name(FormatJson.D)
- .beginObject();
- }
-
- if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
- final int inlineCount = properties.getInlineCount() == null ? 0 : properties.getInlineCount();
- jsonStreamWriter.namedStringValueRaw(FormatJson.COUNT, String.valueOf(inlineCount)).separator();
- }
-
- jsonStreamWriter.name(FormatJson.RESULTS)
- .beginArray();
- JsonEntryEntityProducer entryProducer = new JsonEntryEntityProducer(properties);
- boolean first = true;
- for (final Map<String, Object> entryData : data) {
- if (first) {
- first = false;
- } else {
- jsonStreamWriter.separator();
- }
- entryProducer.append(writer, entityInfo, entryData, false);
- }
- jsonStreamWriter.endArray();
-
- // Write "next" link.
- // To be compatible with other implementations out there, the link is
- // written directly after "__next" and not as "{"uri":"next link"}",
- // deviating from the OData 2.0 specification.
- if (properties.getNextLink() != null) {
- jsonStreamWriter.separator()
- .namedStringValue(FormatJson.NEXT, properties.getNextLink());
- }
-
- if (isRootElement) {
- jsonStreamWriter.endObject();
- }
-
- jsonStreamWriter.endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
deleted file mode 100644
index 69a0c5a..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
+++ /dev/null
@@ -1,65 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Producer for writing a link in JSON.
- *
- */
-public class JsonLinkEntityProducer {
-
- private final EntityProviderWriteProperties properties;
-
- public JsonLinkEntityProducer(final EntityProviderWriteProperties properties) throws EntityProviderException {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final Writer writer, final EntityInfoAggregator entityInfo, final Map<String, Object> data)
- throws EntityProviderException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- final String uri = (properties.getServiceRoot() == null ? "" : properties.getServiceRoot().toASCIIString())
- + AtomEntryEntityProducer.createSelfLink(entityInfo, data, null);
- try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D);
- appendUri(jsonStreamWriter, uri);
- jsonStreamWriter.endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-
- protected static void appendUri(final JsonStreamWriter jsonStreamWriter, final String uri) throws IOException {
- jsonStreamWriter.beginObject()
- .namedStringValue(FormatJson.URI, uri)
- .endObject();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
deleted file mode 100644
index a3a5e79..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
+++ /dev/null
@@ -1,85 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.commons.InlineCount;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Producer for writing a link collection in JSON.
- *
- */
-public class JsonLinksEntityProducer {
-
- private final EntityProviderWriteProperties properties;
-
- public JsonLinksEntityProducer(final EntityProviderWriteProperties properties) throws EntityProviderException {
- this.properties = properties == null ? EntityProviderWriteProperties.serviceRoot(null).build() : properties;
- }
-
- public void append(final Writer writer, final EntityInfoAggregator entityInfo, final List<Map<String, Object>> data)
- throws EntityProviderException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D);
-
- if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
- final int inlineCount = properties.getInlineCount() == null ? 0 : properties.getInlineCount();
- jsonStreamWriter.beginObject()
- .namedStringValueRaw(FormatJson.COUNT, String.valueOf(inlineCount)).separator()
- .name(FormatJson.RESULTS);
- }
-
- jsonStreamWriter.beginArray();
- final String serviceRoot = properties.getServiceRoot().toASCIIString();
- boolean first = true;
- for (final Map<String, Object> entryData : data) {
- if (first) {
- first = false;
- } else {
- jsonStreamWriter.separator();
- }
- JsonLinkEntityProducer.appendUri(jsonStreamWriter,
- (serviceRoot == null ? "" : serviceRoot)
- + AtomEntryEntityProducer.createSelfLink(entityInfo, entryData, null));
- }
- jsonStreamWriter.endArray();
-
- if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
- jsonStreamWriter.endObject();
- }
-
- jsonStreamWriter.endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
deleted file mode 100644
index 659e4b9..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
+++ /dev/null
@@ -1,124 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
-import org.apache.olingo.odata2.api.edm.EdmSimpleType;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityComplexPropertyInfo;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Producer for writing a single simple or complex property in JSON, also usable
- * for function imports returning a single instance of a simple or complex type.
- *
- */
-public class JsonPropertyEntityProducer {
-
- public void append(final Writer writer, final EntityPropertyInfo propertyInfo, final Object value)
- throws EntityProviderException {
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-
- try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D)
- .beginObject();
-
- jsonStreamWriter.name(propertyInfo.getName());
- appendPropertyValue(jsonStreamWriter, propertyInfo.isComplex() ? (EntityComplexPropertyInfo) propertyInfo
- : propertyInfo, value);
-
- jsonStreamWriter.endObject()
- .endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- } catch (final EdmException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
- }
-
- protected static void appendPropertyValue(final JsonStreamWriter jsonStreamWriter,
- final EntityPropertyInfo propertyInfo, final Object value) throws IOException, EdmException,
- EntityProviderException {
- if (propertyInfo.isComplex()) {
- if (value == null || value instanceof Map<?, ?>) {
- jsonStreamWriter.beginObject();
- appendPropertyMetadata(jsonStreamWriter, propertyInfo.getType());
- for (final EntityPropertyInfo childPropertyInfo : ((EntityComplexPropertyInfo) propertyInfo).getPropertyInfos())
- {
- jsonStreamWriter.separator();
- final String name = childPropertyInfo.getName();
- jsonStreamWriter.name(name);
- appendPropertyValue(jsonStreamWriter, childPropertyInfo,
- value == null ? null : ((Map<?, ?>) value).get(name));
- }
- jsonStreamWriter.endObject();
- } else {
- throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT
- .addContent("A complex property must have a Map as data"));
- }
- } else {
- final EdmSimpleType type = (EdmSimpleType) propertyInfo.getType();
- final Object contentValue = value instanceof Map ? ((Map<?, ?>) value).get(propertyInfo.getName()) : value;
- final String valueAsString = type.valueToString(contentValue, EdmLiteralKind.JSON, propertyInfo.getFacets());
- switch (EdmSimpleTypeKind.valueOf(type.getName())) {
- case String:
- jsonStreamWriter.stringValue(valueAsString);
- break;
- case Boolean:
- case Byte:
- case SByte:
- case Int16:
- case Int32:
- jsonStreamWriter.unquotedValue(valueAsString);
- break;
- case DateTime:
- case DateTimeOffset:
- // Although JSON escaping is (and should be) done in the JSON
- // serializer, we backslash-escape the forward slash here explicitly
- // because it is not required to escape it in JSON but in OData.
- jsonStreamWriter.stringValueRaw(valueAsString == null ? null : valueAsString.replace("/", "\\/"));
- break;
- default:
- jsonStreamWriter.stringValueRaw(valueAsString);
- break;
- }
- }
- }
-
- protected static void appendPropertyMetadata(final JsonStreamWriter jsonStreamWriter, final EdmType type)
- throws IOException, EdmException {
- jsonStreamWriter.name(FormatJson.METADATA)
- .beginObject()
- .namedStringValueRaw(FormatJson.TYPE, type.getNamespace() + Edm.DELIMITER + type.getName())
- .endObject();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonServiceDocumentProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonServiceDocumentProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonServiceDocumentProducer.java
deleted file mode 100644
index 6b2134b..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonServiceDocumentProducer.java
+++ /dev/null
@@ -1,71 +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.odata2.core.ep.producer;
-
-import java.io.IOException;
-import java.io.Writer;
-
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmEntitySetInfo;
-import org.apache.olingo.odata2.api.edm.EdmServiceMetadata;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.exception.ODataException;
-import org.apache.olingo.odata2.core.ep.util.FormatJson;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- * Writes the OData service document in JSON.
- *
- */
-public class JsonServiceDocumentProducer {
-
- public static void writeServiceDocument(final Writer writer, final Edm edm) throws EntityProviderException {
- final EdmServiceMetadata serviceMetadata = edm.getServiceMetadata();
-
- JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
- try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D)
- .beginObject()
- .name(FormatJson.ENTITY_SETS)
- .beginArray();
-
- boolean first = true;
- for (EdmEntitySetInfo info : serviceMetadata.getEntitySetInfos()) {
- if (first) {
- first = false;
- } else {
- jsonStreamWriter.separator();
- }
- jsonStreamWriter.stringValue(info.getEntitySetUri().toASCIIString());
- }
-
- jsonStreamWriter.endArray()
- .endObject()
- .endObject();
- } catch (final IOException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- } catch (final ODataException e) {
- throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
- .getSimpleName()), e);
- }
-
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/TombstoneProducer.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/TombstoneProducer.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/TombstoneProducer.java
deleted file mode 100644
index 7f1babb..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/TombstoneProducer.java
+++ /dev/null
@@ -1,114 +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.odata2.core.ep.producer;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.olingo.odata2.api.edm.EdmFacets;
-import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
-import org.apache.olingo.odata2.api.edm.EdmTargetPath;
-import org.apache.olingo.odata2.api.ep.EntityProviderException;
-import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
-import org.apache.olingo.odata2.api.ep.callback.TombstoneCallback;
-import org.apache.olingo.odata2.core.edm.EdmDateTimeOffset;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
-import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
-import org.apache.olingo.odata2.core.ep.util.FormatXml;
-
-/**
- *
- */
-public class TombstoneProducer {
-
- private String defaultDateString;
-
- /**
- * Appends tombstones to an already started feed.
- * If the list is empty no elements will be appended.
- * @param writer same as in feed
- * @param eia same as in feed
- * @param properties same as in feed
- * @param deletedEntries data to be appended
- * @throws EntityProviderException
- */
- public void appendTombstones(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final EntityProviderWriteProperties properties, final List<Map<String, Object>> deletedEntries)
- throws EntityProviderException {
- try {
- for (Map<String, Object> deletedEntry : deletedEntries) {
- writer.writeStartElement(TombstoneCallback.NAMESPACE_TOMBSTONE, FormatXml.ATOM_TOMBSTONE_DELETED_ENTRY);
-
- appendRefAttribute(writer, eia, properties, deletedEntry);
- appendWhenAttribute(writer, eia, deletedEntry);
-
- writer.writeEndElement();
- }
- } catch (XMLStreamException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- } catch (EdmSimpleTypeException e) {
- throw new EntityProviderException(EntityProviderException.COMMON, e);
- }
- }
-
- private void appendWhenAttribute(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final Map<String, Object> deletedEntry) throws XMLStreamException, EdmSimpleTypeException {
- Object updateDate = null;
- EntityPropertyInfo updatedInfo = eia.getTargetPathInfo(EdmTargetPath.SYNDICATION_UPDATED);
- if (updatedInfo != null) {
- updateDate = deletedEntry.get(updatedInfo.getName());
- }
-
- if (updateDate == null) {
- appendDefaultWhenAttribute(writer);
- } else {
- appendCustomWhenAttribute(writer, updateDate, updatedInfo);
- }
- }
-
- private void appendCustomWhenAttribute(final XMLStreamWriter writer, final Object updateDate,
- final EntityPropertyInfo updatedInfo) throws XMLStreamException, EdmSimpleTypeException {
- EdmFacets updateFacets = updatedInfo.getFacets();
- writer.writeAttribute(FormatXml.ATOM_TOMBSTONE_WHEN, EdmDateTimeOffset.getInstance().valueToString(updateDate,
- EdmLiteralKind.DEFAULT, updateFacets));
- }
-
- private void appendRefAttribute(final XMLStreamWriter writer, final EntityInfoAggregator eia,
- final EntityProviderWriteProperties properties, final Map<String, Object> deletedEntry)
- throws XMLStreamException, EntityProviderException {
- String ref =
- properties.getServiceRoot().toASCIIString() + AtomEntryEntityProducer.createSelfLink(eia, deletedEntry, null);
- writer.writeAttribute(FormatXml.ATOM_TOMBSTONE_REF, ref);
- }
-
- private void appendDefaultWhenAttribute(final XMLStreamWriter writer) throws XMLStreamException,
- EdmSimpleTypeException {
- if (defaultDateString == null) {
- Object defaultDate = new Date();
- defaultDateString = EdmDateTimeOffset.getInstance().valueToString(defaultDate, EdmLiteralKind.DEFAULT, null);
- }
- writer.writeAttribute(FormatXml.ATOM_TOMBSTONE_WHEN, defaultDateString);
-
- }
-}