1
14
15 package com.liferay.portal.upgrade.v5_2_0;
16
17 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
18 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
19 import com.liferay.portal.kernel.upgrade.util.TempUpgradeColumnImpl;
20 import com.liferay.portal.kernel.upgrade.util.UpgradeColumn;
21 import com.liferay.portal.kernel.upgrade.util.UpgradeTable;
22 import com.liferay.portal.kernel.upgrade.util.UpgradeTableFactoryUtil;
23 import com.liferay.portal.kernel.util.ArrayUtil;
24 import com.liferay.portal.upgrade.v5_2_0.util.OrganizationTable;
25 import com.liferay.portal.upgrade.v5_2_0.util.OrganizationTypeUpgradeColumnImpl;
26
27 import java.lang.StringBuilder;
28
29 import java.sql.Connection;
30 import java.sql.PreparedStatement;
31 import java.sql.ResultSet;
32 import java.sql.Types;
33
34
40 public class UpgradeOrganization extends UpgradeProcess {
41
42 protected void doUpgrade() throws Exception {
43 UpgradeColumn locationColumn = new TempUpgradeColumnImpl(
44 "location", new Integer(Types.BOOLEAN));
45
46 UpgradeColumn typeColumn = new OrganizationTypeUpgradeColumnImpl(
47 locationColumn);
48
49 Object[][] organizationColumns1 =
50 {{"location", new Integer(Types.BOOLEAN)}};
51 Object[][] organizationColumns2 =
52 OrganizationTable.TABLE_COLUMNS.clone();
53
54 Object[][] organizationColumns = ArrayUtil.append(
55 organizationColumns1, organizationColumns2);
56
57 UpgradeTable upgradeTable = UpgradeTableFactoryUtil.getUpgradeTable(
58 OrganizationTable.TABLE_NAME, organizationColumns, locationColumn,
59 typeColumn);
60
61 upgradeTable.updateTable();
62
63 updateLocationResources();
64 }
65
66 protected void updateLocationResources() throws Exception {
67 Connection con = null;
68 PreparedStatement ps = null;
69 ResultSet rs = null;
70
71 try {
72 con = DataAccess.getConnection();
73
74 StringBuilder sb = new StringBuilder();
75
76 sb.append("select rLoc.resourceId from Resource_ rLoc inner join ");
77 sb.append("ResourceCode rcLoc on rLoc.codeId = rcLoc.codeId ");
78 sb.append("inner join ResourceCode rcOrg on rcLoc.scope = ");
79 sb.append("rcOrg.scope and rcLoc.companyId = rcOrg.companyId ");
80 sb.append("where rcLoc.name = ");
81 sb.append("'com.liferay.portal.model.Location' and rcOrg.name = ");
82 sb.append("'com.liferay.portal.model.Organization' and ((select ");
83 sb.append("count(*) from Resource_ where codeId = rcOrg.codeId) ");
84 sb.append("= 0)");
85
86 ps = con.prepareStatement(sb.toString());
87
88 rs = ps.executeQuery();
89
90 while (rs.next()) {
91 long resourceId = rs.getLong("resourceId");
92
93 sb = new StringBuilder();
94
95 sb.append("update Resource_ rLoc set rLoc.codeId = (select ");
96 sb.append("rcOrg.codeId from ResourceCode rcOrg inner join ");
97 sb.append("ResourceCode rcLoc on rcOrg.scope = rcLoc.scope ");
98 sb.append("and rcOrg.companyId = rcLoc.companyId where ");
99 sb.append("rcOrg.name = ");
100 sb.append("'com.liferay.portal.model.Organization' and ");
101 sb.append("rcLoc.codeId = rLoc.codeId) where rLoc.resourceId ");
102 sb.append("= ");
103 sb.append(resourceId);
104
105 runSQL(sb.toString());
106 }
107
108 sb = new StringBuilder();
109
110 sb.append("delete from Resource_ where codeId in ");
111 sb.append("(select rcLoc.codeId from ResourceCode rcLoc ");
112 sb.append("inner join ResourceCode rcOrg on ");
113 sb.append("rcLoc.scope = rcOrg.scope and ");
114 sb.append("rcLoc.companyId = rcOrg.companyId where ");
115 sb.append("rcLoc.name = 'com.liferay.portal.model.Location' and ");
116 sb.append("rcOrg.name = 'com.liferay.portal.model.Organization')");
117
118 runSQL(sb.toString());
119 }
120 finally {
121 DataAccess.cleanUp(con, ps, rs);
122 }
123 }
124
125 }