- Vorhandene Upgrades für Assoziationen und ContentBundles aufgeteilt
- Abstrakte Basisklassen für ContentBundle und Assoziationen Upgrades. Erlauben einfaches erstellen der Upgrades durch Überschreiben einiger einfacher Methoden. - Version von ccm-sci-types-institute auf 6.6.5 erhöht, dass war vergessen worden git-svn-id: https://svn.libreccm.org/ccm/trunk@1628 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
c311c5daf9
commit
65fd40481c
|
|
@ -3,6 +3,7 @@
|
|||
<script sql="ccm-cms-publicpersonalprofile/upgrade/::database::-6.6.1-6.6.2.sql"/>
|
||||
</version>
|
||||
<version from="6.6.2" to="6.6.3">
|
||||
<script class="com.arsdigita.cms.contenttypes.PublicPersonalProfileOwnerAssocUpgrade"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.upgrades.PublicPersonalProfileBundleCreate"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.upgrades.PublicPersonalProfileOwnerAssocUpgrade"/>
|
||||
</version>
|
||||
</upgrade>
|
||||
|
|
@ -1,405 +0,0 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.util.cmd.Program;
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
import com.arsdigita.util.jdbc.Connections;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
/**
|
||||
* Upgrade for the owner association (6.6.1 to 6.6.2). Warning: Update of
|
||||
* ccm-cms from 6.6.4 to 6.6.5 has be executed before this update.
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id: PublicPersonalProfileOwnerAssocUpgrade.java 1501 2012-02-10
|
||||
* 16:49:14Z jensp $
|
||||
*/
|
||||
public class PublicPersonalProfileOwnerAssocUpgrade extends Program {
|
||||
|
||||
public PublicPersonalProfileOwnerAssocUpgrade() {
|
||||
super("PublicPersonalProfileOwnerAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
new PublicPersonalProfileOwnerAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
public void doRun(final CommandLine cmdLine) {
|
||||
System.out.println("Starting upgrade...");
|
||||
|
||||
List<AssocEntry> oldData = new ArrayList<AssocEntry>();
|
||||
|
||||
final Connection conn = Connections.acquire(RuntimeConfig.getConfig().
|
||||
getJDBCURL());
|
||||
try {
|
||||
conn.setAutoCommit(false);
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to configure JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Retrieving old data...");
|
||||
|
||||
try {
|
||||
final Statement stmt = conn.createStatement();
|
||||
final ResultSet oldAssocResult = stmt.executeQuery(
|
||||
"SELECT profile_id, owner_id, owner_order "
|
||||
+ "FROM ct_public_personal_profile_owner_map "
|
||||
+ "JOIN cms_items on profile_id = item_id "
|
||||
+ "WHERE version = 'draft'");
|
||||
|
||||
while (oldAssocResult.next()) {
|
||||
AssocEntry entry = new AssocEntry();
|
||||
|
||||
entry.setProfileDraftId(oldAssocResult.getBigDecimal(1));
|
||||
entry.setProfileBundleDraftId(getParentIdFor(
|
||||
entry.getProfileDraftId(), conn));
|
||||
entry.setOwnerDraftId(oldAssocResult.getBigDecimal(2));
|
||||
entry.setOwnerBundleDraftId(getParentIdFor(
|
||||
entry.getOwnerDraftId(), conn));
|
||||
|
||||
entry.setProfilePublicId(getPublicIdFor(
|
||||
entry.getProfileDraftId(), conn));
|
||||
entry.setProfileBundlePublicId(getPublicIdFor(
|
||||
entry.getProfileBundleDraftId(), conn));
|
||||
entry.setOwnerPublicId(getParentIdFor(
|
||||
entry.getOwnerDraftId(), conn));
|
||||
entry.setOwnerBundlePublicId(getParentIdFor(
|
||||
entry.getOwnerBundleDraftId(), conn));
|
||||
|
||||
entry.setOwnerOrder(oldAssocResult.getInt(3));
|
||||
|
||||
oldData.add(entry);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to retrieve old data.");
|
||||
printStackTrace(ex);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Droping old table...");
|
||||
final Statement stmt = conn.createStatement();
|
||||
stmt.execute("DROP TABLE ct_public_personal_profile_owner_map");
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to drop old table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Creating new tables...");
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
stmt.addBatch("CREATE TABLE ct_public_personal_profile_bundles ( "
|
||||
+ "bundle_id integer NOT NULL)");
|
||||
|
||||
stmt.addBatch("CREATE TABLE ct_public_personal_profile_owner_map ( "
|
||||
+ "profile_id integer NOT NULL, "
|
||||
+ "owner_id integer NOT NULL, "
|
||||
+ "owner_order integer)");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY ct_public_personal_profile_bundles "
|
||||
+ "ADD CONSTRAINT ct_pub_per_pro_bun_bun_p_zhc9i "
|
||||
+ "PRIMARY KEY (bundle_id)");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY ct_public_personal_profile_bundles "
|
||||
+ " ADD CONSTRAINT ct_pub_per_pro_bun_bun_f__jr2_ "
|
||||
+ "FOREIGN KEY (bundle_id) "
|
||||
+ "REFERENCES cms_bundles(bundle_id)");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY ct_public_personal_profile_owner_map "
|
||||
+ "ADD CONSTRAINT ct_pub_per_pro_own_map_p_rr7ie "
|
||||
+ "PRIMARY KEY (owner_id, profile_id)");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY ct_public_personal_profile_owner_map "
|
||||
+ "ADD CONSTRAINT ct_pub_per_pro_own_map_f_cd7_1 "
|
||||
+ "FOREIGN KEY (owner_id) "
|
||||
+ "REFERENCES cms_person_bundles(bundle_id)");
|
||||
|
||||
stmt.addBatch(
|
||||
"ALTER TABLE ONLY ct_public_personal_profile_owner_map "
|
||||
+ "ADD CONSTRAINT ct_pub_per_pro_own_map_f_ugs15 "
|
||||
+ "FOREIGN KEY (profile_id) "
|
||||
+ "REFERENCES ct_public_personal_profile_bundles(bundle_id)");
|
||||
stmt.executeBatch();
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to create new table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Filling new tables with data...");
|
||||
final Statement queryProfilesStmt = conn.createStatement();
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet profilesRs =
|
||||
queryProfilesStmt.executeQuery(
|
||||
"SELECT parent_id "
|
||||
+ "FROM cms_items "
|
||||
+ "JOIN ct_public_personal_profiles "
|
||||
+ "ON cms_items.item_id = ct_public_personal_profiles.profile_id");
|
||||
|
||||
while (profilesRs.next()) {
|
||||
stmt.addBatch(String.format(
|
||||
"INSERT INTO ct_public_personal_profile_bundles (bundle_id) "
|
||||
+ "VALUES (%d)",
|
||||
profilesRs.getInt(1)));
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE acs_objects "
|
||||
+ "SET default_domain_class = 'com.arsdigita.cms.contenttypes.PublicPersonalProfileBundle', "
|
||||
+ "object_type = 'com.arsdigita.cms.contenttypes.PublicPersonalProfileBundle' "
|
||||
+ "WHERE object_id = %d",
|
||||
profilesRs.getInt(1)));
|
||||
}
|
||||
|
||||
final List<String> processedEntries = new ArrayList<String>();
|
||||
for (AssocEntry entry : oldData) {
|
||||
|
||||
if (processedEntries.contains(
|
||||
String.format("%s-%s",
|
||||
entry.getProfileBundleDraftId().toString(),
|
||||
entry.getOwnerBundleDraftId().toString()))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
stmt.addBatch(String.format(
|
||||
"INSERT INTO ct_public_personal_profile_owner_map ("
|
||||
+ "profile_id, "
|
||||
+ "owner_id, "
|
||||
+ "owner_order) "
|
||||
+ "VALUES (%s, %s, %d)",
|
||||
entry.getProfileBundleDraftId().toString(),
|
||||
entry.getOwnerBundleDraftId().toString(),
|
||||
entry.getOwnerOrder()));
|
||||
if ((entry.getProfileBundlePublicId() != null)
|
||||
&& (entry.getOwnerBundlePublicId() != null)) {
|
||||
stmt.addBatch(String.format(
|
||||
"INSERT INTO ct_public_personal_profile_owner_map ("
|
||||
+ "profile_id, "
|
||||
+ "owner_id, "
|
||||
+ "owner_order) "
|
||||
+ "VALUES (%s, %s, %d)",
|
||||
entry.getProfileBundlePublicId().toString(),
|
||||
entry.getOwnerBundlePublicId().toString(),
|
||||
entry.getOwnerOrder()));
|
||||
}
|
||||
|
||||
if (entry.getProfileBundlePublicId() != null) {
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE cms_published_links "
|
||||
+ "SET pending = %s, "
|
||||
+ "pending_source = %s, "
|
||||
+ "draft_target = %s "
|
||||
+ "WHERE pending = %s "
|
||||
+ "AND draft_target = %s",
|
||||
entry.getProfileBundlePublicId(),
|
||||
entry.getProfileBundlePublicId(),
|
||||
entry.getOwnerBundleDraftId(),
|
||||
entry.getProfilePublicId(),
|
||||
entry.getOwnerDraftId()));
|
||||
}
|
||||
|
||||
if (entry.getOwnerBundlePublicId() != null) {
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE cms_published_links "
|
||||
+ "SET pending = %s, "
|
||||
+ "pending_source = %s, "
|
||||
+ "draft_target = %s "
|
||||
+ "WHERE pending = %s "
|
||||
+ "AND draft_target = %s",
|
||||
entry.getOwnerBundlePublicId(),
|
||||
entry.getOwnerBundlePublicId(),
|
||||
entry.getProfileBundleDraftId(),
|
||||
entry.getOwnerPublicId(),
|
||||
entry.getProfileDraftId()));
|
||||
}
|
||||
|
||||
|
||||
processedEntries.add(String.format(
|
||||
"%s-%s",
|
||||
entry.getProfileBundleDraftId().toString(),
|
||||
entry.getOwnerBundleDraftId().toString()));
|
||||
}
|
||||
|
||||
stmt.executeBatch();
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to fill tables.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
conn.commit();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to commiting changes.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
close(conn);
|
||||
}
|
||||
|
||||
private class AssocEntry {
|
||||
|
||||
private BigDecimal profileDraftId;
|
||||
private BigDecimal ownerDraftId;
|
||||
private BigDecimal profilePublicId;
|
||||
private BigDecimal ownerPublicId;
|
||||
private BigDecimal profileBundleDraftId;
|
||||
private BigDecimal ownerBundleDraftId;
|
||||
private BigDecimal profileBundlePublicId;
|
||||
private BigDecimal ownerBundlePublicId;
|
||||
private Integer ownerOrder;
|
||||
|
||||
public AssocEntry() {
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerBundleDraftId() {
|
||||
return ownerBundleDraftId;
|
||||
}
|
||||
|
||||
public void setOwnerBundleDraftId(BigDecimal ownerBundleDraftId) {
|
||||
this.ownerBundleDraftId = ownerBundleDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerBundlePublicId() {
|
||||
return ownerBundlePublicId;
|
||||
}
|
||||
|
||||
public void setOwnerBundlePublicId(BigDecimal ownerBundlePublicId) {
|
||||
this.ownerBundlePublicId = ownerBundlePublicId;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerDraftId() {
|
||||
return ownerDraftId;
|
||||
}
|
||||
|
||||
public void setOwnerDraftId(BigDecimal ownerDraftId) {
|
||||
this.ownerDraftId = ownerDraftId;
|
||||
}
|
||||
|
||||
public Integer getOwnerOrder() {
|
||||
return ownerOrder;
|
||||
}
|
||||
|
||||
public void setOwnerOrder(Integer ownerOrder) {
|
||||
this.ownerOrder = ownerOrder;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerPublicId() {
|
||||
return ownerPublicId;
|
||||
}
|
||||
|
||||
public void setOwnerPublicId(BigDecimal ownerPublicId) {
|
||||
this.ownerPublicId = ownerPublicId;
|
||||
}
|
||||
|
||||
public BigDecimal getProfileBundleDraftId() {
|
||||
return profileBundleDraftId;
|
||||
}
|
||||
|
||||
public void setProfileBundleDraftId(BigDecimal profileBundleDraftId) {
|
||||
this.profileBundleDraftId = profileBundleDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getProfileBundlePublicId() {
|
||||
return profileBundlePublicId;
|
||||
}
|
||||
|
||||
public void setProfileBundlePublicId(BigDecimal profileBundlePublicId) {
|
||||
this.profileBundlePublicId = profileBundlePublicId;
|
||||
}
|
||||
|
||||
public BigDecimal getProfileDraftId() {
|
||||
return profileDraftId;
|
||||
}
|
||||
|
||||
public void setProfileDraftId(BigDecimal profileDraftId) {
|
||||
this.profileDraftId = profileDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getProfilePublicId() {
|
||||
return profilePublicId;
|
||||
}
|
||||
|
||||
public void setProfilePublicId(BigDecimal profilePublicId) {
|
||||
this.profilePublicId = profilePublicId;
|
||||
}
|
||||
}
|
||||
|
||||
private void rollback(final Connection conn) {
|
||||
try {
|
||||
conn.rollback();
|
||||
} catch (SQLException ex1) {
|
||||
System.err.println("Rollback failed.");
|
||||
ex1.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
private void close(final Connection conn) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to close JDBC connectio.");
|
||||
printStackTrace(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void printStackTrace(final SQLException ex) {
|
||||
ex.printStackTrace(System.err);
|
||||
if (ex.getNextException() != null) {
|
||||
printStackTrace(ex.getNextException());
|
||||
}
|
||||
}
|
||||
|
||||
private BigDecimal getPublicIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT item_id FROM cms_items WHERE master_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private BigDecimal getParentIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT parent_id FROM cms_items WHERE item_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.cms.contenttypes.PublicPersonalProfileBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class PublicPersonalProfileBundleCreate extends AbstractBundleUpgrade {
|
||||
|
||||
public PublicPersonalProfileBundleCreate() {
|
||||
super("PublicPersonalProfileBundleCreate", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
new PublicPersonalProfileBundleCreate().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleTableName() {
|
||||
return "ct_public_personal_profile_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getContentItemTableName() {
|
||||
return "ct_public_personal_profiles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getIdColName() {
|
||||
return "profile_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleClassName() {
|
||||
return PublicPersonalProfileBundle.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "ct_pub_per_pro_bun_bun_p_zhc9i";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleContraintName() {
|
||||
return "ct_pub_per_pro_bun_bun_f__jr2_";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class PublicPersonalProfileOwnerAssocUpgrade extends AbstractAssocUpgrade {
|
||||
|
||||
public PublicPersonalProfileOwnerAssocUpgrade() {
|
||||
super("PublicPersonalProfileOwnerAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
new PublicPersonalProfileOwnerAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "ct_public_personal_profile_owner_map.owner_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerIdCol() {
|
||||
return "profile_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberIdCol() {
|
||||
return "owner_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getAttributes() {
|
||||
final Map<String, String> attributes = new HashMap<String, String>();
|
||||
attributes.put("owner_order", "integer");
|
||||
return attributes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "ct_pub_per_pro_own_map_p_rr7ie";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerConstraintName() {
|
||||
return "ct_pub_per_pro_own_map_f_ugs15";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberConstraintName() {
|
||||
return "ct_pub_per_pro_own_map_f_cd7_1";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerTableName() {
|
||||
return "ct_public_personal_profile_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberTableName() {
|
||||
return "cms_person_bundles";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -13,7 +13,6 @@ import com.arsdigita.cms.CMS;
|
|||
import com.arsdigita.cms.ContentItem;
|
||||
import com.arsdigita.cms.ContentPage;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.cms.ReusableImageAsset;
|
||||
import com.arsdigita.cms.contentassets.ItemImageAttachment;
|
||||
import com.arsdigita.cms.contentassets.RelatedLink;
|
||||
import com.arsdigita.cms.contenttypes.GenericAddress;
|
||||
|
|
@ -58,6 +57,7 @@ import javax.servlet.ServletException;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.apache.log4j.Logger;
|
||||
import com.arsdigita.cms.ReusableImageAsset;
|
||||
|
||||
/**
|
||||
* Servlet for the PublicPersonalProfile application.
|
||||
|
|
|
|||
|
|
@ -56,15 +56,15 @@ association {
|
|||
// Links a organization with persons.
|
||||
association {
|
||||
|
||||
GenericOrganizationalUnitBundle[0..n] organizationalunits = join cms_bundles.bundle_id
|
||||
GenericOrganizationalUnitBundle[0..n] organizationalunits = join cms_person_bundles.bundle_id
|
||||
to cms_organizationalunits_person_map.person_id,
|
||||
join cms_organizationalunits_person_map.organizationalunit_id
|
||||
to cms_bundles.bundle_id;
|
||||
to cms_orgaunit_bundles.bundle_id;
|
||||
|
||||
GenericPersonBundle[0..n] persons = join cms_bundles.bundle_id
|
||||
GenericPersonBundle[0..n] persons = join cms_orgaunit_bundles.bundle_id
|
||||
to cms_organizationalunits_person_map.organizationalunit_id,
|
||||
join cms_organizationalunits_person_map.person_id
|
||||
to cms_bundles.bundle_id;
|
||||
to cms_person_bundles.bundle_id;
|
||||
|
||||
// Additional attributes for the association
|
||||
String[0..1] role_name = cms_organizationalunits_person_map.role_name VARCHAR(100);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,9 @@
|
|||
<script sql="ccm-cms/upgrade/::database::-6.6.3-6.6.4.sql"/>
|
||||
</version>
|
||||
<version from="6.6.4" to="6.6.5">
|
||||
<script class="com.arsdigita.cms.contenttypes.GenericContactPersonAssocUpgrade"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.upgrades.CreateContactBundles"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.upgrades.CreatePersonBundles"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.upgrades.GenericContactGenericPersonAssocUpgrade"/>
|
||||
<script sql="ccm-cms/upgrade::database::-6.6.4-6.6.5.sql"/>
|
||||
</version>
|
||||
<version from="6.6.5" to="6.6.6">
|
||||
|
|
@ -61,6 +63,6 @@
|
|||
</version>
|
||||
<version from="6.6.6" to="6.6.7">
|
||||
<!-- CMS Workspace&Service now loaded as legacy free application -->
|
||||
<script sql="ccm-cms/upgrade/::database::-6.6.6-6.6.7.sql"/>
|
||||
<script sql="ccm-cms/upgrade/::database::-6.6.6-6.6.7.sql"/>
|
||||
</version>
|
||||
</upgrade>
|
||||
|
|
|
|||
|
|
@ -1,452 +0,0 @@
|
|||
package com.arsdigita.cms.contenttypes;
|
||||
|
||||
import com.arsdigita.util.cmd.Program;
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
import com.arsdigita.util.jdbc.Connections;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
/**
|
||||
* Upgrade for association between GenericContact and GenericPerson (6.6.4 to
|
||||
* 6.6.5)
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id: GenericContactPersonAssocUpgrade.java 1501 2012-02-10 16:49:14Z
|
||||
* jensp $
|
||||
*/
|
||||
public class GenericContactPersonAssocUpgrade extends Program {
|
||||
|
||||
public GenericContactPersonAssocUpgrade() {
|
||||
super("GenericContactPersonAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
new GenericContactPersonAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
public void doRun(final CommandLine cmdLine) {
|
||||
System.out.println("Starting upgrade...");
|
||||
List<AssocEntry> oldData = new ArrayList<AssocEntry>();
|
||||
|
||||
System.out.println("Trying to get JDBC connection...");
|
||||
|
||||
final Connection conn = Connections.acquire(RuntimeConfig.getConfig().
|
||||
getJDBCURL());
|
||||
try {
|
||||
conn.setAutoCommit(false);
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to configure JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Retrieving old data...");
|
||||
try {
|
||||
final Statement stmt = conn.createStatement();
|
||||
final ResultSet oldAssocResult = stmt.executeQuery(
|
||||
"SELECT person_id, contact_id, link_order, link_key "
|
||||
+ "FROM cms_person_contact_map "
|
||||
+ "JOIN cms_items on person_id = item_id "
|
||||
+ "WHERE version = 'draft' ");
|
||||
|
||||
while (oldAssocResult.next()) {
|
||||
AssocEntry entry = new AssocEntry();
|
||||
|
||||
entry.setPersonDraftId(oldAssocResult.getBigDecimal(1));
|
||||
entry.setPersonDraftBundleId(getParentIdFor(
|
||||
entry.getPersonDraftId(), conn));
|
||||
entry.setContactDraftId(oldAssocResult.getBigDecimal(2));
|
||||
entry.setContactDraftBundleId(getParentIdFor(
|
||||
entry.getContactDraftId(), conn));
|
||||
|
||||
entry.setPersonPublicId(getPublicIdFor(
|
||||
entry.getPersonDraftId(), conn));
|
||||
entry.setPersonPublicBundleId(getPublicIdFor(
|
||||
entry.getPersonDraftBundleId(), conn));
|
||||
entry.setContactPublicId(getPublicIdFor(
|
||||
entry.getContactDraftId(), conn));
|
||||
entry.setContactPublicBundleId(getPublicIdFor(
|
||||
entry.getContactDraftBundleId(), conn));
|
||||
|
||||
entry.setLinkOrder(oldAssocResult.getInt(3));
|
||||
entry.setLinkKey(oldAssocResult.getString(4));
|
||||
|
||||
oldData.add(entry);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to retrieve old data.");
|
||||
printStackTrace(ex);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Droping old table...");
|
||||
final Statement stmt = conn.createStatement();
|
||||
stmt.execute("DROP TABLE cms_person_contact_map");
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to drop old table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Creating new tables...");
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
stmt.addBatch("CREATE TABLE cms_person_bundles ( "
|
||||
+ "bundle_id integer NOT NULL)");
|
||||
|
||||
stmt.addBatch("CREATE TABLE cms_contact_bundles ( "
|
||||
+ "bundle_id integer NOT NULL)");
|
||||
|
||||
stmt.addBatch("CREATE TABLE cms_person_contact_map ("
|
||||
+ "person_id integer NOT NULL,"
|
||||
+ "contact_id integer NOT NULL,"
|
||||
+ "link_order integer,"
|
||||
+ "link_key character varying(100)"
|
||||
+ ")");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_person_bundles "
|
||||
+ "ADD CONSTRAINT cms_pers_bundl_bund_id_p_7xuzi "
|
||||
+ "PRIMARY KEY (bundle_id);");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_person_bundles "
|
||||
+ "ADD CONSTRAINT cms_pers_bundl_bund_id_f__rzge "
|
||||
+ "FOREIGN KEY (bundle_id) "
|
||||
+ "REFERENCES cms_bundles(bundle_id);");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_contact_bundles "
|
||||
+ "ADD CONSTRAINT cms_cont_bundl_bund_id_p_2p6vp "
|
||||
+ "PRIMARY KEY (bundle_id);");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_contact_bundles "
|
||||
+ "ADD CONSTRAINT cms_cont_bundl_bund_id_f_m8aga "
|
||||
+ "FOREIGN KEY (bundle_id) "
|
||||
+ "REFERENCES cms_bundles(bundle_id);");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_person_contact_map "
|
||||
+ "ADD CONSTRAINT cms_per_con_map_con_id_p_g1cii "
|
||||
+ "PRIMARY KEY (contact_id, person_id)");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_person_contact_map "
|
||||
+ "ADD CONSTRAINT cms_per_con_map_con_id_f_peoc2 "
|
||||
+ "FOREIGN KEY (contact_id) "
|
||||
+ "REFERENCES cms_contact_bundles(bundle_id);");
|
||||
|
||||
stmt.addBatch("ALTER TABLE ONLY cms_person_contact_map "
|
||||
+ "ADD CONSTRAINT cms_per_con_map_per_id_f_g82jn "
|
||||
+ "FOREIGN KEY (person_id) "
|
||||
+ "REFERENCES cms_person_bundles(bundle_id);");
|
||||
stmt.executeBatch();
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to create new table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Filling new tables with data...");
|
||||
final Statement queryPersonsStmt = conn.createStatement();
|
||||
final Statement queryContactsStmt = conn.createStatement();
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet personsRs =
|
||||
queryPersonsStmt.executeQuery(
|
||||
"SELECT parent_id "
|
||||
+ "FROM cms_items "
|
||||
+ "JOIN cms_persons "
|
||||
+ "ON cms_items.item_id = cms_persons.person_id");
|
||||
|
||||
while (personsRs.next()) {
|
||||
stmt.addBatch(String.format("INSERT INTO cms_person_bundles (bundle_id) "
|
||||
+ "VALUES (%d)",
|
||||
personsRs.getInt(1)));
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE acs_objects "
|
||||
+ "SET default_domain_class = 'com.arsdigita.cms.contenttypes.GenericPersonBundle',"
|
||||
+ "object_type = 'com.arsdigita.cms.contenttypes.GenericPersonBundle' "
|
||||
+ "WHERE object_id = %d",
|
||||
personsRs.getInt(1)));
|
||||
}
|
||||
|
||||
final ResultSet contactsRs = queryContactsStmt.executeQuery(
|
||||
"SELECT DISTINCT parent_id "
|
||||
+ "FROM cms_items "
|
||||
+ "JOIN cms_contacts "
|
||||
+ "ON cms_items.item_id = cms_contacts.contact_id");
|
||||
|
||||
while (contactsRs.next()) {
|
||||
stmt.addBatch(String.format("INSERT INTO cms_contact_bundles (bundle_id) "
|
||||
+ "VALUES (%s)",
|
||||
contactsRs.getInt(1)));
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE acs_objects "
|
||||
+ "SET default_domain_class = 'com.arsdigita.cms.contenttypes.GenericContactBundle', "
|
||||
+ "object_type = 'com.arsdigita.cms.contenttypes.GenericContactBundle' "
|
||||
+ "WHERE object_id = %d",
|
||||
contactsRs.getInt(1)));
|
||||
}
|
||||
|
||||
final List<String> processedEntries =
|
||||
new ArrayList<String>();
|
||||
for (AssocEntry entry : oldData) {
|
||||
if (processedEntries.contains(
|
||||
String.format("%s-%s",
|
||||
entry.getPersonDraftBundleId().toString(),
|
||||
entry.getContactDraftBundleId().toString()))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
stmt.addBatch(String.format(
|
||||
"INSERT INTO cms_person_contact_map ("
|
||||
+ "person_id, "
|
||||
+ "contact_id, "
|
||||
+ "link_order, "
|
||||
+ "link_key) "
|
||||
+ "VALUES (%s, %s, %d, '%s')",
|
||||
entry.getPersonDraftBundleId().toString(),
|
||||
entry.getContactDraftBundleId().toString(),
|
||||
entry.getLinkOrder(),
|
||||
entry.getLinkKey()));
|
||||
|
||||
if ((entry.getPersonPublicBundleId() != null)
|
||||
&& (entry.getContactPublicBundleId() != null)) {
|
||||
stmt.addBatch(String.format(
|
||||
"INSERT INTO cms_person_contact_map ("
|
||||
+ "person_id, "
|
||||
+ "contact_id, "
|
||||
+ "link_order, "
|
||||
+ "link_key) "
|
||||
+ "VALUES (%s, %s, %d, '%s')",
|
||||
entry.getPersonPublicBundleId().toString(),
|
||||
entry.getContactPublicBundleId().toString(),
|
||||
entry.getLinkOrder(),
|
||||
entry.getLinkKey()));
|
||||
}
|
||||
|
||||
if (entry.getPersonPublicBundleId() != null) {
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE cms_published_links "
|
||||
+ "SET pending = %s, "
|
||||
+ "pending_source = %s, "
|
||||
+ "draft_target = %s "
|
||||
+ "WHERE pending = %s "
|
||||
+ "AND draft_target = %s",
|
||||
entry.getPersonPublicBundleId().toString(),
|
||||
entry.getPersonPublicBundleId().toString(),
|
||||
entry.getContactDraftBundleId(),
|
||||
entry.getPersonPublicId(),
|
||||
entry.getContactDraftId()));
|
||||
}
|
||||
|
||||
if (entry.getContactPublicBundleId() != null) {
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE cms_published_links "
|
||||
+ "SET pending = %s, "
|
||||
+ "pending_source = %s, "
|
||||
+ "draft_target = %s "
|
||||
+ "WHERE pending = %s "
|
||||
+ "AND draft_target = %s",
|
||||
entry.getContactPublicBundleId().toString(),
|
||||
entry.getContactPublicBundleId().toString(),
|
||||
entry.getPersonDraftBundleId(),
|
||||
entry.getContactPublicId(),
|
||||
entry.getPersonDraftId()));
|
||||
}
|
||||
|
||||
processedEntries.add(String.format(
|
||||
"%s-%s",
|
||||
entry.getPersonDraftBundleId().
|
||||
toString(),
|
||||
entry.getContactDraftBundleId().toString()));
|
||||
}
|
||||
|
||||
stmt.executeBatch();
|
||||
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to fill tables.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
conn.commit();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to commiting changes.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
close(conn);
|
||||
}
|
||||
|
||||
private class AssocEntry {
|
||||
|
||||
private BigDecimal personDraftId;
|
||||
private BigDecimal contactDraftId;
|
||||
private BigDecimal personPublicId;
|
||||
private BigDecimal contactPublicId;
|
||||
private BigDecimal personDraftBundleId;
|
||||
private BigDecimal contactDraftBundleId;
|
||||
private BigDecimal personPublicBundleId;
|
||||
private BigDecimal contactPublicBundleId;
|
||||
private Integer linkOrder;
|
||||
private String linkKey;
|
||||
|
||||
public AssocEntry() {
|
||||
}
|
||||
|
||||
public BigDecimal getContactDraftBundleId() {
|
||||
return contactDraftBundleId;
|
||||
}
|
||||
|
||||
public void setContactDraftBundleId(BigDecimal contactDraftBundleId) {
|
||||
this.contactDraftBundleId = contactDraftBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getContactDraftId() {
|
||||
return contactDraftId;
|
||||
}
|
||||
|
||||
public void setContactDraftId(BigDecimal contactDraftId) {
|
||||
this.contactDraftId = contactDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getContactPublicBundleId() {
|
||||
return contactPublicBundleId;
|
||||
}
|
||||
|
||||
public void setContactPublicBundleId(BigDecimal contactPublicBundleId) {
|
||||
this.contactPublicBundleId = contactPublicBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getContactPublicId() {
|
||||
return contactPublicId;
|
||||
}
|
||||
|
||||
public void setContactPublicId(BigDecimal contactPublicId) {
|
||||
this.contactPublicId = contactPublicId;
|
||||
}
|
||||
|
||||
public String getLinkKey() {
|
||||
return linkKey;
|
||||
}
|
||||
|
||||
public void setLinkKey(String linkKey) {
|
||||
this.linkKey = linkKey;
|
||||
}
|
||||
|
||||
public Integer getLinkOrder() {
|
||||
return linkOrder;
|
||||
}
|
||||
|
||||
public void setLinkOrder(Integer linkOrder) {
|
||||
this.linkOrder = linkOrder;
|
||||
}
|
||||
|
||||
public BigDecimal getPersonDraftBundleId() {
|
||||
return personDraftBundleId;
|
||||
}
|
||||
|
||||
public void setPersonDraftBundleId(BigDecimal personDraftBundleId) {
|
||||
this.personDraftBundleId = personDraftBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getPersonDraftId() {
|
||||
return personDraftId;
|
||||
}
|
||||
|
||||
public void setPersonDraftId(BigDecimal personDraftId) {
|
||||
this.personDraftId = personDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getPersonPublicBundleId() {
|
||||
return personPublicBundleId;
|
||||
}
|
||||
|
||||
public void setPersonPublicBundleId(BigDecimal personPublicBundleId) {
|
||||
this.personPublicBundleId = personPublicBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getPersonPublicId() {
|
||||
return personPublicId;
|
||||
}
|
||||
|
||||
public void setPersonPublicId(BigDecimal personPublicId) {
|
||||
this.personPublicId = personPublicId;
|
||||
}
|
||||
}
|
||||
|
||||
private BigDecimal getPublicIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT item_id FROM cms_items WHERE master_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private BigDecimal getParentIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT parent_id FROM cms_items WHERE item_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void rollback(final Connection conn) {
|
||||
try {
|
||||
conn.rollback();
|
||||
} catch (SQLException ex1) {
|
||||
System.err.println("Rollback failed.");
|
||||
ex1.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
private void close(final Connection conn) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to close JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void printStackTrace(final SQLException ex) {
|
||||
ex.printStackTrace(System.err);
|
||||
if (ex.getNextException() != null) {
|
||||
printStackTrace(ex.getNextException());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,420 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
import com.arsdigita.util.cmd.Program;
|
||||
import com.arsdigita.util.jdbc.Connections;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractAssocUpgrade extends Program {
|
||||
|
||||
public AbstractAssocUpgrade(final String name, final String version, final String usage) {
|
||||
super(name, version, usage);
|
||||
}
|
||||
|
||||
protected abstract String getTableName();
|
||||
|
||||
protected abstract String getOwnerIdCol();
|
||||
|
||||
protected abstract String getMemberIdCol();
|
||||
|
||||
protected abstract Map<String, String> getAttributes();
|
||||
|
||||
protected abstract String getPrimaryKeyConstraintName();
|
||||
|
||||
protected abstract String getOwnerConstraintName();
|
||||
|
||||
protected abstract String getMemberConstraintName();
|
||||
|
||||
protected abstract String getOwnerTableName();
|
||||
|
||||
protected abstract String getMemberTableName();
|
||||
|
||||
@Override
|
||||
protected void doRun(final CommandLine cmdLine) {
|
||||
System.out.println("Starting upgrade...");
|
||||
final List<AssocEntry> oldData = new ArrayList<AssocEntry>();
|
||||
|
||||
final Connection conn = Connections.acquire(RuntimeConfig.getConfig().
|
||||
getJDBCURL());
|
||||
try {
|
||||
conn.setAutoCommit(false);
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to configure JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("Retrieving old data...");
|
||||
try {
|
||||
final Statement stmt = conn.createStatement();
|
||||
final ResultSet oldAssocResult = stmt.executeQuery(String.format(
|
||||
"SELECT * "
|
||||
+ "FROM %s "
|
||||
+ "JOIN cms_items on %s = item_id "
|
||||
+ "WHERE version = 'draft' ",
|
||||
getTableName(),
|
||||
getOwnerIdCol()));
|
||||
|
||||
while (oldAssocResult.next()) {
|
||||
AssocEntry entry = new AssocEntry();
|
||||
|
||||
entry.setOwnerDraftId(oldAssocResult.getBigDecimal(getOwnerIdCol()));
|
||||
entry.setOwnerDraftBundleId(getParentIdFor(entry.getOwnerDraftId(), conn));
|
||||
|
||||
entry.setMemberDraftId(oldAssocResult.getBigDecimal(getMemberIdCol()));
|
||||
entry.setMemberDraftBundleId(getParentIdFor(entry.getMemberDraftId(), conn));
|
||||
|
||||
entry.setOwnerPublicId(getPublicIdFor(entry.getOwnerDraftId(), conn));
|
||||
entry.setOwnerPublicBundleId(getPublicIdFor(entry.getOwnerDraftBundleId(), conn));
|
||||
|
||||
entry.setMemberPublicId(getPublicIdFor(entry.getMemberDraftId(), conn));
|
||||
entry.setMemberPublicBundleId(getPublicIdFor(entry.getMemberDraftBundleId(), conn));
|
||||
|
||||
for (Map.Entry<String, String> attribute : getAttributes().entrySet()) {
|
||||
entry.addAttribute(attribute.getKey(), oldAssocResult.getString(attribute.getKey()));
|
||||
}
|
||||
|
||||
oldData.add(entry);
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to retrieve old data.");
|
||||
printStackTrace(ex);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Droping old table...");
|
||||
final Statement stmt = conn.createStatement();
|
||||
stmt.execute(String.format("DROP TABLE %s", getTableName()));
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to drop old table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.printf("Creating new table %s...\n", getTableName());
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final StringBuilder attributesBuilder = new StringBuilder();
|
||||
for (Map.Entry<String, String> attribute : getAttributes().entrySet()) {
|
||||
if (attributesBuilder.length() > 0) {
|
||||
attributesBuilder.append(",\n");
|
||||
}
|
||||
attributesBuilder.append(attribute.getKey()).append(' ').append(attribute.getValue());
|
||||
}
|
||||
stmt.addBatch(String.format("CREATE TABLE %s ("
|
||||
+ "%s integer NOT NULL,"
|
||||
+ "%s integer NOT NULL,"
|
||||
+ "%s"
|
||||
+ ")",
|
||||
getTableName(),
|
||||
getOwnerIdCol(),
|
||||
getMemberIdCol(),
|
||||
attributesBuilder.toString()));
|
||||
|
||||
stmt.addBatch(String.format("ALTER TABLE ONLY %s "
|
||||
+ "ADD CONSTRAINT %s "
|
||||
+ "PRIMARY KEY (%s, %s)",
|
||||
getTableName(),
|
||||
getPrimaryKeyConstraintName(),
|
||||
getOwnerIdCol(),
|
||||
getMemberIdCol()));
|
||||
|
||||
stmt.addBatch(String.format("ALTER TABLE ONLY %s "
|
||||
+ "ADD CONSTRAINT %s "
|
||||
+ "FOREIGN KEY (%s)"
|
||||
+ "REFERENCES %s(bundle_id)",
|
||||
getTableName(),
|
||||
getOwnerConstraintName(),
|
||||
getOwnerIdCol(),
|
||||
getOwnerTableName()));
|
||||
|
||||
stmt.addBatch(String.format("ALTER TABLE ONLY %s "
|
||||
+ "ADD CONSTRAINT %s "
|
||||
+ "FOREIGN KEY (%s)"
|
||||
+ "REFERENCES %s(bundle_id)",
|
||||
getTableName(),
|
||||
getMemberConstraintName(),
|
||||
getMemberIdCol(),
|
||||
getMemberTableName()));
|
||||
|
||||
stmt.executeBatch();
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.printf("Failed to create new table '%s'.\n", getTableName());
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Filling new table with data...");
|
||||
|
||||
final List<String> processedEntries =
|
||||
new ArrayList<String>();
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
for (AssocEntry entry : oldData) {
|
||||
if (processedEntries.contains(
|
||||
String.format("%s-%s",
|
||||
entry.getOwnerDraftBundleId().toString(),
|
||||
entry.getMemberDraftBundleId().toString()))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final StringBuilder attributeCols = new StringBuilder();
|
||||
for (Map.Entry<String, String> attribute : getAttributes().entrySet()) {
|
||||
attributeCols.append(",");
|
||||
attributeCols.append(attribute.getKey());
|
||||
}
|
||||
final StringBuilder attributeValues = new StringBuilder();
|
||||
for (Map.Entry<String, String> attribute : getAttributes().entrySet()) {
|
||||
attributeValues.append(",");
|
||||
if (attribute.getValue().startsWith("character")) {
|
||||
attributeValues.append('\"');
|
||||
}
|
||||
attributeValues.append(entry.getAttributes().get(attribute.getKey()));
|
||||
if (attribute.getValue().startsWith("character")) {
|
||||
attributeValues.append('\"');
|
||||
}
|
||||
}
|
||||
stmt.addBatch(String.format("INSERT INTO %s ("
|
||||
+ "%s,"
|
||||
+ "%s"
|
||||
+ "%s) "
|
||||
+ "VALUES (%s, %s %s)",
|
||||
getTableName(),
|
||||
getOwnerIdCol(),
|
||||
getMemberIdCol(),
|
||||
attributeCols.toString(),
|
||||
entry.getOwnerDraftBundleId().toString(),
|
||||
entry.getMemberDraftBundleId().toString(),
|
||||
attributeValues.toString()));
|
||||
if ((entry.getOwnerPublicBundleId() != null)
|
||||
&& (entry.getMemberPublicBundleId() != null)) {
|
||||
stmt.addBatch(String.format("INSERT INTO %s ("
|
||||
+ "%s,"
|
||||
+ "%s"
|
||||
+ "%s) "
|
||||
+ "VALUES (%s, %s %s)",
|
||||
getTableName(),
|
||||
getOwnerIdCol(),
|
||||
getMemberIdCol(),
|
||||
attributeCols.toString(),
|
||||
entry.getOwnerPublicBundleId().toString(),
|
||||
entry.getMemberPublicBundleId().toString(),
|
||||
attributeValues.toString()));
|
||||
}
|
||||
|
||||
if (entry.getOwnerPublicId() != null) {
|
||||
stmt.addBatch(String.format("DELETE FROM cms_published_links "
|
||||
+ "WHERE pending = %s "
|
||||
+ "AND draft_target = %s",
|
||||
entry.getOwnerPublicId().toString(),
|
||||
entry.getMemberDraftId().toString()));
|
||||
}
|
||||
|
||||
if (entry.getMemberPublicId() != null) {
|
||||
stmt.addBatch(String.format("DELETE FROM cms_published_links "
|
||||
+ "WHERE pending = %s"
|
||||
+ "AND draft_target = %s",
|
||||
entry.getMemberPublicId().toString(),
|
||||
entry.getOwnerDraftId().toString()));
|
||||
}
|
||||
|
||||
processedEntries.add(String.format("%s-%s",
|
||||
entry.getOwnerDraftBundleId().toString(),
|
||||
entry.getMemberDraftBundleId().toString()));
|
||||
|
||||
stmt.executeBatch();
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to fill table.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
conn.commit();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to commiting changes.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
close(conn);
|
||||
}
|
||||
|
||||
private BigDecimal getPublicIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT item_id FROM cms_items WHERE master_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private BigDecimal getParentIdFor(final BigDecimal id,
|
||||
final Connection conn)
|
||||
throws SQLException {
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet rs = stmt.executeQuery(String.format(
|
||||
"SELECT parent_id FROM cms_items WHERE item_id = %s",
|
||||
id.toString()));
|
||||
|
||||
while (rs.next()) {
|
||||
return rs.getBigDecimal(1);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void rollback(final Connection conn) {
|
||||
try {
|
||||
conn.rollback();
|
||||
} catch (SQLException ex1) {
|
||||
System.err.println("Rollback failed.");
|
||||
ex1.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
private void close(final Connection conn) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to close JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void printStackTrace(final SQLException ex) {
|
||||
ex.printStackTrace(System.err);
|
||||
if (ex.getNextException() != null) {
|
||||
printStackTrace(ex.getNextException());
|
||||
}
|
||||
}
|
||||
|
||||
private class AssocEntry {
|
||||
|
||||
private BigDecimal ownerDraftId;
|
||||
private BigDecimal memberDraftId;
|
||||
private BigDecimal ownerPublicId;
|
||||
private BigDecimal memberPublicId;
|
||||
private BigDecimal ownerDraftBundleId;
|
||||
private BigDecimal memberDraftBundleId;
|
||||
private BigDecimal ownerPublicBundleId;
|
||||
private BigDecimal memberPublicBundleId;
|
||||
private Map<String, String> attributes = new HashMap<String, String>();
|
||||
|
||||
public AssocEntry() {
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerDraftId() {
|
||||
return ownerDraftId;
|
||||
}
|
||||
|
||||
public void setOwnerDraftId(final BigDecimal ownerDraftId) {
|
||||
this.ownerDraftId = ownerDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getMemberDraftId() {
|
||||
return memberDraftId;
|
||||
}
|
||||
|
||||
public void setMemberDraftId(final BigDecimal memberDraftId) {
|
||||
this.memberDraftId = memberDraftId;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerPublicId() {
|
||||
return ownerPublicId;
|
||||
}
|
||||
|
||||
public void setOwnerPublicId(final BigDecimal ownerPublicId) {
|
||||
this.ownerPublicId = ownerPublicId;
|
||||
}
|
||||
|
||||
public BigDecimal getMemberPublicId() {
|
||||
return memberPublicId;
|
||||
}
|
||||
|
||||
public void setMemberPublicId(final BigDecimal memberPublicId) {
|
||||
this.memberPublicId = memberPublicId;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerDraftBundleId() {
|
||||
return ownerDraftBundleId;
|
||||
}
|
||||
|
||||
public void setOwnerDraftBundleId(final BigDecimal ownerDraftBundleId) {
|
||||
this.ownerDraftBundleId = ownerDraftBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getMemberDraftBundleId() {
|
||||
return memberDraftBundleId;
|
||||
}
|
||||
|
||||
public void setMemberDraftBundleId(final BigDecimal memberDraftBundleId) {
|
||||
this.memberDraftBundleId = memberDraftBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getMemberPublicBundleId() {
|
||||
return memberPublicBundleId;
|
||||
}
|
||||
|
||||
public void setMemberPublicBundleId(BigDecimal memberPublicBundleId) {
|
||||
this.memberPublicBundleId = memberPublicBundleId;
|
||||
}
|
||||
|
||||
public BigDecimal getOwnerPublicBundleId() {
|
||||
return ownerPublicBundleId;
|
||||
}
|
||||
|
||||
public void setOwnerPublicBundleId(BigDecimal ownerPublicBundleId) {
|
||||
this.ownerPublicBundleId = ownerPublicBundleId;
|
||||
}
|
||||
|
||||
public Map<String, String> getAttributes() {
|
||||
return Collections.unmodifiableMap(attributes);
|
||||
}
|
||||
|
||||
public void addAttribute(final String name, final String value) {
|
||||
attributes.put(name, value);
|
||||
}
|
||||
|
||||
public void setAttributes(final Map<String, String> attributes) {
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.runtime.RuntimeConfig;
|
||||
import com.arsdigita.util.cmd.Program;
|
||||
import com.arsdigita.util.jdbc.Connections;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public abstract class AbstractBundleUpgrade extends Program {
|
||||
|
||||
public AbstractBundleUpgrade(final String name, final String version, final String usage) {
|
||||
super(name, version, usage);
|
||||
}
|
||||
|
||||
protected abstract String getBundleTableName();
|
||||
|
||||
protected abstract String getContentItemTableName();
|
||||
|
||||
protected abstract String getIdColName();
|
||||
|
||||
protected abstract String getBundleClassName();
|
||||
|
||||
protected abstract String getPrimaryKeyConstraintName();
|
||||
|
||||
protected abstract String getBundleContraintName();
|
||||
|
||||
@Override
|
||||
public void doRun(final CommandLine cmdLine) {
|
||||
System.out.println("Starting upgrade...");
|
||||
|
||||
System.out.println("Trying to get JDBC connection...");
|
||||
|
||||
final Connection conn = Connections.acquire(RuntimeConfig.getConfig().
|
||||
getJDBCURL());
|
||||
try {
|
||||
conn.setAutoCommit(false);
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to configure JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.printf("Creating new table %s...\n", getBundleTableName());
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
stmt.addBatch(String.format("CREATE TABLE %s ( "
|
||||
+ "bundle_id integer NOT NULL)",
|
||||
getBundleTableName()));
|
||||
|
||||
stmt.addBatch(String.format("ALTER TABLE ONLY %s "
|
||||
+ "ADD CONSTRAINT %s "
|
||||
+ "PRIMARY KEY (bundle_id);",
|
||||
getBundleTableName(),
|
||||
getPrimaryKeyConstraintName()));
|
||||
|
||||
stmt.addBatch(String.format("ALTER TABLE ONLY %s "
|
||||
+ "ADD CONSTRAINT %s "
|
||||
+ "FOREIGN KEY (bundle_id) "
|
||||
+ "REFERENCES cms_bundles(bundle_id);",
|
||||
getBundleTableName(),
|
||||
getBundleContraintName()));
|
||||
|
||||
stmt.executeBatch();
|
||||
|
||||
} catch (SQLException ex) {
|
||||
System.err.printf("Failed to create table %s.\n",
|
||||
getBundleTableName());
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
System.out.println("Filling new tables with data...");
|
||||
final Statement queryPersonsStmt = conn.createStatement();
|
||||
final Statement stmt = conn.createStatement();
|
||||
|
||||
final ResultSet personsRs = queryPersonsStmt.executeQuery(String.format(
|
||||
"SELECT parent_id "
|
||||
+ "FROM cms_items "
|
||||
+ "JOIN %s "
|
||||
+ "ON cms_items.item_id = %s.%s",
|
||||
getBundleTableName(),
|
||||
getBundleTableName(),
|
||||
getIdColName()));
|
||||
|
||||
while (personsRs.next()) {
|
||||
stmt.addBatch(String.format("INSERT INTO %s (bundle_id) "
|
||||
+ "VALUES (%d)",
|
||||
getBundleClassName(),
|
||||
personsRs.getInt(1)));
|
||||
stmt.addBatch(String.format(
|
||||
"UPDATE acs_objects "
|
||||
+ "SET default_domain_class = '%s',"
|
||||
+ "object_type = '%s' "
|
||||
+ "WHERE object_id = %d",
|
||||
getBundleClassName(),
|
||||
getBundleClassName(),
|
||||
personsRs.getInt(1)));
|
||||
}
|
||||
|
||||
stmt.executeBatch();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to fill tables.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
close(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
conn.commit();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to commiting modifications.");
|
||||
printStackTrace(ex);
|
||||
rollback(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
close(conn);
|
||||
}
|
||||
|
||||
private void rollback(final Connection conn) {
|
||||
try {
|
||||
conn.rollback();
|
||||
} catch (SQLException ex1) {
|
||||
System.err.println("Rollback failed.");
|
||||
ex1.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
private void close(final Connection conn) {
|
||||
try {
|
||||
conn.close();
|
||||
} catch (SQLException ex) {
|
||||
System.err.println("Failed to close JDBC connection.");
|
||||
printStackTrace(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void printStackTrace(final SQLException ex) {
|
||||
ex.printStackTrace(System.err);
|
||||
if (ex.getNextException() != null) {
|
||||
printStackTrace(ex.getNextException());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.cms.contenttypes.GenericContactBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class CreateContactBundles extends AbstractBundleUpgrade {
|
||||
|
||||
public CreateContactBundles() {
|
||||
super("CreateContactBundles", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new CreateContactBundles().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleTableName() {
|
||||
return "cms_contact_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getContentItemTableName() {
|
||||
return "cms_contacts";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getIdColName() {
|
||||
return "contact_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleClassName() {
|
||||
return GenericContactBundle.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_cont_bundl_bund_id_p_2p6vp";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleContraintName() {
|
||||
return "cms_cont_bundl_bund_id_f_m8aga";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class CreateOrgaUnitBundles extends AbstractBundleUpgrade {
|
||||
|
||||
public CreateOrgaUnitBundles() {
|
||||
super("CreateOrgaUnitBundles", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new CreateOrgaUnitBundles().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleTableName() {
|
||||
return "cms_orgaunit_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getContentItemTableName() {
|
||||
return "cms_organizationalunits";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getIdColName() {
|
||||
return "organizationalunit_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleClassName() {
|
||||
return GenericOrganizationalUnitBundle.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_orgau_bund_bund_id_p_cfjhf";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleContraintName() {
|
||||
return "cms_org_con_map_org_id_f_vdrnx";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import com.arsdigita.cms.contenttypes.GenericPersonBundle;
|
||||
|
||||
/**
|
||||
* Creates new table {@code cms_person_bundles}. Part of upgrade from 6.6.4 to 6.6.5
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class CreatePersonBundles extends AbstractBundleUpgrade {
|
||||
|
||||
public CreatePersonBundles() {
|
||||
super("CreatePersonBundles", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new CreatePersonBundles().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleTableName() {
|
||||
return "cms_person_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getContentItemTableName() {
|
||||
return "cms_persons";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getIdColName() {
|
||||
return "person_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleClassName() {
|
||||
return GenericPersonBundle.class.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_pers_bundl_bund_id_p_7xuzi";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBundleContraintName() {
|
||||
return "cms_pers_bundl_bund_id_f__rzge";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class GenericContactGenericPersonAssocUpgrade extends AbstractAssocUpgrade {
|
||||
|
||||
public GenericContactGenericPersonAssocUpgrade() {
|
||||
super("GenericContactGenericPersonAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
new GenericContactGenericPersonAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "cms_person_contact_map";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerIdCol() {
|
||||
return "person_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberIdCol() {
|
||||
return "contact_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getAttributes() {
|
||||
final Map<String, String> attributes = new HashMap<String, String>();
|
||||
attributes.put("link_order", "integer");
|
||||
attributes.put("link_key", "character varying(100)");
|
||||
return attributes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_per_con_map_con_id_p_g1cii";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerConstraintName() {
|
||||
return "cms_per_con_map_per_id_f_g82jn";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberConstraintName() {
|
||||
return "cms_per_con_map_con_id_f_peoc2";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerTableName() {
|
||||
return "cms_person_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberTableName() {
|
||||
return "cms_contact_bundles";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class GenericOrgaUnitGenericContactAssocUpgrade extends AbstractAssocUpgrade {
|
||||
|
||||
public GenericOrgaUnitGenericContactAssocUpgrade() {
|
||||
super("GenericOrgaUnitGenericContactAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new GenericOrgaUnitGenericContactAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "cms_organizationalunits_contact_map";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerIdCol() {
|
||||
return "organizationalunit_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberIdCol() {
|
||||
return "contact_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getAttributes() {
|
||||
final Map<String, String> attributes = new HashMap<String, String>();
|
||||
attributes.put("contact_type", "character varying(100)");
|
||||
attributes.put("map_order", "integer");
|
||||
return attributes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_org_con_map_con_id_p_1rc4y";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerConstraintName() {
|
||||
return "cms_org_con_map_org_id_f_vdrnx";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberConstraintName() {
|
||||
return "cms_org_con_map_con_id_f_9tm3c";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerTableName() {
|
||||
return "cms_orgaunit_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberTableName() {
|
||||
return "cms_contact_bundles";
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class GenericOrgaUnitGenericOrgaUnitAssocUpgrade extends AbstractAssocUpgrade {
|
||||
|
||||
public GenericOrgaUnitGenericOrgaUnitAssocUpgrade() {
|
||||
super("GenericOrgaUnitGenericOrgaUnitAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new GenericOrgaUnitGenericOrgaUnitAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "cms_organizationalunits_hierarchy_map";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerIdCol() {
|
||||
return "superior_orgaunit_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberIdCol() {
|
||||
return "subordinate_orgaunit_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getAttributes() {
|
||||
final Map<String, String> attributes = new HashMap<String, String>();
|
||||
attributes.put("assoc_type", "character varying(128)");
|
||||
attributes.put("superior_orgaunit_order", "integer");
|
||||
attributes.put("subordinate_orgaunit_order", "integer");
|
||||
return attributes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_org_hie_map_sub_or_p_nykpq";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerConstraintName() {
|
||||
return "cms_org_hie_map_sup_or_f_qchkn";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberConstraintName() {
|
||||
return "cms_org_hie_map_sub_or_f_xq5is";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerTableName() {
|
||||
return "cms_orgaunit_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberTableName() {
|
||||
return "cms_orgaunit_bundles";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
package com.arsdigita.cms.contenttypes.upgrades;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class GenericOrgaUnitGenericPersonAssocUpgrade extends AbstractAssocUpgrade {
|
||||
|
||||
public GenericOrgaUnitGenericPersonAssocUpgrade() {
|
||||
super("GenericOrgaUnitGenericPersonAssocUpgrade", "1.0.0", "");
|
||||
}
|
||||
|
||||
public static void main(final String args[]) {
|
||||
new GenericContactGenericPersonAssocUpgrade().run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "cms_organizationalunits_person_map";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerIdCol() {
|
||||
return "organizationalunit_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberIdCol() {
|
||||
return "person_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, String> getAttributes() {
|
||||
final Map<String, String> attributes = new HashMap<String, String>();
|
||||
attributes.put("role_name", "character varying(100)");
|
||||
attributes.put("status", "character varying(100)");
|
||||
return attributes;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getPrimaryKeyConstraintName() {
|
||||
return "cms_org_per_map_org_id_p_km6_m";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerConstraintName() {
|
||||
return "cms_org_per_map_org_id_f_ducb2";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberConstraintName() {
|
||||
return "cms_org_per_map_per_id_f_hrpzh";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getOwnerTableName() {
|
||||
return "cms_orgaunit_bundles";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMemberTableName() {
|
||||
return "cms_person_bundles";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
||||
name="ccm-sci-types-institute"
|
||||
prettyName="Scientific CMS Institute content type"
|
||||
version = "6.6.4"
|
||||
version = "6.6.5"
|
||||
release="1"
|
||||
webapp="ROOT">
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue