001 /* 002 * JBoss DNA (http://www.jboss.org/dna) 003 * See the COPYRIGHT.txt file distributed with this work for information 004 * regarding copyright ownership. Some portions may be licensed 005 * to Red Hat, Inc. under one or more contributor license agreements. 006 * See the AUTHORS.txt file in the distribution for a full listing of 007 * individual contributors. 008 * 009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA 010 * is licensed to you under the terms of the GNU Lesser General Public License as 011 * published by the Free Software Foundation; either version 2.1 of 012 * the License, or (at your option) any later version. 013 * 014 * JBoss DNA is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 017 * Lesser General Public License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this software; if not, write to the Free 021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 023 */ 024 package org.jboss.dna.common.jdbc.model.spi; 025 026 import java.util.Set; 027 import java.util.HashSet; 028 import org.jboss.dna.common.jdbc.model.api.Column; 029 import org.jboss.dna.common.jdbc.model.api.NullabilityType; 030 import org.jboss.dna.common.jdbc.model.api.SqlType; 031 import org.jboss.dna.common.jdbc.model.api.Privilege; 032 import org.jboss.dna.common.jdbc.model.api.SchemaObject; 033 034 /** 035 * Provides all column specific metadata. 036 * 037 * @author <a href="mailto:litsenko_sergey@yahoo.com">Sergiy Litsenko</a> 038 */ 039 public class ColumnBean extends DatabaseNamedObjectBean implements Column { 040 private static final long serialVersionUID = 4797227922671541353L; 041 private SchemaObject owner; 042 private NullabilityType nullabilityType; 043 private SqlType sqlType; 044 private String typeName; 045 private Integer size; 046 private Integer precision; 047 private Integer radix; 048 private String defaultValue; 049 private Integer ordinalPosition; 050 private Integer charOctetLength; 051 private Set<Privilege> privileges = new HashSet<Privilege>(); 052 053 /** 054 * Default constructor 055 */ 056 public ColumnBean() { 057 } 058 059 /** 060 * Returns owner of ColumnMetaData such as Table, or Stored Procedure, UDT, PK, FK, Index, etc. May return NULL 061 * 062 * @return owner of ColumnMetaData such as Table, or Stored Procedure, or UDT, PK, FK, Index, etc. May return NULL 063 */ 064 public SchemaObject getOwner() { 065 return owner; 066 } 067 068 /** 069 * Sets the owner of ColumnMetaData 070 * 071 * @param owner the owner of ColumnMetaData 072 */ 073 public void setOwner( SchemaObject owner ) { 074 this.owner = owner; 075 } 076 077 /** 078 * Gets column nullability 079 * 080 * @return column nullability 081 */ 082 public NullabilityType getNullabilityType() { 083 return nullabilityType; 084 } 085 086 /** 087 * Sets column nullability 088 * 089 * @param nullabilityType the column nullability 090 */ 091 public void setNullabilityType( NullabilityType nullabilityType ) { 092 this.nullabilityType = nullabilityType; 093 } 094 095 /** 096 * Gets SQL type from java.sql.Types 097 * 098 * @return SQL type from java.sql.Types 099 */ 100 public SqlType getSqlType() { 101 return sqlType; 102 } 103 104 /** 105 * Sets SQL type from java.sql.Types 106 * 107 * @param sqlType the SQL type from java.sql.Types 108 */ 109 public void setSqlType( SqlType sqlType ) { 110 this.sqlType = sqlType; 111 } 112 113 /** 114 * Data source dependent type name. For a UDT, the type name is fully qualified. For a REF, the type name is fully qualified 115 * and represents the target type of the reference type. 116 * 117 * @return data source dependent type name 118 */ 119 public String getTypeName() { 120 return typeName; 121 } 122 123 /** 124 * Data source dependent type name. For a UDT, the type name is fully qualified. For a REF, the type name is fully qualified 125 * and represents the target type of the reference type. 126 * 127 * @param typeName data source dependent type name 128 */ 129 public void setTypeName( String typeName ) { 130 this.typeName = typeName; 131 } 132 133 /** 134 * Gets column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is 135 * precision. For Stored procedure columns it is length in bytes of data 136 * 137 * @return column size 138 */ 139 public Integer getSize() { 140 return size; 141 } 142 143 /** 144 * Sets column size. For char or date types this is the maximum number of characters, for numeric or decimal types this is 145 * precision. For Stored procedure columns it is length in bytes of data 146 * 147 * @param size the column size 148 */ 149 public void setSize( Integer size ) { 150 this.size = size; 151 } 152 153 /** 154 * Gets precision if applicable otherwise 0. For table columns return the number of fractional digits; for stored procedure 155 * column - scale. 156 * 157 * @return precision if applicable otherwise 0 158 */ 159 public Integer getPrecision() { 160 return precision; 161 } 162 163 /** 164 * Sets precision if applicable otherwise 0. For table columns return the number of fractional digits; for stored procedure 165 * column - scale. 166 * 167 * @param precision the precision if applicable otherwise 0 168 */ 169 public void setPrecision( Integer precision ) { 170 this.precision = precision; 171 } 172 173 /** 174 * Gets radix if applicable 175 * 176 * @return radix if applicable 177 */ 178 public Integer getRadix() { 179 return radix; 180 } 181 182 /** 183 * Sets radix if applicable 184 * 185 * @param radix if applicable 186 */ 187 public void setRadix( Integer radix ) { 188 this.radix = radix; 189 } 190 191 /** 192 * Gets default value (may be <code>null</code>) 193 * 194 * @return default value (may be <code>null</code>) 195 */ 196 public String getDefaultValue() { 197 return defaultValue; 198 } 199 200 /** 201 * Sets default value (may be <code>null</code>) 202 * 203 * @param defaultValue the default value (may be <code>null</code>) 204 */ 205 public void setDefaultValue( String defaultValue ) { 206 this.defaultValue = defaultValue; 207 } 208 209 /** 210 * Returns index of column starting at 1 - if applicable. Otherwise returns -1. 211 * 212 * @return index of column starting at 1 - if applicable. Otherwise returns -1. 213 */ 214 public Integer getOrdinalPosition() { 215 return ordinalPosition; 216 } 217 218 /** 219 * Sets index of column starting at 1 - if applicable. Otherwise returns -1. 220 * 221 * @param ordinalPosition the index of column starting at 1 - if applicable. Otherwise returns -1. 222 */ 223 public void setOrdinalPosition( Integer ordinalPosition ) { 224 this.ordinalPosition = ordinalPosition; 225 } 226 227 /** 228 * For char types returns the maximum number of bytes in the column. Otherwise returns -1. 229 * 230 * @return For char types returns the maximum number of bytes in the column. Otherwise returns -1. 231 */ 232 public Integer getCharOctetLength() { 233 return charOctetLength; 234 } 235 236 /** 237 * For char types sets the maximum number of bytes in the column. Otherwise -1. 238 * 239 * @param charOctetLength For char types sets the maximum number of bytes in the column. Otherwise -1. 240 */ 241 public void setCharOctetLength( Integer charOctetLength ) { 242 this.charOctetLength = charOctetLength; 243 } 244 245 /** 246 * Gets table column privileges. 247 * 248 * @return set of table column privileges 249 */ 250 public Set<Privilege> getPrivileges() { 251 return privileges; 252 } 253 254 /** 255 * Adds table column priviledge 256 * 257 * @param privilege the table column priviledge 258 */ 259 public void addPrivilege( Privilege privilege ) { 260 privileges.add(privilege); 261 } 262 263 /** 264 * Deletes table column priviledge 265 * 266 * @param privilege the table column priviledge 267 */ 268 public void deletePrivilege( Privilege privilege ) { 269 privileges.remove(privilege); 270 } 271 272 /** 273 * Searches priviledge by name 274 * 275 * @param priviledgeName the priviledge name to search 276 * @return priviledge if found, otherwise return null 277 */ 278 public Privilege findPriviledgeByName( String priviledgeName ) { 279 for (Privilege p : privileges) { 280 if (p.getName().equals(priviledgeName)) { 281 return p; 282 } 283 } 284 // return nothing 285 return null; 286 } 287 }