Clover Coverage Report - Impex Parent 1.0.21-SNAPSHOT (Aggregated)
Coverage timestamp: Tue Feb 8 2011 11:33:53 EST
../../../../../../img/srcFileCovDistChart0.png 0% of files have more coverage
49   382   32   1.81
10   169   0.65   27
27     1.19  
1    
 
  ForeignKey       Line # 39 49 0% 32 86 0% 0.0
 
No Tests
 
1    package org.apache.torque.engine.database.model;
2   
3    /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements. See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership. The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10    * with the License. You may obtain a copy of the License at
11    *
12    * http://www.apache.org/licenses/LICENSE-2.0
13    *
14    * Unless required by applicable law or agreed to in writing,
15    * software distributed under the License is distributed on an
16    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17    * KIND, either express or implied. See the License for the
18    * specific language governing permissions and limitations
19    * under the License.
20    */
21   
22    import java.util.ArrayList;
23    import java.util.Collections;
24    import java.util.Hashtable;
25    import java.util.List;
26    import java.util.Map;
27   
28    import org.apache.commons.collections.map.ListOrderedMap;
29    import org.xml.sax.Attributes;
30   
31    /**
32    * A class for information about foreign keys of a table.
33    *
34    * @author <a href="mailto:fedor.karpelevitch@home.com">Fedor</a>
35    * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
36    * @author <a href="mailto:monroe@dukece.com>Greg Monroe</a>
37    * @version $Id: ForeignKey.java,v 1.1 2007-10-21 07:57:27 abyrne Exp $
38    */
 
39    public class ForeignKey
40    {
41    private String foreignTableName;
42    private String name;
43    private String onUpdate;
44    private String onDelete;
45    private Table parentTable;
46    private List localColumns = new ArrayList(3);
47    private List foreignColumns = new ArrayList(3);
48    private Map options = Collections.synchronizedMap(new ListOrderedMap());
49   
50   
51    // the uppercase equivalent of the onDelete/onUpdate values in the dtd
52    private static final String NONE = "NONE";
53    private static final String SETNULL = "SETNULL";
54   
55    /**
56    * Imports foreign key from an XML specification
57    *
58    * @param attrib the xml attributes
59    */
 
60  0 toggle public void loadFromXML(Attributes attrib)
61    {
62  0 foreignTableName = attrib.getValue("foreignTable");
63  0 name = attrib.getValue("name");
64  0 onUpdate = attrib.getValue("onUpdate");
65  0 onDelete = attrib.getValue("onDelete");
66  0 onUpdate = normalizeFKey(onUpdate);
67  0 onDelete = normalizeFKey(onDelete);
68    }
69   
70    /**
71    * Normalizes the input of onDelete, onUpdate attributes
72    *
73    * @param attrib the attribute to normalize
74    * @return nomalized form
75    */
 
76  0 toggle private String normalizeFKey(String attrib)
77    {
78  0 if (attrib == null)
79    {
80  0 attrib = NONE;
81    }
82   
83  0 attrib = attrib.toUpperCase();
84  0 if (attrib.equals(SETNULL))
85    {
86  0 attrib = "SET NULL";
87    }
88  0 return attrib;
89    }
90   
91    /**
92    * Returns whether or not the onUpdate attribute is set
93    *
94    * @return true if the onUpdate attribute is set
95    */
 
96  0 toggle public boolean hasOnUpdate()
97    {
98  0 return !onUpdate.equals(NONE);
99    }
100   
101    /**
102    * Returns whether or not the onDelete attribute is set
103    *
104    * @return true if the onDelete attribute is set
105    */
 
106  0 toggle public boolean hasOnDelete()
107    {
108  0 return !onDelete.equals(NONE);
109    }
110   
111    /**
112    * Returns the onUpdate attribute
113    *
114    * @return the onUpdate attribute
115    */
 
116  0 toggle public String getOnUpdate()
117    {
118  0 return onUpdate;
119    }
120   
121    /**
122    * Returns the onDelete attribute
123    *
124    * @return the onDelete attribute
125    */
 
126  0 toggle public String getOnDelete()
127    {
128  0 return onDelete;
129    }
130   
131    /**
132    * Sets the onDelete attribute
133    *
134    * @param value the onDelete attribute
135    */
 
136  0 toggle public void setOnDelete(String value)
137    {
138  0 onDelete = normalizeFKey(value);
139    }
140   
141    /**
142    * Sets the onUpdate attribute
143    *
144    * @param value the onUpdate attribute
145    */
 
146  0 toggle public void setOnUpdate(String value)
147    {
148  0 onUpdate = normalizeFKey(value);
149    }
150   
151    /**
152    * Returns the name attribute.
153    *
154    * @return the name
155    */
 
156  0 toggle public String getName()
157    {
158  0 return name;
159    }
160   
161    /**
162    * Sets the name attribute.
163    *
164    * @param name the name
165    */
 
166  0 toggle public void setName(String name)
167    {
168  0 this.name = name;
169    }
170   
171    /**
172    * Get the foreignTableName of the FK
173    *
174    * @return the name of the foreign table
175    */
 
176  0 toggle public String getForeignTableName()
177    {
178  0 return foreignTableName;
179    }
180   
181    /**
182    * Set the foreignTableName of the FK
183    *
184    * @param tableName the name of the foreign table
185    */
 
186  0 toggle public void setForeignTableName(String tableName)
187    {
188  0 foreignTableName = tableName;
189    }
190   
191    /**
192    * Set the parent Table of the foreign key
193    *
194    * @param parent the table
195    */
 
196  0 toggle public void setTable(Table parent)
197    {
198  0 parentTable = parent;
199    }
200   
201    /**
202    * Get the parent Table of the foreign key
203    *
204    * @return the parent table
205    */
 
206  0 toggle public Table getTable()
207    {
208  0 return parentTable;
209    }
210   
211    /**
212    * Returns the name of the table the foreign key is in
213    *
214    * @return the name of the table
215    */
 
216  0 toggle public String getTableName()
217    {
218  0 return parentTable.getName();
219    }
220   
221    /**
222    * Adds a new reference entry to the foreign key
223    *
224    * @param attrib the xml attributes
225    */
 
226  0 toggle public void addReference(Attributes attrib)
227    {
228  0 addReference(attrib.getValue("local"), attrib.getValue("foreign"));
229    }
230   
231    /**
232    * Adds a new reference entry to the foreign key
233    *
234    * @param local name of the local column
235    * @param foreign name of the foreign column
236    */
 
237  0 toggle public void addReference(String local, String foreign)
238    {
239  0 localColumns.add(local);
240  0 foreignColumns.add(foreign);
241    }
242   
243    /**
244    * Returns a comma delimited string of local column names
245    *
246    * @return the local column names
247    */
 
248  0 toggle public String getLocalColumnNames()
249    {
250  0 return Column.makeList(getLocalColumns());
251    }
252   
253    /**
254    * Returns a comma delimited string of foreign column names
255    *
256    * @return the foreign column names
257    */
 
258  0 toggle public String getForeignColumnNames()
259    {
260  0 return Column.makeList(getForeignColumns());
261    }
262   
263    /**
264    * Returns the list of local column names. You should not edit this List.
265    *
266    * @return the local columns
267    */
 
268  0 toggle public List getLocalColumns()
269    {
270  0 return localColumns;
271    }
272   
273    /**
274    * Utility method to get local column names to foreign column names
275    * mapping for this foreign key.
276    *
277    * @return table mapping foreign names to local names
278    */
 
279  0 toggle public Hashtable getLocalForeignMapping()
280    {
281  0 Hashtable h = new Hashtable();
282   
283  0 for (int i = 0; i < localColumns.size(); i++)
284    {
285  0 h.put(localColumns.get(i), foreignColumns.get(i));
286    }
287   
288  0 return h;
289    }
290   
291    /**
292    * Returns the list of foreign column names. You should not edit this List.
293    *
294    * @return the foreign columns
295    */
 
296  0 toggle public List getForeignColumns()
297    {
298  0 return foreignColumns;
299    }
300   
301    /**
302    * Utility method to get foreign column names to local column names
303    * mapping for this foreign key.
304    *
305    * @return table mapping local names to foreign names
306    */
 
307  0 toggle public Hashtable getForeignLocalMapping()
308    {
309  0 Hashtable h = new Hashtable();
310   
311  0 for (int i = 0; i < localColumns.size(); i++)
312    {
313  0 h.put(foreignColumns.get(i), localColumns.get(i));
314    }
315   
316  0 return h;
317    }
318   
319    /**
320    * String representation of the foreign key. This is an xml representation.
321    *
322    * @return string representation in xml
323    */
 
324  0 toggle public String toString()
325    {
326  0 StringBuffer result = new StringBuffer();
327  0 result.append(" <foreign-key foreignTable=\"")
328    .append(getForeignTableName())
329    .append("\" name=\"")
330    .append(getName())
331    .append("\">\n");
332   
333  0 for (int i = 0; i < localColumns.size(); i++)
334    {
335  0 result.append(" <reference local=\"")
336    .append(localColumns.get(i))
337    .append("\" foreign=\"")
338    .append(foreignColumns.get(i))
339    .append("\"/>\n");
340    }
341  0 result.append(" </foreign-key>\n");
342  0 return result.toString();
343    }
344   
345    /**
346    * Add an XML Specified option key/value pair to this element's option set.
347    *
348    * @param key the key of the option.
349    * @param value the value of the option.
350    */
 
351  0 toggle public void addOption(String key, String value)
352    {
353  0 options.put(key, value);
354    }
355   
356    /**
357    * Get the value that was associated with this key in an XML option
358    * element.
359    *
360    * @param key the key of the option.
361    * @return The value for the key or a null.
362    */
 
363  0 toggle public String getOption(String key)
364    {
365  0 return (String) options.get(key);
366    }
367   
368    /**
369    * Gets the full ordered hashtable array of items specified by XML option
370    * statements under this element.<p>
371    *
372    * Note, this is not thread save but since it's only used for
373    * generation which is single threaded, there should be minimum
374    * danger using this in Velocity.
375    *
376    * @return An Map of all options. Will not be null but may be empty.
377    */
 
378  0 toggle public Map getOptions()
379    {
380  0 return options;
381    }
382    }