It is now possible to show all projects of a department (per configuration).

git-svn-id: https://svn.libreccm.org/ccm/trunk@2770 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2014-07-22 13:01:32 +00:00
parent 9b70cf8018
commit a10f25b855
3 changed files with 98 additions and 81 deletions

View File

@ -50,16 +50,16 @@ import org.apache.log4j.Logger;
/** /**
* This tab displays all SciProject items which are associated with an SciDepartment. * This tab displays all SciProject items which are associated with an SciDepartment.
* *
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
*/ */
public class SciDepartmentProjectsTab implements GenericOrgaUnitTab { public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
private final Logger logger = Logger.getLogger( private final Logger logger = Logger.getLogger(
SciDepartmentProjectsTab.class); SciDepartmentProjectsTab.class);
private static final SciDepartmentProjectsTabConfig config private static final SciDepartmentProjectsTabConfig config
= new SciDepartmentProjectsTabConfig(); = new SciDepartmentProjectsTabConfig();
private static final String STATUS_PARAM = "projectStatus"; private static final String STATUS_PARAM = "projectStatus";
private static final String TITLE_PARAM = "projectTitle"; private static final String TITLE_PARAM = "projectTitle";
private final CompareFilter statusFilter = new CompareFilter(STATUS_PARAM, private final CompareFilter statusFilter = new CompareFilter(STATUS_PARAM,
@ -111,7 +111,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
//Check if SciProject content type is installed //Check if SciProject content type is installed
final ContentTypeCollection types = ContentType.getAllContentTypes(); final ContentTypeCollection types = ContentType.getAllContentTypes();
types.addFilter( types.addFilter(
"associatedObjectType = 'com.arsdigita.cms.contenttypes.SciProject'"); "associatedObjectType = 'com.arsdigita.cms.contenttypes.SciProject'");
if (types.size() == 0) { if (types.size() == 0) {
return false; return false;
@ -123,7 +123,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
final boolean result = (data != null) && !data.isEmpty(); final boolean result = (data != null) && !data.isEmpty();
logger.debug(String.format("Needed %d ms to determine if department " logger.debug(String.format("Needed %d ms to determine if department "
+ "'%s' has projects.", + "'%s' has projects.",
System.currentTimeMillis() - start, System.currentTimeMillis() - start,
orgaunit.getName())); orgaunit.getName()));
@ -139,18 +139,18 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
final HttpServletRequest request = state.getRequest(); final HttpServletRequest request = state.getRequest();
final Element depProjectsElem = parent.newChildElement( final Element depProjectsElem = parent.newChildElement(
"departmentProjects"); "departmentProjects");
final Element filtersElem = depProjectsElem.newChildElement( final Element filtersElem = depProjectsElem.newChildElement(
"filters"); "filters");
projects.addOrder("case when (projectBegin is null) " projects.addOrder("case when (projectBegin is null) "
+ "then '0001-01-01' " + "then '0001-01-01' "
+ "else projectBegin " + "else projectBegin "
+ "end desc"); + "end desc");
projects.addOrder("case when (projectEnd is null) " projects.addOrder("case when (projectEnd is null) "
+ "then '0001-01-01' " + "then '0001-01-01' "
+ "else projectEnd " + "else projectEnd "
+ "end desc"); + "end desc");
projects.addOrder("title asc"); projects.addOrder("title asc");
if (((Globalization.decodeParameter(request, STATUS_PARAM) == null) if (((Globalization.decodeParameter(request, STATUS_PARAM) == null)
@ -158,9 +158,9 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
isEmpty() isEmpty()
|| CompareFilter.NONE.equals( || CompareFilter.NONE.equals(
Globalization.decodeParameter(request, STATUS_PARAM))) Globalization.decodeParameter(request, STATUS_PARAM)))
&& ((Globalization.decodeParameter(request, TITLE_PARAM) == null) && ((Globalization.decodeParameter(request, TITLE_PARAM) == null)
|| Globalization.decodeParameter(request, TITLE_PARAM).trim(). || Globalization.decodeParameter(request, TITLE_PARAM).trim().
isEmpty())) { isEmpty())) {
statusFilter.generateXml(filtersElem); statusFilter.generateXml(filtersElem);
@ -172,8 +172,10 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
now.get(Calendar.MONTH) + 1, now.get(Calendar.MONTH) + 1,
now.get(Calendar.DAY_OF_MONTH)); now.get(Calendar.DAY_OF_MONTH));
projects.addFilter(String.format( if (!config.isShowingAllProjects()) {
projects.addFilter(String.format(
"(projectEnd >= '%s') or (projectEnd is null)", today)); "(projectEnd >= '%s') or (projectEnd is null)", today));
}
projects.setRange(1, config.getGreetingSize() + 1); projects.setRange(1, config.getGreetingSize() + 1);
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
@ -196,10 +198,10 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
config.getPageSize()); config.getPageSize());
if ((paginator.getPageCount() > config.getEnableSearchLimit()) if ((paginator.getPageCount() > config.getEnableSearchLimit())
|| ((Globalization.decodeParameter(request, TITLE_PARAM) || ((Globalization.decodeParameter(request, TITLE_PARAM)
!= null) != null)
|| !(Globalization.decodeParameter(request, TITLE_PARAM). || !(Globalization.decodeParameter(request, TITLE_PARAM).
trim().isEmpty()))) { trim().isEmpty()))) {
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
} }
@ -215,7 +217,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
} }
logger.debug(String.format("Generated projects list of department '%s' " logger.debug(String.format("Generated projects list of department '%s' "
+ "in %d ms.", + "in %d ms.",
orgaunit.getName(), orgaunit.getName(),
System.currentTimeMillis() - start)); System.currentTimeMillis() - start));
} }
@ -225,20 +227,20 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
if (!(orgaunit instanceof SciDepartment)) { if (!(orgaunit instanceof SciDepartment)) {
throw new IllegalArgumentException(String.format( throw new IllegalArgumentException(String.format(
"This tab can only process instances of " "This tab can only process instances of "
+ "'com.arsdigita.cms.contenttypes.SciDepartment'. Provided " + "'com.arsdigita.cms.contenttypes.SciDepartment'. Provided "
+ "object is of type '%s'", + "object is of type '%s'",
orgaunit.getClass().getName())); orgaunit.getClass().getName()));
} }
final DataQuery projectBundlesQuery = SessionManager.getSession(). final DataQuery projectBundlesQuery = SessionManager.getSession().
retrieveQuery( retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfProjectsOfOrgaUnit"); "com.arsdigita.cms.contenttypes.getIdsOfProjectsOfOrgaUnit");
final List<String> orgaunitIds = new ArrayList<String>(); final List<String> orgaunitIds = new ArrayList<String>();
if (config.isMergingProjects()) { if (config.isMergingProjects()) {
final DataQuery subDepartmentsQuery = SessionManager.getSession().retrieveQuery( final DataQuery subDepartmentsQuery = SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType");
subDepartmentsQuery.setParameter("orgaunitId", subDepartmentsQuery.setParameter("orgaunitId",
orgaunit.getContentBundle().getID().toString()); orgaunit.getContentBundle().getID().toString());
subDepartmentsQuery.setParameter("assocType", subDepartmentsQuery.setParameter("assocType",
@ -260,7 +262,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
filterBuilder.append(projectBundlesQuery.get("projectId").toString()); filterBuilder.append(projectBundlesQuery.get("projectId").toString());
} }
final DataCollection projectsQuery = SessionManager.getSession().retrieve( final DataCollection projectsQuery = SessionManager.getSession().retrieve(
"com.arsdigita.cms.contenttypes.SciProject"); "com.arsdigita.cms.contenttypes.SciProject");
if (filterBuilder.length() == 0) { if (filterBuilder.length() == 0) {
//No Projects, return null to indicate //No Projects, return null to indicate
@ -272,28 +274,28 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
if (Kernel.getConfig().languageIndependentItems()) { if (Kernel.getConfig().languageIndependentItems()) {
final FilterFactory filterFactory = projectsQuery.getFilterFactory(); final FilterFactory filterFactory = projectsQuery.getFilterFactory();
final Filter filter = filterFactory.or(). final Filter filter = filterFactory.or().
addFilter(filterFactory.equals("language", GlobalizationHelper. addFilter(filterFactory.equals("language", GlobalizationHelper.
getNegotiatedLocale().getLanguage())). getNegotiatedLocale().getLanguage())).
addFilter(filterFactory.and(). addFilter(filterFactory.and().
addFilter(filterFactory.equals("language", addFilter(filterFactory.equals("language",
GlobalizationHelper.LANG_INDEPENDENT)). GlobalizationHelper.LANG_INDEPENDENT)).
addFilter(filterFactory.notIn("parent", addFilter(filterFactory.notIn("parent",
"com.arsdigita.navigation.getParentIDsOfMatchedItems"). "com.arsdigita.navigation.getParentIDsOfMatchedItems")
set( .set(
"language", GlobalizationHelper.getNegotiatedLocale(). "language", GlobalizationHelper.getNegotiatedLocale().
getLanguage()))); getLanguage())));
projectsQuery.addFilter(filter); projectsQuery.addFilter(filter);
} else { } else {
projectsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale(). projectsQuery.addEqualsFilter("language", GlobalizationHelper.getNegotiatedLocale().
getLanguage()); getLanguage());
} }
logger.debug(String.format( logger.debug(String.format(
"Got projects of department '%s'" "Got projects of department '%s'"
+ "in '%d ms'. MergeProjects is set to '%b'.", + "in '%d ms'. MergeProjects is set to '%b'.",
orgaunit.getName(), orgaunit.getName(),
System.currentTimeMillis() - start, System.currentTimeMillis() - start,
config.isMergingProjects())); config.isMergingProjects()));
return projectsQuery; return projectsQuery;
} }
@ -307,7 +309,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
} }
if ((statusFilter.getFilter() != null) if ((statusFilter.getFilter() != null)
&& !(statusFilter.getFilter().trim().isEmpty())) { && !(statusFilter.getFilter().trim().isEmpty())) {
projects.addFilter(statusFilter.getFilter()); projects.addFilter(statusFilter.getFilter());
} }
} }
@ -321,7 +323,7 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
} }
if ((titleFilter.getFilter() != null) if ((titleFilter.getFilter() != null)
&& !(titleFilter.getFilter().trim().isEmpty())) { && !(titleFilter.getFilter().trim().isEmpty())) {
projects.addFilter(titleFilter.getFilter()); projects.addFilter(titleFilter.getFilter());
} }
} }
@ -331,9 +333,9 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ContentPage project = (ContentPage) DomainObjectFactory.newInstance(new OID( final ContentPage project = (ContentPage) DomainObjectFactory.newInstance(new OID(
"com.arsdigita.cms.contenttypes.SciProject", projectId)); "com.arsdigita.cms.contenttypes.SciProject", projectId));
logger.debug(String.format("Got domain object for project '%s' " logger.debug(String.format("Got domain object for project '%s' "
+ "in %d ms.", + "in %d ms.",
project.getName(), project.getName(),
System.currentTimeMillis() - start)); System.currentTimeMillis() - start));
generateProjectXml(project, parent, state); generateProjectXml(project, parent, state);
@ -368,4 +370,5 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
} }
} }
} }

View File

@ -25,63 +25,71 @@ import com.arsdigita.util.parameter.Parameter;
/** /**
* Configuration for the projects tab. * Configuration for the projects tab.
* *
* @author Jens Pelzetter * @author Jens Pelzetter
* @version $Id$ * @version $Id$
*/ */
public class SciDepartmentProjectsTabConfig extends AbstractConfig { public class SciDepartmentProjectsTabConfig extends AbstractConfig {
private final Parameter greetingSize; private final Parameter greetingSize;
private final Parameter pageSize; private final Parameter pageSize;
private final Parameter enableSearchLimit; private final Parameter enableSearchLimit;
private final Parameter mergeProjects; private final Parameter mergeProjects;
private final Parameter showAllProjects;
public SciDepartmentProjectsTabConfig() { public SciDepartmentProjectsTabConfig() {
greetingSize = greetingSize = new IntegerParameter(
new IntegerParameter( "com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.greeting_number",
"com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.greeting_number", Parameter.REQUIRED,
Parameter.REQUIRED, 10);
10);
pageSize = new IntegerParameter(
pageSize = "com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.page_size",
new IntegerParameter( Parameter.REQUIRED,
"com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.page_size", 30);
Parameter.REQUIRED,
30); enableSearchLimit = new IntegerParameter(
"com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.enable_search_limit",
enableSearchLimit = Parameter.REQUIRED,
new IntegerParameter( 2);
"com.arsdigita.cms.contenttypes.scidepartment.tabs.projects.enable_search_limit",
Parameter.REQUIRED, mergeProjects = new BooleanParameter(
2); "com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge",
Parameter.REQUIRED,
mergeProjects = Boolean.TRUE);
new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge", showAllProjects = new BooleanParameter(
Parameter.REQUIRED, "com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.show_all",
Boolean.TRUE); Parameter.REQUIRED,
Boolean.FALSE);
register(greetingSize); register(greetingSize);
register(pageSize); register(pageSize);
register(enableSearchLimit); register(enableSearchLimit);
register(mergeProjects); register(mergeProjects);
register(showAllProjects);
loadInfo(); loadInfo();
} }
public final int getGreetingSize() { public final int getGreetingSize() {
return (Integer) get(greetingSize); return (Integer) get(greetingSize);
} }
public final int getPageSize() { public final int getPageSize() {
return (Integer) get(pageSize); return (Integer) get(pageSize);
} }
public final int getEnableSearchLimit() { public final int getEnableSearchLimit() {
return (Integer) get(enableSearchLimit); return (Integer) get(enableSearchLimit);
} }
public final boolean isMergingProjects() { public final boolean isMergingProjects() {
return (Boolean) get(mergeProjects); return (Boolean) get(mergeProjects);
} }
public final boolean isShowingAllProjects() {
return (Boolean) get(showAllProjects);
}
} }

View File

@ -17,3 +17,9 @@ com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.title = Merge
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.purpose = Merge the projects of the department and its sub departments into one list? com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.purpose = Merge the projects of the department and its sub departments into one list?
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.example = true com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.example = true
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.format = [Boolean] com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.merge.format = [Boolean]
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.show_all.title=Show all projects?
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.show_all.purpose=Show all projects?
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.show_all.example=true
com.arsdigita.cms.contenttypes.scidepartments.tabs.projects.show_all.format=[Boolean]