1
22
23 package com.liferay.portal.upgrade.util;
24
25 import com.liferay.portal.kernel.util.StringMaker;
26 import com.liferay.portal.kernel.util.Validator;
27 import com.liferay.portal.tools.comparator.ColumnsComparator;
28 import com.liferay.portal.upgrade.StagnantRowException;
29
30 import java.sql.PreparedStatement;
31 import java.sql.ResultSet;
32
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.List;
36
37
44 public class DefaultUpgradeTableImpl
45 extends BaseUpgradeTableImpl implements UpgradeTable {
46
47 public DefaultUpgradeTableImpl(String tableName, Object[][] columns) {
48 this(tableName, columns, null);
49 }
50
51 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
52 UpgradeColumn upgradeColumn1) {
53
54 this(tableName, columns, upgradeColumn1, null);
55 }
56
57 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
58 UpgradeColumn upgradeColumn1,
59 UpgradeColumn upgradeColumn2) {
60
61 this(tableName, columns, upgradeColumn1, upgradeColumn2, null);
62 }
63
64 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
65 UpgradeColumn upgradeColumn1,
66 UpgradeColumn upgradeColumn2,
67 UpgradeColumn upgradeColumn3) {
68
69 this(
70 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
71 null);
72 }
73
74 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
75 UpgradeColumn upgradeColumn1,
76 UpgradeColumn upgradeColumn2,
77 UpgradeColumn upgradeColumn3,
78 UpgradeColumn upgradeColumn4) {
79
80 this(
81 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
82 upgradeColumn4, null);
83 }
84
85 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
86 UpgradeColumn upgradeColumn1,
87 UpgradeColumn upgradeColumn2,
88 UpgradeColumn upgradeColumn3,
89 UpgradeColumn upgradeColumn4,
90 UpgradeColumn upgradeColumn5) {
91
92 this(
93 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
94 upgradeColumn4, upgradeColumn5, null);
95 }
96
97 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
98 UpgradeColumn upgradeColumn1,
99 UpgradeColumn upgradeColumn2,
100 UpgradeColumn upgradeColumn3,
101 UpgradeColumn upgradeColumn4,
102 UpgradeColumn upgradeColumn5,
103 UpgradeColumn upgradeColumn6) {
104
105 this(
106 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
107 upgradeColumn4, upgradeColumn5, upgradeColumn6, null);
108 }
109
110 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
111 UpgradeColumn upgradeColumn1,
112 UpgradeColumn upgradeColumn2,
113 UpgradeColumn upgradeColumn3,
114 UpgradeColumn upgradeColumn4,
115 UpgradeColumn upgradeColumn5,
116 UpgradeColumn upgradeColumn6,
117 UpgradeColumn upgradeColumn7) {
118
119 this(
120 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
121 upgradeColumn4, upgradeColumn5, upgradeColumn6, upgradeColumn7,
122 null);
123 }
124
125 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
126 UpgradeColumn upgradeColumn1,
127 UpgradeColumn upgradeColumn2,
128 UpgradeColumn upgradeColumn3,
129 UpgradeColumn upgradeColumn4,
130 UpgradeColumn upgradeColumn5,
131 UpgradeColumn upgradeColumn6,
132 UpgradeColumn upgradeColumn7,
133 UpgradeColumn upgradeColumn8) {
134
135 this(
136 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
137 upgradeColumn4, upgradeColumn5, upgradeColumn6, upgradeColumn7,
138 upgradeColumn8, null);
139 }
140
141 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
142 UpgradeColumn upgradeColumn1,
143 UpgradeColumn upgradeColumn2,
144 UpgradeColumn upgradeColumn3,
145 UpgradeColumn upgradeColumn4,
146 UpgradeColumn upgradeColumn5,
147 UpgradeColumn upgradeColumn6,
148 UpgradeColumn upgradeColumn7,
149 UpgradeColumn upgradeColumn8,
150 UpgradeColumn upgradeColumn9) {
151
152 this(
153 tableName, columns, upgradeColumn1, upgradeColumn2, upgradeColumn3,
154 upgradeColumn4, upgradeColumn5, upgradeColumn6, upgradeColumn7,
155 upgradeColumn8, upgradeColumn9, null);
156 }
157
158 public DefaultUpgradeTableImpl(String tableName, Object[][] columns,
159 UpgradeColumn upgradeColumn1,
160 UpgradeColumn upgradeColumn2,
161 UpgradeColumn upgradeColumn3,
162 UpgradeColumn upgradeColumn4,
163 UpgradeColumn upgradeColumn5,
164 UpgradeColumn upgradeColumn6,
165 UpgradeColumn upgradeColumn7,
166 UpgradeColumn upgradeColumn8,
167 UpgradeColumn upgradeColumn9,
168 UpgradeColumn upgradeColumn10) {
169
170 super(tableName);
171
172
177 columns = (Object[][])columns.clone();
178
179 List sortedColumnNames = new ArrayList();
180
181 getSortedColumnName(sortedColumnNames, upgradeColumn1);
182 getSortedColumnName(sortedColumnNames, upgradeColumn2);
183 getSortedColumnName(sortedColumnNames, upgradeColumn3);
184 getSortedColumnName(sortedColumnNames, upgradeColumn4);
185 getSortedColumnName(sortedColumnNames, upgradeColumn5);
186 getSortedColumnName(sortedColumnNames, upgradeColumn6);
187 getSortedColumnName(sortedColumnNames, upgradeColumn7);
188 getSortedColumnName(sortedColumnNames, upgradeColumn8);
189 getSortedColumnName(sortedColumnNames, upgradeColumn9);
190 getSortedColumnName(sortedColumnNames, upgradeColumn10);
191
192 if (sortedColumnNames.size() > 0) {
193 Arrays.sort(columns, new ColumnsComparator(sortedColumnNames));
194 }
195
196 setColumns(columns);
197
198 _upgradeColumns = new UpgradeColumn[columns.length];
199
200 prepareUpgradeColumns(upgradeColumn1);
201 prepareUpgradeColumns(upgradeColumn2);
202 prepareUpgradeColumns(upgradeColumn3);
203 prepareUpgradeColumns(upgradeColumn4);
204 prepareUpgradeColumns(upgradeColumn5);
205 prepareUpgradeColumns(upgradeColumn6);
206 prepareUpgradeColumns(upgradeColumn7);
207 prepareUpgradeColumns(upgradeColumn8);
208 prepareUpgradeColumns(upgradeColumn9);
209 prepareUpgradeColumns(upgradeColumn10);
210 }
211
212 public String getExportedData(ResultSet rs) throws Exception {
213 StringMaker sm = new StringMaker();
214
215 Object[][] columns = getColumns();
216
217 for (int i = 0; i < columns.length; i++) {
218 boolean last = false;
219
220 if ((i + 1) == columns.length) {
221 last = true;
222 }
223
224 if (_upgradeColumns[i] == null) {
225 appendColumn(
226 sm, rs, (String)columns[i][0], (Integer)columns[i][1],
227 last);
228 }
229 else {
230 try {
231 Integer columnType = _upgradeColumns[i].getOldColumnType(
232 (Integer)columns[i][1]);
233
234 Object oldValue = getValue(
235 rs, (String)columns[i][0], columnType);
236
237 _upgradeColumns[i].setOldValue(oldValue);
238
239 Object newValue = _upgradeColumns[i].getNewValue(oldValue);
240
241 _upgradeColumns[i].setNewValue(newValue);
242
243 appendColumn(sm, newValue, last);
244 }
245 catch (StagnantRowException sre) {
246 _upgradeColumns[i].setNewValue(null);
247
248 throw new StagnantRowException(
249 "Column " + columns[i][0] + " with value " +
250 sre.getMessage(),
251 sre);
252 }
253 }
254 }
255
256 return sm.toString();
257 }
258
259 public void setColumn(
260 PreparedStatement ps, int index, Integer type, String value)
261 throws Exception {
262
263 if (_upgradeColumns[index] != null) {
264 if (getCreateSQL() == null) {
265 type = _upgradeColumns[index].getOldColumnType(type);
266 }
267 else {
268 type = _upgradeColumns[index].getNewColumnType(type);
269 }
270 }
271
272 super.setColumn(ps, index, type, value);
273 }
274
275 protected void getSortedColumnName(
276 List sortedColumnNames, UpgradeColumn upgradeColumn) {
277
278 if (upgradeColumn == null) {
279 return;
280 }
281
282 String name = upgradeColumn.getName();
283
284 if (Validator.isNotNull(name)) {
285 sortedColumnNames.add(name);
286 }
287 }
288
289 protected void prepareUpgradeColumns(UpgradeColumn upgradeColumn) {
290 if (upgradeColumn == null) {
291 return;
292 }
293
294 Object[][] columns = getColumns();
295
296 for (int i = 0; i < columns.length; i++) {
297 String name = (String)columns[i][0];
298
299 if (upgradeColumn.isApplicable(name)) {
300 _upgradeColumns[i] = upgradeColumn;
301 }
302 }
303 }
304
305 private UpgradeColumn[] _upgradeColumns;
306
307 }