final EdmEntityType entityType = entitySet.getEntityType(); Object data = dataSource.newDataObject(entitySet); ExpandSelectTreeNode expandSelectTree = null; dataSource.createData(entitySet, data); dataSource.writeBinaryData(entitySet, data, new BinaryData(EntityProvider.readBinary(content), requestContentType)); dataSource.createData(entitySet, data); final EdmEntitySet previousEntitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); dataSource.writeRelation(previousEntitySet, sourceData, entitySet, getStructuralTypeValueMap(data, entityType));
@Override public ODataResponse deleteEntity(final DeleteUriInfo uriInfo, final String contentType) throws ODataException { dataSource.deleteData( uriInfo.getStartEntitySet(), mapKey(uriInfo.getKeyPredicates())); return ODataResponse.newBuilder().build(); }
@Override public ODataResponse updateEntityLink(final PutMergePatchUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); final List<NavigationSegment> previousSegments = navigationSegments.subList(0, navigationSegments.size() - 1); final Object sourceData = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), previousSegments); final EdmEntitySet entitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); final Map<String, Object> keys = mapKey(uriInfo.getTargetKeyPredicates()); final Object targetData = dataSource.readRelatedData(entitySet, sourceData, targetEntitySet, keys); if (!appliesFilter(targetData, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } dataSource.deleteRelation(entitySet, sourceData, targetEntitySet, keys); final Map<String, Object> newKeys = parseLink(targetEntitySet, content, requestContentType); dataSource.writeRelation(entitySet, sourceData, targetEntitySet, newKeys); return ODataResponse.newBuilder().build(); }
private Object retrieveData(final EdmEntitySet startEntitySet, final List<KeyPredicate> keyPredicates, final EdmFunctionImport functionImport, final Map<String, Object> functionImportParameters, final List<NavigationSegment> navigationSegments) throws ODataException { Object data; final Map<String, Object> keys = mapKey(keyPredicates); ODataContext context = getContext(); final int timingHandle = context.startRuntimeMeasurement(getClass().getSimpleName(), "retrieveData"); try { data = functionImport == null ? keys.isEmpty() ? dataSource.readData(startEntitySet) : dataSource.readData(startEntitySet, keys) : dataSource.readData(functionImport, functionImportParameters, keys); EdmEntitySet currentEntitySet = functionImport == null ? startEntitySet : functionImport.getEntitySet(); for (NavigationSegment navigationSegment : navigationSegments) { data = dataSource.readRelatedData( currentEntitySet, data, navigationSegment.getEntitySet(), mapKey(navigationSegment.getKeyPredicates())); currentEntitySet = navigationSegment.getEntitySet(); } } finally { context.stopRuntimeMeasurement(timingHandle); } return data; }
final Map<String, Object> key = parseLinkUri(relatedEntitySet, uriString); if (key != null) { dataSource.writeRelation(entitySet, data, relatedEntitySet, key); final List<ODataEntry> relatedValueList = feed.getEntries(); for (final ODataEntry relatedValues : relatedValueList) { Object relatedData = dataSource.newDataObject(relatedEntitySet); setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedValues.getProperties(), false); dataSource.createData(relatedEntitySet, relatedData); dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, relatedEntityType)); createInlinedEntities(relatedEntitySet, relatedData, relatedValues); Object relatedData = dataSource.newDataObject(relatedEntitySet); setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedValueEntry.getProperties(), false); dataSource.createData(relatedEntitySet, relatedData); dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, relatedEntityType)); createInlinedEntities(relatedEntitySet, relatedData, relatedValueEntry);
@Override public ODataResponse deleteEntityLink(final DeleteUriInfo uriInfo, final String contentType) throws ODataException { final List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); final List<NavigationSegment> previousSegments = navigationSegments.subList(0, navigationSegments.size() - 1); final Object sourceData = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), previousSegments); final EdmEntitySet entitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); final Map<String, Object> keys = mapKey(uriInfo.getTargetKeyPredicates()); final Object targetData = dataSource.readRelatedData(entitySet, sourceData, targetEntitySet, keys); if (targetData == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } dataSource.deleteRelation(entitySet, sourceData, targetEntitySet, keys); return ODataResponse.newBuilder().build(); }
@Override public ODataResponse deleteEntityMedia(final DeleteUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (data == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } dataSource.writeBinaryData(uriInfo.getTargetEntitySet(), data, new BinaryData(null, null)); return ODataResponse.newBuilder().build(); }
final EdmType type = functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()),
private Object readRelatedData(final WriteCallbackContext context) throws ODataException { final EdmEntitySet entitySet = context.getSourceEntitySet(); return dataSource.readRelatedData( entitySet, data instanceof List ? readEntryData((List<?>) data, entitySet.getEntityType(), context .extractKeyFromEntryData()) : data, entitySet.getRelatedEntitySet(context.getNavigationProperty()), Collections.<String, Object> emptyMap()); }
@Override public ODataResponse createEntityLink(final PostUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); final List<NavigationSegment> previousSegments = navigationSegments.subList(0, navigationSegments.size() - 1); final Object sourceData = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), previousSegments); final EdmEntitySet entitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); final Map<String, Object> targetKeys = parseLink(targetEntitySet, content, requestContentType); dataSource.writeRelation(entitySet, sourceData, targetEntitySet, targetKeys); return ODataResponse.newBuilder().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(); }
final Map<String, Object> key = parseLinkUri(relatedEntitySet, uriString); if (key != null) { dataSource.writeRelation(entitySet, data, relatedEntitySet, key); final List<ODataEntry> relatedValueList = feed.getEntries(); for (final ODataEntry relatedValues : relatedValueList) { Object relatedData = dataSource.newDataObject(relatedEntitySet); setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedValues.getProperties(), false); dataSource.createData(relatedEntitySet, relatedData); dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, relatedEntityType)); createInlinedEntities(relatedEntitySet, relatedData, relatedValues); final Map<String, Object> key = parseLinkUri(relatedEntitySet, relatedValueEntry.getMetadata().getUri()); if (key != null) { dataSource.writeRelation(entitySet, data, relatedEntitySet, key); Object relatedData = dataSource.newDataObject(relatedEntitySet); setStructuralTypeValuesFromMap(relatedData, relatedEntityType, relatedProperties, false); dataSource.createData(relatedEntitySet, relatedData); dataSource.writeRelation(entitySet, data, relatedEntitySet, getStructuralTypeValueMap(relatedData, relatedEntityType)); createInlinedEntities(relatedEntitySet, relatedData, relatedValueEntry);
@Override public ODataResponse deleteEntityLink(final DeleteUriInfo uriInfo, final String contentType) throws ODataException { final List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); final List<NavigationSegment> previousSegments = navigationSegments.subList(0, navigationSegments.size() - 1); final Object sourceData = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), previousSegments); final EdmEntitySet entitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); final Map<String, Object> keys = mapKey(uriInfo.getTargetKeyPredicates()); final Object targetData = dataSource.readRelatedData(entitySet, sourceData, targetEntitySet, keys); if (targetData == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } dataSource.deleteRelation(entitySet, sourceData, targetEntitySet, keys); return ODataResponse.newBuilder().build(); }
private Object retrieveData(final EdmEntitySet startEntitySet, final List<KeyPredicate> keyPredicates, final EdmFunctionImport functionImport, final Map<String, Object> functionImportParameters, final List<NavigationSegment> navigationSegments) throws ODataException { Object data; final Map<String, Object> keys = mapKey(keyPredicates); ODataContext context = getContext(); final int timingHandle = context.startRuntimeMeasurement(getClass().getSimpleName(), "retrieveData"); try { data = functionImport == null ? keys.isEmpty() ? dataSource.readData(startEntitySet) : dataSource.readData(startEntitySet, keys) : dataSource.readData(functionImport, functionImportParameters, keys); EdmEntitySet currentEntitySet = functionImport == null ? startEntitySet : functionImport.getEntitySet(); for (NavigationSegment navigationSegment : navigationSegments) { data = dataSource.readRelatedData( currentEntitySet, data, navigationSegment.getEntitySet(), mapKey(navigationSegment.getKeyPredicates())); currentEntitySet = navigationSegment.getEntitySet(); } } finally { context.stopRuntimeMeasurement(timingHandle); } return data; }
@Override public ODataResponse deleteEntityMedia(final DeleteUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (data == null) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } dataSource.writeBinaryData(uriInfo.getTargetEntitySet(), data, new BinaryData(null, null)); return ODataResponse.newBuilder().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(); }
private Object readRelatedData(final WriteCallbackContext context) throws ODataException { final EdmEntitySet entitySet = context.getSourceEntitySet(); return dataSource.readRelatedData( entitySet, data instanceof List ? readEntryData((List<?>) data, entitySet.getEntityType(), context .extractKeyFromEntryData()) : data, entitySet.getRelatedEntitySet(context.getNavigationProperty()), Collections.<String, Object> emptyMap()); }
@Override public ODataResponse createEntityLink(final PostUriInfo uriInfo, final InputStream content, final String requestContentType, final String contentType) throws ODataException { final List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); final List<NavigationSegment> previousSegments = navigationSegments.subList(0, navigationSegments.size() - 1); final Object sourceData = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), previousSegments); final EdmEntitySet entitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet(); final Map<String, Object> targetKeys = parseLink(targetEntitySet, content, requestContentType); dataSource.writeRelation(entitySet, sourceData, targetEntitySet, targetKeys); return ODataResponse.newBuilder().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(); }
final EdmEntityType entityType = entitySet.getEntityType(); Object data = dataSource.newDataObject(entitySet); ExpandSelectTreeNode expandSelectTree = null; dataSource.createData(entitySet, data); dataSource.writeBinaryData(entitySet, data, new BinaryData(EntityProvider.readBinary(content), requestContentType)); dataSource.createData(entitySet, data); final EdmEntitySet previousEntitySet = previousSegments.isEmpty() ? uriInfo.getStartEntitySet() : previousSegments.get(previousSegments.size() - 1).getEntitySet(); dataSource.writeRelation(previousEntitySet, sourceData, entitySet, getStructuralTypeValueMap(data, entityType));