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