summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorAndreas Schlüns <as@openoffice.org>2001-10-24 08:32:57 +0000
committerAndreas Schlüns <as@openoffice.org>2001-10-24 08:32:57 +0000
commit41b6653dbaea01b843209ea0c412ee4d1160f6a0 (patch)
tree797c47f0d1c008cdc6e50d488e6f7e68b280033c /framework
parentcb7c03df5f35ba6b976c5d4be603215f19604caf (diff)
#92862# new query mechanism
Diffstat (limited to 'framework')
-rw-r--r--framework/inc/classes/filtercache.hxx29
-rw-r--r--framework/inc/queries.h411
2 files changed, 350 insertions, 90 deletions
diff --git a/framework/inc/classes/filtercache.hxx b/framework/inc/classes/filtercache.hxx
index df2046862246..f362d94d33a8 100644
--- a/framework/inc/classes/filtercache.hxx
+++ b/framework/inc/classes/filtercache.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: filtercache.hxx,v $
*
- * $Revision: 1.26 $
+ * $Revision: 1.27 $
*
- * last change: $Author: as $ $Date: 2001-10-15 12:59:25 $
+ * last change: $Author: as $ $Date: 2001-10-24 09:32:57 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -89,6 +89,10 @@
#include <general.h>
#endif
+#ifndef __FRAMEWORK_QUERIES_H_
+#include <queries.h>
+#endif
+
//_________________________________________________________________________________________________________________
// interface includes
//_________________________________________________________________________________________________________________
@@ -397,27 +401,6 @@ class FilterCache : private ThreadHelpBase
private:
- /*-****************************************************************************************************//**
- @short support query mode
- @descr These helper functions returns subsets of our internal cached values.
-
- @attention This methods are threadsafe by himself! Don't call it with any locked rw-lock!
-
- @seealso methods query...()
-
- @param -
- @return A result set if query was successful - empty structures if not.
-
- @onerror We return empty structures.
- *//*-*****************************************************************************************************/
-
- css::uno::Sequence< ::rtl::OUString > implts_queryFilter_ByDocumentService ( const ::rtl::OUString& sService ,
- sal_Bool bForUI ) const;
- css::uno::Sequence< ::rtl::OUString > implts_queryFilter_ByDocumentService_WithDefault ( const ::rtl::OUString& sService ,
- sal_Bool bForUI ) const;
- css::uno::Sequence< ::rtl::OUString > implts_queryFilter_ByFlags ( sal_Int32 nFlags ) const;
- css::uno::Sequence< ::rtl::OUString > implts_queryFilter_ByFirstUserData ( const ::rtl::OUString& sIdentifier ) const;
-
//-------------------------------------------------------------------------------------------------------------
// debug methods
//-------------------------------------------------------------------------------------------------------------
diff --git a/framework/inc/queries.h b/framework/inc/queries.h
index 23283b10f946..42eddab2bb0a 100644
--- a/framework/inc/queries.h
+++ b/framework/inc/queries.h
@@ -2,9 +2,9 @@
*
* $RCSfile: queries.h,v $
*
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
*
- * last change: $Author: cd $ $Date: 2001-10-15 08:18:42 $
+ * last change: $Author: as $ $Date: 2001-10-24 09:32:32 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -78,8 +78,16 @@
// other includes
//_________________________________________________________________________________________________________________
-#ifndef _RTL_USTRING_
-#include <rtl/ustring>
+#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_
+#include <com/sun/star/uno/Sequence.hxx>
+#endif
+
+#ifndef _RTL_USTRING_HXX_
+#include <rtl/ustring.hxx>
+#endif
+
+#ifndef _RTL_USTRBUF_HXX_
+#include <rtl/ustrbuf.hxx>
#endif
//_________________________________________________________________________________________________________________
@@ -97,77 +105,346 @@ namespace framework{
They are used by our FilterFactory or ouer TypeDetection to return
subsets of our cached configuration.
*//*-*************************************************************************************************************/
-#define FILTERQUERY_TEXTDOCUMENT DECLARE_ASCII("_filterquery_textdocument" )
-#define FILTERQUERY_WEBDOCUMENT DECLARE_ASCII("_filterquery_webdocument" )
-#define FILTERQUERY_GLOBALDOCUMENT DECLARE_ASCII("_filterquery_globaldocument" )
-#define FILTERQUERY_CHARTDOCUMENT DECLARE_ASCII("_filterquery_chartdocument" )
-#define FILTERQUERY_SPREADSHEETDOCUMENT DECLARE_ASCII("_filterquery_spreadsheetdocument" )
-#define FILTERQUERY_PRESENTATIONDOCUMENT DECLARE_ASCII("_filterquery_presentationdocument" )
-#define FILTERQUERY_DRAWINGDOCUMENT DECLARE_ASCII("_filterquery_drawingdocument" )
-#define FILTERQUERY_FORMULARPROPERTIES DECLARE_ASCII("_filterquery_formulaproperties" )
-
-#define FILTERQUERY_TEXTDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_textdocument_withdefault" )
-#define FILTERQUERY_WEBDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_webdocument_withdefault" )
-#define FILTERQUERY_GLOBALDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_globaldocument_withdefault" )
-#define FILTERQUERY_CHARTDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_chartdocument_withdefault" )
-#define FILTERQUERY_SPREADSHEETDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_spreadsheetdocument_withdefault" )
-#define FILTERQUERY_PRESENTATIONDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_presentationdocument_withdefault" )
-#define FILTERQUERY_DRAWINGDOCUMENT_WITHDEFAULT DECLARE_ASCII("_filterquery_drawingdocument_withdefault" )
-#define FILTERQUERY_FORMULARPROPERTIES_WITHDEFAULT DECLARE_ASCII("_filterquery_formulaproperties_withdefault" )
-
-#define FILTERQUERY_GRAPHICFILTERS DECLARE_ASCII("_filterquery_graphicfilters" )
-#define FILTERQUERY_DEFAULTFILTERS DECLARE_ASCII("_filterquery_defaultfilters" )
+#define BASE_QUERY_ALL DECLARE_ASCII("_query_all" )
+#define BASE_QUERY_WRITER DECLARE_ASCII("_query_Writer" )
+#define BASE_QUERY_WEB DECLARE_ASCII("_query_web" )
+#define BASE_QUERY_GLOBAL DECLARE_ASCII("_query_global" )
+#define BASE_QUERY_CHART DECLARE_ASCII("_query_chart" )
+#define BASE_QUERY_CALC DECLARE_ASCII("_query_calc" )
+#define BASE_QUERY_IMPRESS DECLARE_ASCII("_query_impress" )
+#define BASE_QUERY_DRAW DECLARE_ASCII("_query_draw" )
+#define BASE_QUERY_MATH DECLARE_ASCII("_query_math" )
+#define BASE_QUERY_GRAPHICS DECLARE_ASCII("_query_graphics")
/*-************************************************************************************************************//**
- @short These values describe properties which represent all items of a query.
+ @short These parameters can be used in combination with BASE_QUERY_... defines to
+ specialize it.
+ use follow syntax to do so: "<query>[:<param>[=<value>]]"
+ e.g.: "_query_writer:default_first:use_order:sort_prop=uiname"
+
+ argument description default
+ -----------------------------------------------------------------------------------------------
+ iflags=<mask> include filters by given mask 0
+ eflags=<mask> exclude filters by given mask 0
+ sort_prop=<[name,uiname]> sort by internal name or uiname name
+ descending sort descending false
+ use_order use order flag of filters for sorting false
+ default_first set default filter on top of return list false
+ case_sensitive compare "sort_prop" case sensitive false
*//*-*************************************************************************************************************/
-// compare it with string Filter.DocumentService
-#define DETECTPROPERTY_TEXTDOCUMENT DECLARE_ASCII("com.sun.star.text.TextDocument" )
-#define DETECTPROPERTY_WEBDOCUMENT DECLARE_ASCII("com.sun.star.text.WebDocument" )
-#define DETECTPROPERTY_GLOBALDOCUMENT DECLARE_ASCII("com.sun.star.text.GlobalDocument" )
-#define DETECTPROPERTY_CHARTDOCUMENT DECLARE_ASCII("com.sun.star.chart.ChartDocument" )
-#define DETECTPROPERTY_SPREADSHEETDOCUMENT DECLARE_ASCII("com.sun.star.sheet.SpreadsheetDocument" )
-#define DETECTPROPERTY_PRESENTATIONDOCUMENT DECLARE_ASCII("com.sun.star.presentation.PresentationDocument" )
-#define DETECTPROPERTY_DRAWINGDOCUMENT DECLARE_ASCII("com.sun.star.drawing.DrawingDocument" )
-#define DETECTPROPERTY_FORMULARPROPERTIES DECLARE_ASCII("com.sun.star.formula.FormulaProperties" )
-
-// compare it with first string of Filter.UserData!
-// (temp. special!)
-#define DETECTPROPERTY_GRAPHICFILTERS DECLARE_ASCII("OO")
-
-// compare it with int Filter.Flags
-#define DETECTPROPERTY_DEFAULTFILTERS FILTERFLAG_DEFAULT
+#define SEPERATOR_QUERYPARAM ((sal_Unicode)':')
+#define SEPERATOR_QUERYPARAMVALUE ((sal_Unicode)'=')
-//_________________________________________________________________________________________________________________
-// methods
-//_________________________________________________________________________________________________________________
+#define QUERYPARAM_IFLAGS DECLARE_ASCII("iflags" )
+#define QUERYPARAM_EFLAGS DECLARE_ASCII("eflags" )
+#define QUERYPARAM_SORT_PROP DECLARE_ASCII("sort_prop" )
+
+#define QUERYPARAM_DESCENDING DECLARE_ASCII("descending" )
+#define QUERYPARAM_USE_ORDER DECLARE_ASCII("use_order" )
+#define QUERYPARAM_DEFAULT_FIRST DECLARE_ASCII("default_first" )
+#define QUERYPARAM_CASE_SENSITIVE DECLARE_ASCII("case_sensitive" )
+
+#define QUERYPARAMVALUE_SORT_PROP_NAME DECLARE_ASCII("name" )
+#define QUERYPARAMVALUE_SORT_PROP_UINAME DECLARE_ASCII("uiname" )
/*-************************************************************************************************************//**
- @short This method checks if given string match to a supported query.
+ @short Helper class to support easy building of a query statements.
*//*-*************************************************************************************************************/
-inline sal_Bool c_isQuery( const ::rtl::OUString& sQuery )
+class QueryBuilder
{
- return (
- ( sQuery == FILTERQUERY_TEXTDOCUMENT ) ||
- ( sQuery == FILTERQUERY_WEBDOCUMENT ) ||
- ( sQuery == FILTERQUERY_GLOBALDOCUMENT ) ||
- ( sQuery == FILTERQUERY_CHARTDOCUMENT ) ||
- ( sQuery == FILTERQUERY_SPREADSHEETDOCUMENT ) ||
- ( sQuery == FILTERQUERY_PRESENTATIONDOCUMENT ) ||
- ( sQuery == FILTERQUERY_DRAWINGDOCUMENT ) ||
- ( sQuery == FILTERQUERY_FORMULARPROPERTIES ) ||
- ( sQuery == FILTERQUERY_TEXTDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_WEBDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_GLOBALDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_CHARTDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_SPREADSHEETDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_PRESENTATIONDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_DRAWINGDOCUMENT_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_FORMULARPROPERTIES_WITHDEFAULT ) ||
- ( sQuery == FILTERQUERY_GRAPHICFILTERS ) ||
- ( sQuery == FILTERQUERY_DEFAULTFILTERS )
- );
-}
+ public:
+ //---------------------------------------------------------------------------------------------------------
+ // start with empty query
+ //---------------------------------------------------------------------------------------------------------
+ QueryBuilder()
+ {
+ resetAll();
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // returns full query as copy of internal set values
+ //---------------------------------------------------------------------------------------------------------
+ ::rtl::OUString getQuery()
+ {
+ ::rtl::OUStringBuffer sCopy( m_sParams );
+ sCopy.insert( 0, m_sBase );
+ return sCopy.makeStringAndClear();
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // set new or change existing base query part
+ //---------------------------------------------------------------------------------------------------------
+ void setBase( const ::rtl::OUString& sBase )
+ {
+ m_sBase = sBase;
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // add new parameter (with optional value) to param list
+ //---------------------------------------------------------------------------------------------------------
+ void addParam( const ::rtl::OUString& sParam, const ::rtl::OUString& sValue = ::rtl::OUString() )
+ {
+ m_sParams.append( SEPERATOR_QUERYPARAM );
+ m_sParams.append( sParam );
+ if( sValue.getLength() > 0 )
+ {
+ m_sParams.append( SEPERATOR_QUERYPARAMVALUE );
+ m_sParams.append( sValue );
+ }
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // forget all setted params and start with empty ones
+ // Attention: base of query isn't changed!
+ //---------------------------------------------------------------------------------------------------------
+ void resetParams()
+ {
+ m_sParams.makeStringAndClear();
+ m_sParams.ensureCapacity( 256 );
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // start with new empty query
+ //---------------------------------------------------------------------------------------------------------
+ void resetAll()
+ {
+ m_sBase = ::rtl::OUString();
+ resetParams();
+ }
+
+ private:
+ ::rtl::OUString m_sBase ;
+ ::rtl::OUStringBuffer m_sParams ;
+
+}; // class QueryBuilder
+
+/*-************************************************************************************************************//**
+ @short Helper class to analyze queries and split into his different parts (base, params and values).
+*//*-*************************************************************************************************************/
+class QueryAnalyzer
+{
+ public:
+
+ //---------------------------------------------------------------------------------------------------------
+ // it's will not perform to compare strings as query type ...
+ // so we convert it into these enum values.
+ // default = E_ALL!
+ //---------------------------------------------------------------------------------------------------------
+ enum EQuery
+ {
+ E_ALL ,
+ E_WRITER ,
+ E_WEB ,
+ E_GLOBAL ,
+ E_CHART ,
+ E_CALC ,
+ E_IMPRESS ,
+ E_DRAW ,
+ E_MATH ,
+ E_GRAPHICS
+ };
+
+ //---------------------------------------------------------------------------------------------------------
+ // these are valid values for param "sort_prop".
+ // other ones are not supported!
+ // default = E_NAME
+ //---------------------------------------------------------------------------------------------------------
+ enum ESortProp
+ {
+ E_NAME ,
+ E_UINAME
+ };
+
+ //---------------------------------------------------------------------------------------------------------
+ // analyze given query and split it into his different parts; <base>:<param1>:<param2=value>...
+ //---------------------------------------------------------------------------------------------------------
+ QueryAnalyzer( const ::rtl::OUString& sQuery )
+ // Don't forget to set default values for non given params!
+ : m_eQuery ( E_ALL ) // return ALL filter ...
+ , m_nIFlags ( 0 ) // which has set ANY flag ... (we remove all entries which match with these mask .. => 0!)
+ , m_nEFlags ( 0 ) // (only used, if nIFlags==0 and himself!=0!)
+ , m_eSortProp ( E_NAME ) // sort it by internal name ...
+ , m_bDescending ( sal_False ) // in ascending order ...
+ , m_bCaseSensitive( sal_False ) // ignore case ...
+ , m_bUseOrder ( sal_False ) // don't use order flag ...
+ , m_bDefaultFirst ( sal_False ) // and don't handle default entries in special case!
+ {
+ // Translate old query format to new one first!
+ ::rtl::OUString sNewQuery( sQuery );
+ if( sQuery == DECLARE_ASCII("_filterquery_textdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_writer:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_webdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_web:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_globaldocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_global:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_chartdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_chart:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_spreadsheetdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_calc:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_presentationdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_impress:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_drawingdocument_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_draw:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_formulaproperties_withdefault") )
+ sNewQuery=DECLARE_ASCII("_query_math:default_first:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_textdocument") )
+ sNewQuery=DECLARE_ASCII("_query_writer:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_webdocument") )
+ sNewQuery=DECLARE_ASCII("_query_web:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_globaldocument") )
+ sNewQuery=DECLARE_ASCII("_query_global:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_chartdocument") )
+ sNewQuery=DECLARE_ASCII("_query_chart:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_spreadsheetdocument") )
+ sNewQuery=DECLARE_ASCII("_query_calc:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_presentationdocument") )
+ sNewQuery=DECLARE_ASCII("_query_impress:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_drawingdocument") )
+ sNewQuery=DECLARE_ASCII("_query_draw:use_order:sort_prop=uiname");
+ else
+ if( sQuery == DECLARE_ASCII("_filterquery_formulaproperties") )
+ sNewQuery=DECLARE_ASCII("_query_math:use_order:sort_prop=uiname");
+
+ // Analyze query ...
+ // Try to find base of it and safe it for faster access as enum value!
+ sal_Int32 nToken = 0;
+ ::rtl::OUString sParam ;
+ ::rtl::OUString sBase = sNewQuery.getToken( 0, SEPERATOR_QUERYPARAM, nToken );
+
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_ALL ) == sal_True ) m_eQuery = E_ALL ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_WRITER ) == sal_True ) m_eQuery = E_WRITER ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_WEB ) == sal_True ) m_eQuery = E_WEB ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_GLOBAL ) == sal_True ) m_eQuery = E_GLOBAL ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_CHART ) == sal_True ) m_eQuery = E_CHART ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_CALC ) == sal_True ) m_eQuery = E_CALC ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_IMPRESS ) == sal_True ) m_eQuery = E_IMPRESS ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_DRAW ) == sal_True ) m_eQuery = E_DRAW ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_MATH ) == sal_True ) m_eQuery = E_MATH ; else
+ if( sBase.equalsIgnoreAsciiCase( BASE_QUERY_GRAPHICS ) == sal_True ) m_eQuery = E_GRAPHICS ;
+
+ // Try to get additional parameters ...
+ while( nToken >= 0 )
+ {
+ sParam = sNewQuery.getToken( 0, SEPERATOR_QUERYPARAM, nToken );
+ // "default_first"
+ if( sParam.compareTo( QUERYPARAM_DEFAULT_FIRST, QUERYPARAM_DEFAULT_FIRST.getLength() ) == 0 )
+ {
+ m_bDefaultFirst = sal_True;
+ }
+ else
+ // "use_order"
+ if( sParam.compareTo( QUERYPARAM_USE_ORDER, QUERYPARAM_USE_ORDER.getLength() ) == 0 )
+ {
+ m_bUseOrder = sal_True;
+ }
+ else
+ // "descending"
+ if( sParam.compareTo( QUERYPARAM_DESCENDING, QUERYPARAM_DESCENDING.getLength() ) == 0 )
+ {
+ m_bDescending = sal_True;
+ }
+ else
+ // "case_sensitive"
+ if( sParam.compareTo( QUERYPARAM_CASE_SENSITIVE, QUERYPARAM_CASE_SENSITIVE.getLength() ) == 0 )
+ {
+ m_bCaseSensitive = sal_True;
+ }
+ else
+ // "iflags=<mask>"
+ if( sParam.compareTo( QUERYPARAM_IFLAGS, QUERYPARAM_IFLAGS.getLength() ) == 0 )
+ {
+ sal_Int32 nSubToken = 0;
+ ::rtl::OUString sParamName = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken );
+ if( nSubToken > 0 )
+ {
+ m_nIFlags = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken ).toInt32();
+ }
+ }
+ else
+ // "eflags=<mask>"
+ if( sParam.compareTo( QUERYPARAM_EFLAGS, QUERYPARAM_EFLAGS.getLength() ) == 0 )
+ {
+ sal_Int32 nSubToken = 0;
+ ::rtl::OUString sParamName = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken );
+ if( nSubToken > 0 )
+ {
+ m_nEFlags = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken ).toInt32();
+ }
+ }
+ else
+ // "sort_prop=<[name,uiname]>"
+ if( sParam.compareTo( QUERYPARAM_SORT_PROP, QUERYPARAM_SORT_PROP.getLength() ) == 0 )
+ {
+ sal_Int32 nSubToken = 0;
+ ::rtl::OUString sParamName = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken );
+ if( nSubToken > 0 )
+ {
+ ::rtl::OUString sParamValue = sParam.getToken( 0, SEPERATOR_QUERYPARAMVALUE, nSubToken );
+ if( sParamValue.compareTo( QUERYPARAMVALUE_SORT_PROP_NAME, QUERYPARAMVALUE_SORT_PROP_NAME.getLength() ) == 0 )
+ m_eSortProp = E_NAME;
+ else
+ if( sParamValue.compareTo( QUERYPARAMVALUE_SORT_PROP_UINAME, QUERYPARAMVALUE_SORT_PROP_UINAME.getLength() ) == 0 )
+ m_eSortProp = E_UINAME;
+ }
+ }
+ }
+ }
+
+ //---------------------------------------------------------------------------------------------------------
+ // return type of query. User can decide then, which action should be started.
+ // For faster work we converted query string into corresponding enum value!
+ //---------------------------------------------------------------------------------------------------------
+ EQuery getQueryType() { return m_eQuery; } const
+
+ //---------------------------------------------------------------------------------------------------------
+ // access to additional parameter values
+ // Methods return default of realy set values!
+ //---------------------------------------------------------------------------------------------------------
+ sal_uInt32 getIFlags () { return m_nIFlags ; } const
+ sal_uInt32 getEFlags () { return m_nEFlags ; } const
+ ESortProp getSortProp () { return m_eSortProp ; } const
+ sal_Bool getDescending () { return m_bDescending ; } const
+ sal_Bool getCaseSensitive() { return m_bCaseSensitive; } const
+ sal_Bool getUseOrder () { return m_bUseOrder ; } const
+ sal_Bool getDefaultFirst () { return m_bDefaultFirst ; } const
+
+ //---------------------------------------------------------------------------------------------------------
+ // this method checks if given string match any supported query.
+ // (ignore additional parameters!)
+ //---------------------------------------------------------------------------------------------------------
+ static sal_Bool isQuery( const ::rtl::OUString& sQuery )
+ {
+ return(
+ ( sQuery.compareToAscii( "_query_" , 7 ) == 0 ) || // new style
+ ( sQuery.compareToAscii( "_filterquery_", 13 ) == 0 ) // old style!
+ );
+ }
+
+ private:
+ EQuery m_eQuery ;
+ sal_uInt32 m_nIFlags ;
+ sal_uInt32 m_nEFlags ;
+ ESortProp m_eSortProp ;
+ sal_Bool m_bDescending ;
+ sal_Bool m_bCaseSensitive ;
+ sal_Bool m_bUseOrder ;
+ sal_Bool m_bDefaultFirst ;
+
+}; // class QueryAnalyzer
} // namespace framework