1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portal.upgrade.v4_3_0;
21  
22  import com.liferay.portal.kernel.log.Log;
23  import com.liferay.portal.kernel.log.LogFactoryUtil;
24  import com.liferay.portal.kernel.util.ArrayUtil;
25  import com.liferay.portal.model.impl.PortletPreferencesImpl;
26  import com.liferay.portal.upgrade.UpgradeException;
27  import com.liferay.portal.upgrade.UpgradeProcess;
28  import com.liferay.portal.upgrade.util.DefaultUpgradeTableImpl;
29  import com.liferay.portal.upgrade.util.PKUpgradeColumnImpl;
30  import com.liferay.portal.upgrade.util.TempUpgradeColumnImpl;
31  import com.liferay.portal.upgrade.util.UpgradeColumn;
32  import com.liferay.portal.upgrade.util.UpgradeTable;
33  import com.liferay.portal.upgrade.util.ValueMapper;
34  import com.liferay.portal.upgrade.v4_3_0.util.AvailableMappersUtil;
35  import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerIdUpgradeColumnImpl;
36  import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerTypeUpgradeColumnImpl;
37  import com.liferay.portal.upgrade.v4_3_0.util.PrefsPlidUpgradeColumnImpl;
38  import com.liferay.portal.upgrade.v4_3_0.util.PrefsXMLUpgradeColumnImpl;
39  import com.liferay.portal.util.PortletKeys;
40  
41  import java.sql.Types;
42  
43  import java.util.Iterator;
44  
45  /**
46   * <a href="UpgradePortletPreferences.java.html"><b><i>View Source</i></b></a>
47   *
48   * @author Brian Wing Shun Chan
49   *
50   */
51  public class UpgradePortletPreferences extends UpgradeProcess {
52  
53      public void upgrade() throws UpgradeException {
54          _log.info("Upgrading");
55  
56          try {
57              doUpgrade();
58          }
59          catch (Exception e) {
60              throw new UpgradeException(e);
61          }
62      }
63  
64      protected void doUpgrade() throws Exception {
65  
66          // PortletPreferences
67  
68          runSQL(
69              "delete from PortletPreferences where ownerId = '0' and " +
70                  "ownerType = " + PortletKeys.PREFS_OWNER_TYPE_COMPANY);
71  
72          ValueMapper companyIdMapper = AvailableMappersUtil.getCompanyIdMapper();
73  
74          Iterator<Object> itr = companyIdMapper.iterator();
75  
76          while (itr.hasNext()) {
77              String webId = (String)itr.next();
78  
79              Long companyIdObj = (Long)companyIdMapper.getNewValue(webId);
80  
81              runSQL(
82                  "delete from PortletPreferences where ownerId = '" +
83                      companyIdObj.longValue() + "' and ownerType = " +
84                          PortletKeys.PREFS_OWNER_TYPE_COMPANY);
85          }
86  
87          Object[][] prefsColumns1 = {{"layoutId", new Integer(Types.VARCHAR)}};
88          Object[][] prefsColumns2 = PortletPreferencesImpl.TABLE_COLUMNS.clone();
89  
90          Object[][] prefsColumns =
91              ArrayUtil.append(prefsColumns1, prefsColumns2);
92  
93          PrefsOwnerIdUpgradeColumnImpl upgradeOwnerIdColumn =
94              new PrefsOwnerIdUpgradeColumnImpl(
95                  AvailableMappersUtil.getCompanyIdMapper(),
96                  AvailableMappersUtil.getGroupIdMapper(),
97                  AvailableMappersUtil.getUserIdMapper());
98  
99          UpgradeColumn upgradeOwnerTypeColumn =
100             new PrefsOwnerTypeUpgradeColumnImpl(upgradeOwnerIdColumn);
101 
102         UpgradeColumn upgradeLayoutIdColumn =
103             new TempUpgradeColumnImpl("layoutId");
104 
105         UpgradeColumn upgradePlidColumn = new PrefsPlidUpgradeColumnImpl(
106             upgradeOwnerIdColumn, upgradeLayoutIdColumn,
107             AvailableMappersUtil.getLayoutPlidMapper());
108 
109         UpgradeColumn upgradePortletIdColumn =
110             new TempUpgradeColumnImpl("portletId");
111 
112         UpgradeColumn upgradePreferencesColumn = new PrefsXMLUpgradeColumnImpl(
113             upgradePortletIdColumn,  AvailableMappersUtil.getGroupIdMapper(),
114             AvailableMappersUtil.getPollsQuestionIdMapper(),
115             AvailableMappersUtil.getWikiNodeIdMapper());
116 
117         UpgradeTable upgradeTable = new DefaultUpgradeTableImpl(
118             PortletPreferencesImpl.TABLE_NAME, prefsColumns,
119             new PKUpgradeColumnImpl("portletPreferencesId", false),
120             upgradeOwnerIdColumn, upgradeOwnerTypeColumn, upgradeLayoutIdColumn,
121             upgradePlidColumn, upgradePortletIdColumn,
122             upgradePreferencesColumn);
123 
124         String createSQL = PortletPreferencesImpl.TABLE_SQL_CREATE;
125 
126         createSQL =
127             createSQL.substring(0, createSQL.length() - 1) +
128                 ",layoutId VARCHAR(75) null)";
129 
130         upgradeTable.setCreateSQL(createSQL);
131 
132         upgradeTable.updateTable();
133 
134         // Schema
135 
136         runSQL(_UPGRADE_SCHEMA);
137     }
138 
139     private static final String[] _UPGRADE_SCHEMA = {
140         "alter table PortletPreferences drop column layoutId"
141     };
142 
143     private static Log _log =
144         LogFactoryUtil.getLog(UpgradePortletPreferences.class);
145 
146 }