diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2009-07-10 11:40:30 -0400 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2009-07-10 11:40:30 -0400 |
commit | d4525f04ae2536cb875aeaac21e74b24f47fd8c8 (patch) | |
tree | ecfa7abd8978fc805f8e7e3a5697b4f75b1e56c8 | |
parent | 85d289d4e5c4de17cf5dd7ce611f395227e6a071 (diff) |
More work on handling properties for dimension objects.
-rw-r--r-- | cmake/CMakeLists.txt | 2 | ||||
-rw-r--r-- | inc/dpdimension.hxx | 8 | ||||
-rw-r--r-- | inc/dpsource.hxx | 5 | ||||
-rw-r--r-- | inc/global.hxx | 44 | ||||
-rw-r--r-- | inc/proptokenizer.hxx | 50 | ||||
-rw-r--r-- | inc/sharedstring.hxx | 52 | ||||
-rw-r--r-- | source/dpdimension.cxx | 61 | ||||
-rw-r--r-- | source/dpsource.cxx | 4 | ||||
-rw-r--r-- | source/global.cxx | 86 | ||||
-rw-r--r-- | source/proptokenizer.cxx | 48 | ||||
-rw-r--r-- | source/sharedstring.cxx | 94 |
11 files changed, 316 insertions, 138 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1fd5c27..76c4f60 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -36,6 +36,8 @@ set(SRC_FILES ../source/dpmembers.cxx ../source/dpmember.cxx ../source/global.cxx + ../source/proptokenizer.cxx + ../source/sharedstring.cxx ) add_library(${TARGET_NAME} SHARED ${SRC_FILES}) diff --git a/inc/dpdimension.hxx b/inc/dpdimension.hxx index a641437..ef72742 100644 --- a/inc/dpdimension.hxx +++ b/inc/dpdimension.hxx @@ -6,6 +6,8 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/container/XNamed.hpp> #include <com/sun/star/sheet/XHierarchiesSupplier.hpp> +#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp> +#include <com/sun/star/sheet/GeneralFunction.hpp> namespace dpsource { @@ -84,6 +86,12 @@ private: ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > mxHierarchies; ::rtl::OUString maName; + + sal_Int32 mnUsedHierarchy; + ::com::sun::star::sheet::GeneralFunction meFunction; + ::com::sun::star::sheet::DataPilotFieldOrientation meOrientation; + sal_Bool mbIsDataLayoutDimension; + SourceProvider* mpSource; }; diff --git a/inc/dpsource.hxx b/inc/dpsource.hxx index d274504..3ff0b72 100644 --- a/inc/dpsource.hxx +++ b/inc/dpsource.hxx @@ -12,6 +12,7 @@ #include <com/sun/star/uno/XComponentContext.hpp> #include "global.hxx" +#include "proptokenizer.hxx" namespace com { namespace sun { namespace star { namespace container { @@ -125,7 +126,7 @@ public: const ::com::sun::star::uno::Reference< ::com::sun::star::util::XRefreshListener >& l ) throw (::com::sun::star::uno::RuntimeException); - SimpleSharedString& getSharedStrings(); + PropertyTokenizer& getPropertyTokenizer(); private: SourceProvider(); @@ -135,7 +136,7 @@ private: ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> mxDimensions; - SimpleSharedString maSharedStrings; + PropertyTokenizer maPropTokens; }; } diff --git a/inc/global.hxx b/inc/global.hxx index 00a91db..a2b6fff 100644 --- a/inc/global.hxx +++ b/inc/global.hxx @@ -12,50 +12,6 @@ typedef ::__gnu_cxx::hash_map< ::rtl::OUString, ::com::sun::star::uno::Reference< ::com::sun::star::container::XNamed >, ::rtl::OUStringHash > NamedObjMapType; -// ============================================================================ - -typedef sal_Int32 StrID; - -class SimpleSharedString -{ -public: - static const StrID EMPTY = 0; - - SimpleSharedString(); - SimpleSharedString(const SimpleSharedString& r); - ~SimpleSharedString(); - - const ::rtl::OUString* getString(StrID nId); - StrID getStringId(const ::rtl::OUString& aStr); - StrID insertString(const ::rtl::OUString& aStr); - -private: - - /** internal shared string table implementation */ - class StringTable - { - public: - StrID insertString(const ::rtl::OUString& aStr); - StrID getStringId(const ::rtl::OUString& aStr); - const ::rtl::OUString* getString(StrID nId) const; - - StringTable(); - StringTable(const StringTable& r); - ~StringTable(); - - private: - typedef ::__gnu_cxx::hash_map< ::rtl::OUString, StrID, ::rtl::OUStringHash > SharedStrMap; - - ::std::vector< ::rtl::OUString > maSharedStrings; - SharedStrMap maSharedStringIds; - StrID mnStrCount; - }; - - StringTable maStringTable; -}; - -// ============================================================================ - } #endif diff --git a/inc/proptokenizer.hxx b/inc/proptokenizer.hxx new file mode 100644 index 0000000..34f3b3c --- /dev/null +++ b/inc/proptokenizer.hxx @@ -0,0 +1,50 @@ +#ifndef __PROPTOKENIZER_HXX__ +#define __PROPTOKENIZER_HXX__ + +#include <cppuhelper/implementationentry.hxx> + +#include "sharedstring.hxx" + +namespace dpsource { + +class PropertyTokenizer +{ +public: + + enum NameToken { + + // DataPilot dimension properties + Filter, + Function, + HasHiddenMember, + IsDataLayoutDimension, + Orientation, + Original, + Position, + UsedHierarchy, + + Unknown + }; + + PropertyTokenizer(); + ~PropertyTokenizer(); + + NameToken getNameToken(const ::rtl::OUString& rName); + +private: + SimpleSharedString maSharedStrings; + + // DataPilot dimension properties + StrID mnFilter; + StrID mnFunction; + StrID mnHasHiddenMember; + StrID mnIsDataLayoutDimension; + StrID mnOrientation; + StrID mnOriginal; + StrID mnPosition; + StrID mnUsedHierarchy; +}; + +} + +#endif diff --git a/inc/sharedstring.hxx b/inc/sharedstring.hxx new file mode 100644 index 0000000..e427613 --- /dev/null +++ b/inc/sharedstring.hxx @@ -0,0 +1,52 @@ +#ifndef __SHAREDSTRING_HXX__ +#define __SHAREDSTRING_HXX__ + +#include <cppuhelper/implementationentry.hxx> + +#include <hash_map> + +namespace dpsource { + +typedef sal_Int32 StrID; + +class SimpleSharedString +{ +public: + static const StrID EMPTY = 0; + + SimpleSharedString(); + SimpleSharedString(const SimpleSharedString& r); + ~SimpleSharedString(); + + const ::rtl::OUString* getString(StrID nId); + StrID getStringId(const ::rtl::OUString& aStr); + StrID insertString(const ::rtl::OUString& aStr); + +private: + + /** internal shared string table implementation */ + class StringTable + { + public: + StrID insertString(const ::rtl::OUString& aStr); + StrID getStringId(const ::rtl::OUString& aStr); + const ::rtl::OUString* getString(StrID nId) const; + + StringTable(); + StringTable(const StringTable& r); + ~StringTable(); + + private: + typedef ::__gnu_cxx::hash_map< ::rtl::OUString, StrID, ::rtl::OUStringHash > SharedStrMap; + + ::std::vector< ::rtl::OUString > maSharedStrings; + SharedStrMap maSharedStringIds; + StrID mnStrCount; + }; + + StringTable maStringTable; +}; + +} + +#endif diff --git a/source/dpdimension.cxx b/source/dpdimension.cxx index f9a6cec..3789793 100644 --- a/source/dpdimension.cxx +++ b/source/dpdimension.cxx @@ -2,6 +2,7 @@ #include "dpdimension.hxx" #include "dphierarchies.hxx" #include "dpsource.hxx" +#include "proptokenizer.hxx" using ::com::sun::star::beans::XPropertyChangeListener; using ::com::sun::star::beans::XVetoableChangeListener; @@ -57,6 +58,10 @@ private: namespace dpsource { DPDimension::DPDimension(SourceProvider* pSrc) : + mnUsedHierarchy(0), + meFunction(::com::sun::star::sheet::GeneralFunction_NONE), + meOrientation(::com::sun::star::sheet::DataPilotFieldOrientation_HIDDEN), + mbIsDataLayoutDimension(false), mpSource(pSrc) { } @@ -97,15 +102,63 @@ Reference<XPropertySetInfo> DPDimension::getPropertySetInfo() throw (RuntimeExce void DPDimension::setPropertyValue(const OUString& aPropertyName, const Any& aValue) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) { - fprintf(stdout, "DPDimension::setPropertyValue: prop name = '%s'\n", rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); - StrID nPropName = mpSource->getSharedStrings().getStringId(aPropertyName); +// fprintf(stdout, "DPDimension::setPropertyValue: prop name = '%s'\n", rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); + PropertyTokenizer& rPropTokens = mpSource->getPropertyTokenizer(); + PropertyTokenizer::NameToken eToken = rPropTokens.getNameToken(aPropertyName); + switch (eToken) + { + case PropertyTokenizer::Function: + if (aValue >>= meFunction) + fprintf(stdout, "DPDimension::setPropertyValue: function (%d)\n", meFunction); + break; + case PropertyTokenizer::IsDataLayoutDimension: + if (aValue >>= mbIsDataLayoutDimension) + fprintf(stdout, "DPDimension::setPropertyValue: data layout dimension (%d)\n", mbIsDataLayoutDimension); + break; + case PropertyTokenizer::Orientation: + if (aValue >>= meOrientation) + fprintf(stdout, "DPDimension::setPropertyValue: orientation (%d)\n", meOrientation); + break; + case PropertyTokenizer::UsedHierarchy: + if (aValue >>= mnUsedHierarchy) + fprintf(stdout, "DPDimension::setPropertyValue: used hierarchy (%ld)\n", mnUsedHierarchy); + break; + default: + fprintf(stdout, "DPDimension::setPropertyValue: unhanlded prop name = '%s'\n", + rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); + } } Any DPDimension::getPropertyValue(const OUString& aPropertyName) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) { - fprintf(stdout, "DPDimension::getPropertyValue: prop name = '%s'\n", rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); - return Any(); +// fprintf(stdout, "DPDimension::getPropertyValue: prop name = '%s'\n", rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); + PropertyTokenizer& rPropTokens = mpSource->getPropertyTokenizer(); + PropertyTokenizer::NameToken eToken = rPropTokens.getNameToken(aPropertyName); + Any any; + switch (eToken) + { + case PropertyTokenizer::Function: + fprintf(stdout, "DPDimension::getPropertyValue: function (%d)\n", meFunction); + any <<= meFunction; + break; + case PropertyTokenizer::IsDataLayoutDimension: + fprintf(stdout, "DPDimension::getPropertyValue: data layout dimension (%d)\n", mbIsDataLayoutDimension); + any <<= mbIsDataLayoutDimension; + break; + case PropertyTokenizer::Orientation: + fprintf(stdout, "DPDimension::getPropertyValue: orientation (%d)\n", meOrientation); + any <<= meOrientation; + break; + case PropertyTokenizer::UsedHierarchy: + fprintf(stdout, "DPDimension::getPropertyValue: used hierarchy (%ld)\n", mnUsedHierarchy); + any <<= mnUsedHierarchy; + break; + default: + fprintf(stdout, "DPDimension::getPropertyValue: unhandled prop name = '%s'\n", + rtl::OUStringToOString(aPropertyName, RTL_TEXTENCODING_UTF8).getStr()); + } + return any; } void DPDimension::addPropertyChangeListener( diff --git a/source/dpsource.cxx b/source/dpsource.cxx index a4d9f26..fdd58be 100644 --- a/source/dpsource.cxx +++ b/source/dpsource.cxx @@ -181,9 +181,9 @@ void SourceProvider::removeRefreshListener(const Reference< XRefreshListener >& { } -SimpleSharedString& SourceProvider::getSharedStrings() +PropertyTokenizer& SourceProvider::getPropertyTokenizer() { - return maSharedStrings; + return maPropTokens; } // ============================================================================ diff --git a/source/global.cxx b/source/global.cxx index 92ecc85..b384eea 100644 --- a/source/global.cxx +++ b/source/global.cxx @@ -1,94 +1,8 @@ #include "global.hxx" -using ::rtl::OUString; - namespace dpsource { -SimpleSharedString::StringTable::StringTable() : - mnStrCount(0) -{ - // empty string (ID = 0) - maSharedStrings.push_back(OUString()); - maSharedStringIds.insert( SharedStrMap::value_type(OUString(), mnStrCount++) ); -} - -SimpleSharedString::StringTable::StringTable(const SimpleSharedString::StringTable& r) : - maSharedStrings(r.maSharedStrings), - maSharedStringIds(r.maSharedStringIds), - mnStrCount(r.mnStrCount) -{ -} - -SimpleSharedString::StringTable::~StringTable() -{ -} - -StrID SimpleSharedString::StringTable::insertString(const OUString& aStr) -{ - SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr), - itrEnd = maSharedStringIds.end(); - if (itr == itrEnd) - { - // new string. - maSharedStrings.push_back(aStr); - maSharedStringIds.insert( SharedStrMap::value_type(aStr, mnStrCount) ); - return mnStrCount++; - } - - // existing string. - return itr->second; -} - -StrID SimpleSharedString::StringTable::getStringId(const OUString& aStr) -{ - SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr), - itrEnd = maSharedStringIds.end(); - if (itr == itrEnd) - { - // string not found. - return insertString(aStr); - } - return itr->second; -} - -const OUString* SimpleSharedString::StringTable::getString(StrID nId) const -{ - if (nId >= mnStrCount) - return NULL; - - return &maSharedStrings[nId]; -} - -// ---------------------------------------------------------------------------- - -SimpleSharedString::SimpleSharedString() -{ -} - -SimpleSharedString::SimpleSharedString(const SimpleSharedString& r) : - maStringTable(r.maStringTable) -{ -} - -SimpleSharedString::~SimpleSharedString() -{ -} - -StrID SimpleSharedString::insertString(const OUString& aStr) -{ - return maStringTable.insertString(aStr); -} - -const OUString* SimpleSharedString::getString(StrID nId) -{ - return maStringTable.getString(nId); -} - -StrID SimpleSharedString::getStringId(const OUString& aStr) -{ - return maStringTable.getStringId(aStr); -} } diff --git a/source/proptokenizer.cxx b/source/proptokenizer.cxx new file mode 100644 index 0000000..ce749d8 --- /dev/null +++ b/source/proptokenizer.cxx @@ -0,0 +1,48 @@ + +#include "proptokenizer.hxx" + +using ::rtl::OUString; + +namespace dpsource { + +PropertyTokenizer::PropertyTokenizer() : + mnFilter(maSharedStrings.insertString(OUString::createFromAscii("Filter"))), + mnFunction(maSharedStrings.insertString(OUString::createFromAscii("Function"))), + mnHasHiddenMember(maSharedStrings.insertString(OUString::createFromAscii("HasHiddenMember"))), + mnIsDataLayoutDimension(maSharedStrings.insertString(OUString::createFromAscii("IsDataLayoutDimension"))), + mnOrientation(maSharedStrings.insertString(OUString::createFromAscii("Orientation"))), + mnOriginal(maSharedStrings.insertString(OUString::createFromAscii("Original"))), + mnPosition(maSharedStrings.insertString(OUString::createFromAscii("Position"))), + mnUsedHierarchy(maSharedStrings.insertString(OUString::createFromAscii("UsedHierarchy"))) +{ +} + +PropertyTokenizer::~PropertyTokenizer() +{ +} + +PropertyTokenizer::NameToken PropertyTokenizer::getNameToken(const OUString& rName) +{ + StrID nStrID = maSharedStrings.getStringId(rName); + + if (nStrID == mnFilter) + return Filter; + else if (nStrID == mnFunction) + return Function; + else if (nStrID == mnHasHiddenMember) + return HasHiddenMember; + else if (nStrID == mnIsDataLayoutDimension) + return IsDataLayoutDimension; + else if (nStrID == mnOrientation) + return Orientation; + else if (nStrID == mnOriginal) + return Original; + else if (nStrID == mnPosition) + return Position; + else if (nStrID == mnUsedHierarchy) + return UsedHierarchy; + + return Unknown; +} + +} diff --git a/source/sharedstring.cxx b/source/sharedstring.cxx new file mode 100644 index 0000000..c04fb17 --- /dev/null +++ b/source/sharedstring.cxx @@ -0,0 +1,94 @@ + +#include "sharedstring.hxx" + +using ::rtl::OUString; + +namespace dpsource { + +SimpleSharedString::StringTable::StringTable() : + mnStrCount(0) +{ + // empty string (ID = 0) + maSharedStrings.push_back(OUString()); + maSharedStringIds.insert( SharedStrMap::value_type(OUString(), mnStrCount++) ); +} + +SimpleSharedString::StringTable::StringTable(const SimpleSharedString::StringTable& r) : + maSharedStrings(r.maSharedStrings), + maSharedStringIds(r.maSharedStringIds), + mnStrCount(r.mnStrCount) +{ +} + +SimpleSharedString::StringTable::~StringTable() +{ +} + +StrID SimpleSharedString::StringTable::insertString(const OUString& aStr) +{ + SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr), + itrEnd = maSharedStringIds.end(); + + if (itr == itrEnd) + { + // new string. + maSharedStrings.push_back(aStr); + maSharedStringIds.insert( SharedStrMap::value_type(aStr, mnStrCount) ); + return mnStrCount++; + } + + // existing string. + return itr->second; +} + +StrID SimpleSharedString::StringTable::getStringId(const OUString& aStr) +{ + SharedStrMap::const_iterator itr = maSharedStringIds.find(aStr), + itrEnd = maSharedStringIds.end(); + if (itr == itrEnd) + { + // string not found. + return insertString(aStr); + } + return itr->second; +} + +const OUString* SimpleSharedString::StringTable::getString(StrID nId) const +{ + if (nId >= mnStrCount) + return NULL; + + return &maSharedStrings[nId]; +} + +// ---------------------------------------------------------------------------- + +SimpleSharedString::SimpleSharedString() +{ +} + +SimpleSharedString::SimpleSharedString(const SimpleSharedString& r) : + maStringTable(r.maStringTable) +{ +} + +SimpleSharedString::~SimpleSharedString() +{ +} + +StrID SimpleSharedString::insertString(const OUString& aStr) +{ + return maStringTable.insertString(aStr); +} + +const OUString* SimpleSharedString::getString(StrID nId) +{ + return maStringTable.getString(nId); +} + +StrID SimpleSharedString::getStringId(const OUString& aStr) +{ + return maStringTable.getStringId(aStr); +} + +} |