1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.upgrade.v4_3_0;
16  
17  import com.liferay.portal.kernel.upgrade.UpgradeProcess;
18  import com.liferay.portal.kernel.upgrade.util.TempUpgradeColumnImpl;
19  import com.liferay.portal.kernel.upgrade.util.UpgradeColumn;
20  import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
21  import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
22  import com.liferay.portal.kernel.upgrade.util.ValueMapper;
23  import com.liferay.portal.kernel.util.ArrayUtil;
24  import com.liferay.portal.upgrade.util.PKUpgradeColumnImpl;
25  import com.liferay.portal.upgrade.v4_3_0.util.AvailableMappersUtil;
26  import com.liferay.portal.upgrade.v4_3_0.util.PortletPreferencesTable;
27  import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerIdUpgradeColumnImpl;
28  import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerTypeUpgradeColumnImpl;
29  import com.liferay.portal.upgrade.v4_3_0.util.PrefsPlidUpgradeColumnImpl;
30  import com.liferay.portal.upgrade.v4_3_0.util.PrefsXMLUpgradeColumnImpl;
31  import com.liferay.portal.util.PortletKeys;
32  
33  import java.sql.Types;
34  
35  import java.util.Iterator;
36  
37  /**
38   * <a href="UpgradePortletPreferences.java.html"><b><i>View Source</i></b></a>
39   *
40   * @author Brian Wing Shun Chan
41   */
42  public class UpgradePortletPreferences extends UpgradeProcess {
43  
44      protected void doUpgrade() throws Exception {
45  
46          // PortletPreferences
47  
48          runSQL(
49              "delete from PortletPreferences where ownerId = '0' and " +
50                  "ownerType = " + PortletKeys.PREFS_OWNER_TYPE_COMPANY);
51  
52          ValueMapper companyIdMapper = AvailableMappersUtil.getCompanyIdMapper();
53  
54          Iterator<Object> itr = companyIdMapper.iterator();
55  
56          while (itr.hasNext()) {
57              String webId = (String)itr.next();
58  
59              Long companyIdObj = (Long)companyIdMapper.getNewValue(webId);
60  
61              runSQL(
62                  "delete from PortletPreferences where ownerId = '" +
63                      companyIdObj.longValue() + "' and ownerType = " +
64                          PortletKeys.PREFS_OWNER_TYPE_COMPANY);
65          }
66  
67          Object[][] preferencesColumns1 =
68              {{"layoutId", new Integer(Types.VARCHAR)}};
69          Object[][] preferencesColumns2 =
70              PortletPreferencesTable.TABLE_COLUMNS.clone();
71  
72          Object[][] preferencesColumns = ArrayUtil.append(
73              preferencesColumns1, preferencesColumns2);
74  
75          PrefsOwnerIdUpgradeColumnImpl upgradeOwnerIdColumn =
76              new PrefsOwnerIdUpgradeColumnImpl(
77                  AvailableMappersUtil.getCompanyIdMapper(),
78                  AvailableMappersUtil.getGroupIdMapper(),
79                  AvailableMappersUtil.getUserIdMapper());
80  
81          UpgradeColumn upgradeOwnerTypeColumn =
82              new PrefsOwnerTypeUpgradeColumnImpl(upgradeOwnerIdColumn);
83  
84          UpgradeColumn upgradeLayoutIdColumn =
85              new TempUpgradeColumnImpl("layoutId");
86  
87          UpgradeColumn upgradePlidColumn = new PrefsPlidUpgradeColumnImpl(
88              upgradeOwnerIdColumn, upgradeLayoutIdColumn,
89              AvailableMappersUtil.getLayoutPlidMapper());
90  
91          UpgradeColumn upgradePortletIdColumn =
92              new TempUpgradeColumnImpl("portletId");
93  
94          UpgradeColumn upgradePreferencesColumn = new PrefsXMLUpgradeColumnImpl(
95              upgradePortletIdColumn,  AvailableMappersUtil.getGroupIdMapper(),
96              AvailableMappersUtil.getPollsQuestionIdMapper(),
97              AvailableMappersUtil.getWikiNodeIdMapper());
98  
99          UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
100             PortletPreferencesTable.TABLE_NAME, preferencesColumns,
101             new PKUpgradeColumnImpl("portletPreferencesId", false),
102             upgradeOwnerIdColumn, upgradeOwnerTypeColumn, upgradeLayoutIdColumn,
103             upgradePlidColumn, upgradePortletIdColumn,
104             upgradePreferencesColumn);
105 
106         String createSQL = PortletPreferencesTable.TABLE_SQL_CREATE;
107 
108         createSQL =
109             createSQL.substring(0, createSQL.length() - 1) +
110                 ",layoutId VARCHAR(75) null)";
111 
112         upgradeTable.setCreateSQL(createSQL);
113 
114         upgradeTable.updateTable();
115 
116         // Schema
117 
118         runSQL(_UPGRADE_SCHEMA);
119     }
120 
121     private static final String[] _UPGRADE_SCHEMA = {
122         "alter table PortletPreferences drop column layoutId"
123     };
124 
125 }