blob: 7cb54d9f65be5d1bd6c65a333fdb81c0dd087cbe [file] [log] [blame]
/*******************************************************************************
* 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();
}