/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.tuple;
import org.hibernate.property.access.spi.Getter;
A tuplizer defines the contract for things which know how to manage a particular representation of a piece of data, given that representation's EntityMode
(the entity-mode essentially defining which representation).
If that given piece of data is thought of as a data structure, then a tuplizer
is the thing which knows how to
- create such a data structure appropriately
- extract values from and inject values into such a data structure
For example, a given piece of data might be represented as a POJO class.
Here, it's representation and entity-mode is POJO. Well a tuplizer for POJO
entity-modes would know how to
- create the data structure by calling the POJO's constructor
- extract and inject values through getters/setter, or by direct field access, etc
That same piece of data might also be represented as a DOM structure, using the tuplizer associated with the DOM4J entity-mode, which would generate instances of Element
as the data structure and know how to access the values as either nested Element
s or as Attribute
s. Author: Steve Ebersole See Also:
/**
* A tuplizer defines the contract for things which know how to manage
* a particular representation of a piece of data, given that
* representation's {@link org.hibernate.EntityMode} (the entity-mode
* essentially defining which representation).
* </p>
* If that given piece of data is thought of as a data structure, then a tuplizer
* is the thing which knows how to<ul>
* <li>create such a data structure appropriately
* <li>extract values from and inject values into such a data structure
* </ul>
* </p>
* For example, a given piece of data might be represented as a POJO class.
* Here, it's representation and entity-mode is POJO. Well a tuplizer for POJO
* entity-modes would know how to<ul>
* <li>create the data structure by calling the POJO's constructor
* <li>extract and inject values through getters/setter, or by direct field access, etc
* </ul>
* </p>
* That same piece of data might also be represented as a DOM structure, using
* the tuplizer associated with the DOM4J entity-mode, which would generate instances
* of {@link org.dom4j.Element} as the data structure and know how to access the
* values as either nested {@link org.dom4j.Element}s or as {@link org.dom4j.Attribute}s.
*
* @see org.hibernate.tuple.entity.EntityTuplizer
* @see org.hibernate.tuple.component.ComponentTuplizer
*
* @author Steve Ebersole
*/
public interface Tuplizer {
Extract the current values contained on the given entity.
Params: - entity – The entity from which to extract values.
Returns: The current property values.
/**
* Extract the current values contained on the given entity.
*
* @param entity The entity from which to extract values.
* @return The current property values.
*/
public Object[] getPropertyValues(Object entity);
Inject the given values into the given entity.
Params: - entity – The entity.
- values – The values to be injected.
/**
* Inject the given values into the given entity.
*
* @param entity The entity.
* @param values The values to be injected.
*/
public void setPropertyValues(Object entity, Object[] values);
Extract the value of a particular property from the given entity.
Params: - entity – The entity from which to extract the property value.
- i – The index of the property for which to extract the value.
Returns: The current value of the given property on the given entity.
/**
* Extract the value of a particular property from the given entity.
*
* @param entity The entity from which to extract the property value.
* @param i The index of the property for which to extract the value.
* @return The current value of the given property on the given entity.
*/
public Object getPropertyValue(Object entity, int i);
Generate a new, empty entity.
Returns: The new, empty entity instance.
/**
* Generate a new, empty entity.
*
* @return The new, empty entity instance.
*/
public Object instantiate();
Is the given object considered an instance of the the entity (acconting
for entity-mode) managed by this tuplizer.
Params: - object – The object to be checked.
Returns: True if the object is considered as an instance of this entity
within the given mode.
/**
* Is the given object considered an instance of the the entity (acconting
* for entity-mode) managed by this tuplizer.
*
* @param object The object to be checked.
* @return True if the object is considered as an instance of this entity
* within the given mode.
*/
public boolean isInstance(Object object);
Return the pojo class managed by this tuplizer.
Need to determine how to best handle this for the Tuplizers for EntityModes
other than POJO.
todo : be really nice to not have this here since it is essentially pojo specific...
Returns: The persistent class.
/**
* Return the pojo class managed by this tuplizer.
* </p>
* Need to determine how to best handle this for the Tuplizers for EntityModes
* other than POJO.
* </p>
* todo : be really nice to not have this here since it is essentially pojo specific...
*
* @return The persistent class.
*/
public Class getMappedClass();
Retrieve the getter for the specified property.
Params: - i – The property index.
Returns: The property getter.
/**
* Retrieve the getter for the specified property.
*
* @param i The property index.
* @return The property getter.
*/
public Getter getGetter(int i);
}