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 package org.melati.poem;
47
48 import java.sql.Types;
49 import java.sql.ResultSet;
50 import java.sql.PreparedStatement;
51 import java.sql.SQLException;
52 import java.util.Enumeration;
53
54
55
56
57
58 public class BooleanPoemType extends AtomPoemType<Boolean> {
59
60
61
62
63
64 public BooleanPoemType(boolean nullable) {
65 super(Types.BIT, "BOOLEAN", nullable);
66 }
67
68 protected Enumeration<Boolean> _possibleRaws() {
69 return new BooleanPossibleRawEnumeration();
70 }
71
72 protected void _assertValidRaw(Object raw) {
73 if (raw != null && !(raw instanceof Boolean))
74 throw new TypeMismatchPoemException(raw, this);
75 }
76
77 protected Boolean _getRaw(ResultSet rs, int col) throws SQLException {
78 synchronized (rs) {
79 boolean b = rs.getBoolean(col);
80 return rs.wasNull() ? null : b ? Boolean.TRUE : Boolean.FALSE; }
81 }
82
83 protected void _setRaw(PreparedStatement ps, int col, Object bool)
84 throws SQLException {
85 ps.setBoolean(col, ((Boolean)bool).booleanValue());
86 }
87
88 protected Boolean _rawOfString(String rawString)
89 throws ParsingPoemException {
90 rawString = rawString.trim();
91 if (rawString.length() == 1)
92 switch (rawString.charAt(0)) {
93 case 't': case 'T': case 'y': case 'Y': case '1':
94 return Boolean.TRUE;
95 case 'f': case 'F': case 'n': case 'N': case '0':
96 return Boolean.FALSE;
97 default:
98 throw new ParsingPoemException(this, rawString);
99 }
100
101 if (rawString.regionMatches(0, "true", 0, 4) ||
102 rawString.regionMatches(0, "yes", 0, 3))
103 return Boolean.TRUE;
104 else if (rawString.regionMatches(0, "false", 0, 5) ||
105 rawString.regionMatches(0, "no", 0, 2))
106 return Boolean.FALSE;
107 else
108 throw new ParsingPoemException(this, rawString);
109 }
110
111 protected boolean _canRepresent(SQLPoemType<?> other) {
112 return
113 other instanceof BooleanPoemType;
114 }
115
116
117
118
119
120 public String toDsdType() {
121 return "Boolean";
122 }
123
124 protected void _saveColumnInfo(ColumnInfo columnInfo)
125 throws AccessPoemException {
126 columnInfo.setTypefactory(PoemTypeFactory.BOOLEAN);
127 }
128
129 }
130