From 39e6af24d1483a82c5ec59d1c51b4e975aa53295 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 25 Apr 2012 17:28:24 +0000 Subject: [PATCH] - Verbesserungen am SciDepartmentsMemberTab - SciDepartmentProjectsTab funktioniert jetzt git-svn-id: https://svn.libreccm.org/ccm/trunk@1615 8810af33-2d31-482b-a856-94f89814c4df --- .../GenericOrganizationalUnit.pdl | 4 +- .../ui/SciDepartmentMembersTab.java | 18 ++-- .../ui/SciDepartmentProjectsTab.java | 69 +++++++++---- .../arsdigita/content-types/SciProject.pdl | 99 ++----------------- 4 files changed, 68 insertions(+), 122 deletions(-) diff --git a/ccm-cms/pdl/com/arsdigita/content-types/GenericOrganizationalUnit.pdl b/ccm-cms/pdl/com/arsdigita/content-types/GenericOrganizationalUnit.pdl index 3a42335b7..e472d6554 100644 --- a/ccm-cms/pdl/com/arsdigita/content-types/GenericOrganizationalUnit.pdl +++ b/ccm-cms/pdl/com/arsdigita/content-types/GenericOrganizationalUnit.pdl @@ -137,7 +137,7 @@ query getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType{ cms_items.name as orgaunit_name from cms_orgaunit_bundles join cms_items on cms_orgaunit_bundles.bundle_id = cms_items.item_id - where cms_orgaunit_bundles.bundle_id = 17003 + where cms_orgaunit_bundles.bundle_id = :orgaunitId union all select ou.bundle_id as orgaunit_id, cms_items.name as orgaunit_name @@ -178,7 +178,7 @@ query getIdsOfMembersOfOrgaUnits { from cms_person_bundles join cms_organizationalunits_person_map on cms_person_bundles.bundle_id = cms_organizationalunits_person_map.person_id join cms_items on cms_person_bundles.bundle_id = cms_items.item_id - where cms_organizationalunits_person_map.organizationalunit_id in :orgaunitIds + where cms_organizationalunits_person_map.organizationalunit_id in :orgaunitIds } map { memberId = cms_person_bundles.bundle_id; orgaunitId = cms_organizationalunits_person_map.organizationalunit_id; diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java index 395e78fcc..a0d3aa325 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentMembersTab.java @@ -12,13 +12,11 @@ import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.globalization.Globalization; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataQuery; -import com.arsdigita.persistence.FilterFactory; import com.arsdigita.persistence.SessionManager; import com.arsdigita.xml.Element; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.logging.Filter; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; @@ -66,7 +64,7 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { return true; } else if (config.isMergingMembers()) { final DataQuery persons = getData(orgaunit, state); - return persons.isEmpty(); + return (persons != null) && persons.isEmpty(); } else { return false; } @@ -77,7 +75,7 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); - final DataQuery persons = getData(orgaunit, state); + final DataCollection persons = getData(orgaunit, state); final HttpServletRequest request = state.getRequest(); //applyStatusFilter(persons, request); @@ -114,7 +112,7 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { paginator.generateXml(depMembersElem); while (persons.next()) { - generateMemberXml((BigDecimal) persons.get("id"), + generateMemberXml(new GenericPerson(persons.getDataObject()), depMembersElem, state); } @@ -125,8 +123,8 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { System.currentTimeMillis() - start)); } - protected DataQuery getData(final GenericOrganizationalUnit orgaunit, - final PageState state) { + protected DataCollection getData(final GenericOrganizationalUnit orgaunit, + final PageState state) { final long start = System.currentTimeMillis(); if (!(orgaunit instanceof SciDepartment)) { @@ -170,11 +168,11 @@ public class SciDepartmentMembersTab implements GenericOrgaUnitTab { } final DataCollection membersQuery = SessionManager.getSession().retrieve(GenericPerson.BASE_DATA_OBJECT_TYPE); - if (filterBuilder.length() > 0) { - membersQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); - } else { + if (filterBuilder.length() == 0) { //No member return null to indicate return null; + } else { + membersQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); } membersQuery.addOrder(GenericPerson.SURNAME); diff --git a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java index 5a29926ee..b5c84d8ed 100644 --- a/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java +++ b/ccm-sci-types-department/src/com/arsdigita/cms/contenttypes/ui/SciDepartmentProjectsTab.java @@ -13,7 +13,12 @@ import com.arsdigita.cms.contenttypes.ui.panels.TextFilter; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.globalization.Globalization; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataQuery; +import com.arsdigita.persistence.Filter; +import com.arsdigita.persistence.FilterFactory; import com.arsdigita.persistence.OID; import com.arsdigita.persistence.SessionManager; import com.arsdigita.xml.Element; @@ -72,6 +77,8 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { public boolean hasData(final GenericOrganizationalUnit orgaunit, final PageState state) { final long start = System.currentTimeMillis(); + + //Check if SciProject content type is installed final ContentTypeCollection types = ContentType.getAllContentTypes(); types.addFilter( "associatedObjectType = 'com.arsdigita.cms.contenttypes.SciProject'"); @@ -81,7 +88,9 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { } types.close(); - final boolean result = !getData(orgaunit).isEmpty(); + //Check if we have projects to show + final DataCollection data = getData(orgaunit); + final boolean result = (data != null) && !data.isEmpty(); logger.debug(String.format("Needed %d ms to determine if department " + "'%s' has projects.", @@ -95,7 +104,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); - final DataQuery projects = getData(orgaunit); + final DataCollection projects = getData(orgaunit); final HttpServletRequest request = state.getRequest(); final Element depProjectsElem = parent.newChildElement( @@ -138,9 +147,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { titleFilter.generateXml(filtersElem); - } else { - //projects.addOrder("title"); - + } else { applyStatusFilter(projects, request); applyTitleFilter(projects, request); @@ -171,7 +178,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { } while (projects.next()) { - generateProjectXml((BigDecimal) projects.get("projectId"), + generateProjectXml((BigDecimal) projects.get("id"), depProjectsElem, state); } @@ -182,9 +189,9 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { System.currentTimeMillis() - start)); } - protected DataQuery getData(final GenericOrganizationalUnit orgaunit) { + protected DataCollection getData(final GenericOrganizationalUnit orgaunit) { final long start = System.currentTimeMillis(); - + if (!(orgaunit instanceof SciDepartment)) { throw new IllegalArgumentException(String.format( "This tab can only process instances of " @@ -193,10 +200,9 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { orgaunit.getClass().getName())); } - final DataQuery projectsQuery = SessionManager.getSession(). + final DataQuery projectBundlesQuery = SessionManager.getSession(). retrieveQuery( "com.arsdigita.cms.contenttypes.getIdsOfProjectsOfOrgaUnit"); - //final StringBuffer projectsFilter = new StringBuffer(); final List orgaunitIds = new ArrayList(); if (config.isMergingProjects()) { @@ -204,27 +210,47 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { SessionManager.getSession().retrieveQuery( "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); subDepartmentsQuery.setParameter("orgaunitId", - orgaunit.getID().toString()); + orgaunit.getContentBundle().getID().toString()); subDepartmentsQuery.setParameter("assocType", SciDepartmentSubDepartmentsStep.ASSOC_TYPE); while (subDepartmentsQuery.next()) { - /*if (projectsFilter.length() > 0) { - projectsFilter.append(" or "); - } - projectsFilter.append(String.format("orgaunitId = %s", - subDepartmentsQuery.get( - "orgaunitId").toString()));*/ orgaunitIds.add(subDepartmentsQuery.get("orgaunitId").toString()); } } else { - //projectsFilter.append(String.format("orgaunitId = %s", - // orgaunit.getID().toString())); orgaunitIds.add(orgaunit.getID().toString()); } + projectBundlesQuery.setParameter("orgaunitIds", orgaunitIds); + + final StringBuilder filterBuilder = new StringBuilder(); + while (projectBundlesQuery.next()) { + if (filterBuilder.length() > 0) { + filterBuilder.append(","); + } + filterBuilder.append(projectBundlesQuery.get("projectId").toString()); + } + final DataCollection projectsQuery = SessionManager.getSession().retrieve( + "com.arsdigita.cms.contenttypes.SciProject"); - //projectsQuery.addFilter(projectsFilter.toString()); - projectsQuery.setParameter("orgaunitIds", orgaunitIds); + if (filterBuilder.length() == 0) { + //No Projects, return null to indicate + return null; + } else { + projectsQuery.addFilter(String.format("parent.id in (%s)", filterBuilder.toString())); + } + + if (Kernel.getConfig().languageIndependentItems()) { + final FilterFactory filterFactory = projectsQuery.getFilterFactory(); + final Filter filter = filterFactory.or(). + addFilter(filterFactory.equals("language", GlobalizationHelper.getNegotiatedLocale().getLanguage())). + addFilter(filterFactory.and(). + addFilter(filterFactory.equals("language", GlobalizationHelper.LANG_INDEPENDENT)). + addFilter(filterFactory.notIn("parent", "com.arsdigita.navigation.getParentIDsOfMatchedItems").set( + "language", GlobalizationHelper.getNegotiatedLocale().getLanguage()))); + projectsQuery.addFilter(filter); + } else { + projectsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().getLanguage()); + } logger.debug(String.format( "Got projects of department '%s'" @@ -232,6 +258,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { orgaunit.getName(), System.currentTimeMillis() - start, config.isMergingProjects())); + return projectsQuery; } diff --git a/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl b/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl index d25ae03cf..a7e53b223 100644 --- a/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl +++ b/ccm-sci-types-project/pdl/com/arsdigita/content-types/SciProject.pdl @@ -26,100 +26,21 @@ object type SciProjectBundle extends GenericOrganizationalUnitBundle { query getIdsOfProjectsOfOrgaUnit { BigDecimal projectId; BigDecimal orgaunitId; - String title; - Date projectBegin; - Date projectEnd; + String name; do { - select distinct on (ct_sci_projects.project_id) ct_sci_projects.project_id, cms_pages.title, ct_sci_projects.projectbegin, ct_sci_projects.projectend, cms_organizationalunits_hierarchy_map.superior_orgaunit_id - from ct_sci_projects - join cms_pages on ct_sci_projects.project_id = cms_pages.item_id - join cms_organizationalunits_hierarchy_map on ct_sci_projects.project_id = cms_organizationalunits_hierarchy_map.subordinate_orgaunit_id + select distinct on (ct_sci_project_bundles.bundle_id) + ct_sci_project_bundles.bundle_id, + cms_items.name, + cms_organizationalunits_hierarchy_map.superior_orgaunit_id + from ct_sci_project_bundles + join cms_items on ct_sci_project_bundles.bundle_id = ct_sci_project_bundles.bundle_id + join cms_organizationalunits_hierarchy_map on ct_sci_project_bundles.bundle_id = cms_organizationalunits_hierarchy_map.subordinate_orgaunit_id where cms_organizationalunits_hierarchy_map.assoc_type = 'ProjectOf' and cms_organizationalunits_hierarchy_map.superior_orgaunit_id in :orgaunitIds } map { - projectId = ct_sci_projects.project_id; + projectId = ct_sci_project_bundles.bundle_id; orgaunitId = cms_organizationalunits_hierarchy_map.superior_orgaunit_id; - title = cms_pages.title; - projectBegin = ct_sci_projects.projectbegin; - projectEnd = ct_sci_projects.projectend; + name = cms_items.name; } } - -// Some queries from old SciProjects, from ccm-sci-types-organization module -//Not used anywhere. Kept for reference. -//query getIdsOfContactsOfSciProject { - // BigDecimal contactId; -// - // do { - // select cms_organizationalunits_contact_map.contact_id - // from cms_organizationalunits_contact_map - // where cms_organizationalunits_contact_map.organizationalunit_id = :project - // } map { - // contactId = cms_organizationalunits_contact_map.contact_id; - // } -//} - -//query getIdsOfSubProjectsOfSciProject { -// BigDecimal projectId; -// -// do { -// select cms_organizationalunit_hierarchy_map.subordinate_orgaunit_id -// from cms_organizationalunit_hierarchy_map -// where cms_organizationalunit_hierarchy_map.superior_orgaunit_id = :project -// and cms_organizationalunit_hierarchy_map.assoc_type = 'subproject' -// } map { -// projectId = ct_sciorga_projects_subprojects_map.project_id; -// } -//} - -//query getIdsOfMembersOfSciProject { -// BigDecimal memberId; -// -// do { -// select cms_organizationalunits_person_map.person_id -// from cms_organizationalunits_person_map -// where cms_organizationalunits_person_map.organizationalunit_id = :project -// } map { -// memberId = cms_organizationalunits_person_map.person_id; -// } -//} - -//query getIdsOfActiveMembersOfSciProject { -// BigDecimal memberId; -// -// do { -// select cms_organizationalunits_person_map.person_id -// from cms_organizationalunits_person_map -// where cms_organizationalunits_person_map.organizationalunit_id = :project -// and cms_organizationalunits_person_map.status = 'active' -// } map { -// memberId = cms_organizationalunits_person_map.person_id; -// } -//} -// -//query getIdsOfAssociatedMembersOfSciProject { -// BigDecimal memberId; -// -// do { -// select cms_organizationalunits_person_map.person_id -// from cms_organizationalunits_person_map -// where cms_organizationalunits_person_map.organizationalunit_id = :project -// and cms_organizationalunits_person_map.status = 'associated' -// } map { -// memberId = cms_organizationalunits_person_map.personId; -//// } -//} - -//query getIdsOfFormerMembersOfSciProject { -// BigDecimal memberId; -// -// do { -// select cms_organizationalunits_person_map.cms_persons.person_id -// from cms_organizationalunits_person_map -// where cms_organizationalunits_person_map.organizationalunit_id = :project -// and (cms_organizationalunits_person_map.status = 'former' or cms_organizationalunits_person_map.status = 'associatedFormer') -// } map { -// memberId = cms_organizationalunits_person_map.personId; -// } -//}