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 @@ ...@@ -19,8 +19,8 @@
## ##
# Any configuration will happen here. # Any configuration will happen here.
org.pentaho.reporting.libraries.formula.datesystem.StartYear=1930 org.pentaho.reporting.libraries.formula.ZeroDate=1899
org.pentaho.reporting.libraries.formula.datesystem.ExcelHack=false org.pentaho.reporting.libraries.formula.ExcelDateBugAware=false
# #
# A list of all known functions. # A list of all known functions.
......
...@@ -85,7 +85,7 @@ public class FormatValueUtility ...@@ -85,7 +85,7 @@ public class FormatValueUtility
else if (value instanceof Date) else if (value instanceof Date)
{ {
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float"); 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); variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, ret);
} }
else if (value instanceof Number) else if (value instanceof Number)
...@@ -112,8 +112,7 @@ public class FormatValueUtility ...@@ -112,8 +112,7 @@ public class FormatValueUtility
} }
else else
{ {
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "string"); variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "void");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, STRING_VALUE, "");
} }
return ret; return ret;
} }
...@@ -122,61 +121,39 @@ public class FormatValueUtility ...@@ -122,61 +121,39 @@ public class FormatValueUtility
{ {
if (value instanceof Time) if (value instanceof Time)
{ {
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "time");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", formatTime((Time) value)); variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "time-value", formatTime((Time) value));
} }
else if (value instanceof java.sql.Date) else if (value instanceof java.sql.Date)
{ {
if ("float".equals(valueType) || valueType == null) variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "date");
{ variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
// 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));
}
} }
else if (value instanceof Date) 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, VALUE_TYPE, "date"); variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate((Date) value));
// 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());
} }
else if (value instanceof BigDecimal) else if (value instanceof BigDecimal)
{ {
if ("date".equals(valueType)) variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
{ variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, "date-value", formatDate(HSSFDateUtil.getJavaDate((BigDecimal) value, false, 0)));
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
}
} }
else if (value instanceof Number) else if (value instanceof Number)
{ {
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE_TYPE, "float");
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value)); variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(value));
} }
else if (value instanceof Boolean) 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, BOOLEAN_VALUE, OfficeToken.TRUE);
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, VALUE, String.valueOf(fvalue));
} }
else else
{ {
if (Boolean.TRUE.equals(value)) variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE);
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.TRUE);
}
else
{
variableSection.setAttribute(OfficeNamespaces.OFFICE_NS, BOOLEAN_VALUE, OfficeToken.FALSE);
}
} }
} }
else if (value != null) else if (value != null)
...@@ -198,7 +175,7 @@ public class FormatValueUtility ...@@ -198,7 +175,7 @@ public class FormatValueUtility
} }
else 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 ...@@ -78,7 +78,7 @@ public class TableCellLayoutController extends SectionLayoutController
else if (!"string".equals(valueType)) else if (!"string".equals(valueType))
{ {
attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS,
FormatValueUtility.VALUE_TYPE, "string"); FormatValueUtility.VALUE_TYPE, "void");
} }
} }
catch (Exception e) catch (Exception e)
...@@ -101,7 +101,7 @@ public class TableCellLayoutController extends SectionLayoutController ...@@ -101,7 +101,7 @@ public class TableCellLayoutController extends SectionLayoutController
if (!FormatValueUtility.shouldPrint(this, element)) if (!FormatValueUtility.shouldPrint(this, element))
{ {
attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS, attributeMap.setAttribute(OfficeNamespaces.OFFICE_NS,
FormatValueUtility.VALUE_TYPE, "string"); FormatValueUtility.VALUE_TYPE, "void");
return null; return null;
} }
return FormatValueUtility.computeDataFlag(element, getFlowController()); return FormatValueUtility.computeDataFlag(element, getFlowController());
......
...@@ -1715,7 +1715,7 @@ public abstract class OfficeDocumentReportTarget extends AbstractReportTarget ...@@ -1715,7 +1715,7 @@ public abstract class OfficeDocumentReportTarget extends AbstractReportTarget
final XmlWriter xmlWriter = getXmlWriter(); final XmlWriter xmlWriter = getXmlWriter();
xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "calculation-settings", null, XmlWriterSupport.OPEN); xmlWriter.writeTag(OfficeNamespaces.TABLE_NS, "calculation-settings", null, XmlWriterSupport.OPEN);
final AttributeMap nullDateAttributes = new AttributeMap(); 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.writeTag(OfficeNamespaces.TABLE_NS, "null-date", buildAttributeList(nullDateAttributes), XmlWriterSupport.CLOSE);
xmlWriter.writeCloseTag(); xmlWriter.writeCloseTag();
} }
......
...@@ -1239,7 +1239,7 @@ void OOle2Obj::initializeOle() ...@@ -1239,7 +1239,7 @@ void OOle2Obj::initializeOle()
uno::Reference< beans::XPropertySet > xChartProps( xCompSupp->getComponent(), uno::UNO_QUERY ); uno::Reference< beans::XPropertySet > xChartProps( xCompSupp->getComponent(), uno::UNO_QUERY );
if ( xChartProps.is() ) if ( xChartProps.is() )
xChartProps->setPropertyValue("NullDate", 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 ...@@ -182,7 +182,7 @@ void SAL_CALL ExportDocumentHandler::startElement(const OUString & _sName, const
m_xDelegatee->startElement(sTableCalc,NULL); m_xDelegatee->startElement(sTableCalc,NULL);
pList = new SvXMLAttributeList(); pList = new SvXMLAttributeList();
uno::Reference< xml::sax::XAttributeList > xNullAttr = pList; 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); const OUString sNullDate = lcl_createAttribute(XML_NP_TABLE,XML_NULL_DATE);
m_xDelegatee->startElement(sNullDate,xNullAttr); 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