Coverage Report - org.melati.poem.ColumnInfo
 
Classes in this File Line Coverage Branch Coverage Complexity
ColumnInfo
100%
45/45
86%
40/46
4.571
 
 1  
 /*
 2  
  * $Source$
 3  
  * $Revision$
 4  
  *
 5  
  * Copyright (C) 2000 William Chesters
 6  
  *
 7  
  * Part of Melati (http://melati.org), a framework for the rapid
 8  
  * development of clean, maintainable web applications.
 9  
  *
 10  
  * Melati is free software; Permission is granted to copy, distribute
 11  
  * and/or modify this software under the terms either:
 12  
  *
 13  
  * a) the GNU General Public License as published by the Free Software
 14  
  *    Foundation; either version 2 of the License, or (at your option)
 15  
  *    any later version,
 16  
  *
 17  
  *    or
 18  
  *
 19  
  * b) any version of the Melati Software License, as published
 20  
  *    at http://melati.org
 21  
  *
 22  
  * You should have received a copy of the GNU General Public License and
 23  
  * the Melati Software License along with this program;
 24  
  * if not, write to the Free Software Foundation, Inc.,
 25  
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
 26  
  * GNU General Public License and visit http://melati.org to obtain the
 27  
  * Melati Software License.
 28  
  *
 29  
  * Feel free to contact the Developers of Melati (http://melati.org),
 30  
  * if you would like to work out a different arrangement than the options
 31  
  * outlined here.  It is our intention to allow Melati to be used by as
 32  
  * wide an audience as possible.
 33  
  *
 34  
  * This program is distributed in the hope that it will be useful,
 35  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 36  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 37  
  * GNU General Public License for more details.
 38  
  *
 39  
  * Contact details for copyright holder:
 40  
  *
 41  
  *     William Chesters <williamc At paneris.org>
 42  
  *     http://paneris.org/~williamc
 43  
  *     Obrechtstraat 114, 2517VX Den Haag, The Netherlands
 44  
  */
 45  
 
 46  
 package org.melati.poem;
 47  
 
 48  
 import java.util.Vector;
 49  
 import java.util.Enumeration;
 50  
 import org.melati.poem.generated.ColumnInfoBase;
 51  
 
 52  
 /**
 53  
  * All the data defining a {@link Column}; actually a {@link Persistent} 
 54  
  * from the {@link ColumnInfoTable}.
 55  
  * 
 56  
  * Melati POEM generated, programmer modifiable stub 
 57  
  * for a <code>Persistent</code> <code>ColumnInfo</code> object.
 58  
  * 
 59  
  * <p> 
 60  
  * Description: 
 61  
  *   Configuration information about a column in the database. 
 62  
  * </p>
 63  
  * 
 64  
  * <table> 
 65  
  * <caption>
 66  
  * Field summary for SQL table <code>ColumnInfo</code>
 67  
  * </caption>
 68  
  * <tr><th>Name</th><th>Type</th><th>Description</th></tr>
 69  
  * <tr><td> id </td><td> Integer </td><td> &nbsp; </td></tr> 
 70  
  * <tr><td> tableinfo </td><td> TableInfo </td><td> The table to which the 
 71  
  * field belongs </td></tr> 
 72  
  * <tr><td> name </td><td> String </td><td> A code-name for the field 
 73  
  * </td></tr> 
 74  
  * <tr><td> displayorder </td><td> Integer </td><td> A rank determining where 
 75  
  * the field appears in lists </td></tr> 
 76  
  * <tr><td> usercreateable </td><td> Boolean </td><td> Whether it makes sense 
 77  
  * for the user to initialise the field's value </td></tr> 
 78  
  * <tr><td> displaylevel </td><td> DisplayLevel </td><td> A category 
 79  
  * determining what granularity of report the field appears in </td></tr> 
 80  
  * <tr><td> searchability </td><td> Searchability </td><td> A category 
 81  
  * determining what level of searching this field supports </td></tr> 
 82  
  * <tr><td> displayorderpriority </td><td> Integer </td><td> If present, the 
 83  
  * level at which lists of records are sorted by the field </td></tr> 
 84  
  * <tr><td> sortdescending </td><td> Boolean </td><td> Whether when sorting 
 85  
  * by this column, the sort order should be reversed </td></tr> 
 86  
  * <tr><td> indexed </td><td> Boolean </td><td> Whether the field is indexed 
 87  
  * (ignored if the field is marked `unique') </td></tr> 
 88  
  * <tr><td> unique </td><td> Boolean </td><td> Whether the field is unique 
 89  
  * (implies that it's `indexed') </td></tr> 
 90  
  * <tr><td> integrityfix </td><td> StandardIntegrityFix </td><td> How 
 91  
  * referential integrity is maintained, what to do when the object referred 
 92  
  * to is deleted </td></tr> 
 93  
  * </table> 
 94  
  * 
 95  
  * See org.melati.poem.prepro.TableDef#generateMainJava 
 96  
  */
 97  6179
 public class ColumnInfo extends ColumnInfoBase {
 98  
 
 99  
   /**
 100  
    * Allow reading by not throwing an exception.
 101  
    * {@inheritDoc}
 102  
    * @see org.melati.poem.Persistent#assertCanRead(org.melati.poem.AccessToken)
 103  
    */
 104  
   public void assertCanRead(AccessToken token) {
 105  35931
   }
 106  
 
 107  6179
   private Column<?> _column = null;
 108  
 
 109  
   /**
 110  
    * @return the column
 111  
    */
 112  
   Column<?> column() {
 113  
     // I have not fathomed how this circumstance arrives, but 
 114  
     // it can.
 115  4825
     if (_column == null && troid() != null)
 116  6
       _column = getDatabase().columnWithColumnInfoID(troid().intValue());
 117  4825
     return _column;
 118  
   }
 119  
 
 120  
   void setColumn(Column<?> column) {
 121  163
     _column = column;
 122  163
   }
 123  
 
 124  
  /**
 125  
   * Set the name if it is not set.
 126  
   * 
 127  
   * @param name the name to set
 128  
   */
 129  
   public void setName(String name) {
 130  4809
     String current = getName();
 131  4809
     if (current != null && !current.equals(name))
 132  1
       throw new ColumnRenamePoemException(name);
 133  4808
     super.setName(name);
 134  4808
   }
 135  
 
 136  
  /**
 137  
   * Set the TableInfo reference.
 138  
   * 
 139  
   * @param raw the troid value to set
 140  
   */
 141  
   public void setTableinfoTroid(Integer raw) throws AccessPoemException {
 142  4724
     Integer ti = super.getTableinfoTroid();
 143  4724
     if (ti != null && !ti.equals(raw))
 144  1
       throw new IllegalArgumentException();
 145  4723
     super.setTableinfoTroid(raw);
 146  4723
   }
 147  
 
 148  
  /**
 149  
   * Set the DisplaylevelIndex value.
 150  
   * 
 151  
   * @param index the DisplaylevelIndex value to set
 152  
   */
 153  
   public void setDisplaylevelIndex(Integer index) {
 154  4816
     super.setDisplaylevelIndex(index);
 155  4816
     Column<?> column = column();
 156  4816
     if (column != null) {
 157  7
       Table<?> table = column.getTable();
 158  7
       Column<?> previous = table.displayColumn();
 159  7
       if (previous != null && previous != column) {
 160  5
         if (index.equals(DisplayLevel.primary.getIndex())) {
 161  2
           previous.setDisplayLevel(DisplayLevel.summary);
 162  2
           table.setDisplayColumn(column);
 163  
         } else { 
 164  3
           table.clearColumnInfoCaches();
 165  
         }
 166  
       }
 167  
     }
 168  4816
   }
 169  
 
 170  
   /**
 171  
    * Only those fields which are relevant to this column 
 172  
    * and legal as a field qualifier in the DSD.
 173  
    * Used in org.melati.admin.DSD.wm.
 174  
    * 
 175  
    * @return an Enumeration of {@link Field}s 
 176  
    */
 177  
   public Enumeration<Field<?>> getDsdQualifiers() {
 178  2
     Vector<Field<?>> v = new Vector<Field<?>>();
 179  2
     Enumeration<Field<?>> allFields = getFields();
 180  52
     while (allFields.hasMoreElements()) {
 181  50
       Field<?> f = allFields.nextElement();
 182  50
       String n = f.getName();
 183  50
       if (!(f.getType() instanceof TroidPoemType)  // The id of this columnInfo record, not the target 
 184  46
           && !n.equals("name")  // Name is not a qualifier
 185  44
           && !n.equals("typefactory")   
 186  42
           && !n.equals("tableinfo") // The tableInfo of this columnInfo, not the target
 187  40
           && !(n.equals("size") && !(column().getType() instanceof SizedAtomPoemType))
 188  39
           && !(n.equals("integrityfix") && !(column().getType() instanceof PersistentReferencePoemType)) 
 189  37
           && !(n.equals("precision")    && !(column().getType() instanceof FixedPointAtomPoemType))
 190  35
           && !(n.equals("scale")        && !(column().getType() instanceof FixedPointAtomPoemType)))
 191  33
         v.addElement(f);
 192  50
     }
 193  2
     return v.elements();
 194  
   }
 195  
 }