public EntityMetadataV2(EdmEntitySet entitySet) throws EdmException { this.entitySet = entitySet; entityType = entitySet.getEntityType(); name = entitySet.getName(); namespace = entityType.getNamespace(); }
private FullQualifiedName extractFQNameFromEntityType(final EdmEntityType entity) throws EntityProviderException, EdmException { return new FullQualifiedName(entity.getNamespace(), entity.getName()); }
private static String getEntitySetKey(EdmEntitySet set) throws EdmException { return set.getEntityType().getNamespace() + "~" + set.getEntityContainer().getName() + "~" + set.getName(); }
private boolean containsCrossServiceNavigationProperty(EdmEntityType type, ODataEntry content) throws EdmException { HashSet<String> crossServiceNavigationPropertyNames = MashServiceRegistry.getCrossServiceNavigationPropertyNames(_service, MashServiceRegistry.getEntityTypeKey(type.getNamespace(), type.getName())); if (crossServiceNavigationPropertyNames == null) { return false; } Map<String, Object> properties = content.getProperties(); for (String key : properties.keySet()) { if (crossServiceNavigationPropertyNames.contains(key)) { return true; } Object value = properties.get(key); if (value instanceof ODataEntry) { EdmType targetType = type.getProperty(key).getType(); if (targetType instanceof EdmEntityType) { if (containsCrossServiceNavigationProperty((EdmEntityType) targetType, (ODataEntry) value)) { return true; } } } } return false; }
@Override public IDataProviderResponse countEntityLinks(GetEntitySetLinksCountUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider !=null){ return dataProvider.countEntityLinks(uriInfo, context); } else return null; }
@Override public IDataProviderResponse readExpandedEntitySet(GetEntitySetUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider !=null){ return dataProvider.readExpandedEntitySet(uriInfo, context); } else return null; }
private String getFunctionFqn( EdmFunctionImport functionImport) throws EdmException { String functionFqn; if(functionImport.getEntitySet()!=null) //If the function import returns Collection of Entities, then only it has EntitySet specified in Edmx functionFqn = functionImport.getEntitySet().getEntityType().getNamespace()+"."+functionImport.getName(); else{ functionFqn = this.service.getServiceName()+"."+functionImport.getName(); } return functionFqn; }
@Override public IDataProviderResponse readExpandedEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider !=null){ return dataProvider.readExpandedEntity(uriInfo, context); } else return null; }
@Override public IDataProviderResponse readEntityMedia(GetMediaResourceUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace() + "." + uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider != null) { return dataProvider.readEntityMedia(uriInfo, context); } else return null; }
@Override public Map<String, Object> getTypeMapping(UriInfo uriInfo, EntityProviderReadProperties readProperties, EdmNavigationProperty navigationProperty)throws ODataException{ IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider !=null) { return dataProvider.getTypeMapping(uriInfo, readProperties, navigationProperty); } else return null; } }
@Override public IDataProviderResponse countEntitySet(GetEntitySetCountUriInfo uriInfo, 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.countEntitySet(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in countEntity",e); throw new ODataException(e.getMessage(),e); } }
@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); } }
@Override public IDataProviderResponse deleteEntity(DeleteUriInfo uriInfo, 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.deleteEntity(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in deleteEntity",e); throw new ODataException(e.getMessage(),e); } }
@Override public IDataProviderResponse deleteEntityMedia(DeleteUriInfo uriInfo, 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.deleteEntityMedia(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in deleteEntityMedia", e); throw new ODataException(e.getMessage(), e); } }
@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); } }
/** * read entity collection */ @Override public IDataProviderResponse readEntitySet(GetEntitySetUriInfo uriInfo, 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.readEntitySet(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in readEntitySet",e); throw new ODataException(e.getMessage(),e); } }
/** * read Entity */ @Override public IDataProviderResponse readEntity(GetEntityUriInfo uriInfo, 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.readEntity(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in readEntity",e); throw new ODataException(e.getMessage(),e); } }
@Override public IDataProviderResponse createEntity(PostUriInfo uriInfo, ODataEntry content, String requestContentType, ODataEntityProviderPropertiesBuilder providerPropertiesBuilder, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); try{ if (dataProvider !=null){ //Response Data Expected in Create scenario IDataProviderResponse createResponse = dataProvider.createEntity(uriInfo, content, requestContentType, providerPropertiesBuilder, context); if(createResponse.getException() == null){ if(createResponse.getResultEntity() == null || createResponse.getResultEntity() .isEmpty()) { logger.error("Error in CreateEntity : The response does not contain the created entity"); throw new ODataException("The response does not contain the created entity"); } } return createResponse; } else return null; } catch (ODataException e) { logger.error("Error in CreateEntity",e); throw new ODataException(e.getMessage(),e); } }
@Override public IDataProviderResponse createEntityMedia(PostUriInfo uriInfo, InputStream content, String requestContentType, String slugType, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace() + "." + uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); try { if (dataProvider != null) { // Response Data Expected in Create Media scenario IDataProviderResponse createMediaResponse = dataProvider.createEntityMedia(uriInfo, content, requestContentType, slugType, context); if ((createMediaResponse.getException() == null) && (createMediaResponse.getResultEntity() == null || createMediaResponse.getResultEntity().isEmpty() || createMediaResponse.getResultEntityMediaValue() == null)) { logger.error("Error in CreateEntityMedia : The response does not contain the created entity media"); throw new ODataException("The response does not contain the created entity media"); } return createMediaResponse; } else return null; } catch (ODataException e) { logger.error("Error in CreateEntityMedia", e); throw new ODataException(e.getMessage(), e); } }
@Override public DataSourceHandler getHandler() { try { if (getUriInfo().getFunctionImport() == null) return ((DataProvider) this.handler.getWrappedInstance()).getHandler(getODataRequest(), getUriInfo().getTargetEntitySet().getEntityType().getNamespace()); else { // since CHS handler requires namespace any entity namespave can // be returned. all the entity are part of same schema namespace return ((DataProvider) this.handler.getWrappedInstance()).getHandler(getODataRequest(), getUriInfo().getEntityContainer().getNamespace()); } } catch (EdmException e) { logger.error("Error getting the datasource handler", e); return null; } }