|
Oracle Fusion Middleware Java API Reference for Oracle ADF Model 11g Release 1 (11.1.1.4.0) E10653-05 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object oracle.jbo.server.RowImpl oracle.jbo.server.EntityImpl
public class EntityImpl
This class implements the middle-tier representations of database rows.
An Entity Object provides an object-oriented representation of the data it caches from a database object, such as a table or view. Database rows are presented as individual Entities, in which attributes typically correspond to columns in the corresponding table.
The status of an Entity Object's data, relative to the corresponding database data, are indicated by its current post-state and Entity-state. The Entity-state indicates the state of the Entity Object's data relative to the actual database data, and the state of the transaction itself. The Post-state indicates the state of the Entity Object's data relative to the transaction's corresponding database-data.
States are set to one of these values: STATUS_INITIALIZED
, STATUS_NEW
, STATUS_MODIFIED
,
STATUS_DELETED
and STATUS_DEAD
based on whether the
Entity Object is being
created, updated, deleted, or rolled back,
respectively. These operations can set either or both the post-state and the
Entity-state. The status values have a slightly different meaning
depending on whether they are set for an Entity-state or a post-state:
STATUS_UNMODIFIED
- if this Entity Object originated in
the database and is unmodified,
or if modifications have been committed to the database.STATUS_MODIFIED
- if this Entity Object originated in the
database, and has been modified in the current transaction.STATUS_NEW
- if this Entity Object is new in the current transaction.STATUS_DELETED
- if this Entity Object has been deleted
in the current transaction.STATUS_DEAD
- if this Entity Object is new in the current
transaction and has been deleted.
STATUS_UNMODIFIED
- if this Entity Object has been
queried from the database and is unchanged,
or if it has been posted to the database.STATUS_MODIFIED
- if this Entity Object has been
queried from the database and has changed.STATUS_INITIALIZED
- if this Entity Object is new and the client application changed
it's state to make this Object temporary. STATUS_NEW
- if this Entity Object is new in the post-cycle.STATUS_DELETED
- if this Entity Object has been marked
for deletion.STATUS_DEAD
- if this Entity Object is new, but has been
deleted.
The post-state is reset to STATUS_UNMODIFIED
when a
post operation is invoked. The Entity-state is reset
to STATUS_UNMODIFIED
when the Entity Object's data is committed
or rolled back.
To set/populate an attribute in an entity you could use one of the following apis
setAttribute
apis to set an attribute, invoke it's
generated accessor to perform programmatic validation which then calls setAttributeInternal.
All attempts to set an attribute on an entity from outside this entity object should use this
method to set an attribute value. Primary key attributes should also be set using this method
or setAttributeInternal().
setAttributeInternal
api to perform declarative validations on the attribute
and then call populateAttributeAsChanged. Most applications will not need to call this method
in any place other than the call generated in a generated setter method.
populateAttributeAsChanged
apis to avoid all attribute validations and to
still mark the attribute as changed after setting it's value so that this value is picked
up in entity DML when the entity is posted. These apis are typically used in new entity defaulting
logic when an entity developer knows the value being set is a correct value for an attribute
and should avoid validations in the entity-setter method as well as any declarative validation.
Primary key attributes should not be set using populateAttribute apis.
populateAttribute
to simply set an attribute value without generating
any change notifications nor marking the attribute as modified in this entity. This method
is primarily used for populating attribute values when data is fetched for an entity from
the datastore.
Field Summary | |
---|---|
static byte |
CURRENT_VERSION
|
static int |
DML_DELETE
Identifies that a Delete operation is to be performed in the doDML() method. |
static int |
DML_INSERT
Identifies that an Insert operation is to be performed in the doDML() method. |
static int |
DML_UPDATE
Identifies that an Update operation is to be performed in the doDML() method. |
protected static int |
MAXATTRCONST
Attribute constants are declared relative to their parent. |
protected SparseArray |
mOrigData
|
protected static java.lang.String |
ORACLE_ROWID_COLUMN
Identifies the column name for ROWID columns in a table. |
static byte |
ORIGINAL_VERSION
|
static java.lang.String |
PROPERTY_LOOKUP_ATTR_NAME
|
static java.lang.String |
PROPERTY_LOOKUP_DISPATTR
|
static java.lang.String |
PROPERTY_LOOKUP_TYPE
|
protected static java.lang.String |
SYS_EFFDT_ROW_SPLIT
|
static java.lang.String |
XML_CI_CHANGED
|
static java.lang.String |
XML_PK_CHANGED
|
static java.lang.String |
XML_PK_CHANGED_YES
|
Fields inherited from interface oracle.jbo.server.Entity |
---|
STATUS_DEAD, STATUS_DELETED, STATUS_MODIFIED, STATUS_UNMODIFIED |
Fields inherited from interface oracle.jbo.XMLInterface |
---|
XML_IGNORE_DEPTH_COUNT, XML_OPT_ALL_ROWS, XML_OPT_ASSOC_CONSISTENT, XML_OPT_CHANGES_ONLY, XML_OPT_LIMIT_RANGE, XML_PASSIVATION_USE |
Fields inherited from interface oracle.jbo.JboReservedVarNames |
---|
RESERVED_VAR_AGG_AVG, RESERVED_VAR_AGG_COUNT, RESERVED_VAR_AGG_MAX, RESERVED_VAR_AGG_MIN, RESERVED_VAR_AGG_SUM, RESERVED_VAR_AGGVAL_PREFIX, RESERVED_VAR_STRUCTURE_DEF |
Fields inherited from interface oracle.jbo.expr.JIReservedVarNames |
---|
RESERVED_VAR_VALUE |
Constructor Summary | |
---|---|
EntityImpl()
Internal: Applications should not use this constructor. |
Method Summary | |
---|---|
protected void |
addToTransactionManager()
Adds this Entity object to its transaction manager (either another Entity object based on the containership model, or the transaction object for this session). |
void |
addToValidationListeners(ValidationListener listener)
Adds a listener to the list of validation listeners and marks this Entity Object invalid. |
void |
addTransactionPostListener(TransactionPostListener listener)
Adds a listener to the list of post operation listeners. |
void |
addTransactionPostListenerNoCheck(TransactionPostListener listener)
Internal: Applications should not use this method. |
void |
afterCommit(TransactionEvent e)
Called to report that a Commit operation has occurred. |
void |
afterRemove(TransactionEvent e)
A cleanup routine to be invoked by transaction manager when this transaction listener is removed from the manager's list. |
void |
afterRollback(TransactionEvent e)
Internal: Applications should not call this method. |
protected void |
appendXMLElementNodes(Document xmlDoc,
Node node,
int nContainees,
long options,
AttributeDefImpl[] attrs)
Writes XML-element nodes for each attribute in this row and appends it to the given row-node. |
protected void |
appendXMLElementNodesForAttrs(Document xmlDoc,
Node node,
long options,
AttributeDefImpl[] attrs)
Applications may override this method to customize passivation of attributes by limiting or adding attributes to the given set. |
void |
beforeCommit(TransactionEvent e)
Polls transaction listeners before a commit operation. |
void |
beforeRollback(TransactionEvent e)
Polls transaction listeners before a rollback operation. |
protected int |
bindDMLStatement(int operation,
java.sql.PreparedStatement stmt,
AttributeDefImpl[] allAttrs,
AttributeDefImpl[] retCols,
AttributeDefImpl[] retKeys,
java.util.HashMap retrList,
boolean batchMode)
Advanced: Most applications should not use this method. This method binds current attribute values to the given jdbc PreparedStatement. |
protected int |
bindWhereClause(java.sql.PreparedStatement stmt,
AttributeDefImpl[] keyCols,
java.lang.Object rowid,
int bindIndex)
Bind the Primary key values for the designated Statement. |
protected java.lang.StringBuffer |
buildDMLStatement(int operation,
AttributeDefImpl[] allAttrs,
AttributeDefImpl[] retCols,
AttributeDefImpl[] retKeys,
boolean batchMode)
Advanced: Most applications should not use this method. This method constructs the DML statement and returns it as a StringBuffer. |
protected AttributeDefImpl[] |
buildRefreshSQL(java.lang.StringBuffer sqlBuffer,
int operation,
AttributeDefImpl[] columns,
AttributeDefImpl[] retKeycols,
boolean withInto)
Builds the sql SELECT statement to fetch refresh-on-insert or update attributes and uses getRefreshSQLKeyAttrs() to create WHERE clause for this SELECT statement. |
protected void |
buildWhereClause(java.lang.StringBuffer buffer,
AttributeDefImpl[] keyCols,
java.lang.Object rowid)
Construct a SQL WHERE clause for the Entity into the designated Buffer. |
protected boolean |
checkConsistency(SparseArray target,
boolean lock)
Override this method to speed up comparing the attribute values of fetched entity data with this entity's data. |
protected void |
clearAttributeException(int index)
Cleans any exception of an attribute of the given name was set earlier and threw an exception which was cached as the transaction is in deferred mode. |
protected boolean |
compare(SparseArray target)
Compares the data in this row with that of another. |
protected void |
copyChangedNonKeyAttributes(EntityImpl targetRow)
This method copies all the changed attributes from one entity to another. |
protected EntityImpl |
copyEffDtEntity()
Make a copy of this Entity for Effective Date Updates. |
protected void |
create(AttributeList nameValuePair)
This method should be subclassed to supply programmatic default values to various attributes of a new Entity Object. |
protected EntityRowSetImpl |
createAssociationAccessorRS(AssociationDefImpl assocDef,
ViewObjectImpl accessorVO,
Row masterRow,
java.lang.Object[] values)
|
protected ViewObjectImpl |
createAssociationAccessorVO(AssociationDefImpl assocDef,
java.lang.String voName,
EntityAssociation eoAssoc)
|
protected EntityAttrHintsImpl |
createEntityAttrHints(AttributeDefImpl attrDef)
Create a map to store attribute hints for this row. |
protected ViewRowSetImpl |
createEntityViewLinkAccessorRS(AssociationDefImpl assocDef,
ViewObjectImpl accessorVO,
Row masterRow,
java.lang.Object[] values)
|
protected ViewObjectImpl |
createEntityViewLinkAccessorVO(AssociationDefImpl assocDef,
java.lang.String voName,
ViewDefImpl vDef,
ViewLinkDefImpl vlDef)
|
RowSet |
createUnqualifiedRowSet()
Creates a ViewObject over the full table behind this entity and returns a rowset of entities that belong to the source table. |
protected RowSet |
createViewAccessorRS(java.lang.String vaName)
Internal: Applications should not use this method. |
protected RowSet |
createViewAccessorRS(ViewAccessorDef va)
Internal: Applications should not use this method. |
protected oracle.adf.share.security.authorization.PrivilegeHolder |
doAllowsOperation(java.lang.String operationName)
|
protected void |
doDML(int operation,
TransactionEvent e)
Performs INSERT/UPDATE/DELETE processing for the row. |
protected void |
doDMLForCascadeUpdate(TransactionEvent e,
java.util.ArrayList tpl,
java.util.ArrayList ecList,
boolean startingEntity)
Advanced method: Applications should typically not use this method. |
protected void |
doDMLWithLOBs(int operation,
TransactionEvent e)
Performs INSERT/UPDATE/DELETE processing for Entity Objects that contain LOBs. |
void |
domainToBeModified(DomainInterface d)
Locks the domain object and notifies the Domain owner that the value is about to be modified. |
protected void |
donePostingAll(TransactionEvent e)
|
protected void |
doRefreshSQL(int operation,
java.util.ArrayList refreshAttrs)
This method is called after the entity is posted to the database to refresh the required attributes. |
protected void |
doSelect(boolean lock)
Advanced: Most applications should not use this method. |
protected void |
doSelectForAltKey(int keyIndex)
|
boolean |
eventsDebugOnly()
Indicates whether events are being tested. |
protected Row |
fetchExprValueSupplierOverrideRow(java.lang.String vdName,
java.lang.String voName,
Key rowKey)
Advanced method: Applications should typically not use this method. Subclasses may override to return a valid ViewRowImpl instance that can be used as ExprValueSupplier for expressions in this entity as per the override setting on the expressions. |
protected ViewObjectImpl |
findAssociationAccessorVO(AssociationDefImpl assocDef,
java.lang.String voName,
EntityAssociation eoAssoc)
|
protected ViewObjectImpl |
findEntityViewLinkAccessorVO(AssociationDefImpl assocDef,
java.lang.String voName,
ViewDefImpl vDef,
ViewLinkDefImpl vlDef)
|
protected ViewObject |
findOrCreateLocalViewObject(ViewAccessorDef vaDef)
Find or create the local view instance from the local view usage name. |
RowSet |
findOrCreateViewAccessorRS(java.lang.String vaName)
Internal: Applications should not use this method. |
RowSet |
findOrCreateViewAccessorRS(ViewAccessorDef va)
Internal: Applications should not use this method. |
ViewAccessorDef |
findViewAccessorDef(java.lang.String name)
This method returns ViewAccessorDef with the specified name. |
protected ViewObject |
findViewAccessorVO(ViewAccessorDef va)
Internal: Applications should not use this method. |
Key |
getAltKey(int keyIndex)
|
java.lang.Object |
getAttribute(int index)
Returns the value of an attribute, given an integer index value. |
java.lang.Object |
getAttribute(int index,
byte version)
|
java.lang.Object |
getAttribute(java.lang.String name)
Returns the value of the named attribute, given a string value. |
protected int |
getAttributeChangedCount()
|
int |
getAttributeCount()
Counts the number of attributes in this Entity Object. |
AttributeHints |
getAttributeHints(int attrIndex)
Returns the AttributeHints object for the specified attribute for the row. |
AttributeHints |
getAttributeHints(java.lang.String attrName)
Returns the AttributeHints object for the specified attribute for the row. |
int |
getAttributeIndexOf(java.lang.String name)
Finds the index of the named attribute. |
protected java.lang.Object |
getAttributeInternal(int index)
Gets the attribute value by index. |
java.lang.String[] |
getAttributeNames()
Returns an array of attribute names in this list. |
protected java.lang.Object |
getAttributeValue(AttributeDefImpl attr)
Internal: Applications should not use this method. |
java.lang.Object[] |
getAttributeValues()
Returns an array of attribute values in this list. |
protected java.lang.Object |
getAttrInvokeAccessor(int index,
AttributeDefImpl attrDef)
|
int |
getBaseAttributeCount()
|
protected java.lang.Object |
getChangeIndicator()
Gets the Change indicator attribute's value. |
static java.util.Comparator |
getComparator()
|
protected EntityImpl |
getContainerEntity()
Returns this entity's container in a composition association if any. |
DBTransaction |
getDBTransaction()
Retrieves this Entity Object's database transaction. |
protected int |
getDynamicAttributeCount()
|
protected java.lang.Object |
getDynamicAttributeValue(int dynAttrIndex)
|
protected java.lang.Object |
getEffDtInitEndDateValue()
This method returns the End Date value for the new rows created for the Entity. |
java.lang.Object |
getEffectiveDate()
Obtain the Effective Date Value for the Entity. |
EntityCache |
getEntityCache()
A Convenience for writing a lot of code. |
protected EntityCache |
getEntityCacheInternal()
|
protected EntityDefImpl |
getEntityDef()
Gets the Entity Definition Object which governs the structure of this Entity Object. |
byte |
getEntityState()
Gets this Entity Object's current Entity-state in the transaction. |
protected java.lang.Object |
getHistoryContextForAttribute(AttributeDefImpl attr)
|
Key |
getKey()
Internal: Applications should not use thid method. |
protected RowSetIterator |
getListBindingRSI(ListBindingDef def)
Internal: Applications should not use this method. |
protected java.util.List |
getListBindings()
Internal: Applications should not use this method. |
java.lang.String |
getLookupDescription(java.lang.String attrName)
|
protected java.lang.Object |
getOrigData(int index)
|
protected VariableValueManager |
getParentVariableManager()
|
protected java.lang.Object |
getPKBasedRef(AttributeDefImpl attr)
|
protected java.lang.Object |
getPostedAttribute(int index)
Gets the value originally read for this attribute from the database. |
byte |
getPostState()
Returns this Entity Object's current post-state in the transaction. |
Key |
getPrimaryKey()
Returns the primay key for this Entity Object's row. |
protected AttributeDefImpl[] |
getRefreshSQLKeyAttrs(int operation)
Returns an array of AttributeDefImpl containing attributes that should be used in the where-clause (as key columns) when a select statement is executed to fetch refresh-on attributes. |
protected SQLBuilder |
getSQLBuilder()
Get the SQLBuilderImpl which performs all SQL operations required by this Entity Object. |
static java.lang.String |
getStateAsString(int state)
Utility function to convert the STATE to a string: todo: this is in the wrong place - it belongs in some static utility class as a converstion between byte and string |
StructureDef |
getStructureDef()
Returns the structure of the row. |
protected java.util.Vector |
getTransactionListeners()
Returns a copy of the list of "detail" Entities associated to this Entity Object by a composition association, participating in a transaction post and commit operations. |
protected java.util.ArrayList |
getTransactionListenersList()
Returns a copy of the list of "detail" Entities associated to this Entity Object by a composition association, participating in a transaction post and commit operations. |
int |
getTransPostHandle()
Advanced: Most applications should not use this method. |
protected java.util.Vector |
getValidationListeners()
Return a copy of the list of validation listeners (that is, a list of Entities that must be validated). |
protected java.util.ArrayList |
getValidationListenersList()
Return a copy of the list of validation listeners (that is, a list of Entities that must be validated). |
protected boolean |
handleActivatedRowNotFound()
Returns true if this entity row that is not found anymore in the database (may have been deleted in the database), should be added to the entity-cache on activation. |
protected void |
handleEffectiveDateOperations()
Before posting the row to the database this method is invoked for effective date book-keeping. |
protected void |
handleEffectiveDateRowCreate()
Update the Effective Start Date and Effective End Date based on the Effective Date Transient Attribute Value and the Post state of the Entity. |
protected void |
handleEffectiveDateRowDelete()
Performs the effective date processing for row delete operation. |
protected void |
handleEffectiveDateRowUpdate()
Performs the effective date processing for row update operation. |
protected void |
handleListBindingMismatch(ListBinding lb,
java.util.Map valuesMap,
RowIterator listRSI)
Internal: Applications should not use this method. |
protected void |
handlePostChangesError()
Called when a problem occurs while posting changes and restores an EntityImpl's state. |
protected boolean |
hasAttributeException(int index)
Returns true if an attribute at the given index was set earlier and threw an exception which was cached as the transaction is in deferred mode. |
protected boolean |
hasListBindings()
Internal: Applications should not use this method. |
protected boolean |
hasUpdatePrivilege(int index)
|
protected void |
initBusLogicGroupDefaults()
|
protected void |
initBusLogicGroupDfltExprAttrs(AttributeList nameValuePair)
|
protected SparseArrayInterface |
initData(int attrsCount)
|
protected void |
initDefaultExpressionAttributes(AttributeList nameValuePair)
Used to initialize this entity with values from evaluated expressions on the attributedefs. |
protected void |
initDefaults()
Initialize Entity row's default values. |
protected void |
initialize()
|
protected boolean |
isAttributeChanged(int index)
Determines whether the attribute at the index been been changed. |
boolean |
isAttributeChanged(java.lang.String attrName)
Advanced method: Applications should typically not use this method. Invokes isAttributeChanged(index) after looking up the index of an attribute with the given name. |
protected boolean |
isAttributeChangedInTransaction(int index)
Advanced method: Applications should typically not use this method. |
protected boolean |
isAttributePopulated(int index)
Determines whether the attribute at the specified index position is populated. |
boolean |
isAttributePopulated(java.lang.String attributeName)
Determines whether the attribute specified by name is populated. |
boolean |
isAttributeUpdateable(int index)
Checks if the attribute is updateable. |
boolean |
isDead()
An attempt to access a dead view row will lead to a DeadViewRowAccessException. |
boolean |
isInCache()
|
boolean |
isInvalid()
Returns whether this Entity Object is invalid. |
boolean |
isLocked()
Determines whether this Entity Object is locked. |
boolean |
isLookupIdValid(java.lang.String attrName,
java.lang.Object newValue)
|
protected boolean |
isOrigDataEmpty()
|
protected boolean |
isOrigDataPopulated(int index)
|
boolean |
isPostedToDB()
Advanced: Most applications should not use this method. For non-oracle databases, indicates if this entity is posted. |
boolean |
isTransientTransactionListener()
Tests whether this Entity Object's transaction listener is transient or permanent. |
boolean |
isTransientTransactionPostListener()
Tests whether this Entity Object's TransactionPostListener is transient or permanent. |
boolean |
isValid()
Returns whether this Entity Object is valid. |
protected boolean |
isViewAccessorAttribute(int indexAttribute)
Check if an attribute is the attribute to store view accessor RowSetIterator. |
void |
lock()
Locks the row. |
protected void |
lockTopLevelEntity()
Locks the top-most Entity Object by getting the master Entity Object defined by composition associations, and walking-up the chain of containership. |
protected void |
markViewAccessorsDirty(java.lang.String[] attrNames)
|
protected void |
notifyAttributesAndBlgChanged(int[] attrIndices,
java.lang.Object[] values,
boolean blg)
|
protected void |
notifyAttributesChanged(int[] attrIndices,
java.lang.Object[] values)
|
protected void |
notifyAttributesChanged(int[] attrIndices,
java.lang.Object[] values,
boolean markQCDirty)
|
protected void |
notifyEntityActivated(boolean bPostRequired)
Internal: Applications should not use this method. |
protected void |
notifyEventRaised(java.lang.String eventName,
java.util.ArrayList<EventAttrVals> payload)
|
void |
outputEventString(EventInvocation event)
|
protected void |
populateAttribute(int index,
java.lang.Object value)
Advanced method: Applications should not use this method. |
protected void |
populateAttribute(int index,
java.lang.Object value,
boolean sendNotification,
boolean markAsChanged)
Deprecated. since 9.0.5. Use populateAttribute(int index, Object value, boolean sendNotification, boolean markAsChanged, boolean saveOriginal) instead. |
void |
populateAttribute(int index,
java.lang.Object value,
boolean sendNotification,
boolean markAsChanged,
boolean saveOriginal)
Advanced method: Applications should typically not use this method. |
protected void |
populateAttributeAsChanged(int index,
java.lang.Object value)
Advanced method: Applications should typically not call this method from their subclasses other then when performing programmatic attribute defaulting with proper attribute values. |
void |
postChanges(TransactionEvent e)
Initiates a post operation for this Entity Object. |
protected void |
prepareForBatchDML(int operation,
TransactionEvent te)
Advanced: Most applications should not use this method. A pre-doDML() step which calls prepareForDML() with the appropriate operation so that applications can perform attribute updates like history column etc. |
protected void |
prepareForDML(int operation,
TransactionEvent e)
A pre-doDML() notification that allows subclasses to modify any attributes on this entity that should be updated in the database. |
ViewObject |
prepareVOToFetchNextEffDtRows()
This method prepares NextRowsVO to fetch future effective-dated rows. |
ViewObject |
prepareVOToFetchNextEffDtRows(int count)
Deprecated. use prepareVOToFetchNextEffDtRows(). |
protected ViewObject |
prepareVOToFetchNextEffDtSeqRows()
This method prepares NextSeqRowsVO to fetch effective-dated rows with higher sequence values within the same effective start date. |
protected ViewObject |
prepareVOToFetchNextEffDtSeqRows(int count)
Deprecated. use prepareVOToFetchNextEffDtSeqRows(). |
ViewObject |
prepareVOToFetchPrevEffDtRows()
This method prepares PrevRowsVO to fetch earlier effective-dated rows. |
ViewObject |
prepareVOToFetchPrevEffDtRows(int count)
Deprecated. use prepareVOToFetchPrevEffDtRows(). |
protected ViewObject |
prepareVOToFetchPrevEffDtSeqRows()
This method prepares PrevSeqRowsVO to fetch effective-dated rows with lower sequence values within the same effective start date. |
protected ViewObject |
prepareVOToFetchPrevEffDtSeqRows(int count)
Deprecated. use prepareVOToFetchPrevEffDtSeqRows(). |
protected boolean |
readAttrsFromXML(Element rowElt,
AttributeDefImpl[] attrs,
int ChangeState)
Advanced: Applications should not use this method. * Reads all the attribute values from the xml-element and sets them into this row. |
void |
readXML(Element elem,
int changeState)
Reads the content of the row and updates the attributes, from given xml document. |
void |
refresh(int refMode)
Refreshes the row's attributes with values from database. |
protected void |
refreshFKInNewContainees()
This method is invoked by SQLBuilder when one or more of the PrimaryKey attributes are marked refresh-on-insert and DML for this entity has been executed. |
protected void |
registerAttributeException(AttributeDef attrDef,
java.lang.Object val,
JboException ex)
|
void |
remove()
Removes the row from the database table. |
void |
removeAndRetain()
An Entity row does not support removeAndRetain(). |
void |
removeFromCollection()
An Entity row does not support removeFromCollection(). |
void |
removeTransactionPostListener(TransactionPostListener listener)
Internal: Applications should not use this method. |
protected void |
resetPKBasedRef()
|
void |
revert()
Reverts the row to the database's state. |
protected void |
revertChangesToEffDtEntity()
Revert changes made to effective dated entity. |
void |
setAttribute(int index,
java.lang.Object val)
Sets the value of an attribute, given its index position. |
void |
setAttribute(java.lang.String name,
java.lang.Object val)
Sets the value of the named attribute, given its name. |
protected void |
setAttributeChanged(int index,
boolean flag)
|
protected void |
setAttributeInternal(int index,
java.lang.Object val)
Validates and sets the value of an attribute by index. |
void |
setAttributeValues(java.util.List names,
java.util.List values)
Set attribute values for the given list of attributes names. |
protected void |
setAttrInvokeAccessor(int index,
java.lang.Object val,
AttributeDefImpl attrDef)
|
protected void |
setDynamicAttributeValue(int dynAttrIndex,
java.lang.Object value)
|
void |
setEffectiveDateMode(int mode)
Set the Effective Date mode in which the row updates need to be carried out. |
protected void |
setEntityDef(EntityDefImpl entityDef)
|
protected void |
setInvalid()
A helper method that marks this Entity Object invalid and adds it to the ValidationListeners list of the validation manager to which this Entity Object belongs. |
protected void |
setLocked(boolean lockedState)
Sets the locked state. |
void |
setNewRowState(byte state)
Advanced method: Applications should not use this method. Internal method used by ViewRowImpl.setNewRowState() to make all entities that belong to that new row as new or initialized. |
void |
setPostedToDB(boolean b)
Advanced: Most applications should not use this method. For non-oracle databases that do not support savepoint, this method should be called from the custom sql builder to mark the entity as posted so that it's not posted again during a subsequent post cycle (if this entity was already posted but other entity/entities led to an exception in the current post cycle. |
void |
setTransPostHandle(int hdl)
Advanced: Most applications should not use this method. |
java.lang.String |
toString()
|
void |
validate()
Validate this Entity Object. |
void |
validateDateEffectivity()
Validates the Effective Date aspects of an Entity to ensure that gaps or overlaps are not introduced. |
protected void |
validateEntity()
Validates the Entities and other listeners that are members of ValidationListeners list. |
protected void |
variablesAdded()
|
protected void |
vetoRemoveWithDetails(AttributeDef associationDef)
If this Entity Object is a master in a composition association, this method checks that all details have already been removed from the given association attribute. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface oracle.jbo.Row |
---|
getAttributeSecurityHints, getAttributeSecurityHints, getEffectiveDateMode, getSecurityHints |
Methods inherited from interface oracle.jbo.XMLInterface |
---|
readXML, writeXML, writeXML, writeXML, writeXML |
Field Detail |
---|
public static final int DML_INSERT
doDML()
method.
public static final int DML_UPDATE
doDML()
method.
public static final int DML_DELETE
doDML()
method.
public static final java.lang.String PROPERTY_LOOKUP_ATTR_NAME
public static final java.lang.String PROPERTY_LOOKUP_TYPE
public static final java.lang.String PROPERTY_LOOKUP_DISPATTR
protected static final java.lang.String ORACLE_ROWID_COLUMN
protected static final int MAXATTRCONST
protected SparseArray mOrigData
protected static final java.lang.String SYS_EFFDT_ROW_SPLIT
public static final byte CURRENT_VERSION
public static final byte ORIGINAL_VERSION
public static java.lang.String XML_CI_CHANGED
public static java.lang.String XML_PK_CHANGED
public static java.lang.String XML_PK_CHANGED_YES
Constructor Detail |
---|
public EntityImpl()
Creates an Entity Object instance. Note that initialization of most of the internal state attributes are performed in the init method invoked by the framework after an instance of this class is created. Most applications need not invoke this constructor directly.
Method Detail |
---|
protected void initialize()
protected void setEntityDef(EntityDefImpl entityDef)
protected Row fetchExprValueSupplierOverrideRow(java.lang.String vdName, java.lang.String voName, Key rowKey)
vdName
- FullName of the ViewDef to which this the returned row should belong.voName
- FullName of the ViewObject that was originally used to set a row reference
on this entity to indicate override type and key.rowKey
- Key of the ViewRow that was set as a reference for Expression override on this
entity.
protected SparseArrayInterface initData(int attrsCount)
protected void create(AttributeList nameValuePair)
Instances of subclasses should call super.create()
before performing any operations.
By default, if this Entity Object is part of a composition, and is a detail, this method checks for a valid foreign-key value in the given nameValuePair and sets the foreign-key value into its attributes appropriately. This logic validates that a detail Entity Object has a master Entity Object if the two are related by composition association.
If this method is overridden, the developer must ensure that in the case of composition, the nameValuePair belongs to the master Entity or that the nameValuePair contains all of the foreign keys required to create the Entity.
nameValuePair
- a list of attribute values (name-value pairs) to be used
in initializing the row. If the jbo.903.compatible
property is specified, nameValuePair will never be
null when this method is called by the view row's create.
If jbo.903.compatible is not specified, the user must
check for the possibility of nameValuePair being
null
, which means no attribute value is
being passed in.
oracle.jbo.InvalidOwnerException
- if an attempt is made to create a
detail row without a master, when the association between the
master and detail is marked as composition.protected void initDefaultExpressionAttributes(AttributeList nameValuePair)
protected void initBusLogicGroupDfltExprAttrs(AttributeList nameValuePair)
protected void initDefaults()
protected void initBusLogicGroupDefaults()
public java.lang.Object getAttribute(java.lang.String name)
If there is a get method for this attribute in a subclass of this Entity Object, that method is invoked. The get method name is derived from the attribute name: for example, the method getDeptNo() pertains to an attribute named "Deptno".
This method should not be overridden. Instead, override
getAttribute(int index)
.
getAttribute
in interface AttributeList
name
- the name of the attribute.
getAttribute(int index)
public java.lang.Object getAttribute(int index)
If there is a get method for this attribute in a subclass of this Entity Object, that method is invoked. The get method name is derived from the attribute name: for example, the method getDeptNo() pertains to an attribute named "Deptno".
getAttribute
in interface AttributeList
index
- the index of the attribute.
protected java.lang.Object getAttrInvokeAccessor(int index, AttributeDefImpl attrDef) throws java.lang.Exception
java.lang.Exception
public void setAttribute(java.lang.String name, java.lang.Object val)
If there is a set method for this attribute in a subclass of this Entity Object, that method is invoked. The set method name is derived from the attribute name: for example, the method getDeptNo() pertains to an attribute named "Deptno".
This method should not be overridden; override
setAttributeInternal
instead.
setAttribute
in interface AttributeList
name
- the name of the attribute.val
- the value to be assigned to the attribute. The class of the returned
value a Java type determined by this Entity Object's definition
object.protected void registerAttributeException(AttributeDef attrDef, java.lang.Object val, JboException ex)
registerAttributeException
in class RowImpl
public void setAttribute(int index, java.lang.Object val)
If there is a set method for this attribute in a subclass of this Entity Object, that method is invoked. The set method name is derived from the attribute name: for example, the method getDeptNo() pertains to an attribute named "Deptno".
This method should not be overridden; override
setAttributeInternal
instead.
setAttribute
in interface AttributeList
index
- the index of the attribute.val
- the value to be assigned to the attribute. The class of the returned
value a Java type determined by this Entity Object's definition
object.protected void setAttrInvokeAccessor(int index, java.lang.Object val, AttributeDefImpl attrDef) throws java.lang.Exception
java.lang.Exception
protected void setAttributeInternal(int index, java.lang.Object val)
setAttributeInternal
in class RowImpl
index
- the index of the attribute.val
- the value of the attribute.public StructureDef getStructureDef()
Row
getStructureDef
in interface Row
getStructureDef
in class RowImpl
protected EntityDefImpl getEntityDef()
protected SQLBuilder getSQLBuilder()
protected java.util.ArrayList getTransactionListenersList()
This method can be overridden, for example, to re-order the list of detail Entities in a specified order such as "post" order.
protected java.util.Vector getTransactionListeners()
This method can be overridden, for example, to re-order the list of detail Entities in a specified order such as "post" order.
protected java.util.ArrayList getValidationListenersList()
This list contains modified child Entities which must be validated before this Entity Object is validated.
This method should not be overridden.
protected java.util.Vector getValidationListeners()
This list contains modified child Entities which must be validated before this Entity Object is validated.
This method should not be overridden.
protected void clearAttributeException(int index)
clearAttributeException
in class RowImpl
protected boolean hasAttributeException(int index)
hasAttributeException
in class RowImpl
protected void validateEntity()
JboMandatoryAttributesValidator
(if applicable) will be invoked here to perform null-value checks on mandatory attributes.
Applications should subclass this method to perform custom Entity-level validation
and call super.validateEntity()
to enable the framework to coordinate
validation of detail Entities and validation via the declarative validators (that is,
Entity validators declared at design-time).
In the case of composition, child Entities are validated from this method.
In the following example, code is added to validateEntity() to throw an exception if the value of the Emp.Ename attribute is "Jerome".
public void validateEntity() { if (getEname().equals("Jerome")) throw new JboException("Name cannot be Jerome"); super.validateEntity(); }
JboException
- in case validation fails.public final void validate() throws JboException
This method is invoked by the framework during any currency change and during the commit process.
If this Entity Object is marked invalid, validation is performed as follows:
Once all listeners are validated, this Entity Object is then marked valid.
This method should not be overridden.
Custom validation logic should be implemented by overriding the
validateEntity
method, which can be invoked
before or after calling
super.validateEntity()
.
validate
in interface Row
validate
in interface ValidationListener
validate
in interface ValidationManager
validate
in class RowImpl
oracle.jbo.JboException
- if this Entity Object is found
to be invalid.
JboException
- if validation fails.validate()
,
ViewRowImpl.validate()
public AttributeHints getAttributeHints(java.lang.String attrName)
Row
getAttributeHints
in interface Row
attrName
- the name of the attribute.
public AttributeHints getAttributeHints(int attrIndex)
Row
getAttributeHints
in interface Row
attrIndex
- the index of the attribute.
protected EntityAttrHintsImpl createEntityAttrHints(AttributeDefImpl attrDef)
attrDef
- The attribute defintion for which the hints need to be created.
public void addToValidationListeners(ValidationListener listener)
Subsequent invocation of validate
will invoke
validate()
on each of the listeners in the list.
This method could be overridden to force a child Entity to be validated.
addToValidationListeners
in interface ValidationManager
listener
- the listener to be added.validate()
,
ValidationManager
protected void setInvalid()
protected EntityImpl getContainerEntity()
public boolean isValid()
An Entity Object is marked valid if it has been validated and not subsequently modified or set invalid.
isValid
in interface Entity
isValid
in interface ValidationListener
true
if this Entity Object is valid; false
otherwise.public boolean isInvalid()
An Entity Object is marked invalid if it has not been validated or if it has been validated then subsequently modified or set invalid.
true
if this Entity Object is invalid; false
otherwise.protected int getDynamicAttributeCount()
protected java.lang.Object getDynamicAttributeValue(int dynAttrIndex)
protected void setDynamicAttributeValue(int dynAttrIndex, java.lang.Object value)
protected final java.lang.Object getAttributeValue(AttributeDefImpl attr)
Given an attribute definition object, this method gets the value for the
attribute. This method should not be overridden; override
getAttributeInternal
instead.
attr
- name of the attribute definition.
getAttributeInternal(int index)
protected final java.lang.Object getChangeIndicator()
Change indicator columns can be used to indicate that a change has occurred to the underlying Entity Object since we last queried against it. They are typically implemented as TimeStamp or Version (number) columns in the underlying table that are changed by the Database each time the row is updated.
This method returns NULL if:
A change indicator is especially useful in Entity Objects that contain large objects, such as BLOBs. Comparing a change indicator on a row, is more convenient than comparing BLOBs.
public Key getPrimaryKey()
Typically, this method should not be overridden.
getPrimaryKey
in interface Entity
public Key getAltKey(int keyIndex)
public final int getAttributeCount()
The count includes persistent, transient, and association attributes. Attributes need not presently have values. This method will return the same value for all the Entity Object's rows.
This method should not be overridden.
The following code sample uses this method in a loop to retrieve and print Entity Object attribute names:
// Return the first Entity Object Row Row r = eo.first(); // If we have a row, do this... if (r != null) { // Loop over the attributes in the Row and Print out the values for (int i = 0; i < eo.getAttributeCount(); i++ ) { String attrName = eo.getAttributeDef(i).getName(); String attrVal = r.getAttribute(i).toString(); out.println(attrName + " = " +attrVal); } }
getAttributeCount
in interface AttributeList
getAttributeCount
in class RowImpl
public final int getBaseAttributeCount()
protected java.lang.Object getPKBasedRef(AttributeDefImpl attr)
protected void resetPKBasedRef()
protected java.lang.Object getAttributeInternal(int index)
This method is not typically overridden. However, it could be overridden, for example, to return numeric values stored as integers, in a two-decimal format.
getAttributeInternal
in class RowImpl
index
- the index of the attribute.
protected void handleListBindingMismatch(ListBinding lb, java.util.Map valuesMap, RowIterator listRSI)
RowImpl
handleListBindingMismatch
in class RowImpl
protected final boolean hasListBindings()
RowImpl
hasListBindings
in class RowImpl
public void setAttributeValues(java.util.List names, java.util.List values)
setAttributeValues
in interface Row
setAttributeValues
in class RowImpl
public final DBTransaction getDBTransaction()
This method should not be overridden.
protected java.util.List getListBindings()
RowImpl
getListBindings
in class RowImpl
protected RowSetIterator getListBindingRSI(ListBindingDef def)
RowImpl
getListBindingRSI
in class RowImpl
public RowSet findOrCreateViewAccessorRS(ViewAccessorDef va)
protected ViewObject findViewAccessorVO(ViewAccessorDef va)
protected RowSet createViewAccessorRS(ViewAccessorDef va)
public RowSet findOrCreateViewAccessorRS(java.lang.String vaName)
findOrCreateViewAccessorRS
in class RowImpl
protected RowSet createViewAccessorRS(java.lang.String vaName)
public EntityCache getEntityCache()
protected EntityCache getEntityCacheInternal()
protected boolean isAttributeChanged(int index)
Returns true if the the attribute has been changed since it was obtained from the Database. Note that if a Posting operation is performed, and the attribute value is sync'd with the database, that subsequent requests will return false, until the next time the attribute is changed.
Note that this method will return true if the value has been set to the same as the database value since it doesn't perform a value comparison.
After a Commit operation, the flag is also reset to false.
index
- index of the attribute.
public final boolean isAttributeChanged(java.lang.String attrName)
protected void setAttributeChanged(int index, boolean flag)
protected int getAttributeChangedCount()
protected final boolean isAttributeChangedInTransaction(int index)
Return true if the attribute at given index was modified in this transaction (even if it's current Changed state is false meaning this value was posted to the DB (but has not been committed).
protected boolean isOrigDataPopulated(int index)
protected boolean isOrigDataEmpty()
protected java.lang.Object getOrigData(int index)
protected java.lang.Object getPostedAttribute(int index)
If the attribute value at the specified index has been changed (whether
to the same
value or a new value), return the original value as read from the
database on first query. The method invokes
getAttributeInternal
to return
the original value.
This method should not be overridden.
index
- index of the attribute.
public boolean isAttributePopulated(java.lang.String attributeName)
attributeName
- the name of the attribute.
protected boolean isAttributePopulated(int index)
index
- the attribute index.
protected void setLocked(boolean lockedState)
This method is protected since users should call lock
to place the row into the correct locked state.
lockedState
- set to true to lock the row.public boolean isLocked()
An Entity Object is locked if its corresponding database row is locked. This method should not be overridden.
isLocked
in interface Entity
true
if the row is locked; false otherwise.public boolean isInCache()
public byte getEntityState()
STATUS_UNMODIFIED
- if this Entity Object originated in
the database and is unmodified,
or if modifications have been committed to the database.STATUS_MODIFIED
- if this Entity Object originated in the
database, and has been modified in the current transaction.STATUS_NEW
- if this Entity Object is new in the current
transaction.STATUS_DELETED
- if this Entity Object has been deleted
in the current transaction.STATUS_DEAD
- if this Entity Object is new in the current
transaction and has been deleted.
getEntityState
in interface Entity
public byte getPostState()
STATUS_UNMODIFIED
- if this Entity Object has been
queried from the database and is unchanged,
or if it has been posted to the database.STATUS_MODIFIED
- if this Entity Object has been
queried from the database and has changed.STATUS_NEW
- if this Entity Object is new and not yet
posted to the database.STATUS_INITIALIZED
- if this Entity Object is new and the client code
marks it to be temporary by calling Row.setNewRowState method. STATUS_DELETED
- if this Entity Object has been marked
for deletion.STATUS_DEAD
- if this Entity Object is new, but has been
deleted.
getPostState
in interface Entity
public static java.lang.String getStateAsString(int state)
Row
protected void markViewAccessorsDirty(java.lang.String[] attrNames)
markViewAccessorsDirty
in class RowImpl
protected void donePostingAll(TransactionEvent e)
protected void handlePostChangesError()
For example, when a user performs an operation (such as a commit) that posts changes, the framework will go through each EntityImpl instance that was modified during this transaction and call postChanges() to post the changes to database. If something goes wrong during this process and an exception is caught, then the framework notifies those EntityImpls by calling handlePostChangesError. The default implementation of handlePostChangesError essentially restores the EntityImpl's state.
In a composition post cycle, when the posting of one of the detail Entities throws an exception, the framework calls this method on the master Entity which internally calls this method on all of the composite Entities
A user can create a custom EntityImpl (by extending EntityImpl), and handle such an error differently from the default implemention by overriding handlePostChangesError and adding custom error-handling logic.
If this method is overridden, then the default implementation must be called with super.handlePostChangesError() to restore the Entity post states, as well as notify posted "child" Entities to handle post changes errors.
public int getAttributeIndexOf(java.lang.String name)
getAttributeIndexOf
in interface AttributeList
getAttributeIndexOf
in class RowImpl
name
- an attribute name.
name
.
NoDefException
- if this Entity Object does not have an attribute of the given name.public java.lang.String[] getAttributeNames()
AttributeList
getAttributeNames
in interface AttributeList
public java.lang.Object[] getAttributeValues()
AttributeList
getAttributeValues
in interface AttributeList
public void revert()
Calling this method will either reset the attribute values
to their database values or revert them to their default
values. If the Entity Object is posted, all the attributes revert to the
to unread state, so that a subsequent
getAttribute
call
will refresh all attributes from the database.
revert
in interface Entity
getAttribute(int index)
public void refresh(int refMode)
Row
refreshMode
should be a combination of REFRESH_...
.
See REFRESH_...
constants for further information.
refresh
in interface Row
refMode
- the refresh mode.public void lock()
If the row is new or already locked by this Entity Object, or if the transaction's locking mode is LOCK_NONE, this method has no effect.
If this Entity Object is contained by another (that is, it is part of a composition association and has a master Entity Object), this method locks the top-most Entity Object in the chain of containers before attempting to lock itself.
This method should not be overridden unless the application is maintaining Entity lock states.
lock
in interface Row
lock
in class RowImpl
AlreadyLockedException
- if the row is locked by another user or transaction.
DeadEntityAccessException
- if the Entity Object is
marked "unusable" or is STATUS_DEAD.protected void lockTopLevelEntity()
protected void refreshFKInNewContainees()
public void addTransactionPostListener(TransactionPostListener listener)
listener
- the listener to be added.public void addTransactionPostListenerNoCheck(TransactionPostListener listener)
Adds a listener to the list of post operation listeners without
first checking it the Entity Object is already present.
This method is faster than
addTransactionPostListener
,
but should
not be used if the listener might already be listed.
Typically, child Entities defined by composition associations are added
to this list, once they are modified and validated.
listener
- the listener to be added.addTransactionPostListener(TransactionPostListener listener)
protected void addToTransactionManager()
Subclasses that manage their own transaction ordering should invoke this method to add this Entity instance to its transaction manager instead of calling the manager's add methods.
public void removeTransactionPostListener(TransactionPostListener listener)
Removes a listener from the list of post operation listeners.
listener
- the listener to be removed.DBTransaction
,
ValidationManager
public void postChanges(TransactionEvent e)
Depending on the post-state of this Entity Object, this method calls
doDML
with the
DML_DELETE, DML_UPDATE, or DML_INSERT flags.
In case this Entity Object is part of a composition association, this method
calls postChanges
on all
Entities that are part of the
TransactionPostListener
list. Note that for delete, postChanges() on the child Entities are called
before doDML() is called on this Entity Object. For updates and inserts,
child Entities
are posted after this Entity Object's doDML() is called.
The postChanges method calls doDML and manages the post state. To implement different behavior, it is recommended that developers override doDML or one of it's called methods (see javadoc for doDML), instead of postChanges. For example, the following code sample overrides doDML and uses postChanges to get the detail Entities and post them to the database.
public void doDML(int operation, TransactionEvent e) { RowIterator details = getDetails(); while (details.hasNext()) { ((EntityImpl)details.next()).postChanges(e); } super.doDML(operation, e); }
If the requirement is to only set attributes during the DML phase like say history attribute, then it should be done in prepareForDML() method so that it works consistently when this entity is posted in batch-mode or not. prepareForDML() method is invoked by the framework before doDML() and in case of post cycle from the transaction, the transaction calls prepareForDML() on all entities in the transaction list followed by doDML() on all those entities.
postChanges
in interface TransactionPostListener
e
- this Entity Object's transaction event.doDML(int, TransactionEvent)
,
TransactionPostListener.postChanges(TransactionEvent e)
,
TransactionPostListener
protected void doDMLForCascadeUpdate(TransactionEvent e, java.util.ArrayList tpl, java.util.ArrayList ecList, boolean startingEntity)
Special case DML for the case where PK attribute(s) are being updated for an entity which is also a master in an association which has cascade update turned on. In this case, the master needs to first clone it's row in the DB with the new Pk, move all the details to this new row with the new PK and then remove the existing mater row from the DB.
Note that this method should handle DML for this entity's composition children, if any. This list is passed in in 'tpl'.
e
- TransactionEvent for this DMLtpl
- An array of Transaction Listeners that conatins cascade updated details.ecList
- List of entities with batch mode turned on. This list is prepared
by the framework and should not be 'modified'.startingEntity
- true if postChanges() was directly called on this entity.protected void populateAttribute(int index, java.lang.Object value)
Sets an attribute's value but does not mark it as updated. This method is called by query collection when populating a row with data. This is a framework-internal function and must not be called directly in client code except in the case of a composite Entity.
In a composite Entity, one Entity is comprised of two or more other Entities. An example of a composite Entity would be an Employee Entity which is comprised of a Person Entity and an Assignment Entity. The populateAttribute method could be used to populate Person and Assignment attributes when the Employee attributes are read-in.
populateAttribute
in class RowImpl
index
- the index of the attribute to populate.value
- the value to place in the attribute.protected void populateAttribute(int index, java.lang.Object value, boolean sendNotification, boolean markAsChanged)
Sets an attribute's value and optionally mark it as updated and optionally send events to listeners about the change. Note that this method avoids all validations written in the attribute-setter or rules installed for this attribute.
Invoke this method from a sub-class if the sub-class is implementing it's own data-source. This method may also be used by a sub-class to implement refresh-on-update/refresh-on-insert features if the sub-class is implementing it's own data-sink.
index
- a 1-based index into the columns.value
- the value for the column.sendNotification
- notify the dependent ViewObjects that this attribute has changedmarkAsChanged
- mark this attribute as changed so that it's picked up by doDML()
for actual database updates.public void populateAttribute(int index, java.lang.Object value, boolean sendNotification, boolean markAsChanged, boolean saveOriginal)
Sets an attribute's value and optionally mark it as updated and optionally send events to listeners about the change. Note that this method avoids all validations written in the attribute-setter or rules installed for this attribute.
Invoke this method from a sub-class if the sub-class is implementing it's own data-source. This method may also be used by a sub-class to implement refresh-on-update/refresh-on-insert features if the sub-class is implementing it's own data-sink.
index
- a 1-based index into the columns.value
- the value for the column.sendNotification
- notify the dependent ViewObjects that this attribute has changedmarkAsChanged
- mark this attribute as changed so that it's picked up by doDML()
for actual database updates.saveOriginal
- indicates if this method should cache the original value of
this attribute (as fetched) in the entity for refresh, lock and other usages. By
default most callers should pass this flag as true when modifying an entity attribute
value for updates (without affecting the entity states).protected void populateAttributeAsChanged(int index, java.lang.Object value)
Sets an attribute's value and also marks the attribute as changed in this row. Primary key attributes should not be set using populateAttribute apis.
This method is called by query collection when populating a row with data. This is a framework-internal function and must not be called directly in client code except in the case of a composite Entity or defaulting. This method avoids all programmatic and declarative validations on an attribute and still sets the data value for the attribute and marks the attribute as changed so that the value is posted during entity DML.
In a composite Entity, one enitity is comprised of two or more other Entities. An example of a composite Entity would be an Employee Entity which is comprised of a Person Entity and an Assignment Entity. The populateAttribute method could be used to populate Person and Assignment attributes when the Employee attributes are read-in.
This method does not change Entity Validation, Post or Transaction States. If this entity is not already marked invalid or not in the transaction's lists, this method will not mark the entity invalid or add it into transaction's lists.
index
- the index of the attribute to populate.value
- the value to place in the attribute.populateAttribute(int index, Object value)
protected boolean checkConsistency(SparseArray target, boolean lock)
In builds before 10.1.2, this method was not called and for modified
or removed Entities under optimisitic locking mode that were faulted in,
did not go through this consistency check. They would simply faultin any
db values on unmodified attributes. To achieve that old behavior, return
true in this method's override, when the entity is modified or removed
and lock parameter is sent in as false i.e.,
if (getPostState() != STATUS_UNMODIFIED && !lock) return true;
This method calls compare(SparseArray target) for comparision implementation.
This method returns true the return value from compare(target) call. If this method returns false, SQLBuilder will throw a RowInconsistentException to indicate difference in the database values for this entity.
protected boolean compare(SparseArray target)
This method returns true if the values are "the same" and false if they are not.
This method uses the ChangeIndicator attribute, if it is present, for the comparison. If ChangeIndicator is not present, then this method compares the data for overlapping columns between the entity and the given array.
Applications should override this method to implement custom comparision of specific attributes and avoid deep comparision of every entity attribute (in case changeIndicator attribute is not defined in this entity). If ChangeIndicator attribute is present only that attribute is compared to check if the target data matches this Entity. Also, if the application has mutli-part ChangeIndicator, this method should be used to implement comparision of multi-part ChangeIndicator attributes to speedup comparision.
protected void notifyAttributesChanged(int[] attrIndices, java.lang.Object[] values)
protected void notifyAttributesAndBlgChanged(int[] attrIndices, java.lang.Object[] values, boolean blg)
protected void notifyAttributesChanged(int[] attrIndices, java.lang.Object[] values, boolean markQCDirty)
public void afterCommit(TransactionEvent e)
TransactionListener
afterCommit
in interface TransactionListener
e
- a transaction event.protected void notifyEventRaised(java.lang.String eventName, java.util.ArrayList<EventAttrVals> payload)
public void outputEventString(EventInvocation event)
public boolean eventsDebugOnly()
public void afterRollback(TransactionEvent e)
Initiates a state change and polls listeners following a rollback operation.
Resets the EntityState to STATUS_DEAD or STATUS_UNMODIFIED for new or updated/removed rows respectively. Sets other status flags for this Entity Object so that it behaves just like it was fetched for the first time from the database.
This method should not be overridden.
afterRollback
in interface TransactionListener
e
- this Entity Object's transaction event.TransactionListener
public void afterRemove(TransactionEvent e)
afterRemove
in interface TransactionListener
e
- this Entity Object's transaction event.public boolean isTransientTransactionListener()
Transient listeners are automatically removed at the end of the transaction cycle; permanent listeners remain.
isTransientTransactionListener
in interface TransactionListener
true
if the listener is transient.public void beforeCommit(TransactionEvent e)
beforeCommit
in interface TransactionListener
e
- this Entity Object's transaction event.TransactionListener
public boolean isPostedToDB()
isPostedToDB
in interface TransactionPostListener
public void setPostedToDB(boolean b)
setPostedToDB
in interface TransactionPostListener
public int getTransPostHandle()
Implements the getTransPostHandle method for the transaction post listener
(TransactionPostListener
) interface.
Transaction post handle is a handle identifying a row object in the transaction post listener list. If the object does not have a transaction post handle, this method returns -1.
getTransPostHandle
in interface TransactionPostListener
TransactionPostListener
public void setTransPostHandle(int hdl)
Implements the setTransPostHandle method for the transaction post listener
(TransactionPostListener
) interface.
Transaction post handle is a handle identifying a row object in the transaction post listener list.
setTransPostHandle
in interface TransactionPostListener
hdl
- the transaction post handle.TransactionPostListener
public boolean isTransientTransactionPostListener()
TransactionPostListener
is transient or permanent.
Transient listeners are automatically removed at the end of the transaction cycle; permanent listeners remain.
isTransientTransactionPostListener
in interface TransactionPostListener
true
if the listener is transient.TransactionPostListener
public void beforeRollback(TransactionEvent e)
beforeRollback
in interface TransactionListener
e
- this Entity Object's transaction event.TransactionListener
protected void doSelect(boolean lock)
Performs SELECT/SELECT FOR UPDATE processing for the row. This method faults-in all column-values from the database object for this Entity Object.
This method can be overridden, for example, if you want to fill in the Entity Object values yourself.
lock
- true generates a "SELECT for UPDATE"protected void doSelectForAltKey(int keyIndex)
protected void prepareForDML(int operation, TransactionEvent e)
In case of batch mode, the modified entities in a Transaction are posted in two steps. First all entities are notified with prepareForDML() so that enties can make changes to any attributes like say history column that needs to be updated right before a DML occurs. Then the doDML() is called on the entities to execute the DML that includes any changes done to this entity during the prepareForDML() phase.
Incase of non-batch mode, postChanges() method on the Entity invokes prepareForDML() followed by doDML() for so that subclasses can consistently write custom setAttribute logic in prepareForDML() which will be posted to the database via a DML statement in doDML().
operation
- the integer representation of DML_INSERT, DML_UPDATE, or
DML_DELETE.e
- this Entity Object's transaction event.protected void prepareForBatchDML(int operation, TransactionEvent te)
This method also adjusts count of entities of a particular operation type to figure out if that operation has to be batched or not. Subclasses that override this method should call super.prepareForBatchDML() with the right operation type if this entity has consider batch operations.
protected void doDML(int operation, TransactionEvent e)
This method calls buildDMLStatement() to build the DML string based on the DML operation to be performed. For insert and update, the DML statement will only set the values that have been modified/changed. Other attributes do not participate in the DML.
Next, bindDMLStatement() is called to bind the DML statement with values to be updated and any other where-clause and returning parameters. After this, it executes the jdbc-statement or adds the current DML as a batch operation into a batched jdbc-statement, to be executed in Transaction.postChanges().
Here is sample code for overriding the doDML() method of any Entity Object's EntityImpl class to invoke a stored procedure, and pass arguments. For example, given a PL/SQL stored procedure like:
PROCEDURE updateDepartment( p_Deptno NUMBER, p_Dname VARCHAR2, p_Loc VARCHAR2 )
The code to call it when an Entity is updated would look like this: Note: The following code assumes only updates are possible, disallowing inserts and deletes by ignoring them in the doDML() method.
public void doDML(int operation, TransactionEvent e) { // Don't call the superclass. This procedure handles only updates //super.doDML(operation, e); CallableStatement stmt = null; // ONLY Perform updates, this Entity won't allow inserts/deletes. if (operation == DML_UPDATE) { // Prepare JDBC CallableStatement with the Stored Procedure Call String updateStr = "{call updateDepartment(?,?,?)}"; stmt = getDBTransaction().createCallableStatement(updateStr, 1); try { // Bind the Statement Parameters and Execute this Statement stmt.setString(1, getDeptno().toString()); stmt.setString(2, getDname().toString()); stmt.setString(3, getLoc().toString()); stmt.execute(); } catch (Exception ex) { throw new oracle.jbo.JboException(ex); } finally { try { stmt.close(); } catch (Exception nex) { } } } }
operation
- the integer representation of DML_INSERT, DML_UPDATE, or
DML_DELETE.e
- this Entity Object's transaction event.protected void doDMLWithLOBs(int operation, TransactionEvent e)
doDML
when the Entity
Object is found to contain LOBs.
The method uses a two stage process to first get the LOB locator, then post the LOB values individually. Typically, you would override this method when you want to take control over how to post the LOB.
operation
- DML_INSERT, DML_UPDATE or DML_DELETEe
- this Entity Object's transaction event.doDML(int operation, TransactionEvent e)
protected void vetoRemoveWithDetails(AttributeDef associationDef)
associationDef
- the association attribute defining the composition.
RemoveWithDetailsException
- if an attempt
is made to remove the master Entity Object before removing its
children.public void remove()
In the case of a composition where this Entity is a master, this method calls
vetoRemoveWithDetails
with an Association attribute that defines the composition,
to perform a check for existence of detail Rows.
Override this method to add your own business logic for the remove operation. For example, you can implement business logic that throws an exception that report why an Entity Object cannot be removed.
remove
in interface Row
remove
in class RowImpl
RemoveWithDetailsException
- if an attempt is made to
is made to remove the master Entity Object before removing its
children.public void removeFromCollection()
removeFromCollection().
removeFromCollection
in interface Row
InvalidOperException
- it is illegal to call this method on an
Entity row.public void removeAndRetain()
removeAndRetain().
removeAndRetain
in interface Row
InvalidOperException
- it is illegal to call this method on an
Entity row.public Key getKey()
Gets the Entity Object's Primary Key.
getKey
in interface Row
getKey
in class RowImpl
public boolean isAttributeUpdateable(int index)
READ_ONLY
, UPDATEABLE_WHILE_NEW
, or
UPDATEABLE
.
This method can be overridden. For example, override this method if you want to check the updateable status and you have dependencies between two or more attributes.
isAttributeUpdateable
in interface Row
isAttributeUpdateable
in class RowImpl
index
- the attribute's index (0-based).
false
if the attribute is READ_ONLY
;
true
if attribute is UPDATEABLE
or if the
attribute is UPDATEABLE_WHILE_NEW
and the current row is new.public boolean isDead()
Row
isDead
in interface Row
isDead
in class RowImpl
true
if the row is dead.public java.lang.String toString()
toString
in class java.lang.Object
public void domainToBeModified(DomainInterface d)
domainToBeModified
in interface DomainOwnerInterface
d
- name of the domain interface that is being changed.protected void appendXMLElementNodes(Document xmlDoc, Node node, int nContainees, long options, AttributeDefImpl[] attrs)
RowImpl
Override this method to perform custom XML-rendering on a Row.
xmlDoc
- name of the XML document where the node resides.node
- the name of the Row object node where new nodes will be appended.nContainees
- number of child levels deep to appendrow nodes.options
- a set of bit flags that will control the writeXML behavior.attrs
- an array of AttriubuteDefImpls.protected void appendXMLElementNodesForAttrs(Document xmlDoc, Node node, long options, AttributeDefImpl[] attrs)
protected void notifyEntityActivated(boolean bPostRequired)
Notification from the Transaction activation, when a new/inserted entity is activated from a passivation-store. By Default, this method posts this entity to the database if the bPostRequired argument is true, so that subsequent View Objects that are activated will see the new rows when their query is executed. This flag is true when this entity is a top-most entity in a composition and it is a new/inserted entity or one of it's primary key constituent attributes were modified before this entity was passivated.
protected boolean handleActivatedRowNotFound()
By default this method returns true so that this entity is cached in the entity cache.
protected boolean readAttrsFromXML(Element rowElt, AttributeDefImpl[] attrs, int ChangeState)
At the entity layer, the two meaningful values for this state are: XMLInterface.XML_OPT_CHANGES_ONLY or XMLInterface.XML_OPT_ALL_ROWS As of 904, if the value is CHANGES_ONLY, then the entity is being passivated/activated during the ApplicationModule passivation/activation call. Otherwise the entity is being activated due to commitAndSync() call triggered to sync up all AMs in a pool with the latest commits from the AM in hand.
public final void readXML(Element elem, int changeState)
readXML
in interface XMLInterface
readXML
in class RowImpl
elem
- name of the XML element.changeState
- the number of child levels deep to which data should be read.protected void doRefreshSQL(int operation, java.util.ArrayList refreshAttrs)
protected AttributeDefImpl[] getRefreshSQLKeyAttrs(int operation)
If the primary key attributes do not have refresh-on flag set for the given operation (Insert or Update), then these attributes are returned.
If one or more of the primary key attributes are also refresh-on-insert or update attributes and unique-key attributes are set on this entity, then this method returns an array of unique-key attributes. If not, then a warning is printed on the diagnostic and this method returns an array of primary keys.
Subclasses should override this method to return a customized list of attributes to use to create a where-clause for the select statement to be used to fetch refresh-on attributes. This method is called for entities that have refresh-on-insert or refresh-on-update attributes in the following cases:
protected AttributeDefImpl[] buildRefreshSQL(java.lang.StringBuffer sqlBuffer, int operation, AttributeDefImpl[] columns, AttributeDefImpl[] retKeycols, boolean withInto)
protected int bindDMLStatement(int operation, java.sql.PreparedStatement stmt, AttributeDefImpl[] allAttrs, AttributeDefImpl[] retCols, AttributeDefImpl[] retKeys, java.util.HashMap retrList, boolean batchMode) throws java.sql.SQLException
operation
- The current DML operation.stmt
- A jdbc PreparedStatement containing a SQL statement built in
buildDMLStatement()allAttrs
- An array of all attribute definitions for this entity.
This is passed in for performance reasons, so that the array is not built
again.retCols
- An array of non-primary key attributes that are marked
refresh-on-insert or refresh-on-update for an Insert or Update operation
respectively. It could be an empty array or null in case of Delete operation.retKeys
- An array of primary key attributes that are marked
refresh-on-insert or refresh-on-update for an Insert or Update operation
respectively. It could be an empty array or null in case of Delete operation.retrList
- Hashmap of bind-variable indices (as keys) and attribute definitions
(as values) that are being returned for refresh-on-insert/update in this DML.batchMode
- True if this DML statement will be used in creating a batchmode
jdbc statement.
java.sql.SQLException
protected java.lang.StringBuffer buildDMLStatement(int operation, AttributeDefImpl[] allAttrs, AttributeDefImpl[] retCols, AttributeDefImpl[] retKeys, boolean batchMode)
operation
- The current DML operation.allAttrs
- An array of all attribute definitions for this entity.
This is passed in for performance reasons, so that the array is not built
again.retCols
- An array of non-primary key attributes that are marked
refresh-on-insert or refresh-on-update for an Insert or Update operation
respectively. It could be an empty array or null in case of Delete operation.retKeys
- An array of primary key attributes that are marked
refresh-on-insert or refresh-on-update for an Insert or Update operation
respectively. It could be an empty array or null in case of Delete operation.batchMode
- True if this DML statement will be used in creating a batchmode
jdbc statement.
protected java.lang.Object getHistoryContextForAttribute(AttributeDefImpl attr)
public void setNewRowState(byte state)
setNewRowState
in interface Row
setNewRowState
in class RowImpl
state
- This could be STATUS_NEW or STATUS_INITIALIZED.public java.lang.Object getAttribute(int index, byte version)
protected boolean hasUpdatePrivilege(int index)
protected void buildWhereClause(java.lang.StringBuffer buffer, AttributeDefImpl[] keyCols, java.lang.Object rowid)
This method is called from SQLBuilder for:
buffer
- the area into which the WHERE Clause will be placed.keyCols
- the Primary key columns.rowid
- the ROWID for the ROW if known.protected int bindWhereClause(java.sql.PreparedStatement stmt, AttributeDefImpl[] keyCols, java.lang.Object rowid, int bindIndex) throws java.sql.SQLException
The presence or absence of the ROWID value determines whether the ROWID will be used for Row access.
stmt
- the statement to bind the columns to.keyCols
- the Primary key columns.rowid
- the ROWID for the row if known.bindIndex
- the baseline idx for performing the bind operations.
java.sql.SQLException
protected ViewObjectImpl findAssociationAccessorVO(AssociationDefImpl assocDef, java.lang.String voName, EntityAssociation eoAssoc)
protected ViewObjectImpl createAssociationAccessorVO(AssociationDefImpl assocDef, java.lang.String voName, EntityAssociation eoAssoc)
protected EntityRowSetImpl createAssociationAccessorRS(AssociationDefImpl assocDef, ViewObjectImpl accessorVO, Row masterRow, java.lang.Object[] values)
protected ViewObjectImpl findEntityViewLinkAccessorVO(AssociationDefImpl assocDef, java.lang.String voName, ViewDefImpl vDef, ViewLinkDefImpl vlDef)
protected ViewObjectImpl createEntityViewLinkAccessorVO(AssociationDefImpl assocDef, java.lang.String voName, ViewDefImpl vDef, ViewLinkDefImpl vlDef)
protected ViewRowSetImpl createEntityViewLinkAccessorRS(AssociationDefImpl assocDef, ViewObjectImpl accessorVO, Row masterRow, java.lang.Object[] values)
protected VariableValueManager getParentVariableManager()
getParentVariableManager
in class RowImpl
protected void variablesAdded()
variablesAdded
in class RowImpl
public RowSet createUnqualifiedRowSet()
protected void handleEffectiveDateOperations()
setEffectiveDateMode
.
public void validateDateEffectivity()
protected void handleEffectiveDateRowCreate()
protected void handleEffectiveDateRowDelete()
Row.setEffectiveDateMode(int)
protected void handleEffectiveDateRowUpdate()
Row.setEffectiveDateMode(int)
public ViewObject prepareVOToFetchPrevEffDtRows(int count)
public ViewObject prepareVOToFetchPrevEffDtRows()
public ViewObject prepareVOToFetchNextEffDtRows(int count)
public ViewObject prepareVOToFetchNextEffDtRows()
protected ViewObject prepareVOToFetchPrevEffDtSeqRows(int count)
protected ViewObject prepareVOToFetchPrevEffDtSeqRows()
protected ViewObject prepareVOToFetchNextEffDtSeqRows(int count)
protected ViewObject prepareVOToFetchNextEffDtSeqRows()
protected EntityImpl copyEffDtEntity()
protected void revertChangesToEffDtEntity()
protected void copyChangedNonKeyAttributes(EntityImpl targetRow)
targetRow
- The row that the changed attributes are copied to.protected java.lang.Object getEffDtInitEndDateValue()
public java.lang.Object getEffectiveDate()
getEffectiveDate
in class RowImpl
public void setEffectiveDateMode(int mode)
Row
setEffectiveDateMode
in interface Row
setEffectiveDateMode
in class RowImpl
mode
- One of the effective date mode constants.Row.EFFDT_NONE_MODE
,
Row.EFFDT_UPDATE_CORRECTION
,
Row.EFFDT_UPDATE_MODE
,
Row.EFFDT_UPDATE_OVERRIDE_MODE
,
Row.EFFDT_UPDATE_CHANGE_INSERT_MODE
,
Row.EFFDT_UPDATE_NEW_EARLIEST_CHANGE_MODE
,
Row.EFFDT_DELETE_MODE
,
Row.EFFDT_DELETE_THIS_CHANGE_MODE
,
Row.EFFDT_DELETE_NEXT_CHANGE_MODE
,
Row.EFFDT_DELETE_FUTURE_CHANGE_MODE
,
Row.EFFDT_DELETE_ZAP_MODE
protected boolean isViewAccessorAttribute(int indexAttribute)
indexAttribute
- The index of the attribute.
public ViewAccessorDef findViewAccessorDef(java.lang.String name)
ViewAccessorDef
with the specified name.
findViewAccessorDef
in class RowImpl
name
- The name of the ViewAccessorDef
.
ViewAccessorDef
protected ViewObject findOrCreateLocalViewObject(ViewAccessorDef vaDef)
vaDef
- The ViewAccessorDef
.
protected oracle.adf.share.security.authorization.PrivilegeHolder doAllowsOperation(java.lang.String operationName)
doAllowsOperation
in class RowImpl
public java.lang.String getLookupDescription(java.lang.String attrName)
public boolean isLookupIdValid(java.lang.String attrName, java.lang.Object newValue)
public static java.util.Comparator getComparator()
|
Oracle Fusion Middleware Java API Reference for Oracle ADF Model 11g Release 1 (11.1.1.4.0) E10653-05 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |