001 package org.apache.torque.engine.database.model; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 import org.apache.commons.lang.StringUtils; 023 import org.apache.torque.engine.platform.Platform; 024 import org.xml.sax.Attributes; 025 026 /** 027 * A Class for holding data about a column used in an Application. 028 * 029 * @author <a href="mailto:mpoeschl@marmot.at>Martin Poeschl</a> 030 * @version $Id: Domain.java,v 1.1 2007-10-21 07:57:27 abyrne Exp $ 031 */ 032 public class Domain { 033 private String name; 034 private String description; 035 private String size; 036 private String scale; 037 /** type as defined in schema.xml */ 038 private SchemaType torqueType; 039 private String sqlType; 040 private String defaultValue; 041 042 /** 043 * Creates a new instance with a <code>null</code> name. 044 */ 045 public Domain() { 046 this.name = null; 047 } 048 049 /** 050 * Creates a new Domain and set the name 051 * 052 * @param name 053 * column name 054 */ 055 public Domain(String name) { 056 this.name = name; 057 } 058 059 /** 060 * Creates a new Domain and set the name 061 */ 062 public Domain(SchemaType type) { 063 this.name = null; 064 this.torqueType = type; 065 this.sqlType = type.getName(); 066 } 067 068 /** 069 * Creates a new Domain and set the name 070 */ 071 public Domain(SchemaType type, String sqlType) { 072 this.name = null; 073 this.torqueType = type; 074 this.sqlType = sqlType; 075 } 076 077 /** 078 * Creates a new Domain and set the name 079 */ 080 public Domain(SchemaType type, String sqlType, String size, String scale) { 081 this.name = null; 082 this.torqueType = type; 083 this.sqlType = sqlType; 084 this.size = size; 085 this.scale = scale; 086 } 087 088 /** 089 * Creates a new Domain and set the name 090 */ 091 public Domain(SchemaType type, String sqlType, String size) { 092 this.name = null; 093 this.torqueType = type; 094 this.sqlType = sqlType; 095 this.size = size; 096 } 097 098 public Domain(Domain domain) { 099 copy(domain); 100 } 101 102 public void copy(Domain domain) { 103 this.defaultValue = domain.getDefaultValue(); 104 this.description = domain.getDescription(); 105 this.name = domain.getName(); 106 this.scale = domain.getScale(); 107 this.size = domain.getSize(); 108 this.sqlType = domain.getSqlType(); 109 this.torqueType = domain.getType(); 110 } 111 112 /** 113 * Imports a column from an XML specification 114 */ 115 public void loadFromXML(Attributes attrib, Platform platform) { 116 SchemaType schemaType = SchemaType.getEnum(attrib.getValue("type")); 117 copy(platform.getDomainForSchemaType(schemaType)); 118 // Name 119 name = attrib.getValue("name"); 120 // Default column value. 121 defaultValue = attrib.getValue("default"); 122 size = attrib.getValue("size"); 123 scale = attrib.getValue("scale"); 124 125 description = attrib.getValue("description"); 126 } 127 128 /** 129 * @return Returns the description. 130 */ 131 public String getDescription() { 132 return description; 133 } 134 135 /** 136 * @param description 137 * The description to set. 138 */ 139 public void setDescription(String description) { 140 this.description = description; 141 } 142 143 /** 144 * @return Returns the name. 145 */ 146 public String getName() { 147 return name; 148 } 149 150 /** 151 * @param name 152 * The name to set. 153 */ 154 public void setName(String name) { 155 this.name = name; 156 } 157 158 /** 159 * @return Returns the scale. 160 */ 161 public String getScale() { 162 return scale; 163 } 164 165 /** 166 * @param scale 167 * The scale to set. 168 */ 169 public void setScale(String scale) { 170 this.scale = scale; 171 } 172 173 /** 174 * Replaces the size if the new value is not null. 175 * 176 * @param value 177 * The size to set. 178 */ 179 public void replaceScale(String value) { 180 this.scale = StringUtils.defaultString(value, getScale()); 181 } 182 183 /** 184 * @return Returns the size. 185 */ 186 public String getSize() { 187 return size; 188 } 189 190 /** 191 * @param size 192 * The size to set. 193 */ 194 public void setSize(String size) { 195 this.size = size; 196 } 197 198 /** 199 * Replaces the size if the new value is not null. 200 * 201 * @param value 202 * The size to set. 203 */ 204 public void replaceSize(String value) { 205 this.size = StringUtils.defaultString(value, getSize()); 206 } 207 208 /** 209 * @return Returns the torqueType. 210 */ 211 public SchemaType getType() { 212 return torqueType; 213 } 214 215 /** 216 * @param torqueType 217 * The torqueType to set. 218 */ 219 public void setType(SchemaType torqueType) { 220 this.torqueType = torqueType; 221 } 222 223 /** 224 * @param torqueType 225 * The torqueType to set. 226 */ 227 public void setType(String torqueType) { 228 this.torqueType = SchemaType.getEnum(torqueType); 229 } 230 231 /** 232 * Replaces the default value if the new value is not null. 233 * 234 * @param value 235 * The defaultValue to set. 236 */ 237 public void replaceType(String value) { 238 this.torqueType = SchemaType.getEnum(StringUtils.defaultString(value, getType().getName())); 239 } 240 241 /** 242 * @return Returns the defaultValue. 243 */ 244 public String getDefaultValue() { 245 return defaultValue; 246 } 247 248 /** 249 * Return a string that will give this column a default value. 250 * 251 * @deprecated 252 */ 253 public String getDefaultSetting() { 254 StringBuffer dflt = new StringBuffer(0); 255 if (getDefaultValue() != null) { 256 dflt.append("default "); 257 if (TypeMap.isTextType(getType())) { 258 // TODO: Properly SQL-escape the text. 259 dflt.append('\'').append(getDefaultValue()).append('\''); 260 } else { 261 dflt.append(getDefaultValue()); 262 } 263 } 264 return dflt.toString(); 265 } 266 267 /** 268 * @param defaultValue 269 * The defaultValue to set. 270 */ 271 public void setDefaultValue(String defaultValue) { 272 this.defaultValue = defaultValue; 273 } 274 275 /** 276 * Replaces the default value if the new value is not null. 277 * 278 * @param value 279 * The defaultValue to set. 280 */ 281 public void replaceDefaultValue(String value) { 282 this.defaultValue = StringUtils.defaultString(value, getDefaultValue()); 283 } 284 285 /** 286 * @return Returns the sqlType. 287 */ 288 public String getSqlType() { 289 return sqlType; 290 } 291 292 /** 293 * @param sqlType 294 * The sqlType to set. 295 */ 296 public void setSqlType(String sqlType) { 297 this.sqlType = sqlType; 298 } 299 300 /** 301 * Return the size and scale in brackets for use in an sql schema. 302 * 303 * @return size and scale or an empty String if there are no values available. 304 */ 305 public String printSize() { 306 if (size != null && scale != null) { 307 return '(' + size + ',' + scale + ')'; 308 } else if (size != null) { 309 return '(' + size + ')'; 310 } else { 311 return ""; 312 } 313 } 314 315 }