[OLINGO-832] Removed actual not supported/wanted methods
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/5174f708 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/5174f708 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/5174f708 Branch: refs/heads/OLINGO-832_StreamSerializerPoC Commit: 5174f708973e9c296db3867d03ea7f731f0a93d7 Parents: dc2c972 Author: Michael Bolz <[email protected]> Authored: Wed Feb 10 06:29:38 2016 +0100 Committer: Michael Bolz <[email protected]> Committed: Wed Feb 10 06:38:25 2016 +0100 ---------------------------------------------------------------------- .../olingo/commons/api/data/EntityIterator.java | 10 ++-- .../api/ex/ODataNotSupportedException.java | 56 +++++++++++++++++++ .../apache/olingo/server/api/ODataContent.java | 7 +-- .../EntityCollectionSerializerOptions.java | 26 +++++++++ .../server/api/serializer/SerializerResult.java | 6 -- .../api/serializer/SerializerStreamResult.java | 1 + .../olingo/server/core/ODataBasicContent.java | 59 -------------------- .../server/core/ODataHttpHandlerImpl.java | 6 +- .../server/core/ODataWritableContent.java | 32 ++++------- .../core/serializer/SerializerResultImpl.java | 24 +------- .../processor/TechnicalEntityProcessor.java | 9 ++- 11 files changed, 113 insertions(+), 123 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java index 697676e..8afd1fe 100644 --- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/EntityIterator.java @@ -18,6 +18,7 @@ */ package org.apache.olingo.commons.api.data; +import org.apache.olingo.commons.api.ex.ODataNotSupportedException; import org.apache.olingo.commons.api.ex.ODataRuntimeException; import sun.reflect.generics.reflectiveObjects.NotImplementedException; @@ -35,7 +36,7 @@ public abstract class EntityIterator extends AbstractEntityCollection implements @Override public void remove() { //"Remove is not supported for iteration over Entities." - throw new NotImplementedException(); + throw new ODataNotSupportedException("Entity Iterator does not support remove()"); } @Override @@ -44,15 +45,14 @@ public abstract class EntityIterator extends AbstractEntityCollection implements } public Integer getCount() { - throw new ODataRuntimeException("getCount() not supported for " + getClass().getSimpleName()); + throw new ODataNotSupportedException("Entity Iterator does not support getCount()"); } public URI getNext() { - throw new ODataRuntimeException("getNext() not supported for " + getClass().getSimpleName()); - + throw new ODataNotSupportedException("Entity Iterator does not support getNext()"); } public URI getDeltaLink() { - throw new ODataRuntimeException("getDeltaLink() not supported for " + getClass().getSimpleName()); + throw new ODataNotSupportedException("Entity Iterator does not support getDeltaLink()"); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/commons-api/src/main/java/org/apache/olingo/commons/api/ex/ODataNotSupportedException.java ---------------------------------------------------------------------- diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/ex/ODataNotSupportedException.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/ex/ODataNotSupportedException.java new file mode 100644 index 0000000..714c523 --- /dev/null +++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/ex/ODataNotSupportedException.java @@ -0,0 +1,56 @@ +/* + * 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.commons.api.ex; + +/** + * Core runtime exception for OData. + */ +public class ODataNotSupportedException extends ODataRuntimeException { + + private static final long serialVersionUID = 42L; + + /** + * Create with <code>message</code>. + * + * @param msg message text for exception + */ + public ODataNotSupportedException(final String msg) { + super(msg); + } + + /** + * Create with <code>message</code> for and <code>cause</code> of exception. + * + * @param msg message text for exception + * @param cause cause of exception + */ + public ODataNotSupportedException(final String msg, final Exception cause) { + super(msg, cause); + } + + /** + * Create with <code>cause</code> of exception. + * + * @param cause cause of exception + */ + public ODataNotSupportedException(final Exception cause) { + super(cause); + } + +} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataContent.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataContent.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataContent.java index a3147f6..d7e7ec3 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataContent.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/ODataContent.java @@ -18,15 +18,12 @@ */ package org.apache.olingo.server.api; +import java.io.OutputStream; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; public interface ODataContent { - ReadableByteChannel getChannel(); - void write(WritableByteChannel channel); - void write(WritableByteChannel channel, WriteContentErrorCallback callback); - - boolean isWriteSupported(); + void write(OutputStream stream); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/EntityCollectionSerializerOptions.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/EntityCollectionSerializerOptions.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/EntityCollectionSerializerOptions.java index 611485f..6f4ed2d 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/EntityCollectionSerializerOptions.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/EntityCollectionSerializerOptions.java @@ -19,6 +19,7 @@ package org.apache.olingo.server.api.serializer; import org.apache.olingo.commons.api.data.ContextURL; +import org.apache.olingo.server.api.WriteContentErrorCallback; import org.apache.olingo.server.api.uri.queryoption.CountOption; import org.apache.olingo.server.api.uri.queryoption.ExpandOption; import org.apache.olingo.server.api.uri.queryoption.SelectOption; @@ -32,6 +33,7 @@ public class EntityCollectionSerializerOptions { private SelectOption select; private boolean writeOnlyReferences; private String id; + private WriteContentErrorCallback writeContentErrorCallback; /** Gets the {@link ContextURL}. */ public ContextURL getContextURL() { @@ -63,6 +65,18 @@ public class EntityCollectionSerializerOptions { return id; } + /** + * Gets the callback which is used in case of an exception during + * write of the content (in case the content will be written/streamed + * in the future) + * @return callback which is used in case of an exception during + * write of the content + * + */ + public WriteContentErrorCallback getWriteContentErrorCallback() { + return writeContentErrorCallback; + } + /** Initializes the options builder. */ public static Builder with() { return new Builder(); @@ -113,6 +127,18 @@ public class EntityCollectionSerializerOptions { return this; } + /** + * Set the callback which is used in case of an exception during + * write of the content. + * + * @param writeContentErrorCallback the callback + * @return the builder + */ + public Builder writeContentErrorCallback(WriteContentErrorCallback writeContentErrorCallback) { + options.writeContentErrorCallback = writeContentErrorCallback; + return this; + } + /** Builds the OData serializer options. */ public EntityCollectionSerializerOptions build() { return options; http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerResult.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerResult.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerResult.java index c3206d6..85c625d 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerResult.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerResult.java @@ -18,11 +18,7 @@ */ package org.apache.olingo.server.api.serializer; -import org.apache.olingo.server.api.ODataContent; - import java.io.InputStream; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; /** * Result type for {@link ODataSerializer} methods @@ -33,6 +29,4 @@ public interface SerializerResult { * @return serialized content */ InputStream getContent(); - - ODataContent getODataContent(); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerStreamResult.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerStreamResult.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerStreamResult.java index c0dbafa..c19c270 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerStreamResult.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerStreamResult.java @@ -22,6 +22,7 @@ import org.apache.olingo.server.api.ODataContent; /** * Result type for {@link ODataSerializer} methods + * which supports stream/write in the future */ public interface SerializerStreamResult { /** http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataBasicContent.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataBasicContent.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataBasicContent.java deleted file mode 100644 index 03328f4..0000000 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataBasicContent.java +++ /dev/null @@ -1,59 +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.server.core; - -import org.apache.olingo.server.api.ODataContent; -import org.apache.olingo.server.api.WriteContentErrorCallback; - -import java.io.InputStream; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; - -public class ODataBasicContent implements ODataContent { - private final ReadableByteChannel channel; - - public ODataBasicContent(ReadableByteChannel channel) { - this.channel = channel; - } - - public ODataBasicContent(InputStream stream) { - this(Channels.newChannel(stream)); - } - - @Override - public ReadableByteChannel getChannel() { - return channel; - } - - @Override - public void write(WritableByteChannel channel) { - - } - - @Override - public void write(WritableByteChannel channel, WriteContentErrorCallback callback) { - - } - - @Override - public boolean isWriteSupported() { - return false; - } -} http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java index dfd4a75..1e8947a 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java @@ -161,11 +161,7 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler { static void writeContent(final ODataResponse odataResponse, final HttpServletResponse servletResponse) { try { ODataContent res = odataResponse.getODataContent(); - if(res.isWriteSupported()) { - res.write(Channels.newChannel(servletResponse.getOutputStream())); - } else { - copyContent(res.getChannel(), servletResponse); - } + res.write(Channels.newChannel(servletResponse.getOutputStream())); } catch (IOException e) { throw new ODataRuntimeException("Error on reading request content", e); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataWritableContent.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataWritableContent.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataWritableContent.java index fc45639..ba7025c 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataWritableContent.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataWritableContent.java @@ -18,15 +18,20 @@ */ package org.apache.olingo.server.core; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.nio.charset.Charset; + import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.EntityIterator; import org.apache.olingo.commons.api.edm.EdmEntityType; import org.apache.olingo.commons.api.ex.ODataRuntimeException; import org.apache.olingo.server.api.ODataContent; import org.apache.olingo.server.api.ServiceMetadata; -import org.apache.olingo.server.api.WriteContentErrorCallback; import org.apache.olingo.server.api.serializer.EntitySerializerOptions; import org.apache.olingo.server.api.serializer.SerializerException; import org.apache.olingo.server.api.serializer.SerializerStreamResult; @@ -34,13 +39,8 @@ import org.apache.olingo.server.core.serializer.SerializerStreamResultImpl; import org.apache.olingo.server.core.serializer.json.ODataJsonSerializer; import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; -import java.nio.charset.Charset; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; public class ODataWritableContent implements ODataContent { private StreamChannel channel; @@ -184,17 +184,10 @@ public class ODataWritableContent implements ODataContent { } } -// @Override -// public InputStream getContent() { -// return Channels.newInputStream(this.channel); -// } - - @Override public ReadableByteChannel getChannel() { return this.channel; } - @Override public boolean isWriteSupported() { return true; } @@ -212,9 +205,8 @@ public class ODataWritableContent implements ODataContent { } @Override - public void write(WritableByteChannel channel, WriteContentErrorCallback callback) { - // TODO: implement error handling - throw new ODataRuntimeException("error handling not yet supported"); + public void write(OutputStream stream) { + write(Channels.newChannel(stream)); } private ODataWritableContent(StreamChannel channel) { http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/SerializerResultImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/SerializerResultImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/SerializerResultImpl.java index 8c69f18..7c7de2f 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/SerializerResultImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/SerializerResultImpl.java @@ -18,34 +18,19 @@ */ package org.apache.olingo.server.core.serializer; +import java.io.InputStream; + import org.apache.olingo.server.api.ODataContent; import org.apache.olingo.server.api.serializer.SerializerResult; -import org.apache.olingo.server.api.serializer.SerializerStreamResult; -import org.apache.olingo.server.core.ODataBasicContent; -import org.apache.olingo.server.core.serializer.utils.ResultHelper; - -import java.io.InputStream; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.WritableByteChannel; public class SerializerResultImpl implements SerializerResult { private InputStream content; - private ODataContent oDataContent; @Override public InputStream getContent() { return content; } - @Override - public ODataContent getODataContent() { - if(oDataContent == null && content != null) { - return new ODataBasicContent(content); - } - return oDataContent; - } - // @Override // public ReadableByteChannel getChannel() { // return Channels.newChannel(getContent()); @@ -73,11 +58,6 @@ public class SerializerResultImpl implements SerializerResult { return this; } - public SerializerResultBuilder content(final ODataContent input) { - result.oDataContent = input; - return this; - } - public SerializerResult build() { return result; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5174f708/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java ---------------------------------------------------------------------- diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java index 9241860..1afc288 100644 --- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java +++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java @@ -18,6 +18,11 @@ */ package org.apache.olingo.server.tecsvc.processor; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -44,6 +49,7 @@ import org.apache.olingo.server.api.ODataLibraryException; import org.apache.olingo.server.api.ODataRequest; import org.apache.olingo.server.api.ODataResponse; import org.apache.olingo.server.api.ServiceMetadata; +import org.apache.olingo.server.api.WriteContentErrorCallback; import org.apache.olingo.server.api.deserializer.DeserializerResult; import org.apache.olingo.server.api.deserializer.ODataDeserializer; import org.apache.olingo.server.api.prefer.Preferences.Return; @@ -531,7 +537,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor if(isReference) { final SerializerResult serializerResult = serializeReferenceCollection(entitySetSerialization, edmEntitySet, requestedContentType, countOption); - response.setODataContent(serializerResult.getODataContent()); + response.setContent(serializerResult.getContent()); } else { final SerializerStreamResult serializerResult = serializeEntityStreamCollectionFixed(request, @@ -540,6 +546,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor response.setODataContent(serializerResult.getODataContent()); } + // response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());
