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