1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
/*
Copyright (c) 2008 Health Market Science, Inc.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
You can contact Health Market Science at info@healthmarketscience.com
or at the following address:
Health Market Science
2700 Horizon Drive
Suite 200
King of Prussia, PA 19406
*/
package com.healthmarketscience.jackcess;
import java.sql.SQLException;
/**
* Builder style class for constructing a Column.
*
* @author James Ahlborn
*/
public class ColumnBuilder {
/** name of the new column */
private String _name;
/** the type of the new column */
private DataType _type;
/** optional length for the new column */
private Integer _length;
/** optional precision for the new column */
private Integer _precision;
/** optional scale for the new column */
private Integer _scale;
/** whether or not the column is auto-number */
private boolean _autoNumber;
public ColumnBuilder(String name) {
this(name, null);
}
public ColumnBuilder(String name, DataType type) {
_name = name;
_type = type;
}
/**
* Sets the type for the new column.
*/
public ColumnBuilder setType(DataType type) {
_type = type;
return this;
}
/**
* Sets the type for the new column based on the given SQL type.
*/
public ColumnBuilder setSQLType(int type) throws SQLException {
return setSQLType(type, 0);
}
/**
* Sets the type for the new column based on the given SQL type and target
* data length (in type specific units).
*/
public ColumnBuilder setSQLType(int type, int lengthInUnits)
throws SQLException
{
return setType(DataType.fromSQLType(type, lengthInUnits));
}
/**
* Sets the precision for the new column.
*/
public ColumnBuilder setPrecision(int newPrecision) {
_precision = newPrecision;
return this;
}
/**
* Sets the scale for the new column.
*/
public ColumnBuilder setScale(int newScale) {
_scale = newScale;
return this;
}
/**
* Sets the length (in bytes) for the new column.
*/
public ColumnBuilder setLength(int length) {
_length = length;
return this;
}
/**
* Sets the length (in type specific units) for the new column.
*/
public ColumnBuilder setLengthInUnits(int unitLength) {
return setLength(_type.getUnitSize() * unitLength);
}
/**
* Sets the length for the new column to the max length for the type.
*/
public ColumnBuilder setMaxLength() {
return setLength(_type.getMaxSize());
}
/**
* Sets whether of not the new column is an auto-number column.
*/
public ColumnBuilder setAutoNumber(boolean autoNumber) {
_autoNumber = autoNumber;
return this;
}
/**
* Sets all attributes except name from the given Column template.
*/
public ColumnBuilder setFromColumn(Column template) {
DataType type = template.getType();
setType(type);
setLength(template.getLength());
setAutoNumber(template.isAutoNumber());
if(type.getHasScalePrecision()) {
setScale(template.getScale());
setPrecision(template.getPrecision());
}
return this;
}
/**
* Creates a new Column with the currently configured attributes.
*/
public Column toColumn() {
Column col = new Column();
col.setName(_name);
col.setType(_type);
if(_length != null) {
col.setLength(_length.shortValue());
}
if(_precision != null) {
col.setPrecision(_precision.byteValue());
}
if(_scale != null) {
col.setScale(_scale.byteValue());
}
if(_autoNumber) {
col.setAutoNumber(true);
}
return col;
}
}
|