diff --git a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl
index 53c13049c..0c9ff459f 100644
--- a/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl
+++ b/ccm-sci-publications/pdl/com/arsdigita/content-types/Publication.pdl
@@ -73,15 +73,15 @@ association {
//See GenericOrganizationalUnitsPublicationsStep and
//PublicationGenericOrganizationalUnitsStep for more information
association {
- GenericOrganizationalUnit[0..n] orgaunits = join ct_publications.publication_id
- to cms_organizationalunits_publications_map.publication_id,
- join cms_organizationalunits_publications_map.orgaunit_id
- to cms_organizationalunits.organizationalunit_id;
+ GenericOrganizationalUnitBundle[0..n] orgaunits = join ct_publication_bundles.bundle_id
+ to cms_organizationalunits_publications_map.publication_id,
+ join cms_organizationalunits_publications_map.orgaunit_id
+ to cms_orgaunit_bundles.bundle_id;
- Publication[0..n] publications = join cms_organizationalunits.organizationalunit_id
+ Publication[0..n] publications = join cms_orgaunit_bundles.bundle_id
to cms_organizationalunits_publications_map.orgaunit_id,
join cms_organizationalunits_publications_map.publication_id
- to ct_publications.publication_id;
+ to ct_publication_bundles.bundle_id;
Integer[0..1] publicationOrder = cms_organizationalunits_publications_map.publication_order INTEGER;
}
diff --git a/ccm-sci-publications/src/ccm-sci-publications.upgrade b/ccm-sci-publications/src/ccm-sci-publications.upgrade
index 8b2b3aa2e..17d84b8a3 100644
--- a/ccm-sci-publications/src/ccm-sci-publications.upgrade
+++ b/ccm-sci-publications/src/ccm-sci-publications.upgrade
@@ -7,5 +7,6 @@
+
\ No newline at end of file
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java
index cb2444233..a134f8a66 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPublicationsCollection.java
@@ -1,5 +1,6 @@
package com.arsdigita.cms.contenttypes;
+import com.arsdigita.cms.ContentBundle;
import com.arsdigita.cms.ContentPage;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.domain.DomainObjectFactory;
@@ -21,39 +22,48 @@ public class GenericOrganizationalUnitPublicationsCollection
}
public Publication getPublication() {
- return (Publication) DomainObjectFactory.newInstance(m_dataCollection.
- getDataObject());
- }
-
- public BigDecimal getID() {
- return (BigDecimal) m_dataCollection.getDataObject().get(ACSObject.ID);
+ //return (Publication) DomainObjectFactory.newInstance(m_dataCollection.
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.
+ newInstance(m_dataCollection.getDataObject());
+ return (Publication) bundle.getPrimaryInstance();
}
- public String getTitle() {
- return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE);
+ public Publication getPublication(final String language) {
+ //return (Publication) DomainObjectFactory.newInstance(m_dataCollection.
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.
+ newInstance(m_dataCollection.getDataObject());
+ return (Publication) bundle.getInstance(language);
}
- public Integer getYearOfPublication() {
- return (Integer) m_dataCollection.getDataObject().get(
- Publication.YEAR_OF_PUBLICATION);
- }
+ /*public BigDecimal getID() {
+ return (BigDecimal) m_dataCollection.getDataObject().get(ACSObject.ID);
+ }
+
+ public String getTitle() {
+ return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE);
+ }
- public String getAbstract() {
- return (String) m_dataCollection.getDataObject().get(
- Publication.ABSTRACT);
- }
+ public Integer getYearOfPublication() {
+ return (Integer) m_dataCollection.getDataObject().get(
+ Publication.YEAR_OF_PUBLICATION);
+ }
- public String getMisc() {
- return (String) m_dataCollection.getDataObject().get(Publication.MISC);
- }
+ public String getAbstract() {
+ return (String) m_dataCollection.getDataObject().get(
+ Publication.ABSTRACT);
+ }
- public AuthorshipCollection getAuthors() {
- return new AuthorshipCollection((DataCollection) m_dataCollection.
- getDataObject().get(Publication.AUTHORS));
- }
+ public String getMisc() {
+ return (String) m_dataCollection.getDataObject().get(Publication.MISC);
+ }
- public SeriesCollection getSeries() {
- return new SeriesCollection((DataCollection) m_dataCollection.
- getDataObject().get(Publication.SERIES));
- }
+ public AuthorshipCollection getAuthors() {
+ return new AuthorshipCollection((DataCollection) m_dataCollection.
+ getDataObject().get(Publication.AUTHORS));
+ }
+
+ public SeriesCollection getSeries() {
+ return new SeriesCollection((DataCollection) m_dataCollection.
+ getDataObject().get(Publication.SERIES));
+ }*/
}
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java
index abea57dd7..de7044fb4 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/Publication.java
@@ -275,21 +275,25 @@ public class Publication extends ContentPage {
}
public PublicationGenericOrganizationalsUnitCollection getOrganizationalUnits() {
- return new PublicationGenericOrganizationalsUnitCollection((DataCollection) get(
- ORGAUNITS));
+ //return new PublicationGenericOrganizationalsUnitCollection((DataCollection) get(
+ // ORGAUNITS));
+ return getPublicationBundle().getOrganizationalUnits();
}
public void addOrganizationalUnit(final GenericOrganizationalUnit orgaunit) {
- Assert.exists(orgaunit, GenericOrganizationalUnit.class);
+ //Assert.exists(orgaunit, GenericOrganizationalUnit.class);
- add(ORGAUNITS, orgaunit);
+ //add(ORGAUNITS, orgaunit);
+
+ getPublicationBundle().addOrganizationalUnit(orgaunit);
}
public void removeOrganizationalUnit(
final GenericOrganizationalUnit orgaunit) {
- Assert.exists(orgaunit, GenericOrganizationalUnit.class);
+ //Assert.exists(orgaunit, GenericOrganizationalUnit.class);
- remove(ORGAUNITS, orgaunit);
+ //remove(ORGAUNITS, orgaunit);
+ getPublicationBundle().removeOrganizationalUnit(orgaunit);
}
public boolean hasOrganizationalUnits() {
@@ -298,26 +302,30 @@ public class Publication extends ContentPage {
public static GenericOrganizationalUnitPublicationsCollection getPublications(
final GenericOrganizationalUnit orgaunit) {
- final DataCollection dataCollection = (DataCollection) orgaunit.get(
- ORGAUNIT_PUBLICATIONS);
+ //final DataCollection dataCollection = (DataCollection) orgaunit.get(
+ // ORGAUNIT_PUBLICATIONS);
- return new GenericOrganizationalUnitPublicationsCollection(
- dataCollection);
+ //return new GenericOrganizationalUnitPublicationsCollection(
+ // dataCollection);
+
+ return PublicationBundle.getPublications(orgaunit);
}
public static void addPublication(final GenericOrganizationalUnit orgaunit,
final Publication publication) {
- Assert.exists(publication);
+ //Assert.exists(publication);
- orgaunit.add(ORGAUNIT_PUBLICATIONS, publication);
+ //orgaunit.add(ORGAUNIT_PUBLICATIONS, publication);
+ PublicationBundle.addPublication(orgaunit, publication);
}
public static void removePublication(
final GenericOrganizationalUnit orgaunit,
final Publication publication) {
- Assert.exists(publication);
+ //Assert.exists(publication);
- orgaunit.remove(ORGAUNIT_PUBLICATIONS, publication);
+ //orgaunit.remove(ORGAUNIT_PUBLICATIONS, publication);
+ PublicationBundle.removePublication(orgaunit, publication);
}
@Override
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationAuthorAssocUpgrade.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationAuthorAssocUpgrade.java
index a516f0a41..4652192c1 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationAuthorAssocUpgrade.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationAuthorAssocUpgrade.java
@@ -15,7 +15,7 @@ import org.apache.commons.cli.CommandLine;
/**
* Upgrade for association between GenericPublication and GenericPerson
- * (ccm-sci-publications 6.6.4 to 6.6.5)
+ * (ccm-sci-publications 6.6.2 to 6.6.3)
*
* @author Jens Pelzetter
* @version $Id$
@@ -147,8 +147,7 @@ public class PublicationAuthorAssocUpgrade extends Program {
try {
System.out.println("Filling new tables with data...");
- final Statement queryPublicationStmt = conn.createStatement();
- final Statement queryAuthorsStmt = conn.createStatement();
+ final Statement queryPublicationStmt = conn.createStatement();
final Statement stmt = conn.createStatement();
final ResultSet publicationRs =
@@ -209,7 +208,7 @@ public class PublicationAuthorAssocUpgrade extends Program {
if (entry.getPublicationLiveBundleId() != null) {
stmt.addBatch(String.format(
"DELETE FROM cms_published_links "
- + "WHERE pending = %s"
+ + "WHERE pending = %s "
+ "AND draft_target = %s",
entry.getPublicationLiveId().toString(),
entry.getAuthorDraftId().toString()));
@@ -218,7 +217,7 @@ public class PublicationAuthorAssocUpgrade extends Program {
if (entry.getAuthorBundleLiveId() != null) {
stmt.addBatch(String.format(
"DELETE FROM cms_published_links "
- + "WHERE pending = %s"
+ + "WHERE pending = %s "
+ "AND draft_target = %s",
entry.getAuthorLiveId().toString(),
entry.getPublicationDraftId().toString()));
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java
index da3ca6ded..c49c0a65a 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationBundle.java
@@ -27,6 +27,9 @@ public class PublicationBundle extends ContentBundle {
public static final String AUTHORS = "authors";
public final static String AUTHOR_ORDER = "authorOrder";
public final static String EDITOR = "editor";
+ public final static String ORGAUNITS = "orgaunits";
+ public final static String ORGAUNIT_ORDER = "publicationOrder";
+ public final static String ORGAUNIT_PUBLICATIONS = "publications";
public PublicationBundle(final ContentItem primary) {
super(BASE_DATA_OBJECT_TYPE);
@@ -73,6 +76,15 @@ public class PublicationBundle extends ContentBundle {
createAuthorAssoc(authors);
}
+ return true;
+ } else if (ORGAUNITS.equals(attribute)) {
+ final DataCollection orgaunits = (DataCollection) pubBundle.get(
+ ORGAUNITS);
+
+ while (orgaunits.next()) {
+ createOrgaUnitAssoc(orgaunits);
+ }
+
return true;
} else {
return super.copyProperty(source, property, copier);
@@ -83,6 +95,41 @@ public class PublicationBundle extends ContentBundle {
}
}
+ private void createAuthorAssoc(final DataCollection authors) {
+ final GenericPersonBundle draftAuthor =
+ (GenericPersonBundle) DomainObjectFactory.
+ newInstance(authors.getDataObject());
+ final GenericPersonBundle liveAuthor =
+ (GenericPersonBundle) draftAuthor.
+ getLiveVersion();
+
+ if (liveAuthor != null) {
+ final DataObject link = add(AUTHORS, liveAuthor);
+
+ link.set(EDITOR, authors.get(AuthorshipCollection.LINKEDITOR));
+ link.set(AUTHOR_ORDER, authors.get(AuthorshipCollection.LINKORDER));
+
+ link.save();
+ }
+ }
+
+ private void createOrgaUnitAssoc(final DataCollection orgaunits) {
+ final GenericOrganizationalUnitBundle orgaunitDraft =
+ (GenericOrganizationalUnitBundle) DomainObjectFactory.
+ newInstance(orgaunits.getDataObject());
+ final GenericOrganizationalUnitBundle orgaunitLive =
+ (GenericOrganizationalUnitBundle) orgaunitDraft.
+ getLiveVersion();
+
+ if (orgaunitLive != null) {
+ final DataObject link = add(ORGAUNITS, orgaunitLive);
+
+ link.set(ORGAUNIT_ORDER, orgaunits.get("link." + ORGAUNIT_ORDER));
+
+ link.save();
+ }
+ }
+
@Override
public boolean copyReverseProperty(final CustomCopy source,
final ContentItem liveItem,
@@ -103,10 +150,24 @@ public class PublicationBundle extends ContentBundle {
(GenericPersonBundle) liveItem);
}
+ return true;
+ } else if (("publications".equals(attribute))
+ && (source instanceof GenericOrganizationalUnitBundle)) {
+ final GenericOrganizationalUnitBundle orgaunitBundle =
+ (GenericOrganizationalUnitBundle) source;
+ final DataCollection publications =
+ (DataCollection) orgaunitBundle.get(
+ "publications");
+
+ while (publications.next()) {
+ createOrgaunitPublicationAssoc(publications,
+ (GenericOrganizationalUnitBundle) liveItem);
+ }
+
return true;
} else {
- return super.copyReverseProperty(source,
- liveItem,
+ return super.copyReverseProperty(source,
+ liveItem,
property,
copier);
}
@@ -115,24 +176,6 @@ public class PublicationBundle extends ContentBundle {
}
}
- private void createAuthorAssoc(final DataCollection authors) {
- final GenericPersonBundle draftAuthor =
- (GenericPersonBundle) DomainObjectFactory.
- newInstance(authors.getDataObject());
- final GenericPersonBundle liveAuthor =
- (GenericPersonBundle) draftAuthor.
- getLiveVersion();
-
- if (liveAuthor != null) {
- final DataObject link = add(AUTHORS, liveAuthor);
-
- link.set(EDITOR, authors.get(AuthorshipCollection.LINKEDITOR));
- link.set(AUTHOR_ORDER, authors.get(AuthorshipCollection.LINKORDER));
-
- link.save();
- }
- }
-
private void createAuthorPublicationAssoc(final DataCollection publications,
final GenericPersonBundle author) {
final PublicationBundle draftPublication =
@@ -144,10 +187,31 @@ public class PublicationBundle extends ContentBundle {
if (livePublication != null) {
final DataObject link = author.add("publication", livePublication);
-
+
link.set(EDITOR, publications.get(AuthorshipCollection.LINKEDITOR));
- link.set(AUTHOR_ORDER, publications.get(AuthorshipCollection.LINKORDER));
-
+ link.set(AUTHOR_ORDER, publications.get(
+ AuthorshipCollection.LINKORDER));
+
+ link.save();
+ }
+ }
+
+ private void createOrgaunitPublicationAssoc(
+ final DataCollection publications,
+ final GenericOrganizationalUnitBundle orgaunit) {
+ final PublicationBundle draftPublication =
+ (PublicationBundle) DomainObjectFactory.
+ newInstance(publications.getDataObject());
+ final PublicationBundle livePublication =
+ (PublicationBundle) draftPublication.
+ getLiveVersion();
+
+ if (livePublication != null) {
+ final DataObject link =
+ orgaunit.add("publications", livePublication);
+
+ link.set(ORGAUNIT_ORDER, publications.get("link." + ORGAUNIT_ORDER));
+
link.save();
}
}
@@ -159,7 +223,7 @@ public class PublicationBundle extends ContentBundle {
public void addAuthor(final GenericPerson author, final Boolean editor) {
Assert.exists(author, GenericPerson.class);
- final DataObject link = add(AUTHORS, author);
+ final DataObject link = add(AUTHORS, author.getGenericPersonBundle());
link.set(EDITOR, editor);
link.set(AUTHOR_ORDER, Integer.valueOf((int) getAuthors().size()));
@@ -197,4 +261,61 @@ public class PublicationBundle extends ContentBundle {
publication.set(Publication.AUTHORS_STR, authorsStr);
}
}
+
+ public PublicationGenericOrganizationalsUnitCollection getOrganizationalUnits() {
+ return new PublicationGenericOrganizationalsUnitCollection(
+ (DataCollection) get(ORGAUNITS));
+ }
+
+ public void addOrganizationalUnit(final GenericOrganizationalUnit orgaunit) {
+ Assert.exists(orgaunit, GenericOrganizationalUnit.class);
+
+ final DataObject link = add(ORGAUNITS, orgaunit.
+ getGenericOrganizationalUnitBundle());
+
+ link.set(ORGAUNIT_ORDER, Integer.valueOf((int) getOrganizationalUnits().
+ size()));
+
+ link.save();
+ }
+
+ public void removeOrganizationalUnit(
+ final GenericOrganizationalUnit orgaunit) {
+ Assert.exists(orgaunit, GenericOrganizationalUnit.class);
+
+ remove(ORGAUNITS, orgaunit);
+ }
+
+ public static GenericOrganizationalUnitPublicationsCollection getPublications(
+ final GenericOrganizationalUnit orgaunit) {
+ final GenericOrganizationalUnitBundle orgaunitBundle = orgaunit.
+ getGenericOrganizationalUnitBundle();
+
+ final DataCollection collection = (DataCollection) orgaunitBundle.get(
+ ORGAUNIT_PUBLICATIONS);
+
+ return new GenericOrganizationalUnitPublicationsCollection(
+ collection);
+ }
+
+ public static void addPublication(final GenericOrganizationalUnit orgaunit,
+ final Publication publication) {
+ Assert.exists(publication);
+
+ final GenericOrganizationalUnitBundle orgaunitBundle = orgaunit.
+ getGenericOrganizationalUnitBundle();
+
+ orgaunitBundle.add(ORGAUNIT_PUBLICATIONS, publication);
+ }
+
+ public static void removePublication(
+ final GenericOrganizationalUnit orgaunit,
+ final Publication publication) {
+ Assert.exists(publication);
+
+ final GenericOrganizationalUnitBundle orgaunitBundle = orgaunit.
+ getGenericOrganizationalUnitBundle();
+
+ orgaunitBundle.remove(ORGAUNIT_PUBLICATIONS, publication);
+ }
}
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java
index 97f00b22b..0899038a3 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationGenericOrganizationalsUnitCollection.java
@@ -1,5 +1,6 @@
package com.arsdigita.cms.contenttypes;
+import com.arsdigita.cms.ContentBundle;
import com.arsdigita.cms.ContentPage;
import com.arsdigita.domain.DomainCollection;
import com.arsdigita.domain.DomainObjectFactory;
@@ -23,16 +24,24 @@ public class PublicationGenericOrganizationalsUnitCollection
}
public GenericOrganizationalUnit getOrganizationalUnit() {
- return (GenericOrganizationalUnit) DomainObjectFactory.newInstance(
- m_dataCollection.getDataObject());
+ //return (GenericOrganizationalUnit) DomainObjectFactory.newInstance(
+ // m_dataCollection.getDataObject());
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject());
+ return (GenericOrganizationalUnit) bundle.getPrimaryInstance();
+ }
+
+ public GenericOrganizationalUnit getOrganizationalUnit(final String language) {
+ final ContentBundle bundle = (ContentBundle) DomainObjectFactory.newInstance(m_dataCollection.getDataObject());
+ return (GenericOrganizationalUnit) bundle.getInstance(language);
}
public BigDecimal getID() {
- return (BigDecimal) m_dataCollection.getDataObject().get(ACSObject.ID);
+ return getOrganizationalUnit().getID();
}
public String getTitle() {
- return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE);
+ //return (String) m_dataCollection.getDataObject().get(ContentPage.TITLE);
+ return getOrganizationalUnit().getTitle();
}
public String getAddendum() {
@@ -40,7 +49,7 @@ public class PublicationGenericOrganizationalsUnitCollection
GenericOrganizationalUnit.ADDENDUM);
}
- public GenericOrganizationalUnitContactCollection getContacts() {
+ /*public GenericOrganizationalUnitContactCollection getContacts() {
return new GenericOrganizationalUnitContactCollection(
(DataCollection) m_dataCollection.get(
GenericOrganizationalUnit.CONTACTS));
@@ -62,5 +71,5 @@ public class PublicationGenericOrganizationalsUnitCollection
return new GenericOrganizationalUnitSubordinateCollection(
(DataCollection) m_dataCollection.getDataObject().get(
GenericOrganizationalUnit.SUBORDINATE_ORGAUNITS));
- }
+ }*/
}
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationOrgaunitAssocUpgrade.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationOrgaunitAssocUpgrade.java
new file mode 100644
index 000000000..86bbeb6c9
--- /dev/null
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/PublicationOrgaunitAssocUpgrade.java
@@ -0,0 +1,368 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.arsdigita.cms.contenttypes;
+
+import com.arsdigita.packaging.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 GenericPublication and GenericPerson
+ * (ccm-sci-publications 6.6.2 to 6.6.3)
+ *
+ * @author Jens Pelzetter
+ * @version $Id$
+ */
+public class PublicationOrgaunitAssocUpgrade extends Program {
+
+ public PublicationOrgaunitAssocUpgrade() {
+ super("PublicationOrgaunitAssocUpgrade", "1.0.0", "");
+ }
+
+ public static void main(final String[] args) {
+ new PublicationOrgaunitAssocUpgrade().run(args);
+ }
+
+ public void doRun(final CommandLine cmdLine) {
+ System.out.println("Starting upgrade...");
+ List oldData = new ArrayList();
+
+ 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 publication_id, orgaunit_id, publication_order"
+ + "FROM cms_organizationalunits_publications_map "
+ + "JOIN cms_items ON orgaunit_id = item_id "
+ + "WHERE version = 'draft'");
+
+ while (oldAssocResult.next()) {
+ PublicationOrgaunitAssocUpgrade.AssocEntry entry =
+ new PublicationOrgaunitAssocUpgrade.AssocEntry();
+
+ entry.setPublicationDraftId(oldAssocResult.getBigDecimal(1));
+ entry.setPublicationBundleDraftId(getParentIdFor(
+ entry.getPublicationDraftId(), conn));
+ entry.setOrgaunitDraftId(oldAssocResult.getBigDecimal(2));
+ entry.setOrgaunitBundleDraftId(getParentIdFor(
+ entry.getOrgaunitDraftId(), conn));
+
+ entry.setPublicationLiveId(getPublicIdFor(
+ entry.getPublicationDraftId(), conn));
+ entry.setPublicationBundleLiveId(getPublicIdFor(
+ entry.getPublicationBundleDraftId(), conn));
+ entry.setOrgaunitLiveId(getPublicIdFor(
+ entry.getOrgaunitDraftId(), conn));
+ entry.setOrgaunitBundleLiveId(getPublicIdFor(
+ entry.getOrgaunitBundleDraftId(), conn));
+
+ entry.setOrder(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 cms_organizationalunits_publications_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_organizationalunits_publications_map ( "
+ + "orgaunit_id integer NOT NULL, "
+ + "publication_id integer NOT NULL, "
+ + "publication_order integer");
+
+ stmt.addBatch("ALTER TABLE ONLY cms_organizationalunits_publications_map "
+ + "ADD CONSTRAINT cms_org_pub_map_org_id_p__dore "
+ + "PRIMARY KEY (publication_id, orgaunit_id);");
+
+ stmt.addBatch(
+ "ALTER TABLE ONLY cms_organizationalunits_publications_map "
+ + "ADD CONSTRAINT cms_org_pub_map_org_id_f_pe406 "
+ + "FOREIGN KEY (orgaunit_id) "
+ + "REFERENCES cms_orgaunit_bundles(bundle_id)");
+
+ stmt.addBatch(
+ "ALTER TABLE ONLY cms_organizationalunits_publications_map "
+ + "ADD CONSTRAINT cms_org_pub_map_pub_id_f_6udi3 "
+ + "FOREIGN KEY (publication_id) "
+ + "REFERENCES ct_publication_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 queryPublicationStmt = conn.createStatement();
+ final Statement stmt = conn.createStatement();
+
+ final List processedEntries = new ArrayList();
+ for (AssocEntry entry : oldData) {
+ if (processedEntries.contains(String.format(
+ "%s-%s",
+ entry.getPublicationBundleDraftId(),
+ entry.getOrgaunitBundleDraftId()))) {
+ continue;
+ }
+
+ stmt.addBatch(String.format(
+ "INSERT INTO cms_organizationalunits_publications_map ("
+ + "publication_id,"
+ + "orgaunit_id,"
+ + "publication_order"
+ + "VALUES (%s, %s, %s)",
+ entry.getPublicationBundleDraftId().toString(),
+ entry.getOrgaunitBundleDraftId().toString(),
+ entry.getOrder().toString()));
+
+ if ((entry.getPublicationBundleLiveId() != null)
+ && (entry.getOrgaunitBundleLiveId() != null)) {
+ stmt.addBatch(String.format(
+ "INSERT INTO cms_organizationalunits_publications_map ("
+ + "publication_id,"
+ + "organunit_id,"
+ + "publication_order) "
+ + "VALUES (%s %s %s)",
+ entry.getPublicationBundleLiveId().toString(),
+ entry.getOrgaunitBundleLiveId().toString(),
+ entry.getOrder().toString()));
+ }
+
+ if (entry.getPublicationBundleLiveId() != null) {
+ stmt.addBatch(String.format(
+ "DELETE FROM cms_published_links "
+ + "WHERE pending = %s "
+ + "AND draft_target = %s",
+ entry.getPublicationLiveId().toString(),
+ entry.getOrgaunitDraftId().toString()));
+ }
+
+ if (entry.getOrgaunitBundleLiveId() != null) {
+ stmt.addBatch(String.format(
+ "DELETE FROM cms_published_links "
+ + "WHERE pending = %s "
+ + "AND draft_target = %s",
+ entry.getOrgaunitLiveId().toString(),
+ entry.getPublicationDraftId().toString()));
+ }
+
+ processedEntries.add(String.format(
+ "%s-%s",
+ entry.getPublicationBundleDraftId().toString(),
+ entry.getOrgaunitBundleDraftId().toString()));
+ }
+
+ stmt.executeBatch();
+
+
+ } catch (SQLException ex) {
+ System.err.println("Failed to create new 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 class AssocEntry {
+
+ private BigDecimal publicationDraftId;
+ private BigDecimal publicationLiveId;
+ private BigDecimal publicationBundleDraftId;
+ private BigDecimal publicationBundleLiveId;
+ private BigDecimal orgaunitDraftId;
+ private BigDecimal orgaunitLiveId;
+ private BigDecimal orgaunitBundleDraftId;
+ private BigDecimal orgaunitBundleLiveId;
+ private Integer order;
+
+ public Integer getOrder() {
+ return order;
+ }
+
+ public void setOrder(Integer order) {
+ this.order = order;
+ }
+
+ public BigDecimal getOrgaunitBundleDraftId() {
+ return orgaunitBundleDraftId;
+ }
+
+ public void setOrgaunitBundleDraftId(BigDecimal orgaunitBundleDraftId) {
+ this.orgaunitBundleDraftId = orgaunitBundleDraftId;
+ }
+
+ public BigDecimal getOrgaunitBundleLiveId() {
+ return orgaunitBundleLiveId;
+ }
+
+ public void setOrgaunitBundleLiveId(BigDecimal orgaunitBundleLiveId) {
+ this.orgaunitBundleLiveId = orgaunitBundleLiveId;
+ }
+
+ public BigDecimal getOrgaunitDraftId() {
+ return orgaunitDraftId;
+ }
+
+ public void setOrgaunitDraftId(BigDecimal orgaunitDraftId) {
+ this.orgaunitDraftId = orgaunitDraftId;
+ }
+
+ public BigDecimal getOrgaunitLiveId() {
+ return orgaunitLiveId;
+ }
+
+ public void setOrgaunitLiveId(BigDecimal orgaunitLiveId) {
+ this.orgaunitLiveId = orgaunitLiveId;
+ }
+
+ public BigDecimal getPublicationBundleDraftId() {
+ return publicationBundleDraftId;
+ }
+
+ public void setPublicationBundleDraftId(
+ BigDecimal publicationBundleDraftId) {
+ this.publicationBundleDraftId = publicationBundleDraftId;
+ }
+
+ public BigDecimal getPublicationBundleLiveId() {
+ return publicationBundleLiveId;
+ }
+
+ public void setPublicationBundleLiveId(
+ BigDecimal publicationBundleLiveId) {
+ this.publicationBundleLiveId = publicationBundleLiveId;
+ }
+
+ public BigDecimal getPublicationDraftId() {
+ return publicationDraftId;
+ }
+
+ public void setPublicationDraftId(BigDecimal publicationDraftId) {
+ this.publicationDraftId = publicationDraftId;
+ }
+
+ public BigDecimal getPublicationLiveId() {
+ return publicationLiveId;
+ }
+
+ public void setPublicationLiveId(BigDecimal publicationLiveId) {
+ this.publicationLiveId = publicationLiveId;
+ }
+ }
+
+ 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());
+ }
+ }
+}
diff --git a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java
index 786f02bb9..43e852cf6 100644
--- a/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java
+++ b/ccm-sci-publications/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPublicationsTable.java
@@ -120,7 +120,7 @@ public class GenericOrganizationalUnitPublicationsTable
public Object getElementAt(final int columnIndex) {
switch (columnIndex) {
case 0:
- return publications.getTitle();
+ return publications.getPublication().getTitle();
case 1:
return PublicationGlobalizationUtil.globalize(
"genericorganizationalunit.ui.publications.remove").
@@ -132,7 +132,7 @@ public class GenericOrganizationalUnitPublicationsTable
@Override
public Object getKeyAt(int columnIndex) {
- return publications.getID();
+ return publications.getPublication().getID();
}
}
@@ -147,7 +147,7 @@ public class GenericOrganizationalUnitPublicationsTable
final Object key,
final int row,
final int column) {
- final com.arsdigita.cms.SecurityManager securityManager = Utilities.
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.
getSecurityManager(state);
final Publication publication = new Publication((BigDecimal) key);
@@ -190,7 +190,7 @@ public class GenericOrganizationalUnitPublicationsTable
final Object key,
final int row,
final int column) {
- final com.arsdigita.cms.SecurityManager securityManager = Utilities.
+ final com.arsdigita.cms.SecurityManager securityManager = CMS.
getSecurityManager(state);
final GenericOrganizationalUnit orgaunit =
(GenericOrganizationalUnit) itemModel.