Publizieren Assoziation GenericOrganizationalUnit <-> GenericPerson

git-svn-id: https://svn.libreccm.org/ccm/trunk@1563 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2012-03-30 08:30:39 +00:00
parent 66eddde804
commit ac746fde45
2 changed files with 109 additions and 0 deletions

View File

@ -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();
}
}
}

View File

@ -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();
}
}
}