001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.upgrade.v4_3_0;
016    
017    import com.liferay.portal.kernel.upgrade.UpgradeProcess;
018    import com.liferay.portal.kernel.upgrade.util.TempUpgradeColumnImpl;
019    import com.liferay.portal.kernel.upgrade.util.UpgradeColumn;
020    import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
021    import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
022    import com.liferay.portal.kernel.upgrade.util.ValueMapper;
023    import com.liferay.portal.kernel.util.ArrayUtil;
024    import com.liferay.portal.upgrade.util.PKUpgradeColumnImpl;
025    import com.liferay.portal.upgrade.v4_3_0.util.AvailableMappersUtil;
026    import com.liferay.portal.upgrade.v4_3_0.util.PortletPreferencesTable;
027    import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerIdUpgradeColumnImpl;
028    import com.liferay.portal.upgrade.v4_3_0.util.PrefsOwnerTypeUpgradeColumnImpl;
029    import com.liferay.portal.upgrade.v4_3_0.util.PrefsPlidUpgradeColumnImpl;
030    import com.liferay.portal.upgrade.v4_3_0.util.PrefsXMLUpgradeColumnImpl;
031    import com.liferay.portal.util.PortletKeys;
032    
033    import java.sql.Types;
034    
035    import java.util.Iterator;
036    
037    /**
038     * @author Brian Wing Shun Chan
039     */
040    public class UpgradePortletPreferences extends UpgradeProcess {
041    
042            protected void doUpgrade() throws Exception {
043    
044                    // PortletPreferences
045    
046                    runSQL(
047                            "delete from PortletPreferences where ownerId = '0' and " +
048                                    "ownerType = " + PortletKeys.PREFS_OWNER_TYPE_COMPANY);
049    
050                    ValueMapper companyIdMapper = AvailableMappersUtil.getCompanyIdMapper();
051    
052                    Iterator<Object> itr = companyIdMapper.iterator();
053    
054                    while (itr.hasNext()) {
055                            String webId = (String)itr.next();
056    
057                            Long companyIdObj = (Long)companyIdMapper.getNewValue(webId);
058    
059                            runSQL(
060                                    "delete from PortletPreferences where ownerId = '" +
061                                            companyIdObj.longValue() + "' and ownerType = " +
062                                                    PortletKeys.PREFS_OWNER_TYPE_COMPANY);
063                    }
064    
065                    Object[][] preferencesColumns1 =
066                            {{"layoutId", new Integer(Types.VARCHAR)}};
067                    Object[][] preferencesColumns2 =
068                            PortletPreferencesTable.TABLE_COLUMNS.clone();
069    
070                    Object[][] preferencesColumns = ArrayUtil.append(
071                            preferencesColumns1, preferencesColumns2);
072    
073                    PrefsOwnerIdUpgradeColumnImpl upgradeOwnerIdColumn =
074                            new PrefsOwnerIdUpgradeColumnImpl(
075                                    AvailableMappersUtil.getCompanyIdMapper(),
076                                    AvailableMappersUtil.getGroupIdMapper(),
077                                    AvailableMappersUtil.getUserIdMapper());
078    
079                    UpgradeColumn upgradeOwnerTypeColumn =
080                            new PrefsOwnerTypeUpgradeColumnImpl(upgradeOwnerIdColumn);
081    
082                    UpgradeColumn upgradeLayoutIdColumn =
083                            new TempUpgradeColumnImpl("layoutId");
084    
085                    UpgradeColumn upgradePlidColumn = new PrefsPlidUpgradeColumnImpl(
086                            upgradeOwnerIdColumn, upgradeLayoutIdColumn,
087                            AvailableMappersUtil.getLayoutPlidMapper());
088    
089                    UpgradeColumn upgradePortletIdColumn =
090                            new TempUpgradeColumnImpl("portletId");
091    
092                    UpgradeColumn upgradePreferencesColumn = new PrefsXMLUpgradeColumnImpl(
093                            upgradePortletIdColumn,  AvailableMappersUtil.getGroupIdMapper(),
094                            AvailableMappersUtil.getPollsQuestionIdMapper(),
095                            AvailableMappersUtil.getWikiNodeIdMapper());
096    
097                    UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
098                            PortletPreferencesTable.TABLE_NAME, preferencesColumns,
099                            new PKUpgradeColumnImpl("portletPreferencesId", false),
100                            upgradeOwnerIdColumn, upgradeOwnerTypeColumn, upgradeLayoutIdColumn,
101                            upgradePlidColumn, upgradePortletIdColumn,
102                            upgradePreferencesColumn);
103    
104                    String createSQL = PortletPreferencesTable.TABLE_SQL_CREATE;
105    
106                    createSQL =
107                            createSQL.substring(0, createSQL.length() - 1) +
108                                    ",layoutId VARCHAR(75) null)";
109    
110                    upgradeTable.setCreateSQL(createSQL);
111    
112                    upgradeTable.updateTable();
113    
114                    // Schema
115    
116                    runSQL(_UPGRADE_SCHEMA);
117            }
118    
119            private static final String[] _UPGRADE_SCHEMA = {
120                    "alter table PortletPreferences drop column layoutId"
121            };
122    
123    }