View Javadoc
1 /* 2 * Copyright (c) 2003 Scott Howlett & Paul Libbrecht. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * 17 * 3. The end-user documentation included with the redistribution, 18 * if any, must include the following acknowledgment: 19 * "This product includes software developed by the Xwing 20 * Project ( http://xwing.sourceforge.net/ )." 21 * Alternately, this acknowledgment may appear in the software itself, 22 * if and wherever such third-party acknowledgments normally appear. 23 * 24 * 4. The name "Xwing" must not be used to endorse or promote products 25 * derived from this software without prior written permission. For 26 * written permission, please contact the project authors via 27 * the Xwing project site, http://xwing.sourceforge.net/ . 28 * 29 * 5. Products derived from this software may not be called "Xwing", 30 * nor may "Xwing" appear in their name, without prior written 31 * permission of the Xwing project. 32 * 33 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 34 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 35 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 36 * DISCLAIMED. IN NO EVENT SHALL THE XWING AUTHORS OR THE PROJECT 37 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 38 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 39 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 40 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 41 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 42 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 43 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 44 * SUCH DAMAGE. 45 * 46 * For more information on Xwing, please see 47 * < http://xwing.sourceforge.net/ >. 48 */ 49 package net.sourceforge.xwing.swing; 50 51 import javax.swing.ListModel; 52 53 import org.apache.commons.lang.builder.EqualsBuilder; 54 import org.apache.commons.lang.builder.HashCodeBuilder; 55 56 import net.sourceforge.xwing.SourceSink; 57 import net.sourceforge.xwing.SourceSinkFactory; 58 59 public class XTableColumn { 60 61 private String label; 62 private SourceSink labelSS; 63 64 private SourceSinkFactory valueFactory; 65 private boolean isEditable; 66 private ListModel choices; 67 private boolean isConstrainedToChoices; 68 69 public XTableColumn( 70 String label, 71 SourceSinkFactory valueFactory, 72 boolean isEditable, 73 ListModel choices, 74 boolean isConstrainedToChoices) { 75 76 this.label = label; 77 this.valueFactory = valueFactory; 78 this.isEditable = isEditable; 79 this.choices = choices; 80 this.isConstrainedToChoices = isConstrainedToChoices; 81 } 82 83 public XTableColumn( 84 SourceSink labelSS, 85 SourceSinkFactory valueFactory, 86 boolean isEditable, 87 ListModel choices, 88 boolean isConstrainedToChoices) { 89 90 this.labelSS = labelSS; 91 this.valueFactory = valueFactory; 92 this.isEditable = isEditable; 93 this.choices = choices; 94 this.isConstrainedToChoices = isConstrainedToChoices; 95 } 96 97 /*** 98 * Returns the label that should be used for this column. 99 * 100 * @return the label for this column 101 * @throws Exception 102 */ 103 public String getLabel() throws Exception { 104 return labelSS != null ? labelSS.get().toString() : label; 105 } 106 107 /*** 108 * An XTableModel has one context object per row. It determines 109 * each of the cell values in hat row by calling getValue() on 110 * each of its columns. 111 * 112 * @param context The row contect object 113 * @return This column's cell value for the given row. 114 * @throws Exception 115 */ 116 public SourceSink getValue(Object context) throws Exception { 117 return valueFactory.create(context); 118 } 119 120 /*** 121 * Are the cell values in this column editable? 122 * 123 * @return true if the cell values are editable, false if they 124 * are not. 125 */ 126 public boolean isEditable() { 127 return isEditable; 128 } 129 130 /*** 131 * What class do this column's cell values belong to? 132 * 133 * @return the class that all cell values will belong to (they will 134 * be instances of either the returned class or some class derived 135 * from it). 136 */ 137 public Class getColumnClass() { 138 return valueFactory.getValueClass(); 139 } 140 141 /*** 142 * What set of predefined values may cells be set to? 143 * 144 * @return The list of enumerated values that cell values may 145 * be set to, or null if there are no predefined choices. 146 */ 147 public ListModel getChoices() { 148 return choices; 149 } 150 151 /*** 152 * May cells be set to values values other than those returned 153 * by getChoices? 154 * 155 * @return true if cell values are constrained to those enumerated 156 * by getChoices, false if cells may be set to any valid instance of 157 * the class specified by getColumnClass(). 158 */ 159 public boolean isConstrainedToChoices() { 160 return isConstrainedToChoices; 161 } 162 163 public boolean equals(Object obj) { 164 165 if (obj == this) { 166 return true; 167 } 168 169 if (obj == null || obj.getClass() != getClass()) { 170 return false; 171 } 172 173 XTableColumn other = (XTableColumn) obj; 174 175 return new EqualsBuilder() 176 .append(label, other.label) 177 .append(labelSS, other.labelSS) 178 .append(valueFactory, other.valueFactory) 179 .append(isEditable, other.isEditable) 180 .append(choices, other.choices) 181 .append(isConstrainedToChoices, other.isConstrainedToChoices) 182 .isEquals(); 183 } 184 185 public int hashCode() { 186 return new HashCodeBuilder() 187 .append(label) 188 .append(labelSS) 189 .append(valueFactory) 190 .append(isEditable) 191 .append(choices) 192 .append(isConstrainedToChoices) 193 .toHashCode(); 194 } 195 196 public void setChoices(ListModel choices) { 197 this.choices = choices; 198 } 199 200 public void setConstrainedToChoices(boolean isConstrainedToChoices) { 201 this.isConstrainedToChoices = isConstrainedToChoices; 202 } 203 204 public void setEditable(boolean isEditable) { 205 this.isEditable = isEditable; 206 } 207 208 public void setLabel(String label) { 209 this.label = label; 210 this.labelSS = null; 211 } 212 213 public void setLabelSS(SourceSink labelSS) { 214 this.labelSS = labelSS; 215 this.label = null; 216 } 217 218 }

This page was automatically generated by Maven