Optimierung Assoziation Publication <-> GenericOrganizationalUnit, Ticket 1119
git-svn-id: https://svn.libreccm.org/ccm/trunk@1569 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
98f27f244d
commit
9a06f75faa
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,5 +7,6 @@
|
|||
</version>
|
||||
<version from="6.6.2" to="6.6.3">
|
||||
<script class="com.arsdigita.cms.contenttypes.PublicationAuthorAssocUpgrade"/>
|
||||
<script class="com.arsdigita.cms.contenttypes.PublicationOrgaunitAssocUpgrade"/>
|
||||
</version>
|
||||
</upgrade>
|
||||
|
|
@ -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));
|
||||
}*/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<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 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<String> processedEntries = new ArrayList<String>();
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue