getFullTextIndex() is not expected to return null, so throw an informative
exception if it would rather than letting the caller NPE. Also switched to the Zell-style single-letter studly _pClass.
This commit is contained in:
@@ -68,17 +68,17 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
/**
|
/**
|
||||||
* Creates a marshaller for the specified persistent object class.
|
* Creates a marshaller for the specified persistent object class.
|
||||||
*/
|
*/
|
||||||
public DepotMarshaller (Class<T> pclass, PersistenceContext context)
|
public DepotMarshaller (Class<T> pClass, PersistenceContext context)
|
||||||
{
|
{
|
||||||
_pclass = pclass;
|
_pClass = pClass;
|
||||||
|
|
||||||
Entity entity = pclass.getAnnotation(Entity.class);
|
Entity entity = pClass.getAnnotation(Entity.class);
|
||||||
|
|
||||||
// see if this is a computed entity
|
// see if this is a computed entity
|
||||||
_computed = pclass.getAnnotation(Computed.class);
|
_computed = pClass.getAnnotation(Computed.class);
|
||||||
if (_computed == null) {
|
if (_computed == null) {
|
||||||
// if not, this class has a corresponding SQL table
|
// if not, this class has a corresponding SQL table
|
||||||
_tableName = _pclass.getName();
|
_tableName = _pClass.getName();
|
||||||
_tableName = _tableName.substring(_tableName.lastIndexOf(".")+1);
|
_tableName = _tableName.substring(_tableName.lastIndexOf(".")+1);
|
||||||
|
|
||||||
// see if there are Entity values specified
|
// see if there are Entity values specified
|
||||||
@@ -91,7 +91,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
|
|
||||||
// if the entity defines a new TableGenerator, map that in our static table as those are
|
// if the entity defines a new TableGenerator, map that in our static table as those are
|
||||||
// shared across all entities
|
// shared across all entities
|
||||||
TableGenerator generator = pclass.getAnnotation(TableGenerator.class);
|
TableGenerator generator = pClass.getAnnotation(TableGenerator.class);
|
||||||
if (generator != null) {
|
if (generator != null) {
|
||||||
context.tableGenerators.put(generator.name(), generator);
|
context.tableGenerators.put(generator.name(), generator);
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
|
|
||||||
// introspect on the class and create marshallers for persistent fields
|
// introspect on the class and create marshallers for persistent fields
|
||||||
ArrayList<String> fields = new ArrayList<String>();
|
ArrayList<String> fields = new ArrayList<String>();
|
||||||
for (Field field : _pclass.getFields()) {
|
for (Field field : _pClass.getFields()) {
|
||||||
int mods = field.getModifiers();
|
int mods = field.getModifiers();
|
||||||
|
|
||||||
// check for a static constant schema version
|
// check for a static constant schema version
|
||||||
@@ -110,7 +110,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
_schemaVersion = (Integer)field.get(null);
|
_schemaVersion = (Integer)field.get(null);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.log(Level.WARNING, "Failed to read schema version " +
|
log.log(Level.WARNING, "Failed to read schema version " +
|
||||||
"[class=" + _pclass + "].", e);
|
"[class=" + _pClass + "].", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
_allFields = fields.toArray(new String[fields.size()]);
|
_allFields = fields.toArray(new String[fields.size()]);
|
||||||
|
|
||||||
// now check for @Entity and @Table annotations on the entire superclass chain
|
// now check for @Entity and @Table annotations on the entire superclass chain
|
||||||
Class<?> iterClass = pclass;
|
Class<?> iterClass = pClass;
|
||||||
do {
|
do {
|
||||||
Table table = iterClass.getAnnotation(Table.class);
|
Table table = iterClass.getAnnotation(Table.class);
|
||||||
if (table != null) {
|
if (table != null) {
|
||||||
@@ -231,7 +231,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
*/
|
*/
|
||||||
public Class<T> getPersistentClass ()
|
public Class<T> getPersistentClass ()
|
||||||
{
|
{
|
||||||
return _pclass;
|
return _pClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -269,11 +269,19 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the {@link FullTextIndex} registered under the given name, or null if none.
|
* Return the {@link FullTextIndex} registered under the given name.
|
||||||
|
*
|
||||||
|
* @exception IllegalArgumentException thrown if the requested full text index does not exist
|
||||||
|
* on this record.
|
||||||
*/
|
*/
|
||||||
public FullTextIndex getFullTextIndex (String name)
|
public FullTextIndex getFullTextIndex (String name)
|
||||||
{
|
{
|
||||||
return _fullTextIndexes.get(name);
|
FullTextIndex fti = _fullTextIndexes.get(name);
|
||||||
|
if (fti == null) {
|
||||||
|
throw new IllegalStateException("Persistent class missing full text index " +
|
||||||
|
"[class=" + _pClass + ", index=" + name + "]");
|
||||||
|
}
|
||||||
|
return fti;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -335,7 +343,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
if (!hasPrimaryKey()) {
|
if (!hasPrimaryKey()) {
|
||||||
if (requireKey) {
|
if (requireKey) {
|
||||||
throw new UnsupportedOperationException(
|
throw new UnsupportedOperationException(
|
||||||
_pclass.getName() + " does not define a primary key");
|
_pClass.getName() + " does not define a primary key");
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -382,7 +390,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
for (int ii = 0; ii < _pkColumns.size(); ii++) {
|
for (int ii = 0; ii < _pkColumns.size(); ii++) {
|
||||||
fields[ii] = _pkColumns.get(ii).getField().getName();
|
fields[ii] = _pkColumns.get(ii).getField().getName();
|
||||||
}
|
}
|
||||||
return new Key<T>(_pclass, fields, values);
|
return new Key<T>(_pClass, fields, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -433,7 +441,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
}
|
}
|
||||||
|
|
||||||
// then create and populate the persistent object
|
// then create and populate the persistent object
|
||||||
T po = _pclass.newInstance();
|
T po = _pClass.newInstance();
|
||||||
for (FieldMarshaller fm : _fields.values()) {
|
for (FieldMarshaller fm : _fields.values()) {
|
||||||
if (!fields.contains(fm.getColumnName())) {
|
if (!fields.contains(fm.getColumnName())) {
|
||||||
// this field was not in the result set, make sure that's OK
|
// this field was not in the result set, make sure that's OK
|
||||||
@@ -451,8 +459,8 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
throw sqe;
|
throw sqe;
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
String errmsg = "Failed to unmarshall persistent object [pclass=" +
|
String errmsg = "Failed to unmarshall persistent object [class=" +
|
||||||
_pclass.getName() + "]";
|
_pClass.getName() + "]";
|
||||||
throw (SQLException)new SQLException(errmsg).initCause(e);
|
throw (SQLException)new SQLException(errmsg).initCause(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -486,7 +494,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Failed to assign primary key [type=" + _pclass + "]", e);
|
"Failed to assign primary key [type=" + _pClass + "]", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return idFields;
|
return idFields;
|
||||||
@@ -512,11 +520,11 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
{
|
{
|
||||||
if (_initialized) { // sanity check
|
if (_initialized) { // sanity check
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Cannot re-initialize marshaller [type=" + _pclass + "].");
|
"Cannot re-initialize marshaller [type=" + _pClass + "].");
|
||||||
}
|
}
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|
||||||
final SQLBuilder builder = ctx.getSQLBuilder(new DepotTypes(ctx, _pclass));
|
final SQLBuilder builder = ctx.getSQLBuilder(new DepotTypes(ctx, _pClass));
|
||||||
|
|
||||||
// perform the context-sensitive initialization of the field marshallers
|
// perform the context-sensitive initialization of the field marshallers
|
||||||
for (FieldMarshaller fm : _fields.values()) {
|
for (FieldMarshaller fm : _fields.values()) {
|
||||||
@@ -548,7 +556,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
|
|
||||||
// if we did not find a schema version field, complain
|
// if we did not find a schema version field, complain
|
||||||
if (_schemaVersion < 0) {
|
if (_schemaVersion < 0) {
|
||||||
log.warning("Unable to read " + _pclass.getName() + "." + SCHEMA_VERSION_FIELD +
|
log.warning("Unable to read " + _pClass.getName() + "." + SCHEMA_VERSION_FIELD +
|
||||||
". Schema migration disabled.");
|
". Schema migration disabled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -832,7 +840,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
FieldMarshaller<?> fm = _fields.get(fields[ii]);
|
FieldMarshaller<?> fm = _fields.get(fields[ii]);
|
||||||
if (fm == null) {
|
if (fm == null) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Unknown field on record [field=" + fields[ii] + ", pClass=" + _pclass + "]");
|
"Unknown field on record [field=" + fields[ii] + ", class=" + _pClass + "]");
|
||||||
}
|
}
|
||||||
columns[ii] = fm.getColumnName();
|
columns[ii] = fm.getColumnName();
|
||||||
}
|
}
|
||||||
@@ -939,7 +947,7 @@ public class DepotMarshaller<T extends PersistentRecord>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** The persistent object class that we manage. */
|
/** The persistent object class that we manage. */
|
||||||
protected Class<T> _pclass;
|
protected Class<T> _pClass;
|
||||||
|
|
||||||
/** The name of our persistent object table. */
|
/** The name of our persistent object table. */
|
||||||
protected String _tableName;
|
protected String _tableName;
|
||||||
|
|||||||
Reference in New Issue
Block a user