Assoziation PublicationWithPublisher <-> Publisher optimiert (Ticket #1194)
git-svn-id: https://svn.libreccm.org/ccm/trunk@1573 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
d3749d6919
commit
f80728caa4
|
|
@ -29,7 +29,7 @@ object type CollectedVolume extends PublicationWithPublisher {
|
|||
//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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,16 +33,20 @@ object type PublicationWithPublisher extends Publication {
|
|||
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 {
|
||||
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,
|
||||
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,
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,4 +32,8 @@ object type Publisher extends GenericOrganizationalUnit {
|
|||
reference key (ct_publisher.publisher_id);
|
||||
}
|
||||
|
||||
object type PublisherBundle extends GenericOrganizationalUnitBundle {
|
||||
reference key (ct_publisher_bundles.bundle_id);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
objectType="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
|
||||
labelKey="publications.ui.monograph_properties.title"
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
objectType="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
|
||||
labelKey="publications.ui.proceedings_properties.title"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
classname="com.arsdigita.cms.contenttypes.PublicationWithPublisher"
|
||||
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
|
||||
labelKey="publications.ui.publication_with_publishers_properties.title"
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public class PublicationBundle extends ContentBundle {
|
|||
final ItemCopier copier) {
|
||||
final String attribute = property.getName();
|
||||
if (copier.getCopyType() == ItemCopier.VERSION_COPY) {
|
||||
final Publication pubBundle = (Publication) source;
|
||||
final PublicationBundle pubBundle = (PublicationBundle) source;
|
||||
|
||||
if (AUTHORS.equals(attribute)) {
|
||||
final DataCollection authors = (DataCollection) pubBundle.get(
|
||||
|
|
|
|||
|
|
@ -83,6 +83,10 @@ public class PublicationWithPublisher extends Publication {
|
|||
super(type);
|
||||
}
|
||||
|
||||
public PublicationWithPublisherBundle getPublicationWithPublisherBundle() {
|
||||
return (PublicationWithPublisherBundle) getContentBundle();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ISBN of the publication.
|
||||
*
|
||||
|
|
@ -140,21 +144,29 @@ public class PublicationWithPublisher extends Publication {
|
|||
* @return The publisher of the publication.
|
||||
*/
|
||||
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);
|
||||
|
||||
if (0 == collection.size()) {
|
||||
return null;
|
||||
} else {
|
||||
DataObject dobj;
|
||||
|
||||
collection.next();
|
||||
dobj = collection.getDataObject();
|
||||
collection.close();
|
||||
|
||||
return (Publisher) DomainObjectFactory.newInstance(dobj);
|
||||
return (Publisher) getPublicationWithPublisherBundle().getPublisher().
|
||||
getPrimaryInstance();
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
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();
|
||||
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();
|
||||
}
|
||||
getPublicationWithPublisherBundle().setPublisher(publisher);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -58,6 +58,10 @@ public class Publisher extends GenericOrganizationalUnit {
|
|||
super(type);
|
||||
}
|
||||
|
||||
public PublisherBundle getPublisherBundle() {
|
||||
return (PublisherBundle) getContentBundle();
|
||||
}
|
||||
|
||||
public String getPublisherName() {
|
||||
return (String) get(PUBLISHER_NAME);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,7 @@ import com.arsdigita.cms.ui.authoring.CreationSelector;
|
|||
* @author Jens Pelzetter
|
||||
* @version $Id$
|
||||
*/
|
||||
public class CollectedVolumeCreate extends PublicationCreate {
|
||||
public class CollectedVolumeCreate extends PublicationWithPublisherCreate {
|
||||
|
||||
public CollectedVolumeCreate(final ItemSelectionModel itemModel,
|
||||
final CreationSelector parent) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ import com.arsdigita.cms.Folder;
|
|||
import com.arsdigita.cms.ItemSelectionModel;
|
||||
import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitBundle;
|
||||
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.CreationSelector;
|
||||
import com.arsdigita.cms.ui.authoring.LanguageWidget;
|
||||
|
|
@ -94,9 +95,7 @@ public class PublisherCreate extends PageCreate {
|
|||
item.setLaunchDate((Date) data.get(LAUNCH_DATE));
|
||||
}
|
||||
|
||||
final GenericOrganizationalUnitBundle bundle =
|
||||
new GenericOrganizationalUnitBundle(
|
||||
item);
|
||||
final PublisherBundle bundle = new PublisherBundle(item);
|
||||
bundle.setParent(folder);
|
||||
bundle.setContentSection(section);
|
||||
bundle.save();
|
||||
|
|
|
|||
Loading…
Reference in New Issue