de.mguennewig.pobjects.metadata
Class TypeRef

java.lang.Object
  extended by de.mguennewig.pobjects.metadata.TypeRef
All Implemented Interfaces:
Type

public final class TypeRef
extends java.lang.Object
implements Type

A type which references a declaration of a type.

Author:
Michael Günnewig

Field Summary
 
Fields inherited from interface de.mguennewig.pobjects.metadata.Type
CLASS_NAME, TYPE_NAME
 
Constructor Summary
TypeRef(TypeDecl typeDecl)
          Creates a new type reference.
 
Method Summary
 void addMap(MapItem item)
          Adds a mapping to this type.
 void checkConstraints(Record rec, Column column)
          Checks all constraints imposed on values of this type.
 void checkSyntax(java.lang.String value)
          
 ClassDecl expand(ClassDecl classDecl, Field field)
          Expands this type to an extra table.
 java.lang.String format(java.lang.Object value)
          Map value to its string representation.
 java.lang.String formatNative(java.lang.Object value)
          Map value from its `native' string representation to its internal representation based on the type.
 Description getDescription()
          
 java.lang.Class<?> getJavaClass()
          Returns the Java class instance that is being used for the values of this type.
 java.util.List<MapItem> getMap()
          Returns the list of mappings.
 int getMaxFieldSize()
          Returns the maximum field size required to enter a value of this type.
 java.lang.Object getResult(JdbcContainer db, java.sql.ResultSet rs, int column)
          Reads the value for this type from the result set.
 int getResultInc()
          Returns the number of columns read from the ResultSet.
 Type getType()
          Returns the type of the referenced type declaration.
 java.lang.String getTypeClass()
          Returns the fully qualified class name of the type class that is used instead of this one.
 TypeDecl getTypeDecl()
          Returns the referenced type declaration.
 boolean isScalar()
          Tests whether this type is scalar.
 boolean labelToValue(java.lang.String label, ObjectRef valueRef)
          Maps label to its value if defined.
 java.lang.String name(int variant)
          Returns different names depending on variant for the code generator.
 java.lang.Object parse(java.lang.String value)
          Map value to its internal representation.
 java.lang.Object parseNative(java.lang.String value)
          Parse value according to the `native' string representation of this type.
static Type resolve(Type type)
          Resolves any type references and returns the direct type.
 void setDescription(Description description)
          
 void setParam(JdbcContainer db, java.sql.PreparedStatement statm, int pos, java.lang.Object value)
          Sets the parameter(s) starting at startPos.
 void setTypeClass(java.lang.String typeClass)
          Sets the fully qualified class name of the type class that should be used instead of this one.
 boolean valueToLabel(java.lang.Object value, ObjectRef labelRef)
          Maps value to its label if defined.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TypeRef

public TypeRef(TypeDecl typeDecl)
Creates a new type reference.

Method Detail

getTypeDecl

public TypeDecl getTypeDecl()
Returns the referenced type declaration.


getType

public Type getType()
Returns the type of the referenced type declaration.


addMap

public void addMap(MapItem item)
Adds a mapping to this type.

Specified by:
addMap in interface Type

getMap

public java.util.List<MapItem> getMap()
Returns the list of mappings.

Specified by:
getMap in interface Type
See Also:
Type.addMap(MapItem), Type.labelToValue(String,ObjectRef), Type.valueToLabel(Object,ObjectRef)

getDescription

public Description getDescription()

Specified by:
getDescription in interface Type

setDescription

public void setDescription(Description description)

Specified by:
setDescription in interface Type

checkConstraints

public void checkConstraints(Record rec,
                             Column column)
                      throws PObjConstraintException
Checks all constraints imposed on values of this type.

Specified by:
checkConstraints in interface Type
Parameters:
rec - The record which contains column.
column - The column of rec which has this type.
Throws:
PObjConstraintException - when any constraint imposed on values of this type is not fulfilled.

expand

public ClassDecl expand(ClassDecl classDecl,
                        Field field)
Expands this type to an extra table.

Non-scalar types can not be saved directly in a field, so they will be expanded to another table whose declaration will be generated by this method.

Specified by:
expand in interface Type
Returns:
For a non-scalar type the table declaration, which will be used to save the data into. For scalar types null.
See Also:
Type.isScalar()

isScalar

public boolean isScalar()
Tests whether this type is scalar.

Specified by:
isScalar in interface Type
See Also:
Type.expand(de.mguennewig.pobjects.metadata.ClassDecl, de.mguennewig.pobjects.metadata.Field)

getJavaClass

public java.lang.Class<?> getJavaClass()
Returns the Java class instance that is being used for the values of this type.

Specified by:
getJavaClass in interface Type

getMaxFieldSize

public int getMaxFieldSize()
Returns the maximum field size required to enter a value of this type.

This is the maximum number of characters required to enter a string representation of all valid values of this type. The typical size of an input field may be much smaller.

Specified by:
getMaxFieldSize in interface Type

labelToValue

public boolean labelToValue(java.lang.String label,
                            ObjectRef valueRef)
Maps label to its value if defined.

Specified by:
labelToValue in interface Type
Parameters:
label - The label for which the corresponding value should be returned.
valueRef - An optional reference which will be used to return the corresponding value if it exists.
Returns:
true if the label could mapped, otherwise false.
See Also:
Type.valueToLabel(Object,ObjectRef), Type.addMap(MapItem)

valueToLabel

public boolean valueToLabel(java.lang.Object value,
                            ObjectRef labelRef)
Maps value to its label if defined.

Specified by:
valueToLabel in interface Type
Parameters:
value - The internal object in the type's set for which the corresponding label should be returned.
labelRef - An optional reference which will be used to return the corresponding label if it exists.
Returns:
true if the value could mapped, otherwise false.
See Also:
Type.labelToValue(String,ObjectRef), Type.addMap(MapItem)

formatNative

public java.lang.String formatNative(java.lang.Object value)
Map value from its `native' string representation to its internal representation based on the type.

This mapping is a one-to-one mapping of string values to the type's value set, without any translation based on MapItems associated with the type.

For example, an integer type's implementation would accept a value like `1' and translate it to the string `&dblquote;1&dblquote;', independent of any label associated with the value `1'.

The value null is always mapped to the empty string.

Specified by:
formatNative in interface Type

format

public java.lang.String format(java.lang.Object value)
Map value to its string representation.

If value matches one of the MapItem.getValue()s associated with this type, then it return its associated label. Otherwise, delegate the job to Type.formatNative(java.lang.Object).

Specified by:
format in interface Type
See Also:
Type.addMap(MapItem), Type.formatNative(Object), Type.valueToLabel(Object,ObjectRef)

parseNative

public java.lang.Object parseNative(java.lang.String value)
                             throws PObjSyntaxException
Parse value according to the `native' string representation of this type.

This representation is a one-to-one mapping of the type's value set to strings, without any translation based on MapItems associated with the type.

For example, an integer type's implementation would accept a value like `"1"' and translate it to an integer object, but would reject a label like `"Yes"' that may be associated with the value `1'.

Specified by:
parseNative in interface Type
Throws:
PObjSyntaxException - if value couldn't be parsed as a string representation of this type.
See Also:
Type.addMap(MapItem), Type.parse(String)

getResult

public java.lang.Object getResult(JdbcContainer db,
                                  java.sql.ResultSet rs,
                                  int column)
Reads the value for this type from the result set.

Specified by:
getResult in interface Type
See Also:
Type.getResultInc()

getResultInc

public int getResultInc()
Returns the number of columns read from the ResultSet.

Specified by:
getResultInc in interface Type
See Also:
Type.getResult(JdbcContainer,ResultSet,int)

setParam

public void setParam(JdbcContainer db,
                     java.sql.PreparedStatement statm,
                     int pos,
                     java.lang.Object value)
              throws java.sql.SQLException
Sets the parameter(s) starting at startPos.

This method is the counterpart to Type.getResult(JdbcContainer,ResultSet,int) and Type.getResultInc().

Specified by:
setParam in interface Type
Throws:
java.sql.SQLException - if any database error occurs.

checkSyntax

public void checkSyntax(java.lang.String value)
                 throws PObjSyntaxException

Specified by:
checkSyntax in interface Type
Throws:
PObjSyntaxException

parse

public java.lang.Object parse(java.lang.String value)
                       throws PObjSyntaxException
Map value to its internal representation.

If value matches one of the labels associated with this type, then it returns its associated value. Otherwise, delegates the job to Type.parseNative(java.lang.String).

Furthermore the syntax of the value is checked.

Specified by:
parse in interface Type
Throws:
PObjSyntaxException - if value couldn't be parsed as a string representation of this type.
See Also:
Type.addMap(MapItem), Type.labelToValue(String,ObjectRef), Type.checkSyntax(String), Type.parseNative(String)

getTypeClass

public java.lang.String getTypeClass()
Returns the fully qualified class name of the type class that is used instead of this one.

Specified by:
getTypeClass in interface Type
Returns:
null if this type class is used, otherwise the fully qualified class name that should be used.

setTypeClass

public void setTypeClass(java.lang.String typeClass)
Sets the fully qualified class name of the type class that should be used instead of this one.

Specified by:
setTypeClass in interface Type

name

public java.lang.String name(int variant)
Returns different names depending on variant for the code generator.

NOTE: The variant Type.TYPE_NAME must be returned by the sub-class.

Specified by:
name in interface Type

resolve

public static Type resolve(Type type)
Resolves any type references and returns the direct type.

Parameters:
type - The type to resolve to the plain type.
Returns:
The resolved type or the given one if it was not a TypeRef.