@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(); }
@Override public IDataProviderResponse updateEntitySimplePropertyValue(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, ODataContext context) throws ODataException { PutMergePatchUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("updateEntitySimplePropertyValue"), context.getAcceptableLanguages().get(0)); } else { return provider.updateEntitySimplePropertyValue(resolvedUriInfo, content, requestContentType, context); } }
@Override public ODataResponse updateEntity(final PutMergePatchUriInfo uriParserResultView, final InputStream content, final String requestContentType, final boolean merge, final String contentType) throws ODataException { ODataResponse oDataResponse = null; try { oDataJPAContext.setODataContext(getContext()); EdmType type = null; if (!(uriParserResultView.getTargetType() instanceof EdmEntityType)) { type = uriParserResultView.getTargetType(); ((UriInfoImpl) uriParserResultView).setTargetType(uriParserResultView.getTargetEntitySet().getEntityType()); } Object jpaEntity = jpaProcessor.process(uriParserResultView, content, requestContentType); if (type != null) { ((UriInfoImpl) uriParserResultView).setTargetType(type); } oDataResponse = responseBuilder.build(uriParserResultView, jpaEntity, contentType); } finally { close(); } return oDataResponse; }
@Override public IDataProviderResponse updateEntity(PutMergePatchUriInfo uriInfo, ODataEntry content,String requestContentType, boolean merge, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); try{ if (dataProvider !=null){ return dataProvider.updateEntity(uriInfo, content, requestContentType, merge, context); } else return null; } catch (ODataException e) { logger.error("Error in updateEntity",e); throw new ODataException(e.getMessage(),e); } }
this.gwlog.debug("updateEntityMedia: " + TraceUtil.getEntitySetLog(uriInfo.getStartEntitySet()) + ", content type = " + (contentType == null ? "<null>" : contentType)); EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); ODataContext context = getContext(); Map<String, Object> sapStatMap = null;
case "UPDATE_ENTITY": IUpdateEntityParameter updateParameter = (IUpdateEntityParameter) parameter; em = new EntityMetadataV2(updateParameter.getUriInfo().getTargetEntitySet()); List<KeyPredicate> kplist = updateParameter.getUriInfo().getKeyPredicates(); return getUpdateRequestFromODataRequest(context, kplist, getEntityData(updateParameter.getContent(), em, null), new EntityMetadataV2(updateParameter.getUriInfo().getTargetEntitySet()), updateParameter.getMerge()); case "DELETE_ENTITY":
timings = new SAPStatistics(); BaseDataProviderResponse response = new BaseDataProviderResponse(); EdmEntitySet entitySet = uriInfo.getStartEntitySet(); EntityMetadata entityMetadata = new EntityMetadataV2(entitySet); Map<String, Object> keys = getKeys(uriInfo.getKeyPredicates());
@Override public IDataProviderResponse updateEntity(PutMergePatchUriInfo uriInfo, ODataEntry content, String requestContentType, boolean merge, ODataContext context) throws ODataException { String entitySetName = uriInfo.getStartEntitySet().getName(); try{ GetEntityUriInfo uInfo = (GetEntityUriInfo) uriInfo; checkAuthorization(uInfo,WRITE); } catch(UnauthorizedException ue){ logger.error("Update operation on this entity not allowed for this user"); return handleAuthorizationException(ue); } List<PathSegment> precedingSegments = context.getPathInfo().getPrecedingSegments(); String serviceName = precedingSegments.get(precedingSegments.size() - 1).getPath(); if(CSNUtil.isDraftEnabledEntity(entitySetName,serviceName)|| CSNUtil.isDraftNodeEntity(entitySetName, serviceName)) { return autoSaveMergeEntityForDraft(uriInfo, content, requestContentType, merge, context); }else{ return updateEntityNonDraftFlow(uriInfo, content, requestContentType, merge, context); } }
@Override public IDataProviderResponse updateEntitySimpleProperty(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, ODataContext context) throws ODataException { PutMergePatchUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("updateEntitySimpleProperty"), context.getAcceptableLanguages().get(0)); } else { return provider.updateEntitySimpleProperty(resolvedUriInfo, content, requestContentType, context); } }
@Override public IDataProviderResponse updateEntityMedia(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace() + "." + uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); try { if (dataProvider != null) { return dataProvider.updateEntityMedia(uriInfo, content, requestContentType, context); } else return null; } catch (ODataException e) { logger.error("Error in updateEntityMedia", e); throw new ODataException(e.getMessage(), e); } }
this.gwlog.debug("updateEntity: " + TraceUtil.getEntitySetLog(uriInfo.getStartEntitySet()) + ", content type = " + (contentType == null ? "<null>" : contentType)+ "backendVersion = " + bepVersion.get(BEP_SP_VERSION)); EdmEntitySet entitySet = uriInfo.getTargetEntitySet();
else extensionMethod = extensionMethodForTransaction; String entitySetName = uriInfo.getStartEntitySet().getName(); List<PathSegment> precedingSegments = context.getPathInfo().getPrecedingSegments(); String serviceName = precedingSegments.get(precedingSegments.size() - 1).getPath();
@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(); }
@Override public IDataProviderResponse updateEntityMedia(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, ODataContext context) throws ODataException { PutMergePatchUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("updateEntityMedia"), context.getAcceptableLanguages().get(0)); } else { return provider.updateEntityMedia(resolvedUriInfo, content, requestContentType, context); } }
public Query build(PutMergePatchUriInfo uriInfo) throws ODataJPARuntimeException { Query query = null; try { if (uriInfo.getTargetEntitySet().getEntityType().getMapping() != null) { if (!((JPAEdmMappingImpl)uriInfo.getTargetEntitySet().getEntityType().getMapping()).canEdit()) { throw new RuntimeException("Entity is Read Only"); } } ODataJPAQueryExtensionEntityListener listener = getODataJPAQueryEntityListener((UriInfo) uriInfo); if (listener != null && !ignoreListener) { query = listener.getQuery(uriInfo, em); } if (query == null) { query = buildQuery((UriInfo) uriInfo, UriInfoType.PutMergePatch); } } catch (Exception e) { throw new RuntimeException(e); } return query; }
@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(); }
@Override public IDataProviderResponse updateEntityLink(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, ODataContext context) throws ODataException { PutMergePatchUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("updateEntityLink"), context.getAcceptableLanguages().get(0)); } else { return provider.updateEntityLink(resolvedUriInfo, content, requestContentType, context); } }
private void updateEtagResponseHeader(PutMergePatchUriInfo uriInfo, IDataProviderResponse dataProviderResponse, String contentType) { try { ODataResponse writeEntry = EntityProvider.writeEntry(contentType, uriInfo.getTargetEntitySet(), dataProviderResponse.getResultEntity(), getEntityProviderWriteProperties((UriInfo) uriInfo, dataProviderResponse)); if(writeEntry.getHeader(ETAG)!=null){ etagHeader = writeEntry.getHeader(ETAG); String etagKey = getEtagKey((UriInfo)uriInfo, null); EtagUtils.setEtagMap(etagKey, etagHeader); } } catch (ODataException e) { etagHeader=null; } }
@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 IDataProviderResponse updateEntityComplexProperty(PutMergePatchUriInfo uriInfo, InputStream content, String requestContentType, boolean merge, ODataContext context) throws ODataException { PutMergePatchUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("updateEntityComplexProperty"), context.getAcceptableLanguages().get(0)); } else { return provider.updateEntityComplexProperty(resolvedUriInfo, content, requestContentType, merge, context); } }