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