<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.5.0_19) on Wed Jan 13 14:48:07 CST 2010 -->
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<TITLE>
PropertiesReverseCustomizer (OpenJPA 1.2.2 API)
</TITLE>

<META NAME="keywords" CONTENT="org.apache.openjpa.jdbc.meta.PropertiesReverseCustomizer class">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="PropertiesReverseCustomizer (OpenJPA 1.2.2 API)";
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PropertiesReverseCustomizer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../org/apache/openjpa/jdbc/meta/NoneStrategyInstaller.html" title="class in org.apache.openjpa.jdbc.meta"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../../org/apache/openjpa/jdbc/meta/QueryResultMapping.html" title="class in org.apache.openjpa.jdbc.meta"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../../index.html?org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="PropertiesReverseCustomizer.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
org.apache.openjpa.jdbc.meta</FONT>
<BR>
Class PropertiesReverseCustomizer</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>org.apache.openjpa.jdbc.meta.PropertiesReverseCustomizer</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A>, <A HREF="../../../../../org/apache/openjpa/lib/util/Closeable.html" title="interface in org.apache.openjpa.lib.util">Closeable</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>PropertiesReverseCustomizer</B><DT>extends <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></DL>
</PRE>

<P>
Simple <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta"><CODE>ReverseCustomizer</CODE></A> that uses a properties file to
 to allow customization of basic class and field properties. The
 customizer uses the following keys:
 <ul>
 <li><i>&lt;table name&gt;.table-type</i>: Override the default type of the
 given table. Legal values are: <code>base, secondary,
 secondary-outer, association, subclass, none</code>. See
 the TABLE_XXX constants in <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta"><CODE>ReverseMappingTool</CODE></A> for descriptions.</li>
 <li><i>&lt;class name&gt;.rename</i>: Override the tool-generated class name
 with the given value. Use full class names, including package. Use a
 value of <code>none</code> to reject the class and leave the
 corresponding table unmapped.</li>
 <li><i>&lt;table name&gt;.class-name</i>: Assign the given fully-qualified
 class name to the type created from the given table. Use a value of
 <code>none</code> to prevent mapping this table. This property can be
 used in place of the <code>rename</code> property.
 <li><i>&lt;class name&gt;.identity</i>: Set this property to
 <code>datastore</code>, <code>builtin</code>, or the desired
 fully-qualified application identity class name to override the
 reverse mapping tool's default identity settings. If the class has been
 renamed, use the new name.</li>
 <li><i>&lt;class name&gt;.&lt;field name&gt;.rename</i>: Override the
 tool-generated field name with the given value. Use the field owner's
 full class name in the property key. The property value should be the
 new field name, without the preceding class name. Use a value of
 <code>none</code> to reject the generated mapping.</li>
 <li><i>&lt;table name&gt;.&lt;column name&gt;.field-name</i>: Assign the
 field name to use for the mapping of a particular column. If this is
 a multi-column mapping, any one of the columns can be used. Use a value
 of <code>none</code> to prevent the column (and associated columns)
 from being mapped. This property can be used in place of the
 <code>rename</code> property.
 <li><i>&lt;class name&gt;.&lt;field name&gt;.type</i>: The class name of
 the type to give the named field. Use full class names. If the field
 has been renamed, use the new name.</li>
 <li><i>&lt;class name&gt;.&lt;field name&gt;.value</i>: The initial value
 for the named field. The given string will be placed as-is in the
 generated Java code, so be sure to add quotes to strings, etc. If the
 field has been renamed, use the new name.</li>
 </ul> All keys are optional; if not specified, the customizer keeps the
 default value generated by the reverse mapping tool.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta">ReverseMappingTool</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#tool">tool</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#PropertiesReverseCustomizer()">PropertiesReverseCustomizer</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#close()">close</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoked when the customizer is no longer needed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.ClassMapping)">customize</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;cls)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Customize the given class information produced by the reverse mapping
 tool.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.FieldMapping)">customize</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Customize the given field information produced by the reverse mapping
 tool.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getClassCode(org.apache.openjpa.jdbc.meta.ClassMapping)">getClassCode</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;mapping)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a code template for the given class, or null to use the standard
 system-generated Java code.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getClassName(org.apache.openjpa.jdbc.schema.Table, java.lang.String)">getClassName</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table,
             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;defaultName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the fully-qualified class name to generate for the given table.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getDeclaration(org.apache.openjpa.jdbc.meta.FieldMapping)">getDeclaration</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a code template for the declaration of the given field, or null
 to use the system-generated default Java code.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getFieldCode(org.apache.openjpa.jdbc.meta.FieldMapping)">getFieldCode</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a code template for the get/set methods of the given field, or
 null to use the system-generated default Java code.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getFieldName(org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.schema.Column[], org.apache.openjpa.jdbc.schema.ForeignKey, java.lang.String)">getFieldName</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;dec,
             <A HREF="../../../../../org/apache/openjpa/jdbc/schema/Column.html" title="class in org.apache.openjpa.jdbc.schema">Column</A>[]&nbsp;cols,
             <A HREF="../../../../../org/apache/openjpa/jdbc/schema/ForeignKey.html" title="class in org.apache.openjpa.jdbc.schema">ForeignKey</A>&nbsp;fk,
             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;defaultName)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the field name used to map the given columns, or null to prevent
 the columns from being mapped.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getInitialValue(org.apache.openjpa.jdbc.meta.FieldMapping)">getInitialValue</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return code for the initial value for the given field, or null to use
 the default generated by the system.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getProperty(java.lang.String)">getProperty</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;key)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the property value for the given key, or null if none.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#getTableType(org.apache.openjpa.jdbc.schema.Table, int)">getTableType</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table,
             int&nbsp;defaultType)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the type of the given table, or the given default type.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#setConfiguration(java.util.Properties)">setConfiguration</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html" title="class or interface in java.util">Properties</A>&nbsp;props)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set configuration properties given by the user.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#setTool(org.apache.openjpa.jdbc.meta.ReverseMappingTool)">setTool</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta">ReverseMappingTool</A>&nbsp;tool)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the reverse mapping tool using this customizer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html#unmappedTable(org.apache.openjpa.jdbc.schema.Table)">unmappedTable</A></B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Notification that a table has gone unmapped.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="tool"><!-- --></A><H3>
tool</H3>
<PRE>
protected <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta">ReverseMappingTool</A> <B>tool</B></PRE>
<DL>
<DL>
</DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="PropertiesReverseCustomizer()"><!-- --></A><H3>
PropertiesReverseCustomizer</H3>
<PRE>
public <B>PropertiesReverseCustomizer</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="setConfiguration(java.util.Properties)"><!-- --></A><H3>
setConfiguration</H3>
<PRE>
public void <B>setConfiguration</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html" title="class or interface in java.util">Properties</A>&nbsp;props)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#setConfiguration(java.util.Properties)">ReverseCustomizer</A></CODE></B></DD>
<DD>Set configuration properties given by the user.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#setConfiguration(java.util.Properties)">setConfiguration</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="setTool(org.apache.openjpa.jdbc.meta.ReverseMappingTool)"><!-- --></A><H3>
setTool</H3>
<PRE>
public void <B>setTool</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta">ReverseMappingTool</A>&nbsp;tool)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#setTool(org.apache.openjpa.jdbc.meta.ReverseMappingTool)">ReverseCustomizer</A></CODE></B></DD>
<DD>Set the reverse mapping tool using this customizer. You can use
 the tool to see how it is configured, or to use utility methods the
 tool provides.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#setTool(org.apache.openjpa.jdbc.meta.ReverseMappingTool)">setTool</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getTableType(org.apache.openjpa.jdbc.schema.Table, int)"><!-- --></A><H3>
getTableType</H3>
<PRE>
public int <B>getTableType</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table,
                        int&nbsp;defaultType)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getTableType(org.apache.openjpa.jdbc.schema.Table, int)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return the type of the given table, or the given default type.
 See the TABLE_XXX constants in <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html" title="class in org.apache.openjpa.jdbc.meta"><CODE>ReverseMappingTool</CODE></A>.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getTableType(org.apache.openjpa.jdbc.schema.Table, int)">getTableType</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getClassName(org.apache.openjpa.jdbc.schema.Table, java.lang.String)"><!-- --></A><H3>
getClassName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getClassName</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table,
                           <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;defaultName)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getClassName(org.apache.openjpa.jdbc.schema.Table, java.lang.String)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return the fully-qualified class name to generate for the given table.
 Return null to prevent the table from being mapped. Return the given
 default name if it is acceptable.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getClassName(org.apache.openjpa.jdbc.schema.Table, java.lang.String)">getClassName</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="customize(org.apache.openjpa.jdbc.meta.ClassMapping)"><!-- --></A><H3>
customize</H3>
<PRE>
public void <B>customize</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;cls)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.ClassMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Customize the given class information produced by the reverse mapping
 tool. To change the application identity class, use
 <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html#generateClass(java.lang.String, java.lang.Class)"><CODE>ReverseMappingTool.generateClass(java.lang.String, java.lang.Class)</CODE></A> to creat the new class object.
 The class will not have any fields at the time of this call.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.ClassMapping)">customize</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getClassCode(org.apache.openjpa.jdbc.meta.ClassMapping)"><!-- --></A><H3>
getClassCode</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getClassCode</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;mapping)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getClassCode(org.apache.openjpa.jdbc.meta.ClassMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return a code template for the given class, or null to use the standard
 system-generated Java code. To facilitate template reuse, the
 following parameters can appear in your template; the proper values
 will be subtituted by the system:
 <ul>
 <li>${packageDec}: The package declaration, in the form
 "package &lt;package name &gt;;", or empty string if no package.</li>
 <li>${imports}: Imports for the packages used by the declared
 field types.</li>
 <li>${className}: The name of the class, without package.</li>
 <li>${extendsDec}: Extends declaration, in the form
 "extends &lt;superclass&gt;", or empty string if no superclass.</li>
 <li>${constructor}: A constructor that takes in all primary key fields
 of the class, or empty string if the class uses datastore identity.</li>
 <li>${fieldDecs}: Declarations of all the generated fields.</li>
 <li>${fieldCode}: Get/set methods for all the generated fields.</li>
 </ul>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getClassCode(org.apache.openjpa.jdbc.meta.ClassMapping)">getClassCode</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="customize(org.apache.openjpa.jdbc.meta.FieldMapping)"><!-- --></A><H3>
customize</H3>
<PRE>
public void <B>customize</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.FieldMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Customize the given field information produced by the reverse mapping
 tool.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#customize(org.apache.openjpa.jdbc.meta.FieldMapping)">customize</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldName(org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.schema.Column[], org.apache.openjpa.jdbc.schema.ForeignKey, java.lang.String)"><!-- --></A><H3>
getFieldName</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getFieldName</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html" title="class in org.apache.openjpa.jdbc.meta">ClassMapping</A>&nbsp;dec,
                           <A HREF="../../../../../org/apache/openjpa/jdbc/schema/Column.html" title="class in org.apache.openjpa.jdbc.schema">Column</A>[]&nbsp;cols,
                           <A HREF="../../../../../org/apache/openjpa/jdbc/schema/ForeignKey.html" title="class in org.apache.openjpa.jdbc.schema">ForeignKey</A>&nbsp;fk,
                           <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;defaultName)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getFieldName(org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.schema.Column[], org.apache.openjpa.jdbc.schema.ForeignKey, java.lang.String)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return the field name used to map the given columns, or null to prevent
 the columns from being mapped. Return the given default if it is
 acceptable.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getFieldName(org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.schema.Column[], org.apache.openjpa.jdbc.schema.ForeignKey, java.lang.String)">getFieldName</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>dec</CODE> - the class that will declare this field<DD><CODE>cols</CODE> - the column(s) this field will represent<DD><CODE>fk</CODE> - for relation fields, the foreign key to the related type</DL>
</DD>
</DL>
<HR>

<A NAME="getInitialValue(org.apache.openjpa.jdbc.meta.FieldMapping)"><!-- --></A><H3>
getInitialValue</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getInitialValue</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getInitialValue(org.apache.openjpa.jdbc.meta.FieldMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return code for the initial value for the given field, or null to use
 the default generated by the system.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getInitialValue(org.apache.openjpa.jdbc.meta.FieldMapping)">getInitialValue</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getDeclaration(org.apache.openjpa.jdbc.meta.FieldMapping)"><!-- --></A><H3>
getDeclaration</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getDeclaration</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getDeclaration(org.apache.openjpa.jdbc.meta.FieldMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return a code template for the declaration of the given field, or null
 to use the system-generated default Java code.
 To facilitate template reuse, the following parameters can appear in
 your template; the proper values will be subtituted by the system:
 <ul>
 <li>${fieldName}: The name of the field.</li>
 <li>${capFieldName}: The capitalized field name.</li>
 <li>${propertyName}: The field name without leading '_', if any.</li>
 <li>${fieldType}: The field's type name.</li>
 <li>${fieldValue}: The field's initial value, in the form
 " = &lt;value&gt;", or empty string if none.</li>
 </ul>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getDeclaration(org.apache.openjpa.jdbc.meta.FieldMapping)">getDeclaration</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldCode(org.apache.openjpa.jdbc.meta.FieldMapping)"><!-- --></A><H3>
getFieldCode</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getFieldCode</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/meta/FieldMapping.html" title="class in org.apache.openjpa.jdbc.meta">FieldMapping</A>&nbsp;field)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getFieldCode(org.apache.openjpa.jdbc.meta.FieldMapping)">ReverseCustomizer</A></CODE></B></DD>
<DD>Return a code template for the get/set methods of the given field, or
 null to use the system-generated default Java code.
 To facilitate template reuse, the following parameters can appear in
 your template; the proper values will be subtituted by the system:
 <ul>
 <li>${fieldName}: The name of the field.</li>
 <li>${capFieldName}: The capitalized field name.</li>
 <li>${propertyName}: The field name without leading '_', if any.</li>
 <li>${fieldType}: The field's type name.</li>
 <li>${fieldValue}: The field's initial value, in the form
 "= &lt;value&gt;", or empty string if none.</li>
 </ul>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#getFieldCode(org.apache.openjpa.jdbc.meta.FieldMapping)">getFieldCode</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="unmappedTable(org.apache.openjpa.jdbc.schema.Table)"><!-- --></A><H3>
unmappedTable</H3>
<PRE>
public boolean <B>unmappedTable</B>(<A HREF="../../../../../org/apache/openjpa/jdbc/schema/Table.html" title="class in org.apache.openjpa.jdbc.schema">Table</A>&nbsp;table)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#unmappedTable(org.apache.openjpa.jdbc.schema.Table)">ReverseCustomizer</A></CODE></B></DD>
<DD>Notification that a table has gone unmapped. You can map the table
 yourself using this method. When mapping, use
 <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html#generateClass(java.lang.String, java.lang.Class)"><CODE>ReverseMappingTool.generateClass(java.lang.String, java.lang.Class)</CODE></A> to create the class,
 <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseMappingTool.html#newClassMapping(java.lang.Class, org.apache.openjpa.jdbc.schema.Table)"><CODE>ReverseMappingTool.newClassMapping(java.lang.Class, org.apache.openjpa.jdbc.schema.Table)</CODE></A> to create the class metadata,
 and then <A HREF="../../../../../org/apache/openjpa/jdbc/meta/ClassMapping.html#addDeclaredFieldMapping(java.lang.String, java.lang.Class)"><CODE>ClassMapping.addDeclaredFieldMapping(java.lang.String, java.lang.Class)</CODE></A> to add field
 metadata.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#unmappedTable(org.apache.openjpa.jdbc.schema.Table)">unmappedTable</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if you map the table, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="close()"><!-- --></A><H3>
close</H3>
<PRE>
public void <B>close</B>()</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#close()">ReverseCustomizer</A></CODE></B></DD>
<DD>Invoked when the customizer is no longer needed.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html#close()">close</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/jdbc/meta/ReverseCustomizer.html" title="interface in org.apache.openjpa.jdbc.meta">ReverseCustomizer</A></CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../org/apache/openjpa/lib/util/Closeable.html#close()">close</A></CODE> in interface <CODE><A HREF="../../../../../org/apache/openjpa/lib/util/Closeable.html" title="interface in org.apache.openjpa.lib.util">Closeable</A></CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="getProperty(java.lang.String)"><!-- --></A><H3>
getProperty</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getProperty</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;key)</PRE>
<DL>
<DD>Return the property value for the given key, or null if none.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PropertiesReverseCustomizer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../org/apache/openjpa/jdbc/meta/NoneStrategyInstaller.html" title="class in org.apache.openjpa.jdbc.meta"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../../org/apache/openjpa/jdbc/meta/QueryResultMapping.html" title="class in org.apache.openjpa.jdbc.meta"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../../index.html?org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="PropertiesReverseCustomizer.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>
Copyright &#169; 2006-2010 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.
</BODY>
</HTML>
