Assoziation PublicationWithPublisher <-> Publisher optimiert (Ticket #1194)

git-svn-id: https://svn.libreccm.org/ccm/trunk@1573 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-04-06 13:48:39 +00:00
parent d3749d6919
commit f80728caa4
14 changed files with 321 additions and 45 deletions

View File

@ -29,7 +29,7 @@ object type CollectedVolume extends PublicationWithPublisher {
//Moved to publication Boolean[0..1] reviewed = ct_collected_volume.reviewed BIT; //Moved to publication Boolean[0..1] reviewed = ct_collected_volume.reviewed BIT;
} }
object type CollectedVolumeBundle extends PublicationBundle { object type CollectedVolumeBundle extends PublicationWithPublisherBundle {
reference key (ct_collected_volume_bundles.bundle_id); reference key (ct_collected_volume_bundles.bundle_id);
} }

View File

@ -33,16 +33,20 @@ object type PublicationWithPublisher extends Publication {
reference key (ct_publication_with_publisher.publication_with_publisher_id); reference key (ct_publication_with_publisher.publication_with_publisher_id);
} }
object type PublicationWithPublisherBundle extends PublicationBundle {
reference key (ct_publication_with_publisher_bundles.bundle_id);
}
association { association {
PublicationWithPublisher[0..n] publication = join ct_publisher.publisher_id PublicationWithPublisherBundle[0..n] publication = join ct_publisher_bundles.bundle_id
to ct_publication_with_publisher_publisher_map.publisher_id, to ct_publication_with_publisher_publisher_map.publisher_id,
join ct_publication_with_publisher_publisher_map.publication_id join ct_publication_with_publisher_publisher_map.publication_id
to ct_publication_with_publisher.publication_with_publisher_id; to ct_publication_with_publisher_bundles.bundle_id;
Publisher[0..n] publisher = join ct_publication_with_publisher.publication_with_publisher_id PublisherBundle[0..n] publisher = join ct_publication_with_publisher_bundles.bundle_id
to ct_publication_with_publisher_publisher_map.publication_id, to ct_publication_with_publisher_publisher_map.publication_id,
join ct_publication_with_publisher_publisher_map.publisher_id join ct_publication_with_publisher_publisher_map.publisher_id
to ct_publisher.publisher_id; to ct_publisher_bundles.bundle_id;
Integer[0..1] publisherOrder = ct_publication_with_publisher_publisher_map.publisher_order INTEGER; Integer[0..1] publisherOrder = ct_publication_with_publisher_publisher_map.publisher_order INTEGER;
} }

View File

@ -32,4 +32,8 @@ object type Publisher extends GenericOrganizationalUnit {
reference key (ct_publisher.publisher_id); reference key (ct_publisher.publisher_id);
} }
object type PublisherBundle extends GenericOrganizationalUnitBundle {
reference key (ct_publisher_bundles.bundle_id);
}

View File

@ -10,7 +10,7 @@
objectType="com.arsdigita.cms.contenttypes.Monograph" objectType="com.arsdigita.cms.contenttypes.Monograph"
classname="com.arsdigita.cms.contenttypes.Monograph"> classname="com.arsdigita.cms.contenttypes.Monograph">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationCreate"> <ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationWithPublisherCreate">
<ctd:authoring-step <ctd:authoring-step
labelKey="publications.ui.monograph_properties.title" labelKey="publications.ui.monograph_properties.title"

View File

@ -10,7 +10,7 @@
objectType="com.arsdigita.cms.contenttypes.Proceedings" objectType="com.arsdigita.cms.contenttypes.Proceedings"
classname="com.arsdigita.cms.contenttypes.Proceedings"> classname="com.arsdigita.cms.contenttypes.Proceedings">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationCreate"> <ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationWithPublisherCreate">
<ctd:authoring-step <ctd:authoring-step
labelKey="publications.ui.proceedings_properties.title" labelKey="publications.ui.proceedings_properties.title"

View File

@ -11,7 +11,7 @@
classname="com.arsdigita.cms.contenttypes.PublicationWithPublisher" classname="com.arsdigita.cms.contenttypes.PublicationWithPublisher"
mode="hidden"> mode="hidden">
<ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationCreate"> <ctd:authoring-kit createComponent="com.arsdigita.cms.contenttypes.ui.PublicationWithPublisherCreate">
<ctd:authoring-step <ctd:authoring-step
labelKey="publications.ui.publication_with_publishers_properties.title" labelKey="publications.ui.publication_with_publishers_properties.title"

View File

@ -66,7 +66,7 @@ public class PublicationBundle extends ContentBundle {
final ItemCopier copier) { final ItemCopier copier) {
final String attribute = property.getName(); final String attribute = property.getName();
if (copier.getCopyType() == ItemCopier.VERSION_COPY) { if (copier.getCopyType() == ItemCopier.VERSION_COPY) {
final Publication pubBundle = (Publication) source; final PublicationBundle pubBundle = (PublicationBundle) source;
if (AUTHORS.equals(attribute)) { if (AUTHORS.equals(attribute)) {
final DataCollection authors = (DataCollection) pubBundle.get( final DataCollection authors = (DataCollection) pubBundle.get(

View File

@ -83,6 +83,10 @@ public class PublicationWithPublisher extends Publication {
super(type); super(type);
} }
public PublicationWithPublisherBundle getPublicationWithPublisherBundle() {
return (PublicationWithPublisherBundle) getContentBundle();
}
/** /**
* Returns the ISBN of the publication. * Returns the ISBN of the publication.
* *
@ -140,21 +144,29 @@ public class PublicationWithPublisher extends Publication {
* @return The publisher of the publication. * @return The publisher of the publication.
*/ */
public Publisher getPublisher() { public Publisher getPublisher() {
DataCollection collection; // DataCollection collection;
//
// collection = (DataCollection) get(PUBLISHER);
//
// if (0 == collection.size()) {
// return null;
// } else {
// DataObject dobj;
//
// collection.next();
// dobj = collection.getDataObject();
// collection.close();
//
// return (Publisher) DomainObjectFactory.newInstance(dobj);
// }
collection = (DataCollection) get(PUBLISHER); return (Publisher) getPublicationWithPublisherBundle().getPublisher().
getPrimaryInstance();
if (0 == collection.size()) {
return null;
} else {
DataObject dobj;
collection.next();
dobj = collection.getDataObject();
collection.close();
return (Publisher) DomainObjectFactory.newInstance(dobj);
} }
public Publisher getPublisher(final String language) {
return (Publisher) getPublicationWithPublisherBundle().getPublisher().
getInstance(language);
} }
/** /**
@ -163,18 +175,20 @@ public class PublicationWithPublisher extends Publication {
* @param publisher The publisher of the publication. * @param publisher The publisher of the publication.
*/ */
public void setPublisher(Publisher publisher) { public void setPublisher(Publisher publisher) {
final Publisher oldPublisher; // final Publisher oldPublisher;
//
// oldPublisher = getPublisher();
// if (oldPublisher != null) {
// remove(PUBLISHER, oldPublisher);
// }
//
// if (null != publisher) {
// Assert.exists(publisher, Publisher.class);
// DataObject link = add(PUBLISHER, publisher);
// link.set("publisherOrder", 1);
// link.save();
// }
oldPublisher = getPublisher(); getPublicationWithPublisherBundle().setPublisher(publisher);
if (oldPublisher != null) {
remove(PUBLISHER, oldPublisher);
}
if (null != publisher) {
Assert.exists(publisher, Publisher.class);
DataObject link = add(PUBLISHER, publisher);
link.set("publisherOrder", 1);
link.save();
}
} }
} }

View File

@ -0,0 +1,129 @@
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.CustomCopy;
import com.arsdigita.cms.ItemCopier;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.metadata.Property;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicationWithPublisherBundle extends PublicationBundle {
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contentttypes.PublicationWithPublisherBundle";
public static final String PUBLISHER = "publisher";
public static final String PUBLISHER_ORDER = "publisherOrder";
public PublicationWithPublisherBundle(final ContentItem primary) {
super(BASE_DATA_OBJECT_TYPE);
Assert.exists(primary, ContentItem.class);
setDefaultLanguage(primary.getLanguage());
setContentType(primary.getContentType());
addInstance(primary);
setName(primary.getName());
}
public PublicationWithPublisherBundle(final OID oid)
throws DataObjectNotFoundException {
super(oid);
}
public PublicationWithPublisherBundle(final BigDecimal id)
throws DataObjectNotFoundException {
super(new OID(BASE_DATA_OBJECT_TYPE, id));
}
public PublicationWithPublisherBundle(final DataObject dobj) {
super(dobj);
}
public PublicationWithPublisherBundle(final String type) {
super(type);
}
@Override
public boolean copyProperty(final CustomCopy source,
final Property property,
final ItemCopier copier) {
final String attribute = property.getName();
if (copier.getCopyType() == ItemCopier.VERSION_COPY) {
final PublicationWithPublisherBundle pubBundle = (PublicationWithPublisherBundle) source;
if (PUBLISHER.equals(attribute)) {
final DataCollection publishers = (DataCollection) pubBundle.get(PUBLISHER);
while(publishers.next()) {
createPublisherAssoc(publishers);
}
return true;
} else {
return super.copyProperty(source, property, copier);
}
} else {
return super.copyProperty(source, property, copier);
}
}
private void createPublisherAssoc(final DataCollection publishers) {
final PublisherBundle draftPublisher = (PublisherBundle) DomainObjectFactory.newInstance(
publishers.getDataObject());
final PublisherBundle livePublisher = (PublisherBundle) draftPublisher.getLiveVersion();
if (livePublisher != null) {
final DataObject link = add(PUBLISHER, livePublisher);
link.set(PUBLISHER_ORDER,
publishers.get("link." + PUBLISHER_ORDER));
link.save();
}
}
public PublisherBundle getPublisher() {
final DataCollection collection = (DataCollection) get(PUBLISHER);
if (collection.size() == 0) {
return null;
} else {
final DataObject dobj;
collection.next();
dobj = collection.getDataObject();
collection.close();
return (PublisherBundle) DomainObjectFactory.newInstance(dobj);
}
}
public void setPublisher(final Publisher publisher) {
final PublisherBundle oldPublisher = getPublisher();
if (oldPublisher != null) {
remove(PUBLISHER, oldPublisher);
}
if (publisher != null) {
Assert.exists(publisher, Publisher.class);
final DataObject link = add(PUBLISHER,
publisher.getPublisherBundle());
link.set(PUBLISHER_ORDER, Integer.valueOf(1));
link.save();
}
}
}

View File

@ -58,6 +58,10 @@ public class Publisher extends GenericOrganizationalUnit {
super(type); super(type);
} }
public PublisherBundle getPublisherBundle() {
return (PublisherBundle) getContentBundle();
}
public String getPublisherName() { public String getPublisherName() {
return (String) get(PUBLISHER_NAME); return (String) get(PUBLISHER_NAME);
} }

View File

@ -0,0 +1,97 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.arsdigita.cms.contenttypes;
import com.arsdigita.cms.ContentBundle;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.CustomCopy;
import com.arsdigita.cms.ItemCopier;
import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.metadata.Property;
import com.arsdigita.util.Assert;
import java.math.BigDecimal;
/**
*
* @author Jens Pelzetter
*/
public class PublisherBundle extends ContentBundle {
public static final String BASE_DATA_OBJECT_TYPE =
"com.arsdigita.cms.contenttypes.PublisherBundle";
public static final String PUBLICATION = "publication";
public PublisherBundle(final ContentItem primary) {
super(BASE_DATA_OBJECT_TYPE);
Assert.exists(primary, ContentItem.class);
setDefaultLanguage(primary.getLanguage());
setContentType(primary.getContentType());
addInstance(primary);
setName(primary.getName());
}
public PublisherBundle(final OID oid) throws DataObjectNotFoundException {
super(oid);
}
public PublisherBundle(final BigDecimal id)
throws DataObjectNotFoundException {
super(new OID(BASE_DATA_OBJECT_TYPE, id));
}
public PublisherBundle(final DataObject dobj) {
super(dobj);
}
public PublisherBundle(final String type) {
super(type);
}
@Override
public boolean copyProperty(final CustomCopy source,
final Property property,
final ItemCopier copier) {
final String attribute = property.getName();
if(copier.getCopyType() == ItemCopier.VERSION_COPY) {
final PublisherBundle publisherBundle = (PublisherBundle) source;
if (PUBLICATION.equals(attribute)) {
final DataCollection publications = (DataCollection) publisherBundle.get(PUBLICATION);
while(publications.next()) {
createPublicationAssoc(publications);
}
return true;
} else {
return super.copyProperty(source, property, copier);
}
} else {
return super.copyProperty(source, property, copier);
}
}
private void createPublicationAssoc(final DataCollection publications) {
final PublicationWithPublisherBundle draftPublication = (PublicationWithPublisherBundle) DomainObjectFactory.newInstance(publications.getDataObject());
final PublicationWithPublisherBundle livePublication = (PublicationWithPublisherBundle) draftPublication.getLiveVersion();
if (livePublication != null) {
final DataObject link = add(PUBLICATION, livePublication);
link.set("publisherOrder",
publications.get("link.publisherOrder"));
link.save();
}
}
}

View File

@ -11,7 +11,7 @@ import com.arsdigita.cms.ui.authoring.CreationSelector;
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
*/ */
public class CollectedVolumeCreate extends PublicationCreate { public class CollectedVolumeCreate extends PublicationWithPublisherCreate {
public CollectedVolumeCreate(final ItemSelectionModel itemModel, public CollectedVolumeCreate(final ItemSelectionModel itemModel,
final CreationSelector parent) { final CreationSelector parent) {

View File

@ -0,0 +1,25 @@
package com.arsdigita.cms.contenttypes.ui;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.PublicationBundle;
import com.arsdigita.cms.contenttypes.PublicationWithPublisherBundle;
import com.arsdigita.cms.ui.authoring.CreationSelector;
/**
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublicationWithPublisherCreate extends PublicationCreate {
public PublicationWithPublisherCreate(final ItemSelectionModel itemModel,
final CreationSelector parent) {
super(itemModel, parent);
}
@Override
public PublicationBundle createBundle(final ContentItem primary) {
return new PublicationWithPublisherBundle(primary);
}
}

View File

@ -17,6 +17,7 @@ import com.arsdigita.cms.Folder;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle;
import com.arsdigita.cms.contenttypes.Publisher; import com.arsdigita.cms.contenttypes.Publisher;
import com.arsdigita.cms.contenttypes.PublisherBundle;
import com.arsdigita.cms.ui.authoring.ApplyWorkflowFormSection; import com.arsdigita.cms.ui.authoring.ApplyWorkflowFormSection;
import com.arsdigita.cms.ui.authoring.CreationSelector; import com.arsdigita.cms.ui.authoring.CreationSelector;
import com.arsdigita.cms.ui.authoring.LanguageWidget; import com.arsdigita.cms.ui.authoring.LanguageWidget;
@ -94,9 +95,7 @@ public class PublisherCreate extends PageCreate {
item.setLaunchDate((Date) data.get(LAUNCH_DATE)); item.setLaunchDate((Date) data.get(LAUNCH_DATE));
} }
final GenericOrganizationalUnitBundle bundle = final PublisherBundle bundle = new PublisherBundle(item);
new GenericOrganizationalUnitBundle(
item);
bundle.setParent(folder); bundle.setParent(folder);
bundle.setContentSection(section); bundle.setContentSection(section);
bundle.save(); bundle.save();