dataSource.createData(entitySet, data); dataSource.writeBinaryData(entitySet, data, new BinaryData(EntityProvider.readBinary(content), requestContentType));
if (type.getKind() == EdmTypeKind.SIMPLE) { value = type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance() ? ((BinaryData) data).getData() : data; } else if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) { List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
dataSource.createData(entitySet, data); dataSource.writeBinaryData(entitySet, data, new BinaryData(EntityProvider.readBinary(content), requestContentType));
dataSource.createData(entitySet, data); dataSource.writeBinaryData(entitySet, data, new BinaryData(EntityProvider.readBinary(content), requestContentType));
if (type.getKind() == EdmTypeKind.SIMPLE) { value = type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance() ? ((BinaryData) data).getData() : data; } else if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) { List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
if (type.getKind() == EdmTypeKind.SIMPLE) { value = type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance() ? ((BinaryData) data).getData() : data; } else if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) { List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();
@Override public ODataResponse readEntityMedia(final GetMediaResourceUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); final BinaryData binaryData = dataSource.readBinaryData(entitySet, data); if (binaryData == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final String mimeType = binaryData.getMimeType() == null ? HttpContentType.APPLICATION_OCTET_STREAM : binaryData.getMimeType(); return ODataResponse.fromResponse(EntityProvider.writeBinary(mimeType, binaryData.getData())).eTag( constructETag(entitySet, data)).build(); }
@Override public ODataResponse readEntityMedia(final GetMediaResourceUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); final BinaryData binaryData = dataSource.readBinaryData(entitySet, data); if (binaryData == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final String mimeType = binaryData.getMimeType() == null ? HttpContentType.APPLICATION_OCTET_STREAM : binaryData.getMimeType(); return ODataResponse.fromResponse(EntityProvider.writeBinary(mimeType, binaryData.getData())).eTag( constructETag(entitySet, data)).build(); }
@Override public void writeBinaryData(final EdmEntitySet entitySet, final Object mediaEntityInstance, final BinaryData binaryData) throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException { try { DataStore<Object> dataStore = getDataStore(entitySet); Object readEntry = dataStore.read(mediaEntityInstance); if (readEntry == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } else { ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceContent.class, binaryData.getData()); ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceMimeType.class, binaryData.getMimeType()); } } catch (ODataAnnotationException e) { throw new AnnotationRuntimeException("Invalid media resource annotation at entity set '" + entitySet.getName() + "' with message '" + e.getMessage() + "'.", e); } }
@Override public void writeBinaryData(final EdmEntitySet entitySet, final Object mediaEntityInstance, final BinaryData binaryData) throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException { try { DataStore<Object> dataStore = getDataStore(entitySet); Object readEntry = dataStore.read(mediaEntityInstance); if (readEntry == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } else { ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceContent.class, binaryData.getData()); ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceMimeType.class, binaryData.getMimeType()); } } catch (ODataAnnotationException e) { throw new AnnotationRuntimeException("Invalid media resource annotation at entity set '" + entitySet.getName() + "' with message '" + e.getMessage() + "'.", e); } }
@Override public ODataResponse readEntityMedia(final GetMediaResourceUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); final BinaryData binaryData = dataSource.readBinaryData(entitySet, data); if (binaryData == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final String mimeType = binaryData.getMimeType() == null ? HttpContentType.APPLICATION_OCTET_STREAM : binaryData.getMimeType(); return ODataResponse.fromResponse(EntityProvider.writeBinary(mimeType, binaryData.getData())).eTag( constructETag(entitySet, data)).build(); }
@Override public ODataResponse updateEntityMedia(final PutMergePatchUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } ODataContext context = getContext(); final int timingHandle = context.startRuntimeMeasurement("EntityProvider", "readBinary"); final byte[] value = EntityProvider.readBinary(content); context.stopRuntimeMeasurement(timingHandle); final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); dataSource.writeBinaryData(entitySet, data, new BinaryData(value, requestContentType)); return ODataResponse.newBuilder().eTag(constructETag(entitySet, data)).build(); }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }
@Override public ODataResponse updateEntityMedia(final PutMergePatchUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } ODataContext context = getContext(); final int timingHandle = context.startRuntimeMeasurement("EntityProvider", "readBinary"); final byte[] value = EntityProvider.readBinary(content); context.stopRuntimeMeasurement(timingHandle); final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); dataSource.writeBinaryData(entitySet, data, new BinaryData(value, requestContentType)); return ODataResponse.newBuilder().eTag(constructETag(entitySet, data)).build(); }
@Override public ODataResponse updateEntityMedia(final PutMergePatchUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } ODataContext context = getContext(); final int timingHandle = context.startRuntimeMeasurement("EntityProvider", "readBinary"); final byte[] value = EntityProvider.readBinary(content); context.stopRuntimeMeasurement(timingHandle); final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); dataSource.writeBinaryData(entitySet, data, new BinaryData(value, requestContentType)); return ODataResponse.newBuilder().eTag(constructETag(entitySet, data)).build(); }
@Override public void writeBinaryData(final EdmEntitySet entitySet, final Object mediaEntityInstance, final BinaryData binaryData) throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException { try { DataStore<Object> dataStore = getDataStore(entitySet); Object readEntry = dataStore.read(mediaEntityInstance); if (readEntry == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } else { ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceContent.class, binaryData.getData()); ANNOTATION_HELPER.setValueForAnnotatedField( mediaEntityInstance, EdmMediaResourceMimeType.class, binaryData.getMimeType()); } } catch (ODataAnnotationException e) { throw new ODataRuntimeException("Invalid media resource annotation at entity set '" + entitySet.getName() + "' with message '" + e.getMessage() + "'.", e); } }
@Override public BinaryData readBinaryData(final EdmEntitySet entitySet, final Object mediaLinkEntryData) throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException { Object data = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceContent.class); Object mimeType = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceMimeType.class); if (data == null && mimeType == null) { DataStore<Object> dataStore = getDataStore(entitySet); Object readEntry = dataStore.read(mediaLinkEntryData); if (readEntry != null) { data = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceContent.class); mimeType = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceMimeType.class); } } return new BinaryData((byte[]) data, String.valueOf(mimeType)); }
@Override public BinaryData readBinaryData(final EdmEntitySet entitySet, final Object mediaLinkEntryData) throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException { Object data = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceContent.class); Object mimeType = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceMimeType.class); if (data == null && mimeType == null) { DataStore<Object> dataStore = getDataStore(entitySet); Object readEntry = dataStore.read(mediaLinkEntryData); if (readEntry != null) { data = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceContent.class); mimeType = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceMimeType.class); } } return new BinaryData((byte[]) data, String.valueOf(mimeType)); }