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