001 package com.sptci.rwt;
002
003 import java.util.Collection;
004 import java.util.Collections;
005 import java.util.Map;
006 import java.util.LinkedHashMap;
007
008 /**
009 * A metadata object that represents foreign key constraint types.
010 *
011 * <p>© Copyright 2007 <a href='http://sptci.com/' target='_new'>Sans Pareil Technologies, Inc.</a></p>
012 * @author Rakesh Vidyadharan 2007-09-26
013 * @version $Id: ForeignKeyMetaData.java 4123 2008-05-25 21:49:01Z rakesh $
014 */
015 public class ForeignKeyMetaData extends KeyMetaData
016 {
017 /**
018 * The enumeration of <code>UPDATE_RULE</code> and <code>DELETE_RULE</code>
019 * values for keys.
020 */
021 public enum Rule { NoAction, Cascade, SetNull, SetDefault, Restrict };
022
023 /**
024 * The enumeration of <code>deferrability</code> for keys.
025 */
026 public enum Deferrability
027 { InitiallyDeferred, InitiallyImmediate, NotDeferrable };
028
029 /**
030 * The schema in which the table whose column this foreign key references
031 * exists.
032 */
033 private String referencedSchema;
034
035 /**
036 * The table whose column this foreign key references.
037 */
038 private String referencedTable;
039
040 /**
041 * The columns that comprise this foreign key and the referenced columns.
042 * The map is defined as <ColumnMetaData,String> with the
043 * <code>key</code> indicating the column on the table and the
044 * <code>value</code> indicating the referenced column on {@link
045 * #referencedTable}.
046 */
047 private Map<ColumnMetaData,String> columnMappings =
048 new LinkedHashMap<ColumnMetaData,String>();
049
050 /**
051 * The <code>UPDATE_RULE</code> for this key.
052 */
053 private Rule updateRule;
054
055 /**
056 * The <code>DELETE_RULE</code> for this key.
057 */
058 private Rule deleteRule;
059
060 /**
061 * The <code>DEFERRABILITY</code> of this key.
062 */
063 private Deferrability deferrability;
064
065 /**
066 * Returns {@link #referencedTable}.
067 *
068 * @return The value/reference of/to referencedTable.
069 */
070 public String getReferencedTable()
071 {
072 return referencedTable;
073 }
074
075 /**
076 * Returns {@link #referencedSchema}.
077 *
078 * @return The value/reference of/to referencedSchema.
079 */
080 public String getReferencedSchema()
081 {
082 return referencedSchema;
083 }
084
085 /**
086 * Set {@link #referencedSchema}.
087 *
088 * @param referencedSchema The value to set.
089 */
090 protected void setReferencedSchema( final String referencedSchema )
091 {
092 this.referencedSchema = referencedSchema;
093 }
094
095 /**
096 * Set {@link #referencedTable}.
097 *
098 * @param referencedTable The value to set.
099 */
100 protected void setReferencedTable( final String referencedTable )
101 {
102 this.referencedTable = referencedTable;
103 }
104
105 /**
106 * Returns {@link #columns}.
107 *
108 * @return The value/reference of/to columns.
109 */
110 public Map<ColumnMetaData,String> getColumnMappings()
111 {
112 return Collections.unmodifiableMap( columnMappings );
113 }
114
115 /**
116 * Set {@link #columns}.
117 *
118 * @see #setColumns
119 * @param columns The value to set.
120 */
121 protected void setColumnMappings( final Map<ColumnMetaData,String> columns )
122 {
123 this.columnMappings.clear();
124 this.columnMappings.putAll( columns );
125 setColumns( this.columnMappings.keySet() );
126 }
127
128 /**
129 * Add the specified values to the {@link #columns} map.
130 *
131 * @see #setColumns
132 * @param cmd The column meta data key to add.
133 * @param column The referenced column name to add.
134 */
135 protected void addColumn( final ColumnMetaData cmd, final String column )
136 {
137 columnMappings.put( cmd, column );
138 setColumns( columnMappings.keySet() );
139 }
140
141 /**
142 * Returns {@link #updateRule}.
143 *
144 * @return The value/reference of/to updateRule.
145 */
146 public String getUpdateRule()
147 {
148 return updateRule.toString();
149 }
150
151 /**
152 * Set {@link #updateRule}.
153 *
154 * @param updateRule The value to set.
155 */
156 protected void setUpdateRule( final Rule updateRule )
157 {
158 this.updateRule = updateRule;
159 }
160
161 /**
162 * Returns {@link #deleteRule}.
163 *
164 * @return The value/reference of/to deleteRule.
165 */
166 public String getDeleteRule()
167 {
168 return deleteRule.toString();
169 }
170
171 /**
172 * Set {@link #deleteRule}.
173 *
174 * @param deleteRule The value to set.
175 */
176 protected void setDeleteRule( final Rule deleteRule )
177 {
178 this.deleteRule = deleteRule;
179 }
180
181 /**
182 * Returns {@link #deferrability}.
183 *
184 * @return The value/reference of/to deferrability.
185 */
186 public String getDeferrability()
187 {
188 return deferrability.toString();
189 }
190
191 /**
192 * Set {@link #deferrability}.
193 *
194 * @param deferrability The value to set.
195 */
196 protected void setDeferrability( final Deferrability deferrability )
197 {
198 this.deferrability = deferrability;
199 }
200 }