OSDN Git Service

MySQLのAUTO_INCREMENTに対応した
[ea2ddl/ea2ddl.git] / ea2ddl-ddl / src / main / java / jp / sourceforge / ea2ddl / ddl / model / ColumnModel.java
1 /**\r
2  * \r
3  */\r
4 package jp.sourceforge.ea2ddl.ddl.model;\r
5 \r
6 import java.io.Serializable;\r
7 import java.util.regex.Matcher;\r
8 import java.util.regex.Pattern;\r
9 \r
10 import jp.sourceforge.ea2ddl.common.config.Config;\r
11 import jp.sourceforge.ea2ddl.dao.exentity.TAttribute;\r
12 import jp.sourceforge.ea2ddl.dao.exentity.TAttributetag;\r
13 \r
14 /**\r
15  * @author taktos\r
16  * \r
17  */\r
18 public class ColumnModel implements Serializable {\r
19         private static final long serialVersionUID = 1L;\r
20 \r
21         private String _name;\r
22         private String _alias;\r
23         private String _note;\r
24         private String _type;\r
25         private Integer _precision;\r
26         private Integer _scale;\r
27         private boolean nullable;\r
28         private boolean autoIncrement;\r
29 \r
30         public static ColumnModel create(TAttribute columnDef, Config dictionary) {\r
31                 ColumnModel column = new ColumnModel();\r
32                 column.setName(columnDef.getName());\r
33                 column.setAlias(columnDef.getStyle());\r
34                 column.setType(columnDef, dictionary);\r
35                 column.setNullable(Integer.valueOf(0).equals(\r
36                                 columnDef.getAllowduplicates()));\r
37                 column.setAutoIncrement(columnDef);\r
38                 column.setNote(columnDef.getNotes());\r
39                 return column;\r
40         }\r
41 \r
42         private void setType(TAttribute columnDef, Config dictionary) {\r
43                 String domain = dictionary.getProperty(columnDef.getType());\r
44                 if (domain != null) {\r
45                         Pattern p = Pattern.compile(\r
46                                         "^(\\w+)\\s*(\\((\\d+)(,\\s*(\\d+))?\\))?.*",\r
47                                         Pattern.CASE_INSENSITIVE);\r
48                         Matcher m = p.matcher(domain);\r
49                         if (m.matches()) {\r
50                                 setType(m.group(1));\r
51                                 if (m.group(3) != null) {\r
52                                         Integer len = Integer.valueOf(m.group(3));\r
53                                         setPrecision(len);\r
54                                 }\r
55                                 if (m.group(5) != null) {\r
56                                         setScale(Integer.valueOf(m.group(5)));\r
57                                 }\r
58                         }\r
59                         return;\r
60                 }\r
61                 setType(columnDef.getType());\r
62                 if (columnDef.getLength() != null) {\r
63                         setPrecision(columnDef.getLength());\r
64                 } else if (columnDef.getPrecision() != null) {\r
65                         setPrecision(columnDef.getScale());\r
66                 }\r
67                 setScale(columnDef.getScale());\r
68         }\r
69 \r
70         public boolean isNullable() {\r
71                 return nullable;\r
72         }\r
73 \r
74         public void setNullable(boolean nullable) {\r
75                 this.nullable = nullable;\r
76         }\r
77 \r
78         public boolean isAutoIncrement() {\r
79                 return autoIncrement;\r
80         }\r
81 \r
82         public void setAutoIncrement(boolean autoIncrement) {\r
83                 this.autoIncrement = autoIncrement;\r
84         }\r
85 \r
86         public void setAutoIncrement(TAttribute columnDef) {\r
87                 TAttributetag tag = columnDef.getTags().get("AutoNum");\r
88                 if (tag != null && "True".equals(tag.getValue())) {\r
89                         this.autoIncrement = true;\r
90                 } else {\r
91                         this.autoIncrement = false;\r
92                 }\r
93         }\r
94 \r
95         private String defaultValue;\r
96 \r
97         public String getName() {\r
98                 return _name;\r
99         }\r
100 \r
101         public void setName(String name) {\r
102                 _name = name;\r
103         }\r
104 \r
105         public String getAlias() {\r
106                 return _alias;\r
107         }\r
108 \r
109         public void setAlias(String alias) {\r
110                 _alias = alias;\r
111         }\r
112 \r
113         public String getNote() {\r
114                 return _note;\r
115         }\r
116 \r
117         public void setNote(String note) {\r
118                 _note = note;\r
119         }\r
120 \r
121         public String getType() {\r
122                 return _type;\r
123         }\r
124 \r
125         public void setType(String type) {\r
126                 _type = type;\r
127         }\r
128 \r
129         public Integer getPrecision() {\r
130                 return _precision;\r
131         }\r
132 \r
133         public void setPrecision(Integer precision) {\r
134                 _precision = precision;\r
135         }\r
136 \r
137         public Integer getScale() {\r
138                 return _scale;\r
139         }\r
140 \r
141         public void setScale(Integer scale) {\r
142                 _scale = scale;\r
143         }\r
144 \r
145         public String getDefaultValue() {\r
146                 return defaultValue;\r
147         }\r
148 \r
149         public void setDefaultValue(String defaultValue) {\r
150                 this.defaultValue = defaultValue;\r
151         }\r
152 \r
153         public String getDefinition() {\r
154                 StringBuilder b = new StringBuilder();\r
155                 b.append(_type);\r
156                 if (_precision != null) {\r
157                         b.append("(").append(_precision);\r
158                         if (_scale != null) {\r
159                                 b.append(",").append(_scale);\r
160                         }\r
161                         b.append(")");\r
162                 }\r
163                 if (!isNullable()) {\r
164                         b.append(" NOT NULL");\r
165                 }\r
166                 if (isAutoIncrement()) {\r
167                         b.append(" AUTO_INCREMENT");\r
168                 }\r
169                 return b.toString();\r
170         }\r
171 \r
172 }\r