/******************************************************************************* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. ******************************************************************************/ package org.apache.olingo.odata2.jpa.processor.api; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.apache.olingo.odata2.api.edm.provider.EdmProvider; import org.apache.olingo.odata2.api.processor.ODataContext; import org.apache.olingo.odata2.api.processor.ODataProcessor; import org.apache.olingo.odata2.jpa.processor.api.access.JPAPaging; import org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmExtension; /** * This class does the compilation of context objects required for OData JPA * Runtime. The context object should be properly initialized with values else * the behavior of processor and EDM provider can result in exception. * * Following are the mandatory parameter to be set into the context object * <ol> * <li>Persistence Unit Name</li> * <li>An instance of Java Persistence Entity Manager Factory</li> * </ol> * * <br> * @org.apache.olingo.odata2.DoNotImplement * @see org.apache.olingo.odata2.jpa.processor.api.factory.ODataJPAFactory * @see org.apache.olingo.odata2.jpa.processor.api.factory.ODataJPAAccessFactory * */ public interface ODataJPAContext { /** * The method gets the Java Persistence Unit Name set into the context. * * @return Java Persistence Unit Name */ public String getPersistenceUnitName(); /** * The method sets the Java Persistence Unit Name into the context. * * @param pUnitName * is the Java Persistence Unit Name. * */ public void setPersistenceUnitName(String pUnitName); /** * The method gets the OData Processor for JPA from the context. * * @return OData JPA Processor */ public ODataProcessor getODataProcessor(); /** * The method sets the OData Processor for JPA into the context. * * @param processor * is the specific implementation of {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPAProcessor} for * processing OData service requests. */ public void setODataProcessor(ODataProcessor processor); /** * The method gets the EDM provider for JPA from the context. * * @return EDM provider */ public EdmProvider getEdmProvider(); /** * The method sets EDM provider into the context * * @param edmProvider * is the specific implementation of {@link org.apache.olingo.odata2.api.edm.provider.EdmProvider} for * transforming Java persistence models to Entity Data Model * */ public void setEdmProvider(EdmProvider edmProvider); /** * The method gets the Java Persistence Entity Manager factory from the * context. <br> * <b>CAUTION:-</b> Don't use the Entity Manager Factory to instantiate * Entity Managers. Instead get reference to Entity Manager using * {@link org.apache.olingo.odata2.jpa.processor.api.ODataJPAContext#getEntityManager()} * * @return an instance of Java Persistence Entity Manager Factory */ public EntityManagerFactory getEntityManagerFactory(); /** * The method sets the Java Persistence Entity Manager factory into the * context. * * @param emf * is of type {@link javax.persistence.EntityManagerFactory} * */ public void setEntityManagerFactory(EntityManagerFactory emf); /** * The method gets OData Context into the context. * * @return OData Context */ public ODataContext getODataContext(); /** * The method sets OData context into the context. * * @param ctx * is an OData context of type {@link org.apache.olingo.odata2.api.processor.ODataContext} */ public void setODataContext(ODataContext ctx); /** * The method sets the JPA EDM mapping model name into the context. JPA EDM * mapping model is an XML document based on JPAEDMMappingModel.xsd * * @param name * is the name of JPA EDM mapping model */ public void setJPAEdmMappingModel(String name); /** * The method gets the JPA EDM mapping model name from the context. * * @return name of JPA EDM mapping model */ public String getJPAEdmMappingModel(); /** * The method sets the Entity Manager into the Context * @param em */ public void setEntityManager(EntityManager em); /** * The method returns an instance of type entity manager. The entity manager * thus returns a single persistence context for the current OData request. * Hence all entities that are accessed within JPA processor are managed by * single entity manager. * * @return an instance of type {@link javax.persistence.EntityManager} */ public EntityManager getEntityManager(); /** * The method sets the JPA Edm Extension instance into the context. There * can be at most only one extension for a context. Invoking the method * several times overwrites already set extension instance in the context. * * @param jpaEdmExtension * is an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.model.JPAEdmExtension} * */ public void setJPAEdmExtension(JPAEdmExtension jpaEdmExtension); /** * The method returns the JPA Edm Extension instance set into the context. * * @return an instance of type * {@link org.apache.olingo.odata2.jpa.processor.api.model.mapping.JPAEmbeddableTypeMapType} */ public JPAEdmExtension getJPAEdmExtension(); /** * The method sets into the context whether the library should consider default naming for * <ul><li>EdmProperty</li> * <li>EdmComplexProperty</li> * <li>EdmNavigationProperty</li></ul> * * @param defaultNaming is a boolean value that indicates if set to * <ul><li>true - default naming is considered in case no mapping is provided.</li> * <li>false - default naming is not considered in case no mapping is provided. The * name provided in JPA Entity Model is considered.</li> * </ul> */ public void setDefaultNaming(boolean defaultNaming); /** * The method returns whether the library should consider default naming for * <ul><li>EdmProperty</li> * <li>EdmComplexProperty</li> * <li>EdmNavigationProperty</li></ul> * * @return * <ul><li>true - default naming is considered in case no mapping is provided.</li> * <li>false - default naming is not considered in case no mapping is provided. The * name provided in JPA Entity Model is considered.</li> * </ul> */ public boolean getDefaultNaming(); /** * The method gets the server side page size to the context * @return the page size */ public int getPageSize(); /** * The method sets the server side page size to the context * @param size */ public void setPageSize(int size); /** * The method sets the server side paging object * @param paging an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.access.JPAPaging} */ public void setPaging(JPAPaging paging); /** * The method returns the server side paging object * @return an instance of type {@link org.apache.olingo.odata2.jpa.processor.api.access.JPAPaging} */ public JPAPaging getPaging(); /** * The method returns the ODataJPATransaction. * @return ODataJPATransaction */ public ODataJPATransaction getODataJPATransaction(); /** * Set the state whether the underlying entity manager is container managed (or not). * (Default is <code>false</code>) * * @param containerManaged <code>true</code> for container managed entity manager */ void setContainerManaged(boolean containerManaged); /** * The method returns <code>true</code> if the underlying entity manager is container managed. * (Default is <code>false</code>) * * @return <code>true</code> if the underlying entity manger is container manged. */ boolean isContainerManaged(); }