diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitBundle.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitBundle.java index 10ac7756d..bd02fff4e 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitBundle.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitBundle.java @@ -2,10 +2,14 @@ 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; @@ -106,4 +110,79 @@ public class GenericOrganizationalUnitBundle extends ContentBundle { public boolean hasContacts() { return !this.getContacts().isEmpty(); } + + @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 GenericOrganizationalUnitBundle orgaBundle = (GenericOrganizationalUnitBundle) source; + + if (CONTACTS.equals(attribute)) { + final DataCollection contacts = (DataCollection) orgaBundle.get( + CONTACTS); + + while (contacts.next()) { + createContactAssoc(contacts); + } + + return true; + } else if (PERSONS.equals(attribute)) { + final DataCollection persons = (DataCollection) orgaBundle.get( + PERSONS); + + while (persons.next()) { + createPersonAssoc(persons); + } + + return true; + } else { + return super.copyProperty(source, property, copier); + } + } else { + return super.copyProperty(source, property, copier); + } + } + + private void createContactAssoc(final DataCollection contacts) { + final GenericContactBundle draftContact = (GenericContactBundle) DomainObjectFactory. + newInstance(contacts.getDataObject()); + final GenericContactBundle liveContact = (GenericContactBundle) draftContact. + getLiveVersion(); + + if (liveContact != null) { + final DataObject link = add(CONTACTS, liveContact); + + link.set(GenericOrganizationalUnitContactCollection.CONTACT_TYPE, + contacts.get( + GenericOrganizationalUnitContactCollection.LINK_CONTACT_TYPE)); + link.set(GenericOrganizationalUnitContactCollection.CONTACT_ORDER, + contacts.get( + GenericOrganizationalUnitContactCollection.LINK_CONTACT_ORDER)); + + link.save(); + } + } + + private void createPersonAssoc(final DataCollection persons) { + final GenericPersonBundle draftPerson = (GenericPersonBundle) DomainObjectFactory. + newInstance(persons.getDataObject()); + final GenericPersonBundle livePerson = (GenericPersonBundle) draftPerson. + getLiveVersion(); + + if (livePerson != null) { + final DataObject link = add(PERSONS, livePerson); + + link.set(GenericOrganizationalUnitPersonCollection.PERSON_ROLE, + persons.get( + GenericOrganizationalUnitPersonCollection.LINK_PERSON_ROLE)); + link.set(GenericOrganizationalUnitPersonCollection.STATUS, + persons.get( + GenericOrganizationalUnitPersonCollection.LINK_STATUS)); + + link.save(); + } + + } } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonBundle.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonBundle.java index d3b9591d8..599ae347a 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonBundle.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonBundle.java @@ -99,6 +99,15 @@ public class GenericPersonBundle createContactAssoc(contacts); } + return true; + } else if ("organizationalunit".equals(attribute)) { + final DataCollection orgaunits = (DataCollection) personBundle. + get("organizationalunit"); + + while (orgaunits.next()) { + createOrgaUnitAssoc(orgaunits); + } + return true; } else { return super.copyProperty(source, property, copier); @@ -127,4 +136,25 @@ public class GenericPersonBundle link.save(); } } + + private void createOrgaUnitAssoc(final DataCollection orgaunits) { + final GenericOrganizationalUnitBundle draftOrga = (GenericOrganizationalUnitBundle) DomainObjectFactory. + newInstance(orgaunits.getDataObject()); + final GenericOrganizationalUnitBundle liveOrga = (GenericOrganizationalUnitBundle) draftOrga. + getLiveVersion(); + + if (liveOrga != null) { + final DataObject link = add("organizatialunit", liveOrga); + + link.set(GenericOrganizationalUnitPersonCollection.PERSON_ROLE, + orgaunits.get( + GenericOrganizationalUnitPersonCollection.LINK_PERSON_ROLE)); + link.set(GenericOrganizationalUnitPersonCollection.STATUS, + orgaunits.get( + GenericOrganizationalUnitPersonCollection.LINK_STATUS)); + + link.save(); + } + + } }