filter/Configuration_filter.mk | 6 filter/qa/complex/filter/detection/typeDetection/files.csv | 6 filter/source/config/cache/typedetection.cxx | 19 filter/source/config/cache/typedetection.hxx | 800 ++++------ filter/source/config/fragments/filters/HTML.xcu | 2 filter/source/config/fragments/filters/HTML_MasterDoc.xcu | 2 filter/source/config/fragments/filters/HTML__StarCalc_.xcu | 2 filter/source/config/fragments/filters/HTML__StarWriter_.xcu | 2 filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu | 2 filter/source/config/fragments/filters/writerglobal8_HTML.xcu | 2 filter/source/config/fragments/types/generic_HTML.xcu | 12 filter/source/config/fragments/types/writer_web_HTML.xcu | 12 sfx2/source/dialog/filtergrouping.cxx | 2 sfx2/source/view/viewsh.cxx | 2 wizards/com/sun/star/wizards/web/data/CGDocument.java | 13 wizards/com/sun/star/wizards/web/data/CGDocument.py | 11 16 files changed, 446 insertions(+), 449 deletions(-)
New commits: commit 3f76713dbfc4adef9966ba5afd3eaf6480854064 Author: Kohei Yoshida <[email protected]> Date: Tue May 22 14:31:39 2012 -0400 Renamed writer_web_HTML to generic_HTML. This should reflect the fact that this type was already used as a generic HTML type. Change-Id: I0a209d51ed229f07aff001075c39bfc82d4c3088 diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk index 9c49027..01548f3 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk @@ -310,7 +310,7 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr # fcfg_writer $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter/source/config/fragments/types,\ - writer_web_HTML \ + generic_HTML \ writer_Lotus_1_2_3_10_DOS_StarWriter \ writer_Lotus_1_2_3_10_WIN_StarWriter \ calc_MS_Excel_40 \ @@ -396,7 +396,7 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr # fcfg_web $(call filter_Configuration_add_types,fcfg_langpack,fcfg_web_types.xcu,filter/source/config/fragments/types,\ - writer_web_HTML \ + generic_HTML \ writer_Text \ writer_web_HTML_help \ writer_StarOffice_XML_Writer \ @@ -457,7 +457,7 @@ $(call filter_Configuration_add_ui_filters,fcfg_langpack,filter/source/config/fr # fcfg_calc $(call filter_Configuration_add_types,fcfg_langpack,fcfg_calc_types.xcu,filter/source/config/fragments/types,\ calc_DIF \ - writer_web_HTML \ + generic_HTML \ calc_Lotus \ calc_QPro \ calc_MS_Excel_40 \ diff --git a/filter/qa/complex/filter/detection/typeDetection/files.csv b/filter/qa/complex/filter/detection/typeDetection/files.csv index 84b593f..eaad74e 100644 --- a/filter/qa/complex/filter/detection/typeDetection/files.csv +++ b/filter/qa/complex/filter/detection/typeDetection/files.csv @@ -28,7 +28,7 @@ Writer5_document;Writer/Writer5.sdw;writer_StarWriter_50;writer_StarWriter_50_Vo Writer5_template;Writer/Writer5_template.vor;writer_StarWriter_50_VorlageTemplate;writer_StarWriter_50_VorlageTemplate Writer6_document;Writer/Writer6.sxw;writer_StarOffice_XML_Writer;writer_StarOffice_XML_Writer Writer6_template;Writer/Writer6_template.stw;writer_StarOffice_XML_Writer_Template;writer_StarOffice_XML_Writer -Writer6_html;Writer/WriterWeb.html;writer_web_HTML;writer_web_HTML +Writer6_html;Writer/WriterWeb.html;generic_HTML;generic_HTML ApiPro3;Writer/AmiPro_3x.sam;writer_Text_encoded:writer_Text;writer_Text_encoded:writer_Text Applix;Writer/Applix.aw;writer_Text_encoded:writer_Text;writer_Text_encoded:writer_Text Text2;Writer/Counterstrike I.txt;writer_Text_encoded:writer_Text;writer_Text_encoded:writer_Text @@ -66,11 +66,11 @@ Exel95_template;Calc/Excel5_template.XLT;calc_MS_Excel_5095;calc_MS_Excel_5095 Excel97_document;Calc/Excel97_2000_XP.xls;calc_MS_Excel_97;calc_MS_Excel_97 #Excel97_1dummy;Calc/Excel97_2000_XP.dummy;calc_MS_Excel_97;calc_MS_Excel_97 Excel97_template;Calc/Excel97_2000_XP.xlt;calc_MS_Excel_97;calc_MS_Excel_97 -Calc_html;Calc/HTML_Calc.html;writer_web_HTML;writer_web_HTML +Calc_html;Calc/HTML_Calc.html;generic_HTML;generic_HTML Lotus;Calc/Lotus.WK1;writer_Lotus_1_2_3_10_DOS_StarWriter;writer_Lotus_1_2_3_10_DOS_StarWriter Calc_rtf;Calc/RTF_StarOffice_Calc.rtf;writer_Rich_Text_Format;writer_Rich_Text_Format slk;Calc/SYLK.SLK;calc_SYLK;writer_Text_encoded:writer_Text_encoded -Webpagequery;Calc/Webpagequery.html;writer_web_HTML;writer_web_HTML +Webpagequery;Calc/Webpagequery.html;generic_HTML;generic_HTML dbase;Calc/dbase.DBF;calc_dBase;writer_Text_encoded ###################################################### # D R A W diff --git a/filter/source/config/fragments/filters/HTML.xcu b/filter/source/config/fragments/filters/HTML.xcu index 853b32d..19c3412 100644 --- a/filter/source/config/fragments/filters/HTML.xcu +++ b/filter/source/config/fragments/filters/HTML.xcu @@ -4,7 +4,7 @@ <prop oor:name="FilterService"/> <prop oor:name="UserData"><value>HTML</value></prop> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="TemplateName"/> <prop oor:name="DocumentService"><value>com.sun.star.text.WebDocument</value></prop> </node> diff --git a/filter/source/config/fragments/filters/HTML_MasterDoc.xcu b/filter/source/config/fragments/filters/HTML_MasterDoc.xcu index edcec04..b17b501 100644 --- a/filter/source/config/fragments/filters/HTML_MasterDoc.xcu +++ b/filter/source/config/fragments/filters/HTML_MasterDoc.xcu @@ -1,6 +1,6 @@ <node oor:name="HTML_MasterDoc" oor:op="replace"> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="DocumentService"><value>com.sun.star.text.GlobalDocument</value></prop> <prop oor:name="UIComponent"/> <prop oor:name="UserData"><value>HTML</value></prop> diff --git a/filter/source/config/fragments/filters/HTML__StarCalc_.xcu b/filter/source/config/fragments/filters/HTML__StarCalc_.xcu index 01d88c8..e4d3c6b 100644 --- a/filter/source/config/fragments/filters/HTML__StarCalc_.xcu +++ b/filter/source/config/fragments/filters/HTML__StarCalc_.xcu @@ -4,7 +4,7 @@ <prop oor:name="FilterService"/> <prop oor:name="UserData"><value></value></prop> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="TemplateName"/> <prop oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop> </node> diff --git a/filter/source/config/fragments/filters/HTML__StarWriter_.xcu b/filter/source/config/fragments/filters/HTML__StarWriter_.xcu index 285fb7d..412031d 100644 --- a/filter/source/config/fragments/filters/HTML__StarWriter_.xcu +++ b/filter/source/config/fragments/filters/HTML__StarWriter_.xcu @@ -4,7 +4,7 @@ <prop oor:name="FilterService"/> <prop oor:name="UserData"><value>HTML</value></prop> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="TemplateName"/> <prop oor:name="DocumentService"><value>com.sun.star.text.TextDocument</value></prop> </node> diff --git a/filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu b/filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu index cd9e434..e81ced8 100644 --- a/filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu +++ b/filter/source/config/fragments/filters/calc_HTML_WebQuery.xcu @@ -4,7 +4,7 @@ <prop oor:name="FilterService"/> <prop oor:name="UserData"><value></value></prop> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="TemplateName"/> <prop oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop> </node> diff --git a/filter/source/config/fragments/filters/writerglobal8_HTML.xcu b/filter/source/config/fragments/filters/writerglobal8_HTML.xcu index 65bfdb5..b381b76 100644 --- a/filter/source/config/fragments/filters/writerglobal8_HTML.xcu +++ b/filter/source/config/fragments/filters/writerglobal8_HTML.xcu @@ -4,7 +4,7 @@ <prop oor:name="FilterService"/> <prop oor:name="UserData"><value>HTML</value></prop> <prop oor:name="FileFormatVersion"><value>0</value></prop> - <prop oor:name="Type"><value>writer_web_HTML</value></prop> + <prop oor:name="Type"><value>generic_HTML</value></prop> <prop oor:name="TemplateName"/> <prop oor:name="DocumentService"><value>com.sun.star.text.GlobalDocument</value></prop> <prop oor:name="UIName"> diff --git a/filter/source/config/fragments/types/generic_HTML.xcu b/filter/source/config/fragments/types/generic_HTML.xcu new file mode 100644 index 0000000..c0885f7 --- /dev/null +++ b/filter/source/config/fragments/types/generic_HTML.xcu @@ -0,0 +1,12 @@ + <node oor:name="generic_HTML" oor:op="replace" > + <prop oor:name="DetectService"><value>com.sun.star.text.FormatDetector</value></prop> + <prop oor:name="URLPattern"><value>private:factory/swriter/web*</value></prop> + <prop oor:name="Extensions"><value>html htm</value></prop> + <prop oor:name="MediaType"><value>text/html</value></prop> + <prop oor:name="Preferred"><value>false</value></prop> + <prop oor:name="PreferredFilter"><value>HTML</value></prop> + <prop oor:name="UIName"> + <value>HTML Document</value> + </prop> + <prop oor:name="ClipboardFormat"/> + </node> diff --git a/filter/source/config/fragments/types/writer_web_HTML.xcu b/filter/source/config/fragments/types/writer_web_HTML.xcu deleted file mode 100644 index a1d9a09..0000000 --- a/filter/source/config/fragments/types/writer_web_HTML.xcu +++ /dev/null @@ -1,12 +0,0 @@ - <node oor:name="writer_web_HTML" oor:op="replace" > - <prop oor:name="DetectService"><value>com.sun.star.text.FormatDetector</value></prop> - <prop oor:name="URLPattern"><value>private:factory/swriter/web*</value></prop> - <prop oor:name="Extensions"><value>html htm</value></prop> - <prop oor:name="MediaType"><value>text/html</value></prop> - <prop oor:name="Preferred"><value>false</value></prop> - <prop oor:name="PreferredFilter"><value>HTML</value></prop> - <prop oor:name="UIName"> - <value>HTML Document</value> - </prop> - <prop oor:name="ClipboardFormat"/> - </node> diff --git a/sfx2/source/dialog/filtergrouping.cxx b/sfx2/source/dialog/filtergrouping.cxx index 25f7a39..e91c512 100644 --- a/sfx2/source/dialog/filtergrouping.cxx +++ b/sfx2/source/dialog/filtergrouping.cxx @@ -999,7 +999,7 @@ namespace sfx2 std::vector< ExportFilter > aFilterGroup; Reference< XFilterGroupManager > xFilterGroupManager( _rxFilterManager, UNO_QUERY ); ::rtl::OUString sTypeName; - const ::rtl::OUString sWriterHTMLType( DEFINE_CONST_OUSTRING("writer_web_HTML") ); + const ::rtl::OUString sWriterHTMLType( DEFINE_CONST_OUSTRING("generic_HTML") ); const ::rtl::OUString sGraphicHTMLType( DEFINE_CONST_OUSTRING("graphic_HTML") ); const ::rtl::OUString sXHTMLType( DEFINE_CONST_OUSTRING("XHTML_File") ); const ::rtl::OUString sPDFType( DEFINE_CONST_OUSTRING("pdf_Portable_Document_Format") ); diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index d4cb20b..6b6b067 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -607,7 +607,7 @@ void SfxViewShell::ExecMisc_Impl( SfxRequest &rReq ) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case SID_WEBHTML: { - static const char HTML_DOCUMENT_TYPE[] = "writer_web_HTML"; + static const char HTML_DOCUMENT_TYPE[] = "generic_HTML"; static const char HTML_GRAPHIC_TYPE[] = "graphic_HTML"; const sal_Int32 FILTERFLAG_EXPORT = 0x00000002; diff --git a/wizards/com/sun/star/wizards/web/data/CGDocument.java b/wizards/com/sun/star/wizards/web/data/CGDocument.java index 1eed684..7f30bac 100644 --- a/wizards/com/sun/star/wizards/web/data/CGDocument.java +++ b/wizards/com/sun/star/wizards/web/data/CGDocument.java @@ -264,16 +264,13 @@ public class CGDocument extends ConfigSetItem implements XMLProvider { return TypeDetection.NO_TYPE; } + if (media.startsWith("generic_HTML")) + { + return TypeDetection.HTML_DOC; + } if (media.startsWith("writer")) { - if (media.startsWith("writer_web_HTML")) - { - return TypeDetection.HTML_DOC; - } - else - { - return TypeDetection.WRITER_DOC; - } + return TypeDetection.WRITER_DOC; } else if (media.startsWith("calc")) { diff --git a/wizards/com/sun/star/wizards/web/data/CGDocument.py b/wizards/com/sun/star/wizards/web/data/CGDocument.py index 11f6dae..a5a4163 100644 --- a/wizards/com/sun/star/wizards/web/data/CGDocument.py +++ b/wizards/com/sun/star/wizards/web/data/CGDocument.py @@ -153,13 +153,10 @@ class CGDocument(ConfigGroup): def getDocType(self, media): if media == "": return NO_TYPE - - if media.startswith("writer"): - if media.startswith("writer_web_HTML"): - return HTML_DOC - else: - return WRITER_DOC - + elif media.startswith("generic_HTML"): + return HTML_DOC + elif media.startswith("writer"): + return WRITER_DOC elif media.startswith("calc"): return CALC_DOC elif media.startswith("draw"): commit 552bebe6fa27fa58d07d87283a4b24e6052ab3d4 Author: Kohei Yoshida <[email protected]> Date: Tue May 22 12:55:22 2012 -0400 When the caller specifies filter type, stick to it and don't overwrite it. Change-Id: I35a3efc506bbcc33ea4c3d2466929f8227dae102 diff --git a/filter/source/config/cache/typedetection.cxx b/filter/source/config/cache/typedetection.cxx index 5b57dc9..47a06e1 100644 --- a/filter/source/config/cache/typedetection.cxx +++ b/filter/source/config/cache/typedetection.cxx @@ -143,9 +143,18 @@ TypeDetection::~TypeDetection() css::uno::Reference< css::util::XURLTransformer > xParser(m_xSMGR->createInstance(SERVICE_URLTRANSFORMER), css::uno::UNO_QUERY); xParser->parseStrict(aURL); - //******************************************* - // preselected filter, type or document service? - // use it as first "flat" detected type later! + rtl::OUString aSelectedFilter = stlDescriptor.getUnpackedValueOrDefault( + comphelper::MediaDescriptor::PROP_FILTERNAME(), rtl::OUString()); + if (!aSelectedFilter.isEmpty()) + { + // Caller specified the filter type. Honor it. Just get the default + // type for that filter, and bail out. + if (impl_validateAndSetFilterOnDescriptor(stlDescriptor, aSelectedFilter)) + return stlDescriptor[comphelper::MediaDescriptor::PROP_TYPENAME()].get<rtl::OUString>(); + } + + // preselected type or document service? use it as first "flat" detected + // type later! FlatDetection lFlatTypes; impl_getPreselection(aURL, stlDescriptor, lFlatTypes); @@ -682,10 +691,6 @@ void TypeDetection::impl_getPreselection(const css::util::URL& aP if (!sSelectedType.isEmpty()) impl_getPreselectionForType(sSelectedType, aParsedURL, rFlatTypes); - ::rtl::OUString sSelectedFilter = rDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_FILTERNAME(), ::rtl::OUString()); - if (!sSelectedFilter.isEmpty()) - impl_getPreselectionForFilter(sSelectedFilter, aParsedURL, rFlatTypes); - ::rtl::OUString sSelectedDoc = rDescriptor.getUnpackedValueOrDefault(::comphelper::MediaDescriptor::PROP_DOCUMENTSERVICE(), ::rtl::OUString()); if (!sSelectedDoc.isEmpty()) impl_getPreselectionForDocumentService(sSelectedDoc, aParsedURL, rFlatTypes); commit e5ace9ef5a0035e0fa1970903c056015aea81025 Author: Kohei Yoshida <[email protected]> Date: Tue May 22 12:05:44 2012 -0400 Reduce indentation. Change-Id: Ie335ee44a347ab588dbf6cdeb38ef19246c1ad47 diff --git a/filter/source/config/cache/typedetection.hxx b/filter/source/config/cache/typedetection.hxx index c7a18ef..c55d0c4 100644 --- a/filter/source/config/cache/typedetection.hxx +++ b/filter/source/config/cache/typedetection.hxx @@ -40,8 +40,7 @@ //_______________________________________________ // namespace -namespace filter{ - namespace config{ +namespace filter{ namespace config { namespace css = ::com::sun::star; @@ -55,407 +54,406 @@ namespace css = ::com::sun::star; class TypeDetection : public ::cppu::ImplInheritanceHelper1< BaseContainer , css::document::XTypeDetection > { - //------------------------------------------- - // native interface - - public: - - //--------------------------------------- - // ctor/dtor - - /** @short standard ctor to connect this interface wrapper to - the global filter cache instance ... - - @param xSMGR - reference to the uno service manager, which created this service instance. - */ - TypeDetection(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); - - //--------------------------------------- - - /** @short standard dtor. - */ - virtual ~TypeDetection(); - - //------------------------------------------- - // private helper - - private: - - //--------------------------------------- - /** TODO document me */ - sal_Bool impl_getPreselectionForType(const ::rtl::OUString& sPreSelType, - const css::util::URL& aParsedURL , - FlatDetection& rFlatTypes ); - - //--------------------------------------- - /** TODO document me */ - sal_Bool impl_getPreselectionForFilter(const ::rtl::OUString& sPreSelFilter, - const css::util::URL& aParsedURL , - FlatDetection& rFlatTypes ); - - //--------------------------------------- - /** TODO document me */ - sal_Bool impl_getPreselectionForDocumentService(const ::rtl::OUString& sPreSelDocumentService, - const css::util::URL& aParsedURL , - FlatDetection& rFlatTypes ); - - //--------------------------------------- - - /** @short check if a filter or a type was preselected inside the given - MediaDescriptor and validate this information. - - @descr Only in case the preselected filter exists and its type registration - seems to be usefully, it would be used realy as valid type detection - result. This method doesnt make any deep detection here. It checks only - if the preselection match to the URL by an URLPattern. - This information has to be added to the given rFlatTypes list too. - The outside code can use it to supress a deep detection then in general. - Because pattern are defined as non detectable at all! - - @param pDescriptor - provides any easy-to-use stl interface to the MediaDescriptor. - Note : Its content will be adapted to returned result of this method. - Means: The type/filter entries of it will be actualized or removed. - - @param rFlatTypes - the preselected type (or the registered type of a preselected filter) - will be added here as first(!) element. Further we have to provide the - information, if this type match to the given URL by its URLPattern - registration. - */ - void impl_getPreselection(const css::util::URL& aParsedURL , - ::comphelper::MediaDescriptor& rDescriptor, - FlatDetection& rFlatTypes ); - - //--------------------------------------- - - /** @short make a combined flat/deep type detection - - @descr It steps over all flat detected types (given by the parameter lFlatTypes), - try it and search for most suitable one. - The specified MediaDescriptor will be patched, so it contain - the right values everytime. Using of any deep detection service - can be enabled/disabled. And last but not least: If the results - wont be realy clear (because a flat detected type has no deep - detection service), a "sugested" type name will be returned as "rLastChance". - It can be used after e.g. all well known deep detection services - was used without getting any result. Then this "last-chance-type" - should be returned. Of course using of it can fail too ... but its a try :-) - - As an optimization - this method collects the names of all used deep - detection services. This information can be usefull inside the may be - afterwards called method "impl_detectTypeDeepOnly()"! - - @param rDescriptor - provides any easy-to-use stl interface to the MediaDescriptor. - Note : Its content will be adapted to returned result of this method. - Means: The type/filter entries of it will be actualized or removed from it. - - @param lFlatTypes - a list of all flat detected types, which should be checked here. - No other types are allowed here! - - @param rLastChance - the internal name of a "suggested type" ... (see before) - Note: it will be reseted to an empty string everytimes. So - a set value of "rLastChance" can be detected outside very easy. - - @param rUsedDetectors - used as [out] parameter. It contains a list of names of all deep - detection services, which was used inside this method. - Such detectors can be ignored later if "impl_detectTypeDeepOnly()" - is called. - - @param bAllowDeep - enable/disable using of a might existing deep detection service. - - @return The internal name of a detected type. - An empty value if detection failed. .... but see rLastChance - for additional returns! - */ - ::rtl::OUString impl_detectTypeFlatAndDeep( ::comphelper::MediaDescriptor& rDescriptor , - const FlatDetection& lFlatTypes , - sal_Bool bAllowDeep , - OUStringList& rUsedDetectors, - ::rtl::OUString& rLastChance ); - - //--------------------------------------- - - /** @short make a deep type detection only - - @descr It steps over all well known deep detection services - and check her results. The first positive result will be - used for return. Its more a "try and error" algorithm then - a real type detection and will be used if a flat detection - cant work realy ... e.g. if the extension of an URL is - missing or wrong. - - @param rDescriptor - provides any easy-to-use stl interface to the MediaDescriptor. - Note : Its content will be adapted to returned result of this method. - Means: The type/filter entries of it will be actualized or removed from it. - - @param rUsedDetectors - It contains a list of names of all deep detection services, - which was already used inside the method "impl_detectTypeFlatAndDeep()"! - Such detectors must be ignored here! - - @return The internal name of a detected type. - An empty value if detection failed. - */ - ::rtl::OUString impl_detectTypeDeepOnly( ::comphelper::MediaDescriptor& rDescriptor , - const OUStringList& rUsedDetectors); - - //--------------------------------------- - - /** @short seek a might existing stream to position 0. - - @descr This is an optinal action to be more robust - in case any detect service doesnt make this seek ... - Normaly it's part of any called detect service or filter ... - but sometimes it's not done there. - - @param rDescriptor - a stl representation of the MediaDescriptor as in/out parameter. - */ - void impl_seekStreamToZero(comphelper::MediaDescriptor& rDescriptor); - - //--------------------------------------- - - /** @short make deep type detection for a specified - detect service (threadsafe!). - - @descr It creates the right uno service, prepare the - needed MediaDescriptor, call ths right interfaces, - and return the results. - - @attention The results (means type and corresponding filter) - are already part of the in/out parameter pDescriptor. - (in case they was valid). - - @param sDetectService - uno service name of the detect service. - - @param rDescriptor - a stl representation of the MediaDescriptor as in/out parameter. - */ - ::rtl::OUString impl_askDetectService(const ::rtl::OUString& sDetectService, - ::comphelper::MediaDescriptor& rDescriptor ); - - //--------------------------------------- - - /** @short try to find an interaction handler and - ask him to select a possible filter for - this unknown format. - - @descr If the user select a filter, it will be used as return value - without further checking against the given file content! - - @param rDescriptor - a stl representation of the MediaDescriptor as in/out parameter. - - @return [string] - a valid type name or an empty string if user canceled interaction. - */ - ::rtl::OUString impl_askUserForTypeAndFilterIfAllowed(::comphelper::MediaDescriptor& rDescriptor); - - //--------------------------------------- - - /** @short check if an input stream is already part of the - given MediaDesciptor and creates a new one if neccessary. - - @attention This method does further something special! - <ul> - <li> - If the given URL seem to be a streamable content, but creation of the stream - failed (might by an IOException), this method throws an exception. - (May be an existing interaction handler must be called here too ...) - The whole detection must be interrupted then and the interface method queryTypeByDescriptor() - must return an empty type name value. - - That prevent us against multiple handling of the same error more then ones - (e.g. if we ask all detect services as fallback ...). - </li> - <li> - In case the stream already exists inside the descriptor this method does nothing. - </li> - <li> - In case the stream does not exists but can be created successfully, the stream will - be added to the descriptor. - </li> - </ul> - - @param rDescriptor - provides any easy-to-use stl interface to the MediaDescriptor. - Note : Its content will be adapted to returned result of this method. - Means: The stream will be added to it. - - @throw Any suitable exception if stream should be opened but operation was not sucessfull. - Note: If an interactionHandler is part of the given descriptor too, it was already used. - Means: let the exception pass trough the top most interface method! - */ - void impl_openStream(::comphelper::MediaDescriptor& rDescriptor) - throw (css::uno::Exception); - - //--------------------------------------- - - /** @short validate the specified type and its relation ships - and set all needed informations related to this type - in the specified descriptor. - - @descr Related informations are: - corresponding filter - - media type - - ... - - @param rDescriptor - provides access to the outside MediaDescriptor. - - @param sType - the name of the type, which should be set on the descriptor. - Can be empty to remove any related value from the descriptor! - - @return TRUE the specified type and its registrations was valid(!) and - could be set on the descriptor. - */ - sal_Bool impl_validateAndSetTypeOnDescriptor( ::comphelper::MediaDescriptor& rDescriptor, - const ::rtl::OUString& sType ); - - //--------------------------------------- - - /** @short validate the specified filter and its relation ships - and set all needed informations related to this filter - in the specified descriptor. - - @descr Related informations are: - corresponding type - - ... - - @param rDescriptor - provides access to the outside MediaDescriptor. - - @param sFilter - the name of the filter, which should be set on the descriptor. - Can be empty to remove any related value from the descriptor! - - @return TRUE the specified type and its registrations was valid(!) and - could be set on the descriptor. - */ - sal_Bool impl_validateAndSetFilterOnDescriptor( ::comphelper::MediaDescriptor& rDescriptor, - const ::rtl::OUString& sFilter ); - - //--------------------------------------- - - /** @short remove anythimng related to a TYPE/FILTER entry from the - specified MediaDescriptor. - - @descr This method works together with impl_validateAndSetTypeOnDescriptor()/ - impl_validateAndSetFilterOnDescriptor(). All informations, which can be - set by these two operations must be "removable" by this method. - - @param rDescriptor - reference to the MediaDescriptor (represented by an easy-to-use - stl interface!), which should be patched. - */ - void impl_removeTypeFilterFromDescriptor(::comphelper::MediaDescriptor& rDescriptor); - - //--------------------------------------- - - /** @short search the best suitable filter for the given type - and add it into the media descriptor. - - @descr Normaly this is a type detection only ... - but for some special features we must overwrite our detection - because a file must be loaded into a special (means preselected) - application. - - E.g. CSV/TXT format are sometimes ugly to handle .-) - - Note: If the descriptor already include a filter - (may be selected by a FilterSelect interaction or preselected - by the user itself) ... we dont change that here ! - - @param rDescriptor - reference to the MediaDescriptor (represented by an easy-to-use - stl interface!), which should be patched. - - @param sType - the internal type name, where we search a filter for. - Used as IN/OUT parameter so we can overrule the detection result for - types too ! - - @note #i60158# - sometimes our text ascii and our csv filter cant work together. - Then we overwrite our detection hardly. - sType param is used as out parameter then too ... and - rDescriptor will be changed by selecting another filter. - (see code) - */ - void impl_checkResultsAndAddBestFilter(::comphelper::MediaDescriptor& rDescriptor, - ::rtl::OUString& sType ); - - //------------------------------------------- - // uno interface - - public: - - //--------------------------------------- - // XTypeDetection - - virtual ::rtl::OUString SAL_CALL queryTypeByURL(const ::rtl::OUString& sURL) - throw (css::uno::RuntimeException); - - virtual ::rtl::OUString SAL_CALL queryTypeByDescriptor(css::uno::Sequence< css::beans::PropertyValue >& lDescriptor, - sal_Bool bAllowDeep ) - throw (css::uno::RuntimeException); - - //------------------------------------------- - // static uno helper! - - public: - - //--------------------------------------- - - /** @short return the uno implementation name of this class. - - @descr Because this information is used at several places - (and mostly an object instance of this class is not possible) - its implemented as a static function! - - @return The fix uno implementation name of this class. - */ - static ::rtl::OUString impl_getImplementationName(); - - //--------------------------------------- - - /** @short return the list of supported uno services of this class. - - @descr Because this information is used at several places - (and mostly an object instance of this class is not possible) - its implemented as a static function! - - @return The fix list of uno services supported by this class. - */ - static css::uno::Sequence< ::rtl::OUString > impl_getSupportedServiceNames(); - - //--------------------------------------- - - /** @short return a new intsnace of this class. - - @descr This method is used by the uno service manager, to create - a new instance of this service if needed. - - @param xSMGR - reference to the uno service manager, which require - this new instance. It should be passed to the new object - so it can be used internaly to create own needed uno resources. - - @return The new instance of this service as an uno reference. - */ - static css::uno::Reference< css::uno::XInterface > impl_createInstance(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); +//------------------------------------------- +// native interface + +public: + + //--------------------------------------- + // ctor/dtor + + /** @short standard ctor to connect this interface wrapper to + the global filter cache instance ... + + @param xSMGR + reference to the uno service manager, which created this service instance. + */ + TypeDetection(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); + + //--------------------------------------- + + /** @short standard dtor. + */ + virtual ~TypeDetection(); + +//------------------------------------------- +// private helper + +private: + + //--------------------------------------- + /** TODO document me */ + sal_Bool impl_getPreselectionForType(const ::rtl::OUString& sPreSelType, + const css::util::URL& aParsedURL , + FlatDetection& rFlatTypes ); + + //--------------------------------------- + /** TODO document me */ + sal_Bool impl_getPreselectionForFilter(const ::rtl::OUString& sPreSelFilter, + const css::util::URL& aParsedURL , + FlatDetection& rFlatTypes ); + + //--------------------------------------- + /** TODO document me */ + sal_Bool impl_getPreselectionForDocumentService(const ::rtl::OUString& sPreSelDocumentService, + const css::util::URL& aParsedURL , + FlatDetection& rFlatTypes ); + + //--------------------------------------- + + /** @short check if a filter or a type was preselected inside the given + MediaDescriptor and validate this information. + + @descr Only in case the preselected filter exists and its type registration + seems to be usefully, it would be used realy as valid type detection + result. This method doesnt make any deep detection here. It checks only + if the preselection match to the URL by an URLPattern. + This information has to be added to the given rFlatTypes list too. + The outside code can use it to supress a deep detection then in general. + Because pattern are defined as non detectable at all! + + @param pDescriptor + provides any easy-to-use stl interface to the MediaDescriptor. + Note : Its content will be adapted to returned result of this method. + Means: The type/filter entries of it will be actualized or removed. + + @param rFlatTypes + the preselected type (or the registered type of a preselected filter) + will be added here as first(!) element. Further we have to provide the + information, if this type match to the given URL by its URLPattern + registration. + */ + void impl_getPreselection(const css::util::URL& aParsedURL , + ::comphelper::MediaDescriptor& rDescriptor, + FlatDetection& rFlatTypes ); + + //--------------------------------------- + + /** @short make a combined flat/deep type detection + + @descr It steps over all flat detected types (given by the parameter lFlatTypes), + try it and search for most suitable one. + The specified MediaDescriptor will be patched, so it contain + the right values everytime. Using of any deep detection service + can be enabled/disabled. And last but not least: If the results + wont be realy clear (because a flat detected type has no deep + detection service), a "sugested" type name will be returned as "rLastChance". + It can be used after e.g. all well known deep detection services + was used without getting any result. Then this "last-chance-type" + should be returned. Of course using of it can fail too ... but its a try :-) + + As an optimization - this method collects the names of all used deep + detection services. This information can be usefull inside the may be + afterwards called method "impl_detectTypeDeepOnly()"! + + @param rDescriptor + provides any easy-to-use stl interface to the MediaDescriptor. + Note : Its content will be adapted to returned result of this method. + Means: The type/filter entries of it will be actualized or removed from it. + + @param lFlatTypes + a list of all flat detected types, which should be checked here. + No other types are allowed here! + + @param rLastChance + the internal name of a "suggested type" ... (see before) + Note: it will be reseted to an empty string everytimes. So + a set value of "rLastChance" can be detected outside very easy. + + @param rUsedDetectors + used as [out] parameter. It contains a list of names of all deep + detection services, which was used inside this method. + Such detectors can be ignored later if "impl_detectTypeDeepOnly()" + is called. + + @param bAllowDeep + enable/disable using of a might existing deep detection service. + + @return The internal name of a detected type. + An empty value if detection failed. .... but see rLastChance + for additional returns! + */ + ::rtl::OUString impl_detectTypeFlatAndDeep( ::comphelper::MediaDescriptor& rDescriptor , + const FlatDetection& lFlatTypes , + sal_Bool bAllowDeep , + OUStringList& rUsedDetectors, + ::rtl::OUString& rLastChance ); + + //--------------------------------------- + + /** @short make a deep type detection only + + @descr It steps over all well known deep detection services + and check her results. The first positive result will be + used for return. Its more a "try and error" algorithm then + a real type detection and will be used if a flat detection + cant work realy ... e.g. if the extension of an URL is + missing or wrong. + + @param rDescriptor + provides any easy-to-use stl interface to the MediaDescriptor. + Note : Its content will be adapted to returned result of this method. + Means: The type/filter entries of it will be actualized or removed from it. + + @param rUsedDetectors + It contains a list of names of all deep detection services, + which was already used inside the method "impl_detectTypeFlatAndDeep()"! + Such detectors must be ignored here! + + @return The internal name of a detected type. + An empty value if detection failed. + */ + ::rtl::OUString impl_detectTypeDeepOnly( ::comphelper::MediaDescriptor& rDescriptor , + const OUStringList& rUsedDetectors); + + //--------------------------------------- + + /** @short seek a might existing stream to position 0. + + @descr This is an optinal action to be more robust + in case any detect service doesnt make this seek ... + Normaly it's part of any called detect service or filter ... + but sometimes it's not done there. + + @param rDescriptor + a stl representation of the MediaDescriptor as in/out parameter. + */ + void impl_seekStreamToZero(comphelper::MediaDescriptor& rDescriptor); + + //--------------------------------------- + + /** @short make deep type detection for a specified + detect service (threadsafe!). + + @descr It creates the right uno service, prepare the + needed MediaDescriptor, call ths right interfaces, + and return the results. + + @attention The results (means type and corresponding filter) + are already part of the in/out parameter pDescriptor. + (in case they was valid). + + @param sDetectService + uno service name of the detect service. + + @param rDescriptor + a stl representation of the MediaDescriptor as in/out parameter. + */ + ::rtl::OUString impl_askDetectService(const ::rtl::OUString& sDetectService, + ::comphelper::MediaDescriptor& rDescriptor ); + + //--------------------------------------- + + /** @short try to find an interaction handler and + ask him to select a possible filter for + this unknown format. + + @descr If the user select a filter, it will be used as return value + without further checking against the given file content! + + @param rDescriptor + a stl representation of the MediaDescriptor as in/out parameter. + + @return [string] + a valid type name or an empty string if user canceled interaction. + */ + ::rtl::OUString impl_askUserForTypeAndFilterIfAllowed(::comphelper::MediaDescriptor& rDescriptor); + + //--------------------------------------- + + /** @short check if an input stream is already part of the + given MediaDesciptor and creates a new one if neccessary. + + @attention This method does further something special! + <ul> + <li> + If the given URL seem to be a streamable content, but creation of the stream + failed (might by an IOException), this method throws an exception. + (May be an existing interaction handler must be called here too ...) + The whole detection must be interrupted then and the interface method queryTypeByDescriptor() + must return an empty type name value. + + That prevent us against multiple handling of the same error more then ones + (e.g. if we ask all detect services as fallback ...). + </li> + <li> + In case the stream already exists inside the descriptor this method does nothing. + </li> + <li> + In case the stream does not exists but can be created successfully, the stream will + be added to the descriptor. + </li> + </ul> + + @param rDescriptor + provides any easy-to-use stl interface to the MediaDescriptor. + Note : Its content will be adapted to returned result of this method. + Means: The stream will be added to it. + + @throw Any suitable exception if stream should be opened but operation was not sucessfull. + Note: If an interactionHandler is part of the given descriptor too, it was already used. + Means: let the exception pass trough the top most interface method! + */ + void impl_openStream(::comphelper::MediaDescriptor& rDescriptor) + throw (css::uno::Exception); + + //--------------------------------------- + + /** @short validate the specified type and its relation ships + and set all needed informations related to this type + in the specified descriptor. + + @descr Related informations are: - corresponding filter + - media type + - ... + + @param rDescriptor + provides access to the outside MediaDescriptor. + + @param sType + the name of the type, which should be set on the descriptor. + Can be empty to remove any related value from the descriptor! + + @return TRUE the specified type and its registrations was valid(!) and + could be set on the descriptor. + */ + sal_Bool impl_validateAndSetTypeOnDescriptor( ::comphelper::MediaDescriptor& rDescriptor, + const ::rtl::OUString& sType ); + + //--------------------------------------- + + /** @short validate the specified filter and its relation ships + and set all needed informations related to this filter + in the specified descriptor. + + @descr Related informations are: - corresponding type + - ... + + @param rDescriptor + provides access to the outside MediaDescriptor. + + @param sFilter + the name of the filter, which should be set on the descriptor. + Can be empty to remove any related value from the descriptor! + + @return TRUE the specified type and its registrations was valid(!) and + could be set on the descriptor. + */ + sal_Bool impl_validateAndSetFilterOnDescriptor( ::comphelper::MediaDescriptor& rDescriptor, + const ::rtl::OUString& sFilter ); + + //--------------------------------------- + + /** @short remove anythimng related to a TYPE/FILTER entry from the + specified MediaDescriptor. + + @descr This method works together with impl_validateAndSetTypeOnDescriptor()/ + impl_validateAndSetFilterOnDescriptor(). All informations, which can be + set by these two operations must be "removable" by this method. + + @param rDescriptor + reference to the MediaDescriptor (represented by an easy-to-use + stl interface!), which should be patched. + */ + void impl_removeTypeFilterFromDescriptor(::comphelper::MediaDescriptor& rDescriptor); + + //--------------------------------------- + + /** @short search the best suitable filter for the given type + and add it into the media descriptor. + + @descr Normaly this is a type detection only ... + but for some special features we must overwrite our detection + because a file must be loaded into a special (means preselected) + application. + + E.g. CSV/TXT format are sometimes ugly to handle .-) + + Note: If the descriptor already include a filter + (may be selected by a FilterSelect interaction or preselected + by the user itself) ... we dont change that here ! + + @param rDescriptor + reference to the MediaDescriptor (represented by an easy-to-use + stl interface!), which should be patched. + + @param sType + the internal type name, where we search a filter for. + Used as IN/OUT parameter so we can overrule the detection result for + types too ! + + @note #i60158# + sometimes our text ascii and our csv filter cant work together. + Then we overwrite our detection hardly. + sType param is used as out parameter then too ... and + rDescriptor will be changed by selecting another filter. + (see code) + */ + void impl_checkResultsAndAddBestFilter(::comphelper::MediaDescriptor& rDescriptor, + ::rtl::OUString& sType ); + +//------------------------------------------- +// uno interface + +public: + + //--------------------------------------- + // XTypeDetection + + virtual ::rtl::OUString SAL_CALL queryTypeByURL(const ::rtl::OUString& sURL) + throw (css::uno::RuntimeException); + + virtual ::rtl::OUString SAL_CALL queryTypeByDescriptor(css::uno::Sequence< css::beans::PropertyValue >& lDescriptor, + sal_Bool bAllowDeep ) + throw (css::uno::RuntimeException); + +//------------------------------------------- +// static uno helper! + +public: + + //--------------------------------------- + + /** @short return the uno implementation name of this class. + + @descr Because this information is used at several places + (and mostly an object instance of this class is not possible) + its implemented as a static function! + + @return The fix uno implementation name of this class. + */ + static ::rtl::OUString impl_getImplementationName(); + + //--------------------------------------- + + /** @short return the list of supported uno services of this class. + + @descr Because this information is used at several places + (and mostly an object instance of this class is not possible) + its implemented as a static function! + + @return The fix list of uno services supported by this class. + */ + static css::uno::Sequence< ::rtl::OUString > impl_getSupportedServiceNames(); + + //--------------------------------------- + + /** @short return a new intsnace of this class. + + @descr This method is used by the uno service manager, to create + a new instance of this service if needed. + + @param xSMGR + reference to the uno service manager, which require + this new instance. It should be passed to the new object + so it can be used internaly to create own needed uno resources. + + @return The new instance of this service as an uno reference. + */ + static css::uno::Reference< css::uno::XInterface > impl_createInstance(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); }; - } // namespace config -} // namespace filter +}} #endif // __FILTER_CONFIG_TYPEDETECTION_HXX_ _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
