[OLINGO-832] Removed actual not supported/wanted methods

This commit is contained in:
Michael Bolz 2016-02-10 06:29:38 +01:00
parent dc2c972c46
commit 5174f70897
11 changed files with 119 additions and 129 deletions

View File

@ -18,6 +18,7 @@
*/ */
package org.apache.olingo.commons.api.data; package org.apache.olingo.commons.api.data;
import org.apache.olingo.commons.api.ex.ODataNotSupportedException;
import org.apache.olingo.commons.api.ex.ODataRuntimeException; import org.apache.olingo.commons.api.ex.ODataRuntimeException;
import sun.reflect.generics.reflectiveObjects.NotImplementedException; import sun.reflect.generics.reflectiveObjects.NotImplementedException;
@ -35,7 +36,7 @@ public abstract class EntityIterator extends AbstractEntityCollection implements
@Override @Override
public void remove() { public void remove() {
//"Remove is not supported for iteration over Entities." //"Remove is not supported for iteration over Entities."
throw new NotImplementedException(); throw new ODataNotSupportedException("Entity Iterator does not support remove()");
} }
@Override @Override
@ -44,15 +45,14 @@ public abstract class EntityIterator extends AbstractEntityCollection implements
} }
public Integer getCount() { public Integer getCount() {
throw new ODataRuntimeException("getCount() not supported for " + getClass().getSimpleName()); throw new ODataNotSupportedException("Entity Iterator does not support getCount()");
} }
public URI getNext() { public URI getNext() {
throw new ODataRuntimeException("getNext() not supported for " + getClass().getSimpleName()); throw new ODataNotSupportedException("Entity Iterator does not support getNext()");
} }
public URI getDeltaLink() { public URI getDeltaLink() {
throw new ODataRuntimeException("getDeltaLink() not supported for " + getClass().getSimpleName()); throw new ODataNotSupportedException("Entity Iterator does not support getDeltaLink()");
} }
} }

View File

@ -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);
}
}

View File

@ -18,15 +18,12 @@
*/ */
package org.apache.olingo.server.api; package org.apache.olingo.server.api;
import java.io.OutputStream;
import java.nio.channels.ReadableByteChannel; import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel; import java.nio.channels.WritableByteChannel;
public interface ODataContent { public interface ODataContent {
ReadableByteChannel getChannel();
void write(WritableByteChannel channel); void write(WritableByteChannel channel);
void write(WritableByteChannel channel, WriteContentErrorCallback callback); void write(OutputStream stream);
boolean isWriteSupported();
} }

View File

@ -19,6 +19,7 @@
package org.apache.olingo.server.api.serializer; package org.apache.olingo.server.api.serializer;
import org.apache.olingo.commons.api.data.ContextURL; 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.CountOption;
import org.apache.olingo.server.api.uri.queryoption.ExpandOption; import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
import org.apache.olingo.server.api.uri.queryoption.SelectOption; import org.apache.olingo.server.api.uri.queryoption.SelectOption;
@ -32,6 +33,7 @@ public class EntityCollectionSerializerOptions {
private SelectOption select; private SelectOption select;
private boolean writeOnlyReferences; private boolean writeOnlyReferences;
private String id; private String id;
private WriteContentErrorCallback writeContentErrorCallback;
/** Gets the {@link ContextURL}. */ /** Gets the {@link ContextURL}. */
public ContextURL getContextURL() { public ContextURL getContextURL() {
@ -63,6 +65,18 @@ public class EntityCollectionSerializerOptions {
return id; 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. */ /** Initializes the options builder. */
public static Builder with() { public static Builder with() {
return new Builder(); return new Builder();
@ -113,6 +127,18 @@ public class EntityCollectionSerializerOptions {
return this; 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. */ /** Builds the OData serializer options. */
public EntityCollectionSerializerOptions build() { public EntityCollectionSerializerOptions build() {
return options; return options;

View File

@ -18,11 +18,7 @@
*/ */
package org.apache.olingo.server.api.serializer; package org.apache.olingo.server.api.serializer;
import org.apache.olingo.server.api.ODataContent;
import java.io.InputStream; import java.io.InputStream;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
/** /**
* Result type for {@link ODataSerializer} methods * Result type for {@link ODataSerializer} methods
@ -33,6 +29,4 @@ public interface SerializerResult {
* @return serialized content * @return serialized content
*/ */
InputStream getContent(); InputStream getContent();
ODataContent getODataContent();
} }

View File

@ -22,6 +22,7 @@ import org.apache.olingo.server.api.ODataContent;
/** /**
* Result type for {@link ODataSerializer} methods * Result type for {@link ODataSerializer} methods
* which supports stream/write in the future
*/ */
public interface SerializerStreamResult { public interface SerializerStreamResult {
/** /**

View File

@ -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;
}
}

View File

@ -161,11 +161,7 @@ public class ODataHttpHandlerImpl implements ODataHttpHandler {
static void writeContent(final ODataResponse odataResponse, final HttpServletResponse servletResponse) { static void writeContent(final ODataResponse odataResponse, final HttpServletResponse servletResponse) {
try { try {
ODataContent res = odataResponse.getODataContent(); ODataContent res = odataResponse.getODataContent();
if(res.isWriteSupported()) {
res.write(Channels.newChannel(servletResponse.getOutputStream())); res.write(Channels.newChannel(servletResponse.getOutputStream()));
} else {
copyContent(res.getChannel(), servletResponse);
}
} catch (IOException e) { } catch (IOException e) {
throw new ODataRuntimeException("Error on reading request content", e); throw new ODataRuntimeException("Error on reading request content", e);
} }

View File

@ -18,22 +18,6 @@
*/ */
package org.apache.olingo.server.core; package org.apache.olingo.server.core;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
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;
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.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -42,6 +26,22 @@ import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel; import java.nio.channels.WritableByteChannel;
import java.nio.charset.Charset; 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.serializer.EntitySerializerOptions;
import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.api.serializer.SerializerStreamResult;
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 com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
public class ODataWritableContent implements ODataContent { public class ODataWritableContent implements ODataContent {
private StreamChannel channel; 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() { public ReadableByteChannel getChannel() {
return this.channel; return this.channel;
} }
@Override
public boolean isWriteSupported() { public boolean isWriteSupported() {
return true; return true;
} }
@ -212,9 +205,8 @@ public class ODataWritableContent implements ODataContent {
} }
@Override @Override
public void write(WritableByteChannel channel, WriteContentErrorCallback callback) { public void write(OutputStream stream) {
// TODO: implement error handling write(Channels.newChannel(stream));
throw new ODataRuntimeException("error handling not yet supported");
} }
private ODataWritableContent(StreamChannel channel) { private ODataWritableContent(StreamChannel channel) {

View File

@ -18,34 +18,19 @@
*/ */
package org.apache.olingo.server.core.serializer; package org.apache.olingo.server.core.serializer;
import java.io.InputStream;
import org.apache.olingo.server.api.ODataContent; import org.apache.olingo.server.api.ODataContent;
import org.apache.olingo.server.api.serializer.SerializerResult; 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 { public class SerializerResultImpl implements SerializerResult {
private InputStream content; private InputStream content;
private ODataContent oDataContent;
@Override @Override
public InputStream getContent() { public InputStream getContent() {
return content; return content;
} }
@Override
public ODataContent getODataContent() {
if(oDataContent == null && content != null) {
return new ODataBasicContent(content);
}
return oDataContent;
}
// @Override // @Override
// public ReadableByteChannel getChannel() { // public ReadableByteChannel getChannel() {
// return Channels.newChannel(getContent()); // return Channels.newChannel(getContent());
@ -73,11 +58,6 @@ public class SerializerResultImpl implements SerializerResult {
return this; return this;
} }
public SerializerResultBuilder content(final ODataContent input) {
result.oDataContent = input;
return this;
}
public SerializerResult build() { public SerializerResult build() {
return result; return result;
} }

View File

@ -18,6 +18,11 @@
*/ */
package org.apache.olingo.server.tecsvc.processor; 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.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale; 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.ODataRequest;
import org.apache.olingo.server.api.ODataResponse; import org.apache.olingo.server.api.ODataResponse;
import org.apache.olingo.server.api.ServiceMetadata; 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.DeserializerResult;
import org.apache.olingo.server.api.deserializer.ODataDeserializer; import org.apache.olingo.server.api.deserializer.ODataDeserializer;
import org.apache.olingo.server.api.prefer.Preferences.Return; import org.apache.olingo.server.api.prefer.Preferences.Return;
@ -531,7 +537,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
if(isReference) { if(isReference) {
final SerializerResult serializerResult = final SerializerResult serializerResult =
serializeReferenceCollection(entitySetSerialization, edmEntitySet, requestedContentType, countOption); serializeReferenceCollection(entitySetSerialization, edmEntitySet, requestedContentType, countOption);
response.setODataContent(serializerResult.getODataContent()); response.setContent(serializerResult.getContent());
} else { } else {
final SerializerStreamResult serializerResult = final SerializerStreamResult serializerResult =
serializeEntityStreamCollectionFixed(request, serializeEntityStreamCollectionFixed(request,
@ -540,6 +546,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
response.setODataContent(serializerResult.getODataContent()); response.setODataContent(serializerResult.getODataContent());
} }
// //
response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setStatusCode(HttpStatusCode.OK.getStatusCode());
response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString()); response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());