package com.sap.hana.cloud.samples.benefits.odata.cfg; import org.apache.olingo.odata2.api.ODataCallback; import org.apache.olingo.odata2.api.processor.ODataContext; import org.apache.olingo.odata2.api.processor.ODataErrorCallback; import org.apache.olingo.odata2.core.exception.ODataRuntimeException; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext; import org.apache.olingo.odata2.jpa.processor.api.ODataJPAServiceFactory; import org.apache.olingo.odata2.jpa.processor.api.exception.ODataJPARuntimeException; import com.sap.hana.cloud.samples.benefits.persistence.manager.EntityManagerFactoryProvider; public class BenefitsODataServiceFactory extends ODataJPAServiceFactory { private static final String PERSISTENCE_UNIT_NAME = "com.sap.hana.cloud.samples.benefits"; //$NON-NLS-1$ private static final ThreadLocal<ODataContext> ODATA_CONTEXT_THREAD_LOCAL = new ThreadLocal<>(); private static void setContextInThreadLocal(final ODataContext ctx) { ODATA_CONTEXT_THREAD_LOCAL.set(ctx); } public static void unsetContextInThreadLocal() { ODATA_CONTEXT_THREAD_LOCAL.remove(); } public static ODataContext getContextInThreadLocal() { return ODATA_CONTEXT_THREAD_LOCAL.get(); } @Override public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException { ODataJPAContext oDataJPAContext = this.getODataJPAContext(); try { oDataJPAContext.setEntityManagerFactory(EntityManagerFactoryProvider.getInstance().getEntityManagerFactory()); oDataJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME); oDataJPAContext.setJPAEdmExtension(new BenefitsJPAEdmExtension()); setContextInThreadLocal(oDataJPAContext.getODataContext()); return oDataJPAContext; } catch (Exception e) { throw new ODataRuntimeException("Cannot initialize OData JPA Context", e); //$NON-NLS-1$ } } @SuppressWarnings("unchecked") @Override public <T extends ODataCallback> T getCallback(final Class<? extends ODataCallback> callbackInterface) { setDetailErrors(true); if (callbackInterface.isAssignableFrom(ODataErrorCallback.class)) { return (T) new SimpleODataErrorCallback(); } return null; } }