public abstract class AbstractDomainObjectFactory<T>
extends java.lang.Object
implements java.io.Serializable
Modifier and Type | Field and Description |
---|---|
protected boolean |
append
control if load() append objects to objectList )
|
protected boolean |
createDefaultMetaData
Create and populate MetaData automatically
|
protected DataReader<T> |
dataReader
object to read data into objectList
|
protected DataWriter<T> |
dataWriter
This object generates data modification
|
protected boolean |
discardUnmodifiedObjects
Useful to send only modified objects to another tier
|
protected java.lang.Class<T> |
domainClass
Object to persist
|
protected long |
domainFactoryId
Used to determine if created/deleted/updated DomainObject belongs to this
factory
|
protected static java.lang.Object[] |
EMPTY_ARG
used as argument in method.invoke(obj, EMPTY_ARG)
|
protected boolean |
exceptionOnEmptyObjectList
If false suppress exception when call writeData on empty objectList
|
protected Instantiator<T> |
instantiator |
protected java.util.concurrent.atomic.AtomicInteger |
internalId
See AbstractDomainObject setInternalId()
|
protected boolean |
lazyLoading
If lazyLoding == true than set only original values vs.
|
protected java.beans.PropertyChangeListener[] |
listeners |
protected java.util.Map<java.lang.String,java.lang.String> |
mapping
Mapping of DB Table columns to object fields
|
protected MetaData<T> |
metaData |
protected java.util.List<DomainObject<T>> |
objectList
Collection of Objects (data)
|
protected java.util.Map<java.lang.Enum<?>,java.lang.Object> |
options
options to set to DataReader and DataWriter implementations
|
protected boolean |
readOnly
Disable data modifications
|
protected java.util.List<DomainObject<T>> |
removedObjects
Collection of Objects to delete from DB
|
protected boolean |
throwMissingFieldException
Throw Exception or ignore if DomainObject has less fields than mapping
|
protected boolean |
valid
Just a convenient member/method
|
Constructor and Description |
---|
AbstractDomainObjectFactory() |
Modifier and Type | Method and Description |
---|---|
void |
addObject(int index,
T domainObject) |
int |
addObject(T domainObject) |
void |
addPropertyChangeListeners(java.beans.PropertyChangeListener[] listeners) |
boolean |
afterCreate(int idx)
Override as needed
|
boolean |
afterRemove(int idx)
Override as needed
|
boolean |
afterStore(int idx)
Override as needed
|
boolean |
afterWriteData()
Override as needed
|
T |
attach(T instance)
MyPOJO pojo = new MyPOJO(); DomainObjectFactory factory...
|
T |
attach(T instance,
PersistentState state)
MyPOJO pojo = new MyPOJO(); DomainObjectFactory factory...
|
boolean |
beforeCreate(T domainObject)
Override as needed
|
boolean |
beforeRemove(T domainObject)
Override as needed
|
boolean |
beforeStore(T domainObjectx)
Override as needed
|
boolean |
beforeWriteData()
Override as needed
|
void |
clearData()
Clear: removedObjects, objectList
|
boolean |
create(T domainObject)
Will insert into db after writeData() and commit;
|
DataHolder |
createOriginalValues()
Create DataHolder from MetaData
|
T |
detach(T instance)
Returns unenhanced object and discarded it from objectList.
|
T |
detach(T instance,
boolean discard) |
java.util.List<T> |
detachAll() |
java.util.List<T> |
detachAll(boolean discard) |
boolean |
discard(T domainObject)
Will not delete from DB, just from objectList
|
java.util.List<T> |
filter(Predicate<T> p)
Returns filtered list of previously loaded objects
Override as needed
|
int |
findIdxByInternalId(int internalId) |
int |
findIdxByInternalId(int internalId,
boolean removed) |
T |
findObjectByInternalId(int internalId) |
T |
findObjectByInternalId(int internalId,
boolean removed) |
int |
getCreatedCount()
Getter for property createdCount.
|
DataReader<T> |
getDataReader()
Getter for property dataReader.
|
DataWriter<T> |
getDataWriter()
Getter for property dataWriter.
|
java.lang.Class<T> |
getDomainClass()
Getter for property domainClass.
|
java.util.Map<java.lang.String,java.lang.String> |
getMapping()
Getter for property mapping.
|
MetaData<T> |
getMetaData()
Getter for property metaData.
|
int |
getModifiedCount()
Getter for property modifiedCount.
|
protected int |
getNextInternalId() |
java.util.List<DomainObject<T>> |
getObjectList()
Getter for property objectList.
|
java.util.List<T> |
getObjects()
Return casted objectList
|
java.util.Map<java.lang.Enum<?>,java.lang.Object> |
getOptions() |
java.lang.Throwable |
getPersistenceError()
Returns error during writeData()
|
int |
getRemovedCount()
Getter for property removedCount.
|
java.util.List<DomainObject<T>> |
getRemovedObjects()
Getter for property removedObjects.
|
protected void |
init() |
boolean |
isAppend()
Getter for property append.
|
boolean |
isCreateDefaultMetaData() |
boolean |
isDiscardUnmodifiedObjects()
Getter for property discardUnmodifiedObjects.
|
boolean |
isExceptionOnEmptyObjectList() |
boolean |
isLazyLoading()
Getter for property lazyLoading.
|
boolean |
isReadOnly()
Getter for property readOnly.
|
boolean |
isThrowMissingFieldException() |
boolean |
isValid()
Override as needed
|
boolean |
load(T domainObject)
Populate DomainObject with values from originalValues
|
int |
load(Wrapper data)
Loaded factory with data
|
int |
load(Wrapper[] data)
Loaded factory with data from several sources
|
int |
load(Wrapper data,
int offset,
int limit) |
void |
loadMappings(java.lang.String resource) |
java.util.Properties |
loadProperties(java.lang.String resource) |
T |
newInstance()
Instantiate an object.
|
abstract void |
populateMetaData() |
protected java.lang.Object |
readValue(java.lang.reflect.Method method,
java.lang.Object obj) |
boolean |
remove(T domainObject)
Will remove from db after writeData() and commit;
|
void |
removePropertyChangeListeners(java.beans.PropertyChangeListener[] listeners) |
void |
setAppend(boolean append)
Setter for property append.
|
void |
setCreateDefaultMetaData(boolean createDefaultMetaData) |
void |
setDataReader(DataReader<T> dataReader)
Setter for property dataReader.
|
void |
setDataWriter(DataWriter<T> dataWriter)
Setter for property dataWriter.
|
void |
setDiscardUnmodifiedObjects(boolean discardUnmodifiedObjects)
Setter for property discardUnmodifiedObjects.
|
void |
setDomainClass(java.lang.Class<T> domainClass)
Setter for property domainClass.
|
void |
setExceptionOnEmptyObjectList(boolean exceptionOnEmptyObjectList)
Throw error if there is no data on writeData()
|
void |
setLazyLoading(boolean lazyLoading)
Setter for property lazyLoading.
|
void |
setMapping(java.util.Map<java.lang.String,java.lang.String> mapping)
Setter for property mapping.
|
void |
setMapping(java.lang.String mapping) |
void |
setMetaData(MetaData<T> metaData)
Setter for property metaData.
|
void |
setObject(int index,
T domainObject) |
int |
setObject(T domainObject)
After loading and modifying, set domainObject back to factory
|
void |
setObjectList(java.util.List<DomainObject<T>> objectList)
Setter for property objectList.
|
void |
setOptions(java.util.Map<java.lang.Enum<?>,java.lang.Object> options) |
void |
setOriginal()
All modified objects in objectList set to PersistentState.ORIGINAL and
object values set to original (as during lod() or syncOriginal or
setOriginal)
|
void |
setReadOnly(boolean readOnly)
Setter for property readOnly.
|
void |
setRemovedObjects(java.util.List<DomainObject<T>> removedObjects)
Setter for property removedObjects.
|
void |
setThrowMissingFieldException(boolean throwMissingFieldException) |
<UID> void |
setUniqueId(T domainObject,
java.lang.Class<UID> uidClass)
if parameter uidClass is not null than it must be a java bean with getters/setters for properties with the same
name as properties in domainObject used as unique values
if parameter uidClass is null than if PrimaryKey is multicolumn an Object array is used, otherwise an Object.
|
protected T |
setupEnhancedObject(T instance,
PersistentState state) |
boolean |
store(T domainObject)
Will update db after writeData() and commit;
|
void |
synchronizePersistentState()
IMPORTANT! Call this method after successful COMMIT to sync original and
current values: copy current values to original and set persistentState == ORIGINAL and discard Objects deleted from DB
|
void |
syncOriginal(T domainObject)
Populate originalValues with values from DomainObject
|
java.lang.String |
toString() |
abstract boolean |
writeData()
Implement and call this method to persist data
|
protected void |
writeValue(java.lang.Object obj,
java.lang.reflect.Method method,
java.lang.Object[] value) |
protected java.util.Map<java.lang.String,java.lang.String> mapping
protected java.lang.Class<T> domainClass
protected java.util.concurrent.atomic.AtomicInteger internalId
protected java.util.List<DomainObject<T>> objectList
protected java.util.List<DomainObject<T>> removedObjects
protected boolean discardUnmodifiedObjects
protected boolean readOnly
protected DataWriter<T> dataWriter
protected static final java.lang.Object[] EMPTY_ARG
protected boolean lazyLoading
protected boolean append
protected long domainFactoryId
protected boolean exceptionOnEmptyObjectList
protected boolean valid
protected boolean createDefaultMetaData
protected boolean throwMissingFieldException
protected DataReader<T> dataReader
protected java.util.Map<java.lang.Enum<?>,java.lang.Object> options
protected Instantiator<T> instantiator
protected java.beans.PropertyChangeListener[] listeners
public java.util.List<T> filter(Predicate<T> p)
public int load(Wrapper[] data) throws DataAccessException
DataAccessException
public int load(Wrapper data, int offset, int limit) throws DataAccessException
DataAccessException
public int load(Wrapper data) throws DataAccessException
DataAccessException
public java.util.Map<java.lang.String,java.lang.String> getMapping()
public void setMapping(java.util.Map<java.lang.String,java.lang.String> mapping)
mapping
- New value of property mapping. Format:
[TABLE].COLUMN_1=fieldName1 [TABLE].COLUMN_2=fieldName2 etc...public void setMapping(java.lang.String mapping)
mapping
- Set mapping using string format:
[TABLE].COLUMN_1=fieldName1, [TABLE].COLUMN_2=fieldName2, etc...public java.lang.Class<T> getDomainClass()
public void setDomainClass(java.lang.Class<T> domainClass)
domainClass
- New value of property domainClass.public int setObject(T domainObject)
public void setObject(int index, T domainObject)
public void addObject(int index, T domainObject)
public int addObject(T domainObject)
public T findObjectByInternalId(int internalId, boolean removed)
public T findObjectByInternalId(int internalId)
public int findIdxByInternalId(int internalId)
public int findIdxByInternalId(int internalId, boolean removed)
protected int getNextInternalId()
public java.util.List<DomainObject<T>> getObjectList()
public void setObjectList(java.util.List<DomainObject<T>> objectList)
objectList
- New value of property objectList.public boolean discard(T domainObject)
public boolean remove(T domainObject)
public boolean beforeRemove(T domainObject)
public boolean afterRemove(int idx)
public boolean store(T domainObject)
public boolean beforeStore(T domainObjectx)
public boolean afterStore(int idx)
public boolean create(T domainObject)
public boolean beforeCreate(T domainObject)
public boolean afterCreate(int idx)
public java.util.List<DomainObject<T>> getRemovedObjects()
public void setRemovedObjects(java.util.List<DomainObject<T>> removedObjects)
removedObjects
- New value of property removedObjects.public boolean isDiscardUnmodifiedObjects()
public void setDiscardUnmodifiedObjects(boolean discardUnmodifiedObjects)
discardUnmodifiedObjects
- New value of property
discardUnmodifiedObjects. leave only modified objects in objectListpublic boolean isReadOnly()
public void setReadOnly(boolean readOnly)
readOnly
- New value of property readOnly. makes this not updatable.public void setOriginal()
public boolean beforeWriteData()
public abstract boolean writeData()
public boolean afterWriteData()
public MetaData<T> getMetaData()
public void loadMappings(java.lang.String resource)
public java.util.Properties loadProperties(java.lang.String resource)
public abstract void populateMetaData()
protected void init()
public void setMetaData(MetaData<T> metaData)
metaData
- New value of property metaData.public boolean load(T domainObject)
public void syncOriginal(T domainObject)
public void synchronizePersistentState()
public int getRemovedCount()
public int getCreatedCount()
public int getModifiedCount()
public DataReader<T> getDataReader()
public void setDataReader(DataReader<T> dataReader)
dataReader
- New value of property dataReader.public DataWriter<T> getDataWriter()
public void setDataWriter(DataWriter<T> dataWriter)
dataWriter
- New value of property dataWriter.public boolean isLazyLoading()
public void setLazyLoading(boolean lazyLoading)
lazyLoading
- New value of property lazyLoading.public boolean isAppend()
public void setAppend(boolean append)
append
- New value of property append. append values to objectList
during load() instead of removing old values firstpublic java.lang.Throwable getPersistenceError()
public void clearData()
public boolean isValid()
public DataHolder createOriginalValues()
public boolean isExceptionOnEmptyObjectList()
public void setExceptionOnEmptyObjectList(boolean exceptionOnEmptyObjectList)
public boolean isCreateDefaultMetaData()
public void setCreateDefaultMetaData(boolean createDefaultMetaData)
public boolean isThrowMissingFieldException()
public void setThrowMissingFieldException(boolean throwMissingFieldException)
public void setOptions(java.util.Map<java.lang.Enum<?>,java.lang.Object> options)
public java.util.Map<java.lang.Enum<?>,java.lang.Object> getOptions()
public java.util.List<T> getObjects()
public T newInstance()
public void setCustomerId(java.lang.Integer customerId) {
if (!((DomainObject) this).isLoading()) {
...
this will throw ClassCastException. In case you need to call DomainObject
methods from within attached (enhanced) object instantiate object using
newInstance()public T detach(T instance)
public java.util.List<T> detachAll()
public java.util.List<T> detachAll(boolean discard)
public T attach(T instance)
public T attach(T instance, PersistentState state)
protected T setupEnhancedObject(T instance, PersistentState state)
public java.lang.String toString()
toString
in class java.lang.Object
public void addPropertyChangeListeners(java.beans.PropertyChangeListener[] listeners)
public void removePropertyChangeListeners(java.beans.PropertyChangeListener[] listeners)
protected java.lang.Object readValue(java.lang.reflect.Method method, java.lang.Object obj) throws java.lang.Throwable
java.lang.Throwable
protected void writeValue(java.lang.Object obj, java.lang.reflect.Method method, java.lang.Object[] value) throws java.lang.Throwable
java.lang.Throwable
public <UID> void setUniqueId(T domainObject, java.lang.Class<UID> uidClass)
domainObject
- uidClass
-