Optimierung Collections

git-svn-id: https://svn.libreccm.org/ccm/trunk@1122 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-09-25 14:21:02 +00:00
parent e6f87f951e
commit e21b192ba1
8 changed files with 232 additions and 81 deletions

View File

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

View File

@ -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,6 +107,11 @@ 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);

View File

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

View File

@ -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");

View File

@ -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<MemberListItem> members = new LinkedList<MemberListItem>();
while (departmentMembers.next()) {
addMember(departmentMembers.getPerson(),
departmentMembers.getRoleName(),
departmentMembers.getStatus(),
addMember(departmentMembers,
members);
}
@ -361,7 +359,7 @@ public class SciDepartmentPanel extends SciOrganizationBasePanel {
final List<String> filters) {
Element controls = parent.newChildElement("filterControls");
controls.addAttribute("customName", "sciDepartmentProjects");
controls.addAttribute("show", show);
controls.addAttribute("show", show);
if (SciDepartment.getConfig().getOrganizationProjectsMerge()) {
List<SciProject> projects;

View File

@ -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<MemberListItem> 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<MemberListItem> 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()),

View File

@ -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;
@ -201,16 +200,15 @@ public class SciOrganizationPanel extends SciOrganizationBasePanel {
Element headsElem = departmentElem.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());
}
}
@ -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<MemberListItem> members = new LinkedList<MemberListItem>();
while (orgaMembers.next()) {
addMember(orgaMembers.getPerson(),
orgaMembers.getRoleName(),
orgaMembers.getStatus(),
addMember(orgaMembers,
members);
}

View File

@ -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<MemberListItem>();
while (projectMembers.next()) {
addMember(projectMembers.getPerson(),
projectMembers.getRoleName(),
projectMembers.getStatus(),
addMember(projectMembers,
members);
}