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.DefaultPKMapper;
19  import com.liferay.portal.kernel.upgrade.util.SwapUpgradeColumnImpl;
20  import com.liferay.portal.kernel.upgrade.util.TempUpgradeColumnImpl;
21  import com.liferay.portal.kernel.upgrade.util.UpgradeColumn;
22  import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
23  import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
24  import com.liferay.portal.kernel.upgrade.util.ValueMapper;
25  import com.liferay.portal.kernel.util.ArrayUtil;
26  import com.liferay.portal.model.Organization;
27  import com.liferay.portal.model.User;
28  import com.liferay.portal.model.UserGroup;
29  import com.liferay.portal.upgrade.util.PKUpgradeColumnImpl;
30  import com.liferay.portal.upgrade.v4_3_0.util.AvailableMappersUtil;
31  import com.liferay.portal.upgrade.v4_3_0.util.ClassNameIdUpgradeColumnImpl;
32  import com.liferay.portal.upgrade.v4_3_0.util.ClassPKContainer;
33  import com.liferay.portal.upgrade.v4_3_0.util.ClassPKUpgradeColumnImpl;
34  import com.liferay.portal.upgrade.v4_3_0.util.GroupNameUpgradeColumnImpl;
35  import com.liferay.portal.upgrade.v4_3_0.util.GroupTable;
36  import com.liferay.portal.upgrade.v4_3_0.util.LayoutOwnerIdUpgradeColumnImpl;
37  import com.liferay.portal.upgrade.v4_3_0.util.LayoutPlidUpgradeColumnImpl;
38  import com.liferay.portal.upgrade.v4_3_0.util.LayoutSetTable;
39  import com.liferay.portal.upgrade.v4_3_0.util.LayoutTable;
40  import com.liferay.portal.upgrade.v4_3_0.util.OrgGroupPermissionTable;
41  import com.liferay.portal.upgrade.v4_3_0.util.OrgGroupRoleTable;
42  import com.liferay.portal.util.PortalUtil;
43  
44  import java.sql.Types;
45  
46  import java.util.HashMap;
47  import java.util.Map;
48  
49  /**
50   * <a href="UpgradeGroup.java.html"><b><i>View Source</i></b></a>
51   *
52   * @author Alexander Chow
53   * @author Brian Wing Shun Chan
54   */
55  public class UpgradeGroup extends UpgradeProcess {
56  
57      protected void doUpgrade() throws Exception {
58  
59          // Group_
60  
61          PKUpgradeColumnImpl upgradePKColumn = new PKUpgradeColumnImpl(
62              "groupId", true);
63  
64          ClassNameIdUpgradeColumnImpl classNameIdColumn =
65              new ClassNameIdUpgradeColumnImpl();
66  
67          Map<Long, ClassPKContainer> classPKContainers =
68              new HashMap<Long, ClassPKContainer>();
69  
70          classPKContainers.put(
71              new Long(PortalUtil.getClassNameId(Organization.class.getName())),
72              new ClassPKContainer(
73                  AvailableMappersUtil.getOrganizationIdMapper(), true));
74  
75          classPKContainers.put(
76              new Long(PortalUtil.getClassNameId(User.class.getName())),
77              new ClassPKContainer(
78                  AvailableMappersUtil.getUserIdMapper(), false));
79  
80          classPKContainers.put(
81              new Long(PortalUtil.getClassNameId(UserGroup.class.getName())),
82              new ClassPKContainer(
83                  AvailableMappersUtil.getUserGroupIdMapper(), true));
84  
85          UpgradeColumn upgradeClassPKColumn = new ClassPKUpgradeColumnImpl(
86              classNameIdColumn, classPKContainers);
87  
88          UpgradeColumn upgradeNameColumn = new GroupNameUpgradeColumnImpl(
89              upgradePKColumn, upgradeClassPKColumn);
90  
91          UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
92              GroupTable.TABLE_NAME, GroupTable.TABLE_COLUMNS, upgradePKColumn,
93              classNameIdColumn, upgradeClassPKColumn, upgradeNameColumn);
94  
95          upgradeTable.setCreateSQL(GroupTable.TABLE_SQL_CREATE);
96  
97          upgradeTable.updateTable();
98  
99          ValueMapper groupIdMapper = new DefaultPKMapper(
100             upgradePKColumn.getValueMapper());
101 
102         AvailableMappersUtil.setGroupIdMapper(groupIdMapper);
103 
104         UpgradeColumn upgradeGroupIdColumn = new SwapUpgradeColumnImpl(
105             "groupId", groupIdMapper);
106 
107         // Layout
108 
109         UpgradeColumn upgradeLayoutOwnerIdColumn =
110             new TempUpgradeColumnImpl("ownerId");
111 
112         LayoutOwnerIdUpgradeColumnImpl upgradeLayoutOwnerIdGroupIdColumn =
113             new LayoutOwnerIdUpgradeColumnImpl(
114                 "groupId", upgradeLayoutOwnerIdColumn, groupIdMapper);
115 
116         LayoutOwnerIdUpgradeColumnImpl upgradeLayoutOwnerIdPrivateLayoutColumn =
117             new LayoutOwnerIdUpgradeColumnImpl(
118                 "privateLayout", upgradeLayoutOwnerIdColumn, groupIdMapper);
119 
120         UpgradeColumn upgradeLayoutIdColumn =
121             new TempUpgradeColumnImpl("layoutId");
122 
123         PKUpgradeColumnImpl upgradeLayoutPlidColumn =
124             new LayoutPlidUpgradeColumnImpl(
125                 upgradeLayoutOwnerIdColumn, upgradeLayoutOwnerIdGroupIdColumn,
126                 upgradeLayoutOwnerIdPrivateLayoutColumn, upgradeLayoutIdColumn);
127 
128         Object[][] layoutColumns1 = {{"ownerId", new Integer(Types.VARCHAR)}};
129         Object[][] layoutColumns2 = LayoutTable.TABLE_COLUMNS.clone();
130 
131         Object[][] layoutColumns = ArrayUtil.append(
132             layoutColumns1, layoutColumns2);
133 
134         upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
135             LayoutTable.TABLE_NAME, layoutColumns, upgradeLayoutOwnerIdColumn,
136             upgradeLayoutOwnerIdGroupIdColumn,
137             upgradeLayoutOwnerIdPrivateLayoutColumn, upgradeLayoutIdColumn,
138             upgradeLayoutPlidColumn);
139 
140         String createSQL = LayoutTable.TABLE_SQL_CREATE;
141 
142         createSQL =
143             createSQL.substring(0, createSQL.length() - 1) +
144                 ",ownerId VARCHAR(75) null)";
145 
146         upgradeTable.setCreateSQL(createSQL);
147 
148         upgradeTable.updateTable();
149 
150         ValueMapper layoutPlidMapper = upgradeLayoutPlidColumn.getValueMapper();
151 
152         AvailableMappersUtil.setLayoutPlidMapper(layoutPlidMapper);
153 
154         // LayoutSet
155 
156         Object[][] layoutSetColumns1 =
157             {{"ownerId", new Integer(Types.VARCHAR)}};
158         Object[][] layoutSetColumns2 = LayoutSetTable.TABLE_COLUMNS.clone();
159 
160         Object[][] layoutSetColumns = ArrayUtil.append(
161             layoutSetColumns1, layoutSetColumns2);
162 
163         upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
164             LayoutSetTable.TABLE_NAME, layoutSetColumns,
165             new PKUpgradeColumnImpl("layoutSetId", false),
166             upgradeGroupIdColumn);
167 
168         createSQL = LayoutSetTable.TABLE_SQL_CREATE;
169 
170         createSQL =
171             createSQL.substring(0, createSQL.length() - 1) +
172                 ",ownerId VARCHAR(75) null)";
173 
174         upgradeTable.setCreateSQL(createSQL);
175 
176         upgradeTable.updateTable();
177 
178         // OrgGroupPermission
179 
180         upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
181             OrgGroupPermissionTable.TABLE_NAME,
182             OrgGroupPermissionTable.TABLE_COLUMNS, upgradeGroupIdColumn);
183 
184         upgradeTable.setCreateSQL(OrgGroupPermissionTable.TABLE_SQL_CREATE);
185 
186         upgradeTable.updateTable();
187 
188         // OrgGroupRole
189 
190         upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
191             OrgGroupRoleTable.TABLE_NAME, OrgGroupRoleTable.TABLE_COLUMNS,
192             upgradeGroupIdColumn);
193 
194         upgradeTable.setCreateSQL(OrgGroupRoleTable.TABLE_SQL_CREATE);
195 
196         upgradeTable.updateTable();
197 
198         // Schema
199 
200         runSQL(_UPGRADE_SCHEMA);
201     }
202 
203     private static final String[] _UPGRADE_SCHEMA = {
204         "alter table Layout drop column ownerId",
205 
206         "alter table LayoutSet drop column ownerId"
207     };
208 
209 }