#include "dpdimensions.hxx" #include "dpdimension.hxx" #include "dpsource.hxx" #include #define SERVICE_NAME "com.sun.star.sheet.DataPilotSourceDimensions" #define IMPLEMENTATION_NAME "com.novell.openoffice.DataPilotDimensions" using ::com::sun::star::beans::XPropertySet; using ::com::sun::star::container::NoSuchElementException; using ::com::sun::star::container::XNameAccess; using ::com::sun::star::container::XNamed; using ::com::sun::star::lang::WrappedTargetException; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::RuntimeException; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::Type; using ::com::sun::star::uno::UNO_QUERY; using ::rtl::OUString; #include #include #include namespace { class StackPrinter { public: explicit StackPrinter(const char* msg) : msMsg(msg) { fprintf(stdout, "%s: --begin\n", msMsg.c_str()); mfStartTime = getTime(); } ~StackPrinter() { double fEndTime = getTime(); fprintf(stdout, "%s: --end (duration: %g sec)\n", msMsg.c_str(), (fEndTime-mfStartTime)); } private: double getTime() const { timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + tv.tv_usec / 1000000.0; } ::std::string msMsg; double mfStartTime; }; } namespace dpsource { DPDimensions::DPDimensions(SourceProvider* pSrc) : mpSource(pSrc) { init(); } DPDimensions::~DPDimensions() { } void DPDimensions::init() { maDimensions.clear(); static const char* ppNames[] = { "Andy", "Bruce", "Charlie", 0 }; for (int i = 0; ppNames[i]; ++i) { OUString aDimName = OUString::createFromAscii(ppNames[i]); Reference xRef(new DPDimension(mpSource)); xRef->setName(aDimName); maDimensions.insert(NamedObjMapType::value_type(aDimName, xRef)); } // Insert data layout dimension. OUString aDimName = OUString::createFromAscii("Data"); Reference xRef(new DPDimension(mpSource)); xRef->setName(aDimName); Reference xPropSet(xRef, UNO_QUERY); if (xPropSet.is()) { Any any; any <<= static_cast(true); OUString aPropName = mpSource->getPropertyTokenizer().getStringFromToken(PropertyTokenizer::IsDataLayoutDimension); fprintf(stdout, "DPDimensions::init: prop name = '%s'\n", rtl::OUStringToOString(aPropName, RTL_TEXTENCODING_UTF8).getStr()); xPropSet->setPropertyValue(aPropName, any); } maDimensions.insert(NamedObjMapType::value_type(aDimName, xRef)); } Any DPDimensions::getByName(const OUString& aName) throw (NoSuchElementException, WrappedTargetException, RuntimeException) { NamedObjMapType::const_iterator itr = maDimensions.find(aName); if (itr == maDimensions.end()) throw NoSuchElementException(); Any any; any <<= itr->second; return any; } Sequence DPDimensions::getElementNames() throw (RuntimeException) { Sequence aElemNames(maDimensions.size()); NamedObjMapType::const_iterator itr = maDimensions.begin(), itrEnd = maDimensions.end(); for (sal_Int32 i = 0; itr != itrEnd; ++itr, ++i) aElemNames[i] = itr->first; return aElemNames; } sal_Bool DPDimensions::hasByName(const OUString& aName) throw (RuntimeException) { NamedObjMapType::const_iterator itr = maDimensions.find(aName); return (itr != maDimensions.end()); } Type DPDimensions::getElementType() throw (RuntimeException) { return getCppuType(static_cast< Reference* >(NULL)); } sal_Bool DPDimensions::hasElements() throw (RuntimeException) { return !maDimensions.empty(); } OUString DPDimensions::getImplementationName() throw (RuntimeException) { return OUString::createFromAscii(IMPLEMENTATION_NAME); } sal_Bool DPDimensions::supportsService(const OUString& ServiceName) throw (RuntimeException) { return ServiceName.equalsAscii(SERVICE_NAME); } Sequence DPDimensions::getSupportedServiceNames() throw (RuntimeException) { Sequence aSrvNames(1); aSrvNames[0] = OUString::createFromAscii(SERVICE_NAME); return aSrvNames; } }