diff options
Diffstat (limited to 'writerfilter/source/resourcemodel/TagLogger.cxx')
-rw-r--r-- | writerfilter/source/resourcemodel/TagLogger.cxx | 125 |
1 files changed, 121 insertions, 4 deletions
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx index 1d9b23623e56..f19bef7c01d1 100644 --- a/writerfilter/source/resourcemodel/TagLogger.cxx +++ b/writerfilter/source/resourcemodel/TagLogger.cxx @@ -25,6 +25,7 @@ * ************************************************************************/ +#ifdef DEBUG #include <fstream> #include <string.h> #include <resourcemodel/TagLogger.hxx> @@ -51,11 +52,65 @@ namespace writerfilter void XMLTag::addAttr(string sName, sal_uInt32 nValue) { - char buffer[256]; + static char buffer[256]; snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue); addAttr(sName, buffer); } +void XMLTag::addAttr(string sName, uno::Any aAny) +{ + string aTmpStrInt; + string aTmpStrFloat; + string aTmpStrString; + + static char buffer[256]; + + try + { + sal_Int32 nInt = 0; + aAny >>= nInt; + + snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, + nInt); + + aTmpStrInt = buffer; + } + catch (uno::Exception aExcept) + { + aTmpStrInt = "exception"; + } + + try + { + float nFloat = 0.0; + aAny >>= nFloat; + + snprintf(buffer, sizeof(buffer), "%f", + nFloat); + + aTmpStrFloat = buffer; + } + catch (uno::Exception aExcept) + { + aTmpStrFloat = "exception"; + } + + try + { + ::rtl::OUString aStr; + aAny >>= aStr; + + aTmpStrString = OUStringToOString(aStr, RTL_TEXTENCODING_ASCII_US).getStr(); + } + catch (uno::Exception aExcept) + { + aTmpStrString = "exception"; + } + + addAttr(sName, "i:" + aTmpStrInt + " f:" + aTmpStrFloat + " s:" + + aTmpStrString); +} + void XMLTag::addTag(XMLTag::Pointer_t pTag) { if (pTag != XMLTag::Pointer_t()) @@ -64,9 +119,14 @@ namespace writerfilter void XMLTag::chars(const string & rChars) { - mChars = rChars; + mChars += rChars; } +void XMLTag::chars(const ::rtl::OUString & rChars) +{ + chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr()); +} + const string & XMLTag::getTag() const { return mTag; @@ -162,6 +222,7 @@ namespace writerfilter static TagLoggerHashMap_t * tagLoggers = NULL; TagLogger::TagLogger() + : mFileName("writerfilter") { } @@ -169,6 +230,11 @@ namespace writerfilter { } + void TagLogger::setFileName(const string & rName) + { + mFileName = rName; + } + TagLogger::Pointer_t TagLogger::getInstance(const char * name) { if (tagLoggers == NULL) @@ -233,6 +299,11 @@ namespace writerfilter currentTag()->addAttr(name, value); } +void TagLogger::attribute(const string & name, const uno::Any aAny) +{ + currentTag()->addAttr(name, aAny); +} + void TagLogger::addTag(XMLTag::Pointer_t pTag) { currentTag()->addTag(pTag); @@ -287,7 +358,18 @@ namespace writerfilter else fileName += "/tmp"; - fileName += "/writerfilter."; + string sPrefix = aIt->second->mFileName; + size_t nLastSlash = sPrefix.find_last_of('/'); + size_t nLastBackslash = sPrefix.find_last_of('\\'); + size_t nCutPos = nLastSlash; + if (nLastBackslash < nCutPos) + nCutPos = nLastBackslash; + if (nCutPos < sPrefix.size()) + sPrefix = sPrefix.substr(nCutPos + 1); + + fileName += "/"; + fileName += sPrefix; + fileName +="."; fileName += name; fileName += ".xml"; @@ -336,7 +418,7 @@ namespace writerfilter static char sBuffer[256]; snprintf(sBuffer, sizeof(sBuffer), - "0x%" SAL_PRIxUINT32 "x, %" SAL_PRIxUINT32 "d", rSprm.getId(), + "0x%" SAL_PRIxUINT32 ", %" SAL_PRIuUINT32, rSprm.getId(), rSprm.getId()); pTag->addAttr("id", sBuffer); pTag->addAttr("value", rSprm.getValue()->toString()); @@ -347,4 +429,39 @@ namespace writerfilter } +XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet) +{ + uno::Reference<beans::XPropertySetInfo> xPropSetInfo(rPropSet->getPropertySetInfo()); + uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties()); + + XMLTag::Pointer_t pResult(new XMLTag("unoPropertySet")); + + for (int i = 0; i < aProps.getLength(); ++i) + { + XMLTag::Pointer_t pPropTag(new XMLTag("property")); + + ::rtl::OUString sName(aProps[i].Name); + + pPropTag->addAttr("name", sName); + try + { + pPropTag->addAttr("value", rPropSet->getPropertyValue(sName)); + } + catch (uno::Exception aException) + { + XMLTag::Pointer_t pException(new XMLTag("exception")); + + pException->chars("getPropertyValue(\""); + pException->chars(sName); + pException->chars("\")"); + pPropTag->addTag(pException); + } + + pResult->addTag(pPropTag); + } + + return pResult; +} + } +#endif // DEBUG |