package io.ebean.plugin;
import io.ebean.config.dbplatform.IdType;
import io.ebean.event.BeanFindController;
import io.ebean.event.BeanPersistController;
import io.ebean.event.BeanPersistListener;
import io.ebean.event.BeanQueryAdapter;
import io.ebeaninternal.api.SpiQuery;
import io.ebeanservice.docstore.api.mapping.DocumentMapping;
import java.util.Collection;
/**
* Information and methods on BeanDescriptors made available to plugins.
*/
public interface BeanType<T> {
/**
* Return the short name of the bean type.
*/
String getName();
/**
* Return the full name of the bean type.
*/
String getFullName();
/**
* Return the class type this BeanDescriptor describes.
*/
Class<T> getBeanType();
/**
* Return the type bean for an OneToMany or ManyToOne or ManyToMany property.
*/
BeanType<?> getBeanTypeAtPath(String propertyName);
/**
* Return all the properties for this bean type.
*/
Collection<? extends Property> allProperties();
/**
* Return the Id property.
*/
Property getIdProperty();
/**
* Return the when modified property if there is one defined.
*/
Property getWhenModifiedProperty();
/**
* Return the when created property if there is one defined.
*/
Property getWhenCreatedProperty();
/**
* Return the Property to read values from a bean.
*/
Property getProperty(String propertyName);
/**
* Return the ExpressionPath for a given property path.
* <p>
* This can return a property or nested property path.
* </p>
*/
ExpressionPath getExpressionPath(String path);
/**
* Return true if the property is a valid known property or path for the given bean type.
*/
boolean isValidExpression(String property);
/**
* Return true if bean caching is on for this bean type.
*/
boolean isBeanCaching();
/**
* Return true if query caching is on for this bean type.
*/
boolean isQueryCaching();
/**
* Clear the bean cache.
*/
void clearBeanCache();
/**
* Clear the query cache.
*/
void clearQueryCache();
/**
* Return true if the type is document store only.
*/
boolean isDocStoreOnly();
/**
* Return the base table this bean type maps to.
*/
String getBaseTable();
/**
* Create a new instance of the bean.
*/
T createBean();
/**
* Return the bean id. This is the same as getBeanId() but without the generic type.
*/
Object beanId(Object bean);
/**
* Return the id value for the given bean.
*/
Object getBeanId(T bean);
/**
* Set the id value to the bean.
*/
void setBeanId(T bean, Object idValue);
/**
* Return the bean persist controller.
*/
BeanPersistController getPersistController();
/**
* Return the bean persist listener.
*/
BeanPersistListener getPersistListener();
/**
* Return the beanFinder. Usually null unless overriding the finder.
*/
BeanFindController getFindController();
/**
* Return the BeanQueryAdapter or null if none is defined.
*/
BeanQueryAdapter getQueryAdapter();
/**
* Return the identity generation type.
*/
IdType getIdType();
/**
* Return the sequence name associated to this entity bean type (if there is one).
*/
String getSequenceName();
/**
* Return true if this bean type has doc store backing.
*/
boolean isDocStoreMapped();
/**
* Return the DocumentMapping for this bean type.
* <p>
* This is the document structure and mapping options for how this bean type is mapped
* for the document store.
* </p>
*/
DocumentMapping getDocMapping();
/**
* Return the doc store queueId for this bean type.
*/
String getDocStoreQueueId();
/**
* Return the doc store support for this bean type.\
*/
BeanDocType<T> docStore();
/**
* Add the discriminator value to the query if needed.
*/
void addInheritanceWhere(SpiQuery<?> query);
/**
* Return the root bean type for an inheritance hierarchy.
*/
BeanType<?> root();
/**
* Return true if this bean type has an inheritance hierarchy.
*/
boolean hasInheritance();
/**
* Return the discriminator column.
*/
String getDiscColumn();
/**
* Create a bean given the discriminator value.
*/
T createBeanUsingDisc(Object discValue);
}