View Javadoc

1   package atg.adapter.gsa;
2   
3   import java.lang.reflect.Field;
4   import java.util.List;
5   
6   import org.apache.log4j.Logger;
7   
8   /***
9    * This class uses reflection to allow access to private member variables
10   * withing a GSA Table class.
11   * 
12   * @author adamb
13   */
14  public class AccessibleTableColumns {
15    public Logger mLogger = Logger.getLogger(this.getClass());
16    public TableColumns mTableColumns;
17  
18    public AccessibleTableColumns(TableColumns pTable) {
19      mTableColumns = pTable;
20    }
21  
22    // ------------------------
23    /***
24     * Returns the mHead field of the Table class passed to the constructor of
25     * this class.
26     * 
27     * @return
28     */
29    public ColumnDefinitionNode getHead() {
30      String fieldName = "mHead";
31      ColumnDefinitionNode node = (ColumnDefinitionNode) getPrivateField(fieldName);
32      return node;
33    }
34  
35    // ------------------------
36    /***
37     * Returns the mTail field of the Table class passed to the constructor of
38     * this class.
39     * 
40     * @return
41     */
42    public ColumnDefinitionNode getTail() {
43      String fieldName = "mTail";
44      ColumnDefinitionNode node = (ColumnDefinitionNode) getPrivateField(fieldName);
45      return node;
46    }
47  
48    // ------------------------
49    /***
50     * Returns the mPrimaryKeys field of the Table class passed to the constructor of
51     * this class.
52     * 
53     * @return
54     */
55    public List getPrimaryKeys() {
56      String fieldName = "mPrimaryKeys";
57      List node = (List) getPrivateField(fieldName);
58      return node;
59    }
60    
61  //------------------------
62    /***
63     * Returns the mForeignKeys field of the Table class passed to the constructor of
64     * this class.
65     * 
66     * @return
67     */
68    public List getForeignKeys() {
69      String fieldName = "mForeignKeys";
70      List node = (List) getPrivateField(fieldName);
71      return node;
72    }
73  
74  // ------------------------
75    /***
76     * Returns the mMultiColumnName field of the Table class passed to the
77     * constructor of this class.
78     * 
79     * @return
80     */
81    public String getMultiColumnName() {
82      String fieldName = "mMultiColumnName";
83      String node = (String) getPrivateField(fieldName);
84      return node;
85    }
86  
87    // ------------------------
88    public Object getPrivateField(String fieldName) {
89      Field columnDefinitionNode = null;
90      Object field = null;
91      try {
92        columnDefinitionNode = mTableColumns.getClass().getDeclaredField(
93            fieldName);
94        columnDefinitionNode.setAccessible(true);
95        field = columnDefinitionNode.get(mTableColumns);
96      } catch (SecurityException e) {
97        mLogger.error(e);
98      } catch (NoSuchFieldException e) {
99        mLogger.error(e);
100     } catch (IllegalArgumentException e) {
101       mLogger.error(e);
102     } catch (IllegalAccessException e) {
103       mLogger.error(e);
104     }
105     return field;
106   }
107 
108 }