Verschiedene Ergänzungen.

git-svn-id: https://svn.libreccm.org/ccm/trunk@1311 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-12-01 15:28:12 +00:00
parent b52d0a3c96
commit 4ea7b71896
2 changed files with 118 additions and 106 deletions

View File

@ -19,6 +19,7 @@ import com.arsdigita.xml.Element;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -34,17 +35,17 @@ 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,
"projectEnd", "projectEnd",
false, false,
false, false,
false, false,
true); true);
private final TextFilter titleFilter = new TextFilter(TITLE_PARAM, private final TextFilter titleFilter = new TextFilter(TITLE_PARAM,
ContentPage.TITLE); ContentPage.TITLE);
static { static {
config.load(); config.load();
@ -53,18 +54,18 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
public SciDepartmentProjectsTab() { public SciDepartmentProjectsTab() {
final Calendar now = new GregorianCalendar(); final Calendar now = new GregorianCalendar();
final String today = String.format("%d-%02d-%02d", final String today = String.format("%d-%02d-%02d",
now.get(Calendar.YEAR), now.get(Calendar.YEAR),
now.get(Calendar.MONTH) + 1, now.get(Calendar.MONTH) + 1,
now.get(Calendar.DAY_OF_MONTH)); now.get(Calendar.DAY_OF_MONTH));
statusFilter.addOption("currentProjects", statusFilter.addOption("currentProjects",
CompareFilter.Operators.GTEQ, CompareFilter.Operators.GTEQ,
today, today,
true); true);
statusFilter.addOption("finishedProjects", statusFilter.addOption("finishedProjects",
CompareFilter.Operators.LT, CompareFilter.Operators.LT,
today, today,
false); false);
} }
public boolean hasData(final GenericOrganizationalUnit orgaunit) { public boolean hasData(final GenericOrganizationalUnit orgaunit) {
@ -81,16 +82,16 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
final boolean result = !getData(orgaunit).isEmpty(); final boolean result = !getData(orgaunit).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()));
return result; return result;
} }
public void generateXml(final GenericOrganizationalUnit orgaunit, public void generateXml(final GenericOrganizationalUnit orgaunit,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final DataQuery projects = getData(orgaunit); final DataQuery projects = getData(orgaunit);
final HttpServletRequest request = state.getRequest(); final HttpServletRequest request = state.getRequest();
@ -101,8 +102,8 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
"filters"); "filters");
if (((request.getParameter(STATUS_PARAM) == null) if (((request.getParameter(STATUS_PARAM) == null)
|| (request.getParameter(STATUS_PARAM).trim().isEmpty())) || (request.getParameter(STATUS_PARAM).trim().isEmpty()))
&& ((request.getParameter(TITLE_PARAM) == null) && ((request.getParameter(TITLE_PARAM) == null)
|| request.getParameter(TITLE_PARAM).trim().isEmpty())) { || request.getParameter(TITLE_PARAM).trim().isEmpty())) {
statusFilter.generateXml(filtersElem); statusFilter.generateXml(filtersElem);
@ -111,6 +112,10 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
projects.addOrder("projectEnd desc"); projects.addOrder("projectEnd desc");
projects.addOrder("projectBegin desc"); projects.addOrder("projectBegin desc");
//projects.addOrder("projectEnd desc nulls last");
//projects.addOrder("projectBegin desc nulls last");
//projects.addOrderWithNull("projectEnd", new Date(0), false);
//projects.addOrderWithNull("projectBegin", new Date(0), false);
projects.addOrder("title"); projects.addOrder("title");
projects.setRange(1, config.getGreetingSize() + 1); projects.setRange(1, config.getGreetingSize() + 1);
@ -129,13 +134,15 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
depProjectsElem.newChildElement("noProjects"); depProjectsElem.newChildElement("noProjects");
return;
} else { } else {
final Paginator paginator = new Paginator(request, final Paginator paginator = new Paginator(request,
(int) projects.size(), (int) projects.size(),
config.getPageSize()); config.getPageSize());
if ((paginator.getPageCount() > config.getEnableSearchLimit()) if ((paginator.getPageCount() > config.getEnableSearchLimit())
|| ((request.getParameter(TITLE_PARAM) != null) || ((request.getParameter(TITLE_PARAM) != null)
|| !(request.getParameter(TITLE_PARAM).trim().isEmpty()))) { || !(request.getParameter(TITLE_PARAM).trim().isEmpty()))) {
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
} }
@ -143,18 +150,18 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
paginator.applyLimits(projects); paginator.applyLimits(projects);
paginator.generateXml(depProjectsElem); paginator.generateXml(depProjectsElem);
} }
}
while (projects.next()) { while (projects.next()) {
generateProjectXml((BigDecimal) projects.get("projectId"), generateProjectXml((BigDecimal) projects.get("projectId"),
depProjectsElem, depProjectsElem,
state); state);
}
} }
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));
} }
protected DataQuery getData(final GenericOrganizationalUnit orgaunit) { protected DataQuery getData(final GenericOrganizationalUnit orgaunit) {
@ -176,12 +183,12 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
if (config.isMergingProjects()) { if (config.isMergingProjects()) {
final DataQuery subDepartmentsQuery = final DataQuery subDepartmentsQuery =
SessionManager.getSession().retrieveQuery( SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType");
subDepartmentsQuery.setParameter("orgaunitId", subDepartmentsQuery.setParameter("orgaunitId",
orgaunit.getID().toString()); orgaunit.getID().toString());
subDepartmentsQuery.setParameter("assocType", subDepartmentsQuery.setParameter("assocType",
SciDepartmentSubDepartmentsStep.ASSOC_TYPE); SciDepartmentSubDepartmentsStep.ASSOC_TYPE);
while (subDepartmentsQuery.next()) { while (subDepartmentsQuery.next()) {
/*if (projectsFilter.length() > 0) { /*if (projectsFilter.length() > 0) {
@ -211,56 +218,55 @@ public class SciDepartmentProjectsTab implements GenericOrgaUnitTab {
} }
private void applyStatusFilter(final DataQuery projects, private void applyStatusFilter(final DataQuery projects,
final HttpServletRequest request) { final HttpServletRequest request) {
final String statusValue = request.getParameter(STATUS_PARAM); final String statusValue = request.getParameter(STATUS_PARAM);
if ((statusValue != null) && !(statusValue.trim().isEmpty())) { if ((statusValue != null) && !(statusValue.trim().isEmpty())) {
statusFilter.setValue(statusValue); statusFilter.setValue(statusValue);
} }
if ((statusFilter.getFilter() != null) if ((statusFilter.getFilter() != null)
&& !(statusFilter.getFilter().trim().isEmpty())) { && !(statusFilter.getFilter().trim().isEmpty())) {
projects.addFilter(statusFilter.getFilter()); projects.addFilter(statusFilter.getFilter());
} }
} }
private void applyTitleFilter(final DataQuery projects, private void applyTitleFilter(final DataQuery projects,
final HttpServletRequest request) { final HttpServletRequest request) {
final String titleValue = request.getParameter(TITLE_PARAM); final String titleValue = request.getParameter(TITLE_PARAM);
if ((titleValue != null) && !(titleValue.trim().isEmpty())) { if ((titleValue != null) && !(titleValue.trim().isEmpty())) {
titleFilter.setValue(titleValue); titleFilter.setValue(titleValue);
} }
if ((titleFilter.getFilter() != null) if ((titleFilter.getFilter() != null)
&& !(titleFilter.getFilter().trim().isEmpty())) { && !(titleFilter.getFilter().trim().isEmpty())) {
projects.addFilter(titleFilter.getFilter()); projects.addFilter(titleFilter.getFilter());
} }
} }
private void generateProjectXml(final BigDecimal projectId, private void generateProjectXml(final BigDecimal projectId,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ContentPage project = (ContentPage) DomainObjectFactory. final ContentPage project = (ContentPage) DomainObjectFactory.newInstance(new OID(
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);
} }
private void generateProjectXml(final ContentPage project, private void generateProjectXml(final ContentPage project,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final XmlGenerator generator = new XmlGenerator(project); final XmlGenerator generator = new XmlGenerator(project);
generator.setItemElemName("project", ""); generator.setItemElemName("project", "");
generator.setUseExtraXml(false); generator.setUseExtraXml(false);
generator.generateXML(state, parent, ""); generator.generateXML(state, parent, "");
logger.debug(String.format("Generated XML for project '%s' in %d ms.", logger.debug(String.format("Generated XML for project '%s' in %d ms.",
project.getName(), project.getName(),
System.currentTimeMillis() - start)); System.currentTimeMillis() - start));
} }
private class XmlGenerator extends SimpleXMLGenerator { private class XmlGenerator extends SimpleXMLGenerator {

View File

@ -19,6 +19,7 @@ import com.arsdigita.xml.Element;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -32,19 +33,19 @@ import org.apache.log4j.Logger;
public class SciInstituteProjectsTab implements GenericOrgaUnitTab { public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
private final Logger logger = private final Logger logger =
Logger.getLogger(SciInstituteProjectsTab.class); Logger.getLogger(SciInstituteProjectsTab.class);
private final static SciInstituteProjectsTabConfig config = private final static SciInstituteProjectsTabConfig config =
new SciInstituteProjectsTabConfig(); new SciInstituteProjectsTabConfig();
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,
"projectEnd", "projectEnd",
false, false,
false, false,
false, false,
true); true);
private final TextFilter titleFilter = new TextFilter(TITLE_PARAM, private final TextFilter titleFilter = new TextFilter(TITLE_PARAM,
ContentPage.TITLE); ContentPage.TITLE);
static { static {
config.load(); config.load();
@ -53,18 +54,18 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
public SciInstituteProjectsTab() { public SciInstituteProjectsTab() {
final Calendar now = new GregorianCalendar(); final Calendar now = new GregorianCalendar();
final String today = String.format("%d-%02d-%02d", final String today = String.format("%d-%02d-%02d",
now.get(Calendar.YEAR), now.get(Calendar.YEAR),
now.get(Calendar.MONTH) + 1, now.get(Calendar.MONTH) + 1,
now.get(Calendar.DAY_OF_MONTH)); now.get(Calendar.DAY_OF_MONTH));
statusFilter.addOption("currentProjects", statusFilter.addOption("currentProjects",
CompareFilter.Operators.GTEQ, CompareFilter.Operators.GTEQ,
today, today,
true); true);
statusFilter.addOption("finishedProjects", statusFilter.addOption("finishedProjects",
CompareFilter.Operators.LT, CompareFilter.Operators.LT,
today, today,
false); false);
} }
public boolean hasData(final GenericOrganizationalUnit orgaunit) { public boolean hasData(final GenericOrganizationalUnit orgaunit) {
@ -81,16 +82,16 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
final boolean result = !getData(orgaunit).isEmpty(); final boolean result = !getData(orgaunit).isEmpty();
logger.debug(String.format("Needed %d ms to determine if institute " logger.debug(String.format("Needed %d ms to determine if institute "
+ "'%s' has projects.", + "'%s' has projects.",
System.currentTimeMillis() - start, System.currentTimeMillis() - start,
orgaunit.getName())); orgaunit.getName()));
return result; return result;
} }
public void generateXml(final GenericOrganizationalUnit orgaunit, public void generateXml(final GenericOrganizationalUnit orgaunit,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final DataQuery projects = getData(orgaunit); final DataQuery projects = getData(orgaunit);
final HttpServletRequest request = state.getRequest(); final HttpServletRequest request = state.getRequest();
@ -101,8 +102,8 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
"filters"); "filters");
if (((request.getParameter(STATUS_PARAM) == null) if (((request.getParameter(STATUS_PARAM) == null)
|| (request.getParameter(STATUS_PARAM).trim().isEmpty())) || (request.getParameter(STATUS_PARAM).trim().isEmpty()))
&& ((request.getParameter(TITLE_PARAM) == null) && ((request.getParameter(TITLE_PARAM) == null)
|| request.getParameter(TITLE_PARAM).trim().isEmpty())) { || request.getParameter(TITLE_PARAM).trim().isEmpty())) {
statusFilter.generateXml(filtersElem); statusFilter.generateXml(filtersElem);
@ -111,6 +112,10 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
projects.addOrder("projectEnd desc"); projects.addOrder("projectEnd desc");
projects.addOrder("projectBegin desc"); projects.addOrder("projectBegin desc");
//projects.addOrder("projectEnd desc nulls last");
//projects.addOrder("projectBegin desc nulls last");
//projects.addOrderWithNull("projectEnd", null, false);
//projects.addOrderWithNull("projectBegin", null, false);
projects.addOrder("title"); projects.addOrder("title");
projects.setRange(1, config.getGreetingSize() + 1); projects.setRange(1, config.getGreetingSize() + 1);
@ -129,13 +134,15 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
depProjectsElem.newChildElement("noProjects"); depProjectsElem.newChildElement("noProjects");
return;
} else { } else {
final Paginator paginator = new Paginator(request, final Paginator paginator = new Paginator(request,
(int) projects.size(), (int) projects.size(),
config.getPageSize()); config.getPageSize());
if ((paginator.getPageCount() > config.getEnableSearchLimit()) if ((paginator.getPageCount() > config.getEnableSearchLimit())
|| ((request.getParameter(TITLE_PARAM) != null) || ((request.getParameter(TITLE_PARAM) != null)
|| !(request.getParameter(TITLE_PARAM).trim().isEmpty()))) { || !(request.getParameter(TITLE_PARAM).trim().isEmpty()))) {
titleFilter.generateXml(filtersElem); titleFilter.generateXml(filtersElem);
} }
@ -143,18 +150,18 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
paginator.applyLimits(projects); paginator.applyLimits(projects);
paginator.generateXml(depProjectsElem); paginator.generateXml(depProjectsElem);
} }
}
while (projects.next()) { while (projects.next()) {
generateProjectXml((BigDecimal) projects.get("projectId"), generateProjectXml((BigDecimal) projects.get("projectId"),
depProjectsElem, depProjectsElem,
state); state);
}
} }
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));
} }
protected DataQuery getData(final GenericOrganizationalUnit orgaunit) { protected DataQuery getData(final GenericOrganizationalUnit orgaunit) {
@ -176,12 +183,12 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
if (config.isMergingProjects()) { if (config.isMergingProjects()) {
final DataQuery subDepartmentsQuery = final DataQuery subDepartmentsQuery =
SessionManager.getSession().retrieveQuery( SessionManager.getSession().retrieveQuery(
"com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType"); "com.arsdigita.cms.contenttypes.getIdsOfSubordinateOrgaUnitsRecursivlyWithAssocType");
subDepartmentsQuery.setParameter("orgaunitId", subDepartmentsQuery.setParameter("orgaunitId",
orgaunit.getID().toString()); orgaunit.getID().toString());
subDepartmentsQuery.setParameter("assocType", subDepartmentsQuery.setParameter("assocType",
SciInstituteDepartmentsStep.ASSOC_TYPE); SciInstituteDepartmentsStep.ASSOC_TYPE);
while (subDepartmentsQuery.next()) { while (subDepartmentsQuery.next()) {
/*if (projectsFilter.length() > 0) { /*if (projectsFilter.length() > 0) {
@ -211,56 +218,55 @@ public class SciInstituteProjectsTab implements GenericOrgaUnitTab {
} }
private void applyStatusFilter(final DataQuery projects, private void applyStatusFilter(final DataQuery projects,
final HttpServletRequest request) { final HttpServletRequest request) {
final String statusValue = request.getParameter(STATUS_PARAM); final String statusValue = request.getParameter(STATUS_PARAM);
if ((statusValue != null) && !(statusValue.trim().isEmpty())) { if ((statusValue != null) && !(statusValue.trim().isEmpty())) {
statusFilter.setValue(statusValue); statusFilter.setValue(statusValue);
} }
if ((statusFilter.getFilter() != null) if ((statusFilter.getFilter() != null)
&& !(statusFilter.getFilter().trim().isEmpty())) { && !(statusFilter.getFilter().trim().isEmpty())) {
projects.addFilter(statusFilter.getFilter()); projects.addFilter(statusFilter.getFilter());
} }
} }
private void applyTitleFilter(final DataQuery projects, private void applyTitleFilter(final DataQuery projects,
final HttpServletRequest request) { final HttpServletRequest request) {
final String titleValue = request.getParameter(TITLE_PARAM); final String titleValue = request.getParameter(TITLE_PARAM);
if ((titleValue != null) && !(titleValue.trim().isEmpty())) { if ((titleValue != null) && !(titleValue.trim().isEmpty())) {
titleFilter.setValue(titleValue); titleFilter.setValue(titleValue);
} }
if ((titleFilter.getFilter() != null) if ((titleFilter.getFilter() != null)
&& !(titleFilter.getFilter().trim().isEmpty())) { && !(titleFilter.getFilter().trim().isEmpty())) {
projects.addFilter(titleFilter.getFilter()); projects.addFilter(titleFilter.getFilter());
} }
} }
private void generateProjectXml(final BigDecimal projectId, private void generateProjectXml(final BigDecimal projectId,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ContentPage project = (ContentPage) DomainObjectFactory. final ContentPage project = (ContentPage) DomainObjectFactory.newInstance(new OID(
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);
} }
private void generateProjectXml(final ContentPage project, private void generateProjectXml(final ContentPage project,
final Element parent, final Element parent,
final PageState state) { final PageState state) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final XmlGenerator generator = new XmlGenerator(project); final XmlGenerator generator = new XmlGenerator(project);
generator.setItemElemName("project", ""); generator.setItemElemName("project", "");
generator.setUseExtraXml(false); generator.setUseExtraXml(false);
generator.generateXML(state, parent, ""); generator.generateXML(state, parent, "");
logger.debug(String.format("Generated XML for project '%s' in %d ms.", logger.debug(String.format("Generated XML for project '%s' in %d ms.",
project.getName(), project.getName(),
System.currentTimeMillis() - start)); System.currentTimeMillis() - start));
} }
private class XmlGenerator extends SimpleXMLGenerator { private class XmlGenerator extends SimpleXMLGenerator {