Kaydet (Commit) cab9b82f authored tarafından Lionel Elie Mamane's avatar Lionel Elie Mamane

fdo#67186 switch reporbuilder to null date == 1899-12-30

This brings it in line with the default for other LibreOffice
components (e.g. Calc), or with the only supported value (e.g. Writer
tables), respectively.

Configure Pentaho jfreereport to also take null date == 1899-12-30

This combined allows reportbuilder to make absolutely no fiddly
conversion itself, leaving them to jfreereport and Writer table
cell format.

Also:

 - Make absolutely no conversion itself, also e.g. for booleans.

 - ODF compliance: make the value-type match the set foo-value attribute.

 - Use value-type="void" instead of empty value-type="string"

Change-Id: I67990232dbc9e86ac3fa37cd0c20edecb87cf8ee
üst 7f67dd5d
......@@ -19,8 +19,8 @@
##
# Any configuration will happen here.
org.pentaho.reporting.libraries.formula.datesystem.StartYear=1930
org.pentaho.reporting.libraries.formula.datesystem.ExcelHack=false
org.pentaho.reporting.libraries.formula.ZeroDate=1899
org.pentaho.reporting.libraries.formula.ExcelDateBugAware=false
#
# A list of all known functions.
......
......@@ -85,7 +85,7 @@ public class FormatValueUtility
else if (value instanceof Date)
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
ret = HSSFDateUtil.getExcelDate((Date) value, false, 2).toString();
ret = HSSFDateUtil.getExcelDate((Date) value).toString();
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, ret);
}
else if (value instanceof Number)
......@@ -112,8 +112,7 @@ public class FormatValueUtility
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, "");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "void");
}
return ret;
}
......@@ -122,61 +121,39 @@ public class FormatValueUtility
{
if (value instanceof Time)
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "time");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", formatTime((Time) value));
}
else if (value instanceof java.sql.Date)
{
if ("float".equals(valueType) || valueType == null)
{
// This is to work around fdo#63478
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 0).toString());
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
}
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
}
else if (value instanceof Date)
{
// This is what we *should* do, but see fdo#63478
// variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date");
// variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
// so we do that instead to work around:
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, HSSFDateUtil.getExcelDate((Date) value, false, 0).toString());
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
}
else if (value instanceof BigDecimal)
{
if ("date".equals(valueType))
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate(HSSFDateUtil.getJavaDate((BigDecimal) value, false, 0)));
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
}
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
}
else if (value instanceof Number)
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
}
else if (value instanceof Boolean)
{
if ("float".equals(valueType))
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "boolean");
if (Boolean.TRUE.equals(value))
{
float fvalue = Boolean.TRUE.equals(value) ? 1 : 0;
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(fvalue));
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE);
}
else
{
if (Boolean.TRUE.equals(value))
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE);
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE);
}
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE);
}
}
else if (value != null)
......@@ -198,7 +175,7 @@ public class FormatValueUtility
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, "");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "void");
}
}
......
......@@ -78,7 +78,7 @@ public class TableCellLayoutController extends SectionLayoutController
else if (!"string".equals(valueType))
{
attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS,
FormatValueUtility.VALUE_TYPE, "string");
FormatValueUtility.VALUE_TYPE, "void");
}
}
catch (Exception e)
......@@ -101,7 +101,7 @@ public class TableCellLayoutController extends SectionLayoutController
if (!FormatValueUtility.shouldPrint(this, element))
{
attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS,
FormatValueUtility.VALUE_TYPE, "string");
FormatValueUtility.VALUE_TYPE, "void");
return null;
}
return FormatValueUtility.computeDataFlag(element, getFlowController());
......
......@@ -1715,7 +1715,7 @@ public abstract class OfficeDocumentReportTarget extends AbstractReportTarget
final XmlWriter xmlWriter = getXmlWriter();
xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "calculation-settings", null, XmlWriterSupport.OPEN);
final AttributeMap nullDateAttributes = new AttributeMap();
nullDateAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "date-value", "1900-01-01");
nullDateAttributes.setAttribute(OfficeNamespaces.TABLE_NS, "date-value", "1899-12-30");
xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "null-date", buildAttributeList(nullDateAttributes), XmlWriterSupport.CLOSE);
xmlWriter.writeCloseTag();
}
......
......@@ -1239,7 +1239,7 @@ void OOle2Obj::initializeOle()
uno::Reference< beans::XPropertySet > xChartProps( xCompSupp->getComponent(), uno::UNO_QUERY );
if ( xChartProps.is() )
xChartProps->setPropertyValue("NullDate",
uno::makeAny(util::DateTime(0,0,0,0,1,1,1900,false)));
uno::makeAny(util::DateTime(0,0,0,0,30,12,1899,false)));
}
}
}
......
......@@ -182,7 +182,7 @@ void SAL_CALL ExportDocumentHandler::startElement(const OUString & _sName, const
m_xDelegatee->startElement(sTableCalc,NULL);
pList = new SvXMLAttributeList();
uno::Reference< xml::sax::XAttributeList > xNullAttr = pList;
pList->AddAttribute(lcl_createAttribute(XML_NP_TABLE,XML_DATE_VALUE),OUString("1900-01-01"));
pList->AddAttribute(lcl_createAttribute(XML_NP_TABLE,XML_DATE_VALUE),OUString("1899-12-30"));
const OUString sNullDate = lcl_createAttribute(XML_NP_TABLE,XML_NULL_DATE);
m_xDelegatee->startElement(sNullDate,xNullAttr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment