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-94f89814c4dfmaster
parent
9b70cf8018
commit
a10f25b855
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
Loading…
Reference in New Issue