summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2009-07-10 11:40:30 -0400
committerKohei Yoshida <kyoshida@novell.com>2009-07-10 11:40:30 -0400
commitd4525f04ae2536cb875aeaac21e74b24f47fd8c8 (patch)
treeecfa7abd8978fc805f8e7e3a5697b4f75b1e56c8
parent85d289d4e5c4de17cf5dd7ce611f395227e6a071 (diff)
More work on handling properties for dimension objects.
-rw-r--r--cmake/CMakeLists.txt2
-rw-r--r--inc/dpdimension.hxx8
-rw-r--r--inc/dpsource.hxx5
-rw-r--r--inc/global.hxx44
-rw-r--r--inc/proptokenizer.hxx50
-rw-r--r--inc/sharedstring.hxx52
-rw-r--r--source/dpdimension.cxx61
-rw-r--r--source/dpsource.cxx4
-rw-r--r--source/global.cxx86
-rw-r--r--source/proptokenizer.cxx48
-rw-r--r--source/sharedstring.cxx94
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);
+}
+
+}