001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ejb.plugins.cmp.jdbc.bridge;
023:
024: import java.lang.reflect.Field;
025: import java.sql.PreparedStatement;
026: import java.sql.ResultSet;
027:
028: import org.jboss.ejb.plugins.cmp.bridge.CMPFieldBridge;
029: import org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager;
030: import org.jboss.ejb.plugins.cmp.jdbc.LockingStrategy;
031: import org.jboss.ejb.EntityEnterpriseContext;
032:
033: /**
034: * JDBCCMPFieldBridge represents one CMP field. This implementations of
035: * this interface handles setting are responsible for setting statement
036: * parameters and loading results for instance values and primary
037: * keys.
038: *
039: * Life-cycle:
040: * Tied to the EntityBridge.
041: *
042: * Multiplicity:
043: * One for each entity bean cmp field.
044: *
045: * @author <a href="mailto:dain@daingroup.com">Dain Sundstrom</a>
046: * @author <a href="mailto:loubyansky@hotmail.com">Alex Loubyansky</a>
047: *
048: * @version $Revision: 57209 $
049: */
050: public interface JDBCCMPFieldBridge extends JDBCFieldBridge,
051: CMPFieldBridge {
052: /**
053: * The index of the field among the table fields.
054: */
055: int getTableIndex();
056:
057: /**
058: * Returns the default field flags.
059: */
060: byte getDefaultFlags();
061:
062: /**
063: * TODO: Get rid of it
064: * @param flag
065: */
066: void addDefaultFlag(byte flag);
067:
068: /**
069: * @param ctx instance's context
070: * @return field value that was locked.
071: */
072: Object getLockedValue(EntityEnterpriseContext ctx);
073:
074: /**
075: * Optimistically locks field value.
076: */
077: public void lockInstanceValue(EntityEnterpriseContext ctx);
078:
079: /**
080: * @param lockingStrategy locking strategy assigned to the field
081: */
082: void setLockingStrategy(LockingStrategy lockingStrategy);
083:
084: /**
085: * Gets the field of the primary key object in which the value of this
086: * field is stored.
087: */
088: public Field getPrimaryKeyField();
089:
090: /**
091: * Gets the value of this field in the specified primaryKey object.
092: * @param primaryKey the primary key object from which this fields value
093: * will be extracted
094: * @return the value of this field in the primaryKey object
095: */
096: public Object getPrimaryKeyValue(Object primaryKey)
097: throws IllegalArgumentException;
098:
099: /**
100: * @return true if the field belongs to a relation table
101: */
102: boolean isRelationTableField();
103:
104: /**
105: * Sets the value of this field to the specified value in the
106: * specified primaryKey object.
107: * @param primaryKey the primary key object which the value
108: * will be inserted
109: * @param value the value for field that will be set in the pk
110: * @return the updated primary key object; the actual object may
111: * change not just the value
112: */
113: public Object setPrimaryKeyValue(Object primaryKey, Object value)
114: throws IllegalArgumentException;
115:
116: /**
117: * Sets the prepared statement parameters with the data from the
118: * primary key.
119: */
120: public int setPrimaryKeyParameters(PreparedStatement ps,
121: int parameterIndex, Object primaryKey)
122: throws IllegalArgumentException;
123:
124: /**
125: * Sets the prepared statement parameters with the data from the
126: * object. The object must be the type of this field.
127: */
128: public int setArgumentParameters(PreparedStatement ps,
129: int parameterIndex, Object arg);
130:
131: /**
132: * Loads the data from result set into the primary key object.
133: */
134: public int loadPrimaryKeyResults(ResultSet rs, int parameterIndex,
135: Object[] pkRef) throws IllegalArgumentException;
136: }
|