001
014
015 package com.liferay.portal.upgrade.v5_1_5;
016
017 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
018 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
019 import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
020 import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
021 import com.liferay.portal.kernel.util.StringPool;
022 import com.liferay.portal.kernel.util.Validator;
023 import com.liferay.portal.upgrade.v5_1_5.util.DLFileEntryTable;
024 import com.liferay.portal.upgrade.v5_1_5.util.DLFileRankTable;
025 import com.liferay.portal.upgrade.v5_1_5.util.DLFileShortcutTable;
026 import com.liferay.portal.upgrade.v5_1_5.util.DLFileVersionTable;
027 import com.liferay.portlet.PortletPreferencesFactoryUtil;
028
029 import java.sql.Connection;
030 import java.sql.PreparedStatement;
031 import java.sql.ResultSet;
032
033 import javax.portlet.PortletPreferences;
034
035
040 public class UpgradeDocumentLibrary extends UpgradeProcess {
041
042 protected void deletePortletPreferences(long portletPreferencesId)
043 throws Exception {
044
045 runSQL(
046 "delete from PortletPreferences where portletPreferencesId = " +
047 portletPreferencesId);
048 }
049
050 @Override
051 protected void doUpgrade() throws Exception {
052 try {
053 runSQL("alter_column_type DLFileEntry name VARCHAR(255) null");
054 }
055 catch (Exception e) {
056
057
058
059 UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
060 DLFileEntryTable.TABLE_NAME, DLFileEntryTable.TABLE_COLUMNS);
061
062 upgradeTable.setCreateSQL(DLFileEntryTable.TABLE_SQL_CREATE);
063 upgradeTable.setIndexesSQL(DLFileEntryTable.TABLE_SQL_ADD_INDEXES);
064
065 upgradeTable.updateTable();
066 }
067
068 try {
069 runSQL("alter_column_type DLFileRank name VARCHAR(255) null");
070 }
071 catch (Exception e) {
072
073
074
075 UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
076 DLFileRankTable.TABLE_NAME, DLFileRankTable.TABLE_COLUMNS);
077
078 upgradeTable.setCreateSQL(DLFileRankTable.TABLE_SQL_CREATE);
079 upgradeTable.setIndexesSQL(DLFileRankTable.TABLE_SQL_ADD_INDEXES);
080
081 upgradeTable.updateTable();
082 }
083
084 try {
085 runSQL("alter_column_type DLFileShortcut toName VARCHAR(255) null");
086 }
087 catch (Exception e) {
088
089
090
091 UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
092 DLFileShortcutTable.TABLE_NAME,
093 DLFileShortcutTable.TABLE_COLUMNS);
094
095 upgradeTable.setCreateSQL(DLFileShortcutTable.TABLE_SQL_CREATE);
096 upgradeTable.setIndexesSQL(
097 DLFileShortcutTable.TABLE_SQL_ADD_INDEXES);
098
099 upgradeTable.updateTable();
100 }
101
102 try {
103 runSQL("alter_column_type DLFileVersion name VARCHAR(255) null");
104 }
105 catch (Exception e) {
106
107
108
109 UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
110 DLFileVersionTable.TABLE_NAME,
111 DLFileVersionTable.TABLE_COLUMNS);
112
113 upgradeTable.setCreateSQL(DLFileVersionTable.TABLE_SQL_CREATE);
114 upgradeTable.setIndexesSQL(
115 DLFileVersionTable.TABLE_SQL_ADD_INDEXES);
116
117 upgradeTable.updateTable();
118 }
119
120
121
122 updateGroupId();
123
124
125
126 updatePortletPreferences();
127 }
128
129 protected Object[] getLayout(long plid) throws Exception {
130 Object[] layout = null;
131
132 Connection con = null;
133 PreparedStatement ps = null;
134 ResultSet rs = null;
135
136 try {
137 con = DataAccess.getUpgradeOptimizedConnection();
138
139 ps = con.prepareStatement(_GET_LAYOUT);
140
141 ps.setLong(1, plid);
142
143 rs = ps.executeQuery();
144
145 while (rs.next()) {
146 long companyId = rs.getLong("companyId");
147
148 layout = new Object[] {companyId};
149 }
150 }
151 finally {
152 DataAccess.cleanUp(con, ps, rs);
153 }
154
155 return layout;
156 }
157
158 protected void updateGroupId() throws Exception {
159 StringBuilder sb = new StringBuilder();
160
161 sb.append("update DLFileEntry set groupId = (select groupId from ");
162 sb.append("DLFolder where DLFolder.folderId = DLFileEntry.folderId)");
163
164 runSQL(sb.toString());
165
166 sb = new StringBuilder();
167
168 sb.append("update DLFileRank set groupId = (select groupId from ");
169 sb.append("DLFolder where DLFolder.folderId = DLFileRank.folderId)");
170
171 runSQL(sb.toString());
172
173 sb = new StringBuilder();
174
175 sb.append("update DLFileShortcut set groupId = (select groupId from ");
176 sb.append("DLFolder where DLFolder.folderId = ");
177 sb.append("DLFileShortcut.folderId)");
178
179 runSQL(sb.toString());
180
181 sb = new StringBuilder();
182
183 sb.append("update DLFileVersion set groupId = (select groupId from ");
184 sb.append("DLFolder where DLFolder.folderId = DLFileVersion.folderId)");
185
186 runSQL(sb.toString());
187 }
188
189 protected void updatePortletPreferences() throws Exception {
190 Connection con = null;
191 PreparedStatement ps = null;
192 ResultSet rs = null;
193
194 try {
195 con = DataAccess.getUpgradeOptimizedConnection();
196
197 ps = con.prepareStatement(
198 "select portletPreferencesId, ownerId, ownerType, plid, " +
199 "portletId, preferences from PortletPreferences where " +
200 "portletId = '20' and preferences like " +
201 "'%<name>fileEntryColumns</name><value></value>%'");
202
203 rs = ps.executeQuery();
204
205 while (rs.next()) {
206 long portletPreferencesId = rs.getLong("portletPreferencesId");
207 long ownerId = rs.getLong("ownerId");
208 int ownerType = rs.getInt("ownerType");
209 long plid = rs.getLong("plid");
210 String portletId = rs.getString("portletId");
211 String preferences = rs.getString("preferences");
212
213 Object[] layout = getLayout(plid);
214
215 if (layout != null) {
216 long companyId = (Long)layout[0];
217
218 String newPreferences = upgradePreferences(
219 companyId, ownerId, ownerType, plid, portletId,
220 preferences);
221
222 updatePortletPreferences(
223 portletPreferencesId, newPreferences);
224 }
225 else {
226 deletePortletPreferences(portletPreferencesId);
227 }
228 }
229 }
230 finally {
231 DataAccess.cleanUp(con, ps, rs);
232 }
233 }
234
235 protected void updatePortletPreferences(
236 long portletPreferencesId, String preferences)
237 throws Exception {
238
239 Connection con = null;
240 PreparedStatement ps = null;
241
242 try {
243 con = DataAccess.getUpgradeOptimizedConnection();
244
245 ps = con.prepareStatement(
246 "update PortletPreferences set preferences = ? where " +
247 "portletPreferencesId = " + portletPreferencesId);
248
249 ps.setString(1, preferences);
250
251 ps.executeUpdate();
252 }
253 finally {
254 DataAccess.cleanUp(con, ps);
255 }
256 }
257
258 protected String upgradePreferences(
259 long companyId, long ownerId, int ownerType, long plid,
260 String portletId, String xml)
261 throws Exception {
262
263 PortletPreferences portletPreferences =
264 PortletPreferencesFactoryUtil.fromXML(
265 companyId, ownerId, ownerType, plid, portletId, xml);
266
267 String fileEntryColumns = portletPreferences.getValue(
268 "fileEntryColumns", StringPool.BLANK);
269
270 if (Validator.isNull(fileEntryColumns)) {
271 portletPreferences.reset("fileEntryColumns");
272 }
273
274 return PortletPreferencesFactoryUtil.toXML(portletPreferences);
275 }
276
277 private static final String _GET_LAYOUT =
278 "select companyId from Layout where plid = ?";
279
280 }