diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectDescTab.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectDescTab.java new file mode 100644 index 000000000..04a6bc740 --- /dev/null +++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectDescTab.java @@ -0,0 +1,127 @@ +package com.arsdigita.cms.contenttypes.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.contenttypes.GenericOrganizationalUnit; +import com.arsdigita.cms.contenttypes.SciProject; +import com.arsdigita.xml.Element; +import com.redhat.persistence.pdl.adapters.ShortAd; +import org.apache.log4j.Logger; + +/** + * + * @author Jens Pelzetter + * @version $Id$ + */ +public class SciProjectDescTab implements GenericOrgaUnitTab { + + public final Logger logger = Logger.getLogger(SciProjectDescTab.class); + + public boolean hasData(final GenericOrganizationalUnit orgaunit) { + final long start = System.currentTimeMillis(); + boolean result; + final Desc desc = getData(orgaunit); + + if (desc.getDesc() == null) { + result = false; + } else { + result = !desc.getDesc().isEmpty(); + } + + logger.debug(String.format("Needed %d ms to determine if project '%s' " + + "has a description.", + System.currentTimeMillis() - start, + orgaunit.getName())); + return result; + } + + public void generateXml(final GenericOrganizationalUnit orgaunit, + final Element parent, + final PageState state) { + final long start = System.currentTimeMillis(); + final Desc desc = getData(orgaunit); + + if ((desc.getShortDesc() != null) + && !desc.getShortDesc().trim().isEmpty()) { + final Element shortDescElem = parent.newChildElement("shortDescription"); + shortDescElem.setText(desc.getShortDesc()); + } + + final Element descElem = parent.newChildElement("description"); + descElem.setText(desc.getDesc()); + + if ((desc.getFunding() != null) + && !desc.getFunding().trim().isEmpty()) { + final Element fundingElem = parent.newChildElement("funding"); + fundingElem.setText(desc.getFunding()); + } + + if ((desc.getFundingVolume() != null) + && !desc.getFundingVolume().trim().isEmpty()) { + final Element volumeElem = parent.newChildElement("fundingVolume"); + volumeElem.setText(desc.getFundingVolume()); + } + + logger.debug(String.format("Generated XML for description tab of " + + "project '%s' in %d ms", + orgaunit.getName(), + System.currentTimeMillis() - start)); + } + + private Desc getData(final GenericOrganizationalUnit orgaunit) { + if (!(orgaunit instanceof SciProject)) { + throw new IllegalArgumentException(String.format( + "This tab can only process instances of " + + "'com.arsdigita.cms.contenttypes.SciProject'. Provided " + + "object is of type '%s'", + orgaunit.getClass().getName())); + } + + final SciProject project = (SciProject) orgaunit; + final Desc desc = new Desc(); + desc.setShortDesc(project.getProjectShortDescription()); + desc.setDesc(project.getProjectDescription()); + desc.setFunding(project.getFunding()); + desc.setFundingVolume(project.getFundingVolume()); + return desc; + } + + private class Desc { + + private String shortDesc; + private String desc; + private String funding; + private String fundingVolume; + + public String getShortDesc() { + return shortDesc; + } + + public void setShortDesc(final String shortDesc) { + this.shortDesc = shortDesc; + } + + public String getDesc() { + return desc; + } + + public void setDesc(final String desc) { + this.desc = desc; + } + + public String getFunding() { + return funding; + } + + public void setFunding(final String funding) { + this.funding = funding; + } + + public String getFundingVolume() { + return fundingVolume; + } + + public void setFundingVolume(final String fundingVolume) { + this.fundingVolume = fundingVolume; + } + } +} diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertyForm.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertyForm.java index d9435b32e..7551a08e4 100644 --- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertyForm.java +++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectPropertyForm.java @@ -10,7 +10,7 @@ import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.form.Date; import com.arsdigita.bebop.form.TextArea; -import com.arsdigita.bebop.parameters.DateParameter; +import com.arsdigita.bebop.parameters.IncompleteDateParameter; import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.StringInRangeValidationListener; import com.arsdigita.bebop.parameters.StringParameter; @@ -50,7 +50,7 @@ public class SciProjectPropertyForm add(new Label(SciProjectGlobalizationUtil.globalize( "sciproject.ui.begin"))); - ParameterModel beginParam = new DateParameter(SciProject.BEGIN); + ParameterModel beginParam = new IncompleteDateParameter(SciProject.BEGIN); Calendar today = new GregorianCalendar(); Date begin = new Date(beginParam); begin.setYearRange(1970, (today.get(Calendar.YEAR) + 2)); @@ -58,7 +58,7 @@ public class SciProjectPropertyForm add(new Label(SciProjectGlobalizationUtil.globalize( "sciproject.ui.end"))); - ParameterModel endParam = new DateParameter(SciProject.END); + ParameterModel endParam = new IncompleteDateParameter(SciProject.END); Date end = new Date(endParam); end.setYearRange(1970, (today.get(Calendar.YEAR) + 8)); add(end); diff --git a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectSummaryTab.java b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectSummaryTab.java index 795a971f0..25bb02040 100644 --- a/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectSummaryTab.java +++ b/ccm-sci-types-project/src/com/arsdigita/cms/contenttypes/ui/SciProjectSummaryTab.java @@ -54,20 +54,19 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final Element projectSummaryElem = parent.newChildElement( "projectSummary"); - generateBasicDataXml(project, parent); - - if(config.isShowingMembers()) { - generateMembersXml(project, parent, state); - } - - if (config.isShowingContacts()) { - generateContactsXml(project, parent, state); - } - - if (config.isShowingSubProjects()) { - generateSubProjectsXml(project, parent, state); + generateBasicDataXml(project, projectSummaryElem); + + if (config.isShowingMembers()) { + generateMembersXml(project, projectSummaryElem, state); } + if (config.isShowingContacts()) { + generateContactsXml(project, projectSummaryElem, state); + } + + if (config.isShowingSubProjects()) { + generateSubProjectsXml(project, projectSummaryElem, state); + } logger.debug(String.format("Generated XML for summary tab of project " + "'%s' in %d ms.", @@ -84,24 +83,27 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final SciProject project, final Element parent) { final long start = System.currentTimeMillis(); - final Element addendumElem = parent.newChildElement("addendum"); - if ((project.getAddendum() != null) && !project.getAddendum().isEmpty()) { + if ((project.getAddendum() != null) + && !project.getAddendum().trim().isEmpty()) { + final Element addendumElem = parent.newChildElement("addendum"); addendumElem.setText(project.getAddendum()); } - final Element lifeSpanElem = parent.newChildElement("lifeSpan"); - final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - if (project.getBegin() != null) { - lifeSpanElem.addAttribute("begin", - dateFormat.format(project.getBegin())); - } - if (project.getEnd() != null) { - lifeSpanElem.addAttribute("end", - dateFormat.format(project.getEnd())); + if ((project.getBegin() != null) || (project.getEnd() != null)) { + final Element lifeSpanElem = parent.newChildElement("lifeSpan"); + final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + if (project.getBegin() != null) { + lifeSpanElem.addAttribute("begin", + dateFormat.format(project.getBegin())); + } + if (project.getEnd() != null) { + lifeSpanElem.addAttribute("end", + dateFormat.format(project.getEnd())); + } } if ((project.getProjectShortDescription() != null) - && !project.getProjectShortDescription().isEmpty()) { + && !project.getProjectShortDescription().trim().isEmpty()) { final Element shortDescElem = parent.newChildElement("shortDesc"); shortDescElem.setText(project.getProjectShortDescription()); } @@ -152,7 +154,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { while (personsQuery.next()) { generateMemberXml((BigDecimal) personsQuery.get("memberId"), - parent, + membersElem, state); } } else { @@ -191,6 +193,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final PageState state) { final long start = System.currentTimeMillis(); final XmlGenerator generator = new XmlGenerator(member); + generator.setUseExtraXml(false); generator.generateXML(state, parent, ""); logger.debug(String.format("Generated XML for member '%s' in %d ms.", member.getFullName(), @@ -220,6 +223,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final PageState state) { final long start = System.currentTimeMillis(); final XmlGenerator generator = new XmlGenerator(contact); + generator.setUseExtraXml(false); generator.generateXML(state, parent, ""); logger.debug(String.format("Generated XML for contact '%s' in %d ms.", contact.getName(), @@ -230,6 +234,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); + final Element subProjectsElem = parent.newChildElement("subProjects"); final GenericOrganizationalUnitSubordinateCollection subProjects = project. getSubordinateOrgaUnits(); @@ -239,7 +244,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { while (subProjects.next()) { generateSubProjectXml( (SciProject) subProjects.getGenericOrganizationalUnit(), - parent, + subProjectsElem, state); } logger.debug(String.format("Generated XML for subprojects of " @@ -252,9 +257,12 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { final Element parent, final PageState state) { final long start = System.currentTimeMillis(); - final Element subProjectElem = parent.newChildElement("subProject"); + final XmlGenerator generator = new XmlGenerator(subProject); + generator.setUseExtraXml(false); + generator.generateXML(state, parent, ""); + /*final Element subProjectElem = parent.newChildElement("subProject"); final Element subProjectTitle = subProjectElem.newChildElement("title"); - subProjectTitle.setText(subProject.getTitle()); + subProjectTitle.setText(subProject.getTitle());*/ logger.debug(String.format("Generated XML for subproject '%s' in" + "%d ms", subProject.getName(), @@ -267,7 +275,7 @@ public class SciProjectSummaryTab implements GenericOrgaUnitTab { public XmlGenerator(final ContentItem item) { super(); - this.item = item; + this.item = item; } @Override