summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2005-03-23 10:26:14 +0000
committerVladimir Glazounov <vg@openoffice.org>2005-03-23 10:26:14 +0000
commit8f96fb229c4528608cd672f872997c6efc884cb4 (patch)
treea3550c8c8cba3c15bb3db2843a3f4fba7c00e578
parent77a20537a98ad20ed1af93272fc55a9c10ef3e13 (diff)
INTEGRATION: CWS eforms4 (1.2.22); FILE MERGED
2004/12/23 14:10:48 dvo 1.2.22.2: #i38666# load/save date+time related data types Issue number: Submitted by: Reviewed by: 2004/12/08 16:25:26 fs 1.2.22.1: #i36359# #i36303# care for DataTypeClass::DATE/TIME
-rw-r--r--xmloff/source/xforms/xformsapi.cxx77
1 files changed, 59 insertions, 18 deletions
diff --git a/xmloff/source/xforms/xformsapi.cxx b/xmloff/source/xforms/xformsapi.cxx
index 222c918fb928..bb97cbaa6c5d 100644
--- a/xmloff/source/xforms/xformsapi.cxx
+++ b/xmloff/source/xforms/xformsapi.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: xformsapi.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: obo $ $Date: 2004-11-16 10:15:57 $
+ * last change: $Author: vg $ $Date: 2005-03-23 11:26:14 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -262,10 +262,15 @@ static SvXMLTokenMapEntry aTypes[] =
TOKEN_MAP_ENTRY( XSD, BOOLEAN ),
TOKEN_MAP_ENTRY( XSD, ANYURI ),
TOKEN_MAP_ENTRY( XSD, DATETIME_XSD ),
+ TOKEN_MAP_ENTRY( XSD, DATE ),
+ TOKEN_MAP_ENTRY( XSD, TIME ),
+ TOKEN_MAP_ENTRY( XSD, YEAR ),
+ TOKEN_MAP_ENTRY( XSD, MONTH ),
+ TOKEN_MAP_ENTRY( XSD, DAY ),
XML_TOKEN_MAP_END
};
-rtl::OUString lcl_getTypeName(
+sal_uInt16 lcl_getTypeClass(
const Reference<XDataTypeRepository>& xRepository,
const SvXMLNamespaceMap& rNamespaceMap,
const OUString& rXMLName )
@@ -276,12 +281,11 @@ rtl::OUString lcl_getTypeName(
SvXMLTokenMap aMap( aTypes );
sal_uInt16 mnToken = aMap.Get( nPrefix, sLocalName );
- OUString sTypeName = rXMLName;
+ sal_uInt16 nTypeClass = com::sun::star::xsd::DataTypeClass::STRING;
if( mnToken != XML_TOK_UNKNOWN )
{
// we found an XSD name: then get the proper API name for it
DBG_ASSERT( xRepository.is(), "can't find type without repository");
- sal_uInt16 nTypeClass = com::sun::star::xsd::DataTypeClass::STRING;
switch( mnToken )
{
case XML_STRING:
@@ -305,31 +309,68 @@ rtl::OUString lcl_getTypeName(
case XML_DATETIME_XSD:
nTypeClass = com::sun::star::xsd::DataTypeClass::DATETIME;
break;
+ case XML_DATE:
+ nTypeClass = com::sun::star::xsd::DataTypeClass::DATE;
+ break;
+ case XML_TIME:
+ nTypeClass = com::sun::star::xsd::DataTypeClass::TIME;
+ break;
+ case XML_YEAR:
+ nTypeClass = com::sun::star::xsd::DataTypeClass::gYear;
+ break;
+ case XML_DAY:
+ nTypeClass = com::sun::star::xsd::DataTypeClass::gDay;
+ break;
+ case XML_MONTH:
+ nTypeClass = com::sun::star::xsd::DataTypeClass::gMonth;
+ break;
/* data types not yet supported:
nTypeClass = com::sun::star::xsd::DataTypeClass::DURATION;
- nTypeClass = com::sun::star::xsd::DataTypeClass::TIME;
- nTypeClass = com::sun::star::xsd::DataTypeClass::DATE;
nTypeClass = com::sun::star::xsd::DataTypeClass::gYearMonth;
- nTypeClass = com::sun::star::xsd::DataTypeClass::gYear;
nTypeClass = com::sun::star::xsd::DataTypeClass::gMonthDay;
- nTypeClass = com::sun::star::xsd::DataTypeClass::gDay;
- nTypeClass = com::sun::star::xsd::DataTypeClass::gMonth;
nTypeClass = com::sun::star::xsd::DataTypeClass::hexBinary;
nTypeClass = com::sun::star::xsd::DataTypeClass::base64Binary;
nTypeClass = com::sun::star::xsd::DataTypeClass::QName;
nTypeClass = com::sun::star::xsd::DataTypeClass::NOTATION;
*/
}
+ }
- try
- {
- sTypeName = xRepository->getBasicDataType(nTypeClass)->getName();
- }
- catch( const Exception& )
- {
- DBG_ERROR( "exception during type creation" );
- }
+ return nTypeClass;
+}
+
+
+rtl::OUString lcl_getTypeName(
+ const Reference<XDataTypeRepository>& xRepository,
+ const SvXMLNamespaceMap& rNamespaceMap,
+ const OUString& rXMLName )
+{
+ OUString sLocalName;
+ sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName(rXMLName, &sLocalName);
+ SvXMLTokenMap aMap( aTypes );
+ sal_uInt16 mnToken = aMap.Get( nPrefix, sLocalName );
+ return ( mnToken == XML_TOK_UNKNOWN )
+ ? rXMLName
+ : lcl_getBasicTypeName( xRepository, rNamespaceMap, rXMLName );
+}
+
+rtl::OUString lcl_getBasicTypeName(
+ const Reference<XDataTypeRepository>& xRepository,
+ const SvXMLNamespaceMap& rNamespaceMap,
+ const OUString& rXMLName )
+{
+ OUString sTypeName = rXMLName;
+ try
+ {
+ sTypeName =
+ xRepository->getBasicDataType(
+ lcl_getTypeClass( xRepository, rNamespaceMap, rXMLName ) )
+ ->getName();
+ }
+ catch( const Exception& )
+ {
+ DBG_ERROR( "exception during type creation" );
}
return sTypeName;
}