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.DefaultPKMapper;
019    import com.liferay.portal.kernel.upgrade.util.SwapUpgradeColumnImpl;
020    import com.liferay.portal.kernel.upgrade.util.TempUpgradeColumnImpl;
021    import com.liferay.portal.kernel.upgrade.util.UpgradeColumn;
022    import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
023    import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
024    import com.liferay.portal.kernel.upgrade.util.ValueMapper;
025    import com.liferay.portal.kernel.util.ArrayUtil;
026    import com.liferay.portal.model.Organization;
027    import com.liferay.portal.model.User;
028    import com.liferay.portal.model.UserGroup;
029    import com.liferay.portal.upgrade.util.PKUpgradeColumnImpl;
030    import com.liferay.portal.upgrade.v4_3_0.util.AvailableMappersUtil;
031    import com.liferay.portal.upgrade.v4_3_0.util.ClassNameIdUpgradeColumnImpl;
032    import com.liferay.portal.upgrade.v4_3_0.util.ClassPKContainer;
033    import com.liferay.portal.upgrade.v4_3_0.util.ClassPKUpgradeColumnImpl;
034    import com.liferay.portal.upgrade.v4_3_0.util.GroupNameUpgradeColumnImpl;
035    import com.liferay.portal.upgrade.v4_3_0.util.GroupTable;
036    import com.liferay.portal.upgrade.v4_3_0.util.LayoutOwnerIdUpgradeColumnImpl;
037    import com.liferay.portal.upgrade.v4_3_0.util.LayoutPlidUpgradeColumnImpl;
038    import com.liferay.portal.upgrade.v4_3_0.util.LayoutSetTable;
039    import com.liferay.portal.upgrade.v4_3_0.util.LayoutTable;
040    import com.liferay.portal.upgrade.v4_3_0.util.OrgGroupPermissionTable;
041    import com.liferay.portal.upgrade.v4_3_0.util.OrgGroupRoleTable;
042    import com.liferay.portal.util.PortalUtil;
043    
044    import java.sql.Types;
045    
046    import java.util.HashMap;
047    import java.util.Map;
048    
049    /**
050     * @author Alexander Chow
051     * @author Brian Wing Shun Chan
052     */
053    public class UpgradeGroup extends UpgradeProcess {
054    
055            protected void doUpgrade() throws Exception {
056    
057                    // Group_
058    
059                    PKUpgradeColumnImpl upgradePKColumn = new PKUpgradeColumnImpl(
060                            "groupId", true);
061    
062                    ClassNameIdUpgradeColumnImpl classNameIdColumn =
063                            new ClassNameIdUpgradeColumnImpl();
064    
065                    Map<Long, ClassPKContainer> classPKContainers =
066                            new HashMap<Long, ClassPKContainer>();
067    
068                    classPKContainers.put(
069                            new Long(PortalUtil.getClassNameId(Organization.class.getName())),
070                            new ClassPKContainer(
071                                    AvailableMappersUtil.getOrganizationIdMapper(), true));
072    
073                    classPKContainers.put(
074                            new Long(PortalUtil.getClassNameId(User.class.getName())),
075                            new ClassPKContainer(
076                                    AvailableMappersUtil.getUserIdMapper(), false));
077    
078                    classPKContainers.put(
079                            new Long(PortalUtil.getClassNameId(UserGroup.class.getName())),
080                            new ClassPKContainer(
081                                    AvailableMappersUtil.getUserGroupIdMapper(), true));
082    
083                    UpgradeColumn upgradeClassPKColumn = new ClassPKUpgradeColumnImpl(
084                            classNameIdColumn, classPKContainers);
085    
086                    UpgradeColumn upgradeNameColumn = new GroupNameUpgradeColumnImpl(
087                            upgradePKColumn, upgradeClassPKColumn);
088    
089                    UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
090                            GroupTable.TABLE_NAME, GroupTable.TABLE_COLUMNS, upgradePKColumn,
091                            classNameIdColumn, upgradeClassPKColumn, upgradeNameColumn);
092    
093                    upgradeTable.setCreateSQL(GroupTable.TABLE_SQL_CREATE);
094    
095                    upgradeTable.updateTable();
096    
097                    ValueMapper groupIdMapper = new DefaultPKMapper(
098                            upgradePKColumn.getValueMapper());
099    
100                    AvailableMappersUtil.setGroupIdMapper(groupIdMapper);
101    
102                    UpgradeColumn upgradeGroupIdColumn = new SwapUpgradeColumnImpl(
103                            "groupId", groupIdMapper);
104    
105                    // Layout
106    
107                    UpgradeColumn upgradeLayoutOwnerIdColumn =
108                            new TempUpgradeColumnImpl("ownerId");
109    
110                    LayoutOwnerIdUpgradeColumnImpl upgradeLayoutOwnerIdGroupIdColumn =
111                            new LayoutOwnerIdUpgradeColumnImpl(
112                                    "groupId", upgradeLayoutOwnerIdColumn, groupIdMapper);
113    
114                    LayoutOwnerIdUpgradeColumnImpl upgradeLayoutOwnerIdPrivateLayoutColumn =
115                            new LayoutOwnerIdUpgradeColumnImpl(
116                                    "privateLayout", upgradeLayoutOwnerIdColumn, groupIdMapper);
117    
118                    UpgradeColumn upgradeLayoutIdColumn =
119                            new TempUpgradeColumnImpl("layoutId");
120    
121                    PKUpgradeColumnImpl upgradeLayoutPlidColumn =
122                            new LayoutPlidUpgradeColumnImpl(
123                                    upgradeLayoutOwnerIdColumn, upgradeLayoutOwnerIdGroupIdColumn,
124                                    upgradeLayoutOwnerIdPrivateLayoutColumn, upgradeLayoutIdColumn);
125    
126                    Object[][] layoutColumns1 = {{"ownerId", new Integer(Types.VARCHAR)}};
127                    Object[][] layoutColumns2 = LayoutTable.TABLE_COLUMNS.clone();
128    
129                    Object[][] layoutColumns = ArrayUtil.append(
130                            layoutColumns1, layoutColumns2);
131    
132                    upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
133                            LayoutTable.TABLE_NAME, layoutColumns, upgradeLayoutOwnerIdColumn,
134                            upgradeLayoutOwnerIdGroupIdColumn,
135                            upgradeLayoutOwnerIdPrivateLayoutColumn, upgradeLayoutIdColumn,
136                            upgradeLayoutPlidColumn);
137    
138                    String createSQL = LayoutTable.TABLE_SQL_CREATE;
139    
140                    createSQL =
141                            createSQL.substring(0, createSQL.length() - 1) +
142                                    ",ownerId VARCHAR(75) null)";
143    
144                    upgradeTable.setCreateSQL(createSQL);
145    
146                    upgradeTable.updateTable();
147    
148                    ValueMapper layoutPlidMapper = upgradeLayoutPlidColumn.getValueMapper();
149    
150                    AvailableMappersUtil.setLayoutPlidMapper(layoutPlidMapper);
151    
152                    // LayoutSet
153    
154                    Object[][] layoutSetColumns1 =
155                            {{"ownerId", new Integer(Types.VARCHAR)}};
156                    Object[][] layoutSetColumns2 = LayoutSetTable.TABLE_COLUMNS.clone();
157    
158                    Object[][] layoutSetColumns = ArrayUtil.append(
159                            layoutSetColumns1, layoutSetColumns2);
160    
161                    upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
162                            LayoutSetTable.TABLE_NAME, layoutSetColumns,
163                            new PKUpgradeColumnImpl("layoutSetId", false),
164                            upgradeGroupIdColumn);
165    
166                    createSQL = LayoutSetTable.TABLE_SQL_CREATE;
167    
168                    createSQL =
169                            createSQL.substring(0, createSQL.length() - 1) +
170                                    ",ownerId VARCHAR(75) null)";
171    
172                    upgradeTable.setCreateSQL(createSQL);
173    
174                    upgradeTable.updateTable();
175    
176                    // OrgGroupPermission
177    
178                    upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
179                            OrgGroupPermissionTable.TABLE_NAME,
180                            OrgGroupPermissionTable.TABLE_COLUMNS, upgradeGroupIdColumn);
181    
182                    upgradeTable.setCreateSQL(OrgGroupPermissionTable.TABLE_SQL_CREATE);
183    
184                    upgradeTable.updateTable();
185    
186                    // OrgGroupRole
187    
188                    upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
189                            OrgGroupRoleTable.TABLE_NAME, OrgGroupRoleTable.TABLE_COLUMNS,
190                            upgradeGroupIdColumn);
191    
192                    upgradeTable.setCreateSQL(OrgGroupRoleTable.TABLE_SQL_CREATE);
193    
194                    upgradeTable.updateTable();
195    
196                    // Schema
197    
198                    runSQL(_UPGRADE_SCHEMA);
199            }
200    
201            private static final String[] _UPGRADE_SCHEMA = {
202                    "alter table Layout drop column ownerId",
203    
204                    "alter table LayoutSet drop column ownerId"
205            };
206    
207    }