Kaydet (Commit) e820df57 authored tarafından Michael Meeks's avatar Michael Meeks

filters: Batch fetch filter config properties.

Also re-use a single set of OUString property names in
a sequence rather than re-allocating them constantly.

Change-Id: I7f0afc52363e57ea0c63f46f1e1f63cb752bb302
üst f55ddffd
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include <com/sun/star/lang/XSingleServiceFactory.hpp> #include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/beans/NamedValue.hpp> #include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertyAccess.hpp>
#include <com/sun/star/beans/XMultiPropertySet.hpp>
#include <com/sun/star/beans/XProperty.hpp> #include <com/sun/star/beans/XProperty.hpp>
#include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/Property.hpp> #include <com/sun/star/beans/Property.hpp>
...@@ -58,10 +60,53 @@ FilterCache::FilterCache() ...@@ -58,10 +60,53 @@ FilterCache::FilterCache()
: BaseLock ( ) : BaseLock ( )
, m_eFillState(E_CONTAINS_NOTHING ) , m_eFillState(E_CONTAINS_NOTHING )
{ {
int i = 0;
OUString sStandardProps[9];
sStandardProps[i++] = PROPNAME_USERDATA;
sStandardProps[i++] = PROPNAME_TEMPLATENAME;
// E_READ_UPDATE only above
sStandardProps[i++] = PROPNAME_TYPE;
sStandardProps[i++] = PROPNAME_FILEFORMATVERSION;
sStandardProps[i++] = PROPNAME_UICOMPONENT;
sStandardProps[i++] = PROPNAME_FILTERSERVICE;
sStandardProps[i++] = PROPNAME_DOCUMENTSERVICE;
sStandardProps[i++] = PROPNAME_EXPORTEXTENSION;
sStandardProps[i++] = PROPNAME_FLAGS; // must be last.
assert(i == SAL_N_ELEMENTS(sStandardProps));
// E_READ_NOTHING -> creative nothingness.
m_aStandardProps[E_READ_STANDARD] =
css::uno::Sequence< OUString >(sStandardProps + 2, 7);
m_aStandardProps[E_READ_UPDATE] =
css::uno::Sequence< OUString >(sStandardProps, 2);
m_aStandardProps[E_READ_ALL] =
css::uno::Sequence< OUString >(sStandardProps,
SAL_N_ELEMENTS(sStandardProps));
i = 0;
OUString sTypeProps[7];
sTypeProps[i++] = PROPNAME_MEDIATYPE;
// E_READ_UPDATE only above
sTypeProps[i++] = PROPNAME_PREFERREDFILTER;
sTypeProps[i++] = PROPNAME_DETECTSERVICE;
sTypeProps[i++] = PROPNAME_URLPATTERN;
sTypeProps[i++] = PROPNAME_EXTENSIONS;
sTypeProps[i++] = PROPNAME_PREFERRED;
sTypeProps[i++] = PROPNAME_CLIPBOARDFORMAT;
assert(i == SAL_N_ELEMENTS(sTypeProps));
// E_READ_NOTHING -> more creative nothingness.
m_aTypeProps[E_READ_STANDARD] =
css::uno::Sequence< OUString >(sTypeProps + 1, 6);
m_aTypeProps[E_READ_UPDATE] =
css::uno::Sequence< OUString >(sTypeProps, 1);
m_aTypeProps[E_READ_ALL] =
css::uno::Sequence< OUString >(sTypeProps,
SAL_N_ELEMENTS(sTypeProps));
} }
FilterCache::~FilterCache() FilterCache::~FilterCache()
{ {
if (m_xTypesChglisteners.is()) if (m_xTypesChglisteners.is())
...@@ -1615,79 +1660,71 @@ CacheItem FilterCache::impl_loadItem(const css::uno::Reference< css::container:: ...@@ -1615,79 +1660,71 @@ CacheItem FilterCache::impl_loadItem(const css::uno::Reference< css::container::
{ {
case E_TYPE : case E_TYPE :
{ {
// read standard properties of a type assert(eOption >= 0 && eOption <= E_READ_ALL);
if ( css::uno::Sequence< OUString > &rNames = m_aTypeProps[eOption];
(eOption == E_READ_STANDARD) ||
(eOption == E_READ_ALL ) // read standard properties of a filter
) if (rNames.getLength() > 0)
{ {
aItem[PROPNAME_PREFERREDFILTER] = xItem->getByName(PROPNAME_PREFERREDFILTER); css::uno::Reference< css::beans::XMultiPropertySet >
aItem[PROPNAME_DETECTSERVICE ] = xItem->getByName(PROPNAME_DETECTSERVICE ); xPropSet( xItem, css::uno::UNO_QUERY_THROW);
aItem[PROPNAME_URLPATTERN ] = xItem->getByName(PROPNAME_URLPATTERN ); css::uno::Sequence< css::uno::Any > aValues;
aItem[PROPNAME_EXTENSIONS ] = xItem->getByName(PROPNAME_EXTENSIONS ); aValues = xPropSet->getPropertyValues(rNames);
aItem[PROPNAME_PREFERRED ] = xItem->getByName(PROPNAME_PREFERRED );
aItem[PROPNAME_CLIPBOARDFORMAT] = xItem->getByName(PROPNAME_CLIPBOARDFORMAT); for (sal_Int32 i = 0; i < aValues.getLength(); i++)
aItem[rNames[i]] = aValues[i];
} }
// read optional properties of a type // read optional properties of a type
// no else here! Is an additional switch ... // no else here! Is an additional switch ...
if ( if (eOption == E_READ_UPDATE || eOption == E_READ_ALL)
(eOption == E_READ_UPDATE) ||
(eOption == E_READ_ALL )
)
{
aItem[PROPNAME_MEDIATYPE ] = xItem->getByName(PROPNAME_MEDIATYPE );
impl_readPatchUINames(xItem, aItem); impl_readPatchUINames(xItem, aItem);
}
} }
break; break;
case E_FILTER : case E_FILTER :
{ {
assert(eOption >= 0 && eOption <= E_READ_ALL);
css::uno::Sequence< OUString > &rNames = m_aStandardProps[eOption];
// read standard properties of a filter // read standard properties of a filter
if ( if (rNames.getLength() > 0)
(eOption == E_READ_STANDARD) ||
(eOption == E_READ_ALL )
)
{ {
aItem[PROPNAME_TYPE ] = xItem->getByName(PROPNAME_TYPE ); css::uno::Reference< css::beans::XMultiPropertySet >
aItem[PROPNAME_FILEFORMATVERSION] = xItem->getByName(PROPNAME_FILEFORMATVERSION); xPropSet( xItem, css::uno::UNO_QUERY_THROW);
aItem[PROPNAME_UICOMPONENT ] = xItem->getByName(PROPNAME_UICOMPONENT ); css::uno::Sequence< css::uno::Any > aValues;
aItem[PROPNAME_FILTERSERVICE ] = xItem->getByName(PROPNAME_FILTERSERVICE ); aValues = xPropSet->getPropertyValues(rNames);
aItem[PROPNAME_DOCUMENTSERVICE ] = xItem->getByName(PROPNAME_DOCUMENTSERVICE );
aItem[PROPNAME_EXPORTEXTENSION ] = xItem->getByName(PROPNAME_EXPORTEXTENSION ); for (sal_Int32 i = 0; i < rNames.getLength(); i++)
{
// special handling for flags! Convert it from a list of names to its OUString &rPropName = rNames[i];
// int representation ... if (i != rNames.getLength() - 1 || rPropName != PROPNAME_FLAGS)
css::uno::Sequence< OUString > lFlagNames; aItem[rPropName] = aValues[i];
if (xItem->getByName(PROPNAME_FLAGS) >>= lFlagNames) else
aItem[PROPNAME_FLAGS] <<= FilterCache::impl_convertFlagNames2FlagField(lFlagNames); {
assert(rPropName == PROPNAME_FLAGS);
// special handling for flags! Convert it from a list of names to its
// int representation ...
css::uno::Sequence< OUString > lFlagNames;
if (aValues[i] >>= lFlagNames)
aItem[rPropName] <<= FilterCache::impl_convertFlagNames2FlagField(lFlagNames);
}
}
} }
// read optional properties of a filter
// no else here! Is an additional switch ...
if (
(eOption == E_READ_UPDATE) ||
(eOption == E_READ_ALL )
)
{
aItem[PROPNAME_USERDATA ] = xItem->getByName(PROPNAME_USERDATA );
aItem[PROPNAME_TEMPLATENAME] = xItem->getByName(PROPNAME_TEMPLATENAME);
//TODO remove it if moving of filter uinames to type uinames //TODO remove it if moving of filter uinames to type uinames
// will be finished really // will be finished really
#ifdef AS_ENABLE_FILTER_UINAMES #ifdef AS_ENABLE_FILTER_UINAMES
if (eOption == E_READ_UPDATE || eOption == E_READ_ALL)
impl_readPatchUINames(xItem, aItem); impl_readPatchUINames(xItem, aItem);
#endif // AS_ENABLE_FILTER_UINAMES #endif // AS_ENABLE_FILTER_UINAMES
}
} }
break; break;
case E_FRAMELOADER : case E_FRAMELOADER :
case E_CONTENTHANDLER : case E_CONTENTHANDLER :
{
aItem[PROPNAME_TYPES] = xItem->getByName(PROPNAME_TYPES); aItem[PROPNAME_TYPES] = xItem->getByName(PROPNAME_TYPES);
} break;
break;
default: break; default: break;
} }
...@@ -2275,7 +2312,6 @@ OUString FilterCache::impl_searchContentHandlerForType(const OUString& sType) co ...@@ -2275,7 +2312,6 @@ OUString FilterCache::impl_searchContentHandlerForType(const OUString& sType) co
const OUString& sItem = pIt->first; const OUString& sItem = pIt->first;
::comphelper::SequenceAsHashMap lProps(pIt->second); ::comphelper::SequenceAsHashMap lProps(pIt->second);
OUStringList lTypes(lProps[PROPNAME_TYPES]); OUStringList lTypes(lProps[PROPNAME_TYPES]);
if (::std::find(lTypes.begin(), lTypes.end(), sType) != lTypes.end()) if (::std::find(lTypes.begin(), lTypes.end(), sType) != lTypes.end())
return sItem; return sItem;
} }
......
...@@ -235,6 +235,11 @@ class FilterCache : public BaseLock ...@@ -235,6 +235,11 @@ class FilterCache : public BaseLock
OUStringList m_lChangedFrameLoaders; OUStringList m_lChangedFrameLoaders;
OUStringList m_lChangedContentHandlers; OUStringList m_lChangedContentHandlers;
/// standard property names for filter config keyed by EReadOption
css::uno::Sequence< OUString > m_aStandardProps[4];
/// type property names for filter config keyed by EReadOption
css::uno::Sequence< OUString > m_aTypeProps[4];
/// readonly acccess to the module configuration of OOo /// readonly acccess to the module configuration of OOo
css::uno::Reference< css::container::XNameAccess > m_xModuleCfg; css::uno::Reference< css::container::XNameAccess > m_xModuleCfg;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment