diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitContactCollection.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitContactCollection.java index 741c38b49..1546f142b 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitContactCollection.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitContactCollection.java @@ -19,6 +19,7 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; import org.apache.log4j.Logger; @@ -187,4 +188,39 @@ public class GenericOrganizationalUnitContactCollection extends DomainCollection public GenericContact getContact() { return new GenericContact(m_dataCollection.getDataObject()); } + + public GenericPerson getPerson() { + DataCollection collection; + + collection = (DataCollection) m_dataCollection.getDataObject().get( + GenericContact.PERSON); + + if (collection.size() == 0) { + return null; + } else { + DataObject dobj; + + collection.next(); + dobj = collection.getDataObject(); + + // Close Collection to prevent an open ResultSet + collection.close(); + + return (GenericPerson) DomainObjectFactory.newInstance(dobj); + } + } + + public GenericAddress getAddress() { + return (GenericAddress) DomainObjectFactory.newInstance((DataObject) m_dataCollection. + getDataObject().get( + GenericContact.ADDRESS)); + } + + public GenericContactEntryCollection getContactEntries() { + return new GenericContactEntryCollection((DataCollection) m_dataCollection. + getDataObject().get( + GenericContact.CONTACT_ENTRIES)); + } + + } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPersonCollection.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPersonCollection.java index 22a3bad56..b1e179c24 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPersonCollection.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericOrganizationalUnitPersonCollection.java @@ -22,6 +22,7 @@ import com.arsdigita.domain.DomainCollection; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; +import com.arsdigita.persistence.OID; import java.util.Date; /** @@ -72,6 +73,10 @@ public class GenericOrganizationalUnitPersonCollection extends DomainCollection getDataObject()); } + public OID getOID() { + return m_dataCollection.getDataObject().getOID(); + } + public String getSurname() { return (String) m_dataCollection.getDataObject().get( GenericPerson.SURNAME); @@ -102,8 +107,13 @@ public class GenericOrganizationalUnitPersonCollection extends DomainCollection GenericPerson.GENDER); } + public DataCollection getContacts() { + return (DataCollection) m_dataCollection.getDataObject().get( + GenericPerson.CONTACTS); + } + public DataObject getAlias() { return (DataObject) m_dataCollection.getDataObject().get( GenericPerson.ALIAS); - } + } } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonContactCollection.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonContactCollection.java index 74817551a..d4243efcc 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonContactCollection.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/GenericPersonContactCollection.java @@ -1,6 +1,7 @@ package com.arsdigita.cms.contenttypes; import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; import java.math.BigDecimal; @@ -140,4 +141,37 @@ public class GenericPersonContactCollection extends DomainCollection { public GenericContact getContact() { return new GenericContact(m_dataCollection.getDataObject()); } + + public GenericPerson getPerson() { + DataCollection collection; + + collection = (DataCollection) m_dataCollection.getDataObject().get( + GenericContact.PERSON); + + if (collection.size() == 0) { + return null; + } else { + DataObject dobj; + + collection.next(); + dobj = collection.getDataObject(); + + // Close Collection to prevent an open ResultSet + collection.close(); + + return (GenericPerson) DomainObjectFactory.newInstance(dobj); + } + } + + public GenericAddress getAddress() { + return (GenericAddress) DomainObjectFactory.newInstance((DataObject) m_dataCollection. + getDataObject().get( + GenericContact.ADDRESS)); + } + + public GenericContactEntryCollection getContactEntries() { + return new GenericContactEntryCollection((DataCollection) m_dataCollection. + getDataObject().get( + GenericContact.CONTACT_ENTRIES)); + } } diff --git a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java index 40746b9b4..d6132a232 100644 --- a/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java +++ b/ccm-cms/src/com/arsdigita/cms/contenttypes/ui/GenericOrganizationalUnitPanel.java @@ -108,7 +108,8 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { } protected void generateMembersXML(GenericOrganizationalUnit orga, - Element parent, PageState state) { + Element parent, + PageState state) { GenericOrganizationalUnitPersonCollection persons; persons = orga.getPersons(); long pageNumber = getPageNumber(state); @@ -126,61 +127,68 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { persons.setRange((int) begin + 1, (int) end + 1); while (persons.next()) { - GenericPerson person; - person = persons.getPerson(); - Element personElem = personsElem.newChildElement("member"); - Element title = personElem.newChildElement("title"); - title.setText(person.getTitle()); + //Element title = personElem.newChildElement("title"); + //title.setText(person.getTitle()); - if ((person.getTitlePre() != null) - && !person.getTitlePre().isEmpty()) { + if ((persons.getTitlePre() != null) + && !persons.getTitlePre().isEmpty()) { Element titlePre = personElem.newChildElement("titlePre"); - titlePre.setText(person.getTitlePre()); + titlePre.setText(persons.getTitlePre()); } Element surname = personElem.newChildElement("surname"); - surname.setText(person.getSurname()); + surname.setText(persons.getSurname()); Element givenName = personElem.newChildElement("givenname"); - givenName.setText(person.getGivenName()); + givenName.setText(persons.getGivenName()); - if ((person.getTitlePost() != null) - && !person.getTitlePost().isEmpty()) { + if ((persons.getTitlePost() != null) + && !persons.getTitlePost().isEmpty()) { Element titlePost = personElem.newChildElement("titlePost"); - titlePost.setText(person.getTitlePost()); + titlePost.setText(persons.getTitlePost()); } - GenericPersonContactCollection contacts = person.getContacts(); + GenericPersonContactCollection contacts = + new GenericPersonContactCollection( + persons.getContacts()); if ((contacts != null) && (contacts.size() > 0)) { Element contactsElem = personElem.newChildElement("contacts"); while (contacts.next()) { - GenericContact contact = contacts.getContact(); - generateContactXML(contact, contactsElem, state, contacts. - getContactOrder(), false); + generateContactXML(contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), + contactsElem, + state, + contacts.getContactOrder(), + false); } } } } - protected void generateContactXML(final GenericContact contact, - final Element parent, - final PageState state, - final String order, - final boolean withPerson) { + protected void generateContactXML( + final String contactType, + final GenericPerson person, + final GenericContactEntryCollection contactEntries, + final GenericAddress address, + final Element parent, + final PageState state, + final String order, + final boolean withPerson) { Element contactElem = parent.newChildElement("contact"); contactElem.addAttribute("order", order); - Element title = contactElem.newChildElement("title"); - title.setText(contact.getTitle()); + //Element title = contactElem.newChildElement("title"); + //title.setText(contact.getTitle()); Element typeElem = contactElem.newChildElement("type"); - typeElem.setText(contact.getContactType()); + typeElem.setText(contactType); if (withPerson) { - GenericPerson person = contact.getPerson(); if (person != null) { Element personElem = contactElem.newChildElement("person"); if ((person.getTitlePre() != null) && !person.getTitlePre(). @@ -205,8 +213,6 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { } } - GenericContactEntryCollection contactEntries = - contact.getContactEntries(); if ((contactEntries != null) && (contactEntries.size() > 0)) { Element contactEntriesElem = @@ -232,7 +238,6 @@ public class GenericOrganizationalUnitPanel extends CompoundContentItemPanel { } } - GenericAddress address = contact.getAddress(); if (address != null) { Element addressElem = contactElem.newChildElement( "address"); diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java index 4f2d89c8d..3526895d3 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentPanel.java @@ -64,10 +64,10 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { private String show; private boolean displayDescription = true; private boolean displaySubDepartments = true; - private boolean displayProjects = true; + private boolean displayProjects = true; private Map projectFilters = new LinkedHashMap(); - + public SciDepartmentPanel() { projectFilters.put(TITLE, new TextFilter(TITLE, TITLE)); } @@ -76,7 +76,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { protected String getDefaultShowParam() { return SHOW_DESCRIPTION; } - + @Override protected Class getAllowedClass() { return SciDepartment.class; @@ -207,16 +207,15 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { Element headsElem = subDepartmentElem.newChildElement("heads"); while (heads.next()) { - GenericPerson head = heads.getPerson(); Element headElem = headsElem.newChildElement("head"); Element titlePre = headElem.newChildElement("titlePre"); - titlePre.setText(head.getTitlePre()); + titlePre.setText(heads.getTitlePre()); Element givenName = headElem.newChildElement("givenname"); - givenName.setText(head.getGivenName()); + givenName.setText(heads.getGivenName()); Element surname = headElem.newChildElement("surname"); - surname.setText(head.getSurname()); + surname.setText(heads.getSurname()); Element titlePost = headElem.newChildElement("titlePost"); - titlePost.setText(head.getTitlePost()); + titlePost.setText(heads.getTitlePost()); } } @@ -227,7 +226,10 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { "contacts"); while (contacts.next()) { - generateContactXML(contacts.getContact(), + generateContactXML(contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), contactsElem, state, Integer.toString( @@ -255,9 +257,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { subDepartments = department.getSubDepartments(); while (departmentMembers.next()) { - addMember(departmentMembers.getPerson(), - departmentMembers.getRoleName(), - departmentMembers.getStatus(), + addMember(departmentMembers, members); } @@ -297,9 +297,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { List members = new LinkedList(); while (departmentMembers.next()) { - addMember(departmentMembers.getPerson(), - departmentMembers.getRoleName(), - departmentMembers.getStatus(), + addMember(departmentMembers, members); } @@ -340,7 +338,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { filterEntry.getValue().generateXml(filterElement); } } - + protected void applyProjectFilters( final List filters, final HttpServletRequest request) { @@ -354,15 +352,15 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel { } } } - + protected void generateProjectsXML(final SciDepartment department, final Element parent, final PageState state, final List filters) { Element controls = parent.newChildElement("filterControls"); controls.addAttribute("customName", "sciDepartmentProjects"); - controls.addAttribute("show", show); - + controls.addAttribute("show", show); + if (SciDepartment.getConfig().getOrganizationProjectsMerge()) { List projects; projects = new LinkedList(); diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java index d9896ade0..18d00421e 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationBasePanel.java @@ -29,6 +29,7 @@ import com.arsdigita.cms.contenttypes.SciDepartmentProjectsCollection; import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection; import com.arsdigita.cms.contenttypes.SciProject; import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.OID; import com.arsdigita.xml.Element; import java.util.Calendar; import java.util.Collections; @@ -64,6 +65,7 @@ public abstract class SciOrganizationBasePanel protected class MemberListItem { + private OID oid; private String surname; private String givenName; private String titlePre; @@ -81,7 +83,8 @@ public abstract class SciOrganizationBasePanel /*this.member = member; this.role = role; this.status = status;*/ - this(member.getSurname(), + this(member.getOID(), + member.getSurname(), member.getGivenName(), member.getTitlePre(), member.getTitlePost(), @@ -93,7 +96,8 @@ public abstract class SciOrganizationBasePanel } - public MemberListItem(final String surname, + public MemberListItem(final OID oid, + final String surname, final String givenName, final String titlePre, final String titlePost, @@ -102,6 +106,7 @@ public abstract class SciOrganizationBasePanel final DataCollection contacts, final String role, final String status) { + this.oid = oid; this.surname = surname; this.givenName = givenName; this.titlePre = titlePre; @@ -116,6 +121,10 @@ public abstract class SciOrganizationBasePanel /*public GenericPerson getMember() { return member; }*/ + public OID getOID() { + return oid; + } + public Date getBirthdate() { return birthdate; } @@ -368,7 +377,7 @@ public abstract class SciOrganizationBasePanel memberElem.addAttribute("role", roleName); memberElem.addAttribute("status", status); - //memberElem.addAttribute("oid", person.getOID().toString()); + memberElem.addAttribute("oid", person.getOID().toString()); //Element title = memberElem.newChildElement("title"); //title.setText(person.getTitle()); @@ -401,7 +410,10 @@ public abstract class SciOrganizationBasePanel while (contacts.next()) { generateContactXML( - contacts.getContact(), + contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), contactsElem, state, contacts.getContactOrder(), @@ -453,7 +465,10 @@ public abstract class SciOrganizationBasePanel while (contacts.next()) { generateContactXML( - contacts.getContact(), + contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), contactsElem, state, contacts.getContactOrder(), @@ -462,6 +477,50 @@ public abstract class SciOrganizationBasePanel } } + protected void addMember( + final GenericOrganizationalUnitPersonCollection persons, + final List members) { + addMember(persons.getOID(), + persons.getSurname(), + persons.getGivenName(), + persons.getTitlePre(), + persons.getTitlePost(), + persons.getBirthdate(), + persons.getGender(), + persons.getContacts(), + persons.getRoleName(), + persons.getStatus(), + members); + } + + private void addMember(final OID oid, + final String surname, + final String givenName, + final String titlePre, + final String titlePost, + final Date birthdate, + final String gender, + final DataCollection contacts, + final String role, + final String status, + final List members) { + MemberListItem listItem = new MemberListItem(oid, + surname, + givenName, + titlePre, + titlePost, + birthdate, + gender, + contacts, + role, + status); + + if (!members.contains(listItem)) { + members.add(listItem); + } + } + + @Deprecated protected void addMember(final GenericPerson person, final String roleName, final String status, @@ -486,7 +545,14 @@ public abstract class SciOrganizationBasePanel } while (departmentMembers.next()) { - addMember(departmentMembers.getPerson(), + addMember(departmentMembers.getOID(), + departmentMembers.getSurname(), + departmentMembers.getGivenName(), + departmentMembers.getTitlePre(), + departmentMembers.getTitlePost(), + departmentMembers.getBirthdate(), + departmentMembers.getGender(), + null, departmentMembers.getRoleName(), departmentMembers.getStatus(), members); @@ -569,7 +635,15 @@ public abstract class SciOrganizationBasePanel Element membersElem = projectElem.newChildElement("members"); while (members.next()) { - generateMemberXML(members.getPerson(), + generateMemberXML(new MemberListItem(members.getOID(), + members.getSurname(), + members.getGivenName(), + members.getTitlePre(), + members.getTitlePost(), + members.getBirthdate(), + members.getGender(), + null, members.getRoleName(), + members.getStatus()), membersElem, members.getRoleName(), members.getStatus(), @@ -584,7 +658,10 @@ public abstract class SciOrganizationBasePanel Element contactsElem = projectElem.newChildElement("contacts"); while (contacts.next()) { - generateContactXML(contacts.getContact(), + generateContactXML(contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), contactsElem, state, Integer.toString(contacts.getContactOrder()), diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java index bf74efe94..877d02af7 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciOrganizationPanel.java @@ -24,7 +24,6 @@ import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitContactCollection; import com.arsdigita.cms.contenttypes.GenericOrganizationalUnitPersonCollection; -import com.arsdigita.cms.contenttypes.GenericPerson; import com.arsdigita.cms.contenttypes.SciDepartment; import com.arsdigita.cms.contenttypes.SciDepartmentProjectsCollection; import com.arsdigita.cms.contenttypes.SciDepartmentSubDepartmentsCollection; @@ -200,17 +199,16 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { if (heads.size() > 0) { Element headsElem = departmentElem.newChildElement("heads"); - while (heads.next()) { - GenericPerson head = heads.getPerson(); + while (heads.next()) { Element headElem = headsElem.newChildElement("head"); Element titlePre = headElem.newChildElement("titlePre"); - titlePre.setText(head.getTitlePre()); + titlePre.setText(heads.getTitlePre()); Element givenName = headElem.newChildElement("givenname"); - givenName.setText(head.getGivenName()); + givenName.setText(heads.getGivenName()); Element surname = headElem.newChildElement("surname"); - surname.setText(head.getSurname()); + surname.setText(heads.getSurname()); Element titlePost = headElem.newChildElement("titlePost"); - titlePost.setText(head.getTitlePost()); + titlePost.setText(heads.getTitlePost()); } } @@ -221,7 +219,10 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { departmentElem.newChildElement("contacts"); while (contacts.next()) { - generateContactXML(contacts.getContact(), + generateContactXML(contacts.getContactType(), + contacts.getPerson(), + contacts.getContactEntries(), + contacts.getAddress(), contactsElem, state, Integer.toString( @@ -246,9 +247,7 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { } while (departmentsMembers.next()) { - addMember(departmentsMembers.getPerson(), - departmentsMembers.getRoleName(), - departmentsMembers.getStatus(), + addMember(departmentsMembers, members); } @@ -281,9 +280,7 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { departments = orga.getDepartments(); while (orgaMembers.next()) { - addMember(orgaMembers.getPerson(), - orgaMembers.getRoleName(), - orgaMembers.getStatus(), + addMember(orgaMembers, members); } @@ -300,9 +297,7 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel { List members = new LinkedList(); while (orgaMembers.next()) { - addMember(orgaMembers.getPerson(), - orgaMembers.getRoleName(), - orgaMembers.getStatus(), + addMember(orgaMembers, members); } diff --git a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java index 248485405..269ef5052 100644 --- a/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java +++ b/ccm-sci-types-organization/src/com/arsdigita/cms/contenttypes/ui/SciProjectPanel.java @@ -146,9 +146,7 @@ public class SciProjectPanel extends SciOrganizationBasePanel { projectMembers = subProject.getPersons(); while (projectMembers.next()) { - addMember(projectMembers.getPerson(), - projectMembers.getRoleName(), - projectMembers.getStatus(), + addMember(projectMembers, members); } @@ -173,9 +171,7 @@ public class SciProjectPanel extends SciOrganizationBasePanel { members = new LinkedList(); while (projectMembers.next()) { - addMember(projectMembers.getPerson(), - projectMembers.getRoleName(), - projectMembers.getStatus(), + addMember(projectMembers, members); }