summaryrefslogtreecommitdiff
path: root/framework/source/jobs/joburl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/jobs/joburl.cxx')
-rw-r--r--framework/source/jobs/joburl.cxx323
1 files changed, 228 insertions, 95 deletions
diff --git a/framework/source/jobs/joburl.cxx b/framework/source/jobs/joburl.cxx
index 611597d68e65..7a6a27d18c95 100644
--- a/framework/source/jobs/joburl.cxx
+++ b/framework/source/jobs/joburl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: joburl.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: cd $ $Date: 2002-10-14 11:11:04 $
+ * last change: $Author: hr $ $Date: 2003-03-25 18:21:46 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -121,6 +121,10 @@ namespace framework{
JobURL::JobURL( /*IN*/ const ::rtl::OUString& sURL )
: ThreadHelpBase( &Application::GetSolarMutex() )
{
+ #ifdef ENABLE_COMPONENT_SELF_CHECK
+ JobURL::impldbg_checkIt();
+ #endif
+
m_eRequest = E_UNKNOWN;
// syntax: vnd.sun.star.job:{[event=<name>],[alias=<name>],[service=<name>]}
@@ -133,81 +137,43 @@ JobURL::JobURL( /*IN*/ const ::rtl::OUString& sURL )
{
// seperate all token of "{[event=<name>],[alias=<name>],[service=<name>]}"
::rtl::OUString sToken = sURL.getToken(0, JOBURL_PART_SEPERATOR, t);
+ ::rtl::OUString sPartValue ;
+ ::rtl::OUString sPartArguments;
// check for "event="
- if (sToken.matchIgnoreAsciiCaseAsciiL(JOBURL_EVENT_STR,JOBURL_EVENT_LEN,0))
+ if (
+ (JobURL::implst_split(sToken,JOBURL_EVENT_STR,JOBURL_EVENT_LEN,sPartValue,sPartArguments)) &&
+ (sPartValue.getLength()>0 )
+ )
{
- // if an event occures more then once ...
- // mark this instance as non valid and break further operations
- if ((m_eRequest & E_EVENT) == E_EVENT)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
-
// set the part value
- m_sEvent = sToken.copy(JOBURL_EVENT_LEN);
- m_eRequest |= E_EVENT;
-
- // but don't forget to validate it too
- if (m_sEvent.getLength()<1)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
+ m_sEvent = sPartValue ;
+ m_sEventArgs = sPartArguments;
+ m_eRequest |= E_EVENT ;
}
else
// check for "alias="
- if (sToken.matchIgnoreAsciiCaseAsciiL(JOBURL_ALIAS_STR,JOBURL_ALIAS_LEN,0))
+ if (
+ (JobURL::implst_split(sToken,JOBURL_ALIAS_STR,JOBURL_ALIAS_LEN,sPartValue,sPartArguments)) &&
+ (sPartValue.getLength()>0 )
+ )
{
- // if an alias occures more then once ...
- // mark this instance as non valid and break further operations
- if ((m_eRequest & E_ALIAS) == E_ALIAS)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
-
// set the part value
- m_sAlias = sToken.copy(JOBURL_ALIAS_LEN);
- m_eRequest |= E_ALIAS;
-
- // but don't forget to validate it too
- if (m_sAlias.getLength()<1)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
+ m_sAlias = sPartValue ;
+ m_sAliasArgs = sPartArguments;
+ m_eRequest |= E_ALIAS ;
}
else
// check for "service="
- if (sToken.matchIgnoreAsciiCaseAsciiL(JOBURL_SERVICE_STR,JOBURL_SERVICE_LEN,0))
+ if (
+ (JobURL::implst_split(sToken,JOBURL_SERVICE_STR,JOBURL_SERVICE_LEN,sPartValue,sPartArguments)) &&
+ (sPartValue.getLength()>0 )
+ )
{
- // if an service occures more then once ...
- // mark this instance as non valid and break further operations
- if ((m_eRequest & E_SERVICE) == E_SERVICE)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
-
// set the part value
- m_sService = sToken.copy(JOBURL_SERVICE_LEN);
- m_eRequest |= E_SERVICE;
-
- // but don't forget to validate it too
- if (m_sService.getLength()<1)
- {
- m_eRequest = E_UNKNOWN;
- return;
- }
- }
- // found and unexpected token
- // URL is not valid then.
- else
- {
- m_eRequest = E_UNKNOWN;
- return;
+ m_sService = sPartValue ;
+ m_sServiceArgs = sPartArguments;
+ m_eRequest |= E_SERVICE ;
}
}
while(t!=-1);
@@ -261,6 +227,24 @@ sal_Bool JobURL::getEvent( /*OUT*/ ::rtl::OUString& sEvent ) const
}
//________________________________
+
+sal_Bool JobURL::getEventArgs( /*OUT*/ ::rtl::OUString& sEventArgs ) const
+{
+ /* SAFE { */
+ ReadGuard aReadLock(m_aLock);
+
+ sEventArgs = ::rtl::OUString();
+ sal_Bool bSet = ((m_eRequest & E_EVENT) == E_EVENT);
+ if (bSet)
+ sEventArgs = m_sEventArgs;
+
+ aReadLock.unlock();
+ /* } SAFE */
+
+ return bSet;
+}
+
+//________________________________
/**
@short get the alias item of this job URL
@descr Because the three possible parts of such URL (event, alias, service)
@@ -294,6 +278,24 @@ sal_Bool JobURL::getAlias( /*OUT*/ ::rtl::OUString& sAlias ) const
}
//________________________________
+
+sal_Bool JobURL::getAliasArgs( /*OUT*/ ::rtl::OUString& sAliasArgs ) const
+{
+ /* SAFE { */
+ ReadGuard aReadLock(m_aLock);
+
+ sAliasArgs = ::rtl::OUString();
+ sal_Bool bSet = ((m_eRequest & E_ALIAS) == E_ALIAS);
+ if (bSet)
+ sAliasArgs = m_sAliasArgs;
+
+ aReadLock.unlock();
+ /* } SAFE */
+
+ return bSet;
+}
+
+//________________________________
/**
@short get the service item of this job URL
@descr Because the three possible parts of such URL (event, service, service)
@@ -327,6 +329,86 @@ sal_Bool JobURL::getService( /*OUT*/ ::rtl::OUString& sService ) const
}
//________________________________
+
+sal_Bool JobURL::getServiceArgs( /*OUT*/ ::rtl::OUString& sServiceArgs ) const
+{
+ /* SAFE { */
+ ReadGuard aReadLock(m_aLock);
+
+ sServiceArgs = ::rtl::OUString();
+ sal_Bool bSet = ((m_eRequest & E_SERVICE) == E_SERVICE);
+ if (bSet)
+ sServiceArgs = m_sServiceArgs;
+
+ aReadLock.unlock();
+ /* } SAFE */
+
+ return bSet;
+}
+
+//________________________________
+/**
+ @short searches for a special identifier in the given string and split it
+ @descr If the given identifier could be found at the beginning of the given string,
+ this method split it into different parts and return it.
+ Following schema is used: <partidentifier>=<partvalue>[?<partarguments>]
+
+ @param sPart
+ the string, which should be analyzed
+
+ @param pPartIdentifier
+ the part identifier value, which must be found at the beginning of the
+ parameter <var>sPart</var>
+
+ @param nPartLength
+ the length of the ascii value <var>pPartIdentifier</var>
+
+ @param rPartValue
+ returns the part value if <var>sPart</var> was splitted successfully
+
+ @param rPartArguments
+ returns the part arguments if <var>sPart</var> was splitted successfully
+
+ @return <TRUE/> if the identifier could be found and the string was splitted.
+ <FALSE/> otherwhise.
+*/
+sal_Bool JobURL::implst_split( /*IN*/ const ::rtl::OUString& sPart ,
+ /*IN*/ const sal_Char* pPartIdentifier ,
+ /*IN*/ sal_Int32 nPartLength ,
+ /*OUT*/ ::rtl::OUString& rPartValue ,
+ /*OUT*/ ::rtl::OUString& rPartArguments )
+{
+ // first search for the given identifier
+ sal_Bool bPartFound = (sPart.matchIgnoreAsciiCaseAsciiL(pPartIdentifier,nPartLength,0));
+
+ // If it exist - we can split the part and return TRUE.
+ // Otherwhise we do nothing and return FALSE.
+ if (bPartFound)
+ {
+ // But may the part has optional arguments - seperated by a "?".
+ // Do so - we set the return value with the whole part string.
+ // Arguments will be set to an empty string as default.
+ // If we detect the right sign - we split the arguments and overwrite the default.
+ ::rtl::OUString sValueAndArguments = sPart.copy(nPartLength);
+ ::rtl::OUString sValue = sValueAndArguments ;
+ ::rtl::OUString sArguments;
+
+ sal_Int32 nArgStart = sValueAndArguments.indexOf('?',0);
+ if (nArgStart!=-1)
+ {
+ sValue = sValueAndArguments.copy(0,nArgStart);
+ ++nArgStart; // ignore '?'!
+ sArguments = sValueAndArguments.copy(nArgStart);
+ }
+
+ rPartValue = sValue ;
+ rPartArguments = sArguments;
+ }
+
+ return bPartFound;
+}
+
+//________________________________
/**
@short special debug method
@descr It's the entry point method to start a self component check for this class.
@@ -340,34 +422,40 @@ sal_Bool JobURL::getService( /*OUT*/ ::rtl::OUString& sService ) const
void JobURL::impldbg_checkIt()
{
// check simple URL's
- JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent" , E_EVENT , "onMyEvent", "" , "" );
- JobURL::impldbg_checkURL("vnd.sun.star.job:alias=myAlias" , E_ALIAS , "" , "myAlias", "" );
- JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service", E_SERVICE, "" , "" , "css.Service");
- JobURL::impldbg_checkURL("vnd.sun.star.job:service=," , E_UNKNOWN, "" , "" , "" );
+ JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent" , E_EVENT , "onMyEvent", "" , "" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:alias=myAlias" , E_ALIAS , "" , "myAlias", "" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service", E_SERVICE, "" , "" , "css.Service", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=;" , E_UNKNOWN, "" , "" , "" , NULL, NULL, NULL);
// check combinations
// Note: No additional spaces or tabs are allowed after a seperator occured.
// Tab and spaces before a seperator will be used as value!
- JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent,alias=myAlias,service=css.Service" , E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" );
- JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service,alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service" );
- JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service ,alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service ");
- JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service, alias=myAlias" , E_UNKNOWN , "" , "" , "" );
- JobURL::impldbg_checkURL("vnd.sun.star.job : event=onMyEvent" , E_UNKNOWN , "" , "" , "" );
- JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent,event=onMyEvent,service=css.Service", E_UNKNOWN , "" , "" , "" );
+ JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent;alias=myAlias;service=css.Service" , E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service;alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service ;alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service ", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service; alias=myAlias" , E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job : event=onMyEvent" , E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent;event=onMyEvent;service=css.Service", E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL);
// check upper/lower case
// fix parts of the URL are case insensitive (e.g. "vnd.SUN.star.job:eVEnt=")
// values are case sensitive (e.g. "myAlias" )
- JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEvent,aliAs=myAlias,serVice=css.Service", E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" );
- JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEVENT,aliAs=myALIAS,serVice=css.SERVICE", E_EVENT | E_ALIAS | E_SERVICE , "onMyEVENT", "myALIAS", "css.SERVICE" );
+ JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEvent;aliAs=myAlias;serVice=css.Service", E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" , NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEVENT;aliAs=myALIAS;serVice=css.SERVICE", E_EVENT | E_ALIAS | E_SERVICE , "onMyEVENT", "myALIAS", "css.SERVICE" , NULL, NULL, NULL);
// check stupid URLs
- JobURL::impldbg_checkURL("vnd.sun.star.jobs:service=css.Service" , E_UNKNOWN, "", "", "");
- JobURL::impldbg_checkURL("vnd.sun.star.job service=css.Service" , E_UNKNOWN, "", "", "");
- JobURL::impldbg_checkURL("vnd.sun.star.job:service,css.Service" , E_UNKNOWN, "", "", "");
- JobURL::impldbg_checkURL("vnd.sun.star.job:service," , E_UNKNOWN, "", "", "");
- JobURL::impldbg_checkURL("vnd.sun.star.job:,alias,service,event=" , E_UNKNOWN, "", "", "");
- JobURL::impldbg_checkURL("vnd.sun.star.job:alias=a,service=s,event=", E_UNKNOWN, "", "", "");
+ JobURL::impldbg_checkURL("vnd.sun.star.jobs:service=css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job service=css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service;css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service;" , E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:;alias;service;event=" , E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+ JobURL::impldbg_checkURL("vnd.sun.star.job:alias=a;service=s;event=", E_UNKNOWN, "", "", "", NULL, NULL, NULL);
+
+ // check argument handling
+ JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent?eventArg1,eventArg2=3,eventArg4," , E_EVENT , "onMyEvent", "" , "" , "eventArg1,eventArg2=3,eventArg4,", NULL , NULL );
+ JobURL::impldbg_checkURL("vnd.sun.star.job:alias=myAlias?aliasArg1,aliasarg2" , E_EVENT , "" , "myAlias", "" , NULL , "aliasArg1,aliasarg2", NULL );
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.myService?serviceArg1" , E_EVENT , "" , "" , "css.myService", NULL , NULL , "serviceArg1" );
+ JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.myService?serviceArg1;alias=myAlias?aliasArg=564", E_EVENT | E_ALIAS, "" , "myAlias", "css.myService", NULL , "aliasArg=564" , "serviceArg1" );
}
//________________________________
@@ -392,16 +480,31 @@ void JobURL::impldbg_checkIt()
@param pExpectedService
the expected service value
+
+ @param pExpectedEventArgs
+ the expected event arguments
+
+ @param pExpectedAliasArgs
+ the expected alias arguments
+
+ @param pExpectedServiceArgs
+ the expected service arguments
*/
-void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
- /*IN*/ sal_uInt32 eExpectedPart ,
- /*IN*/ const sal_Char* pExpectedEvent ,
- /*IN*/ const sal_Char* pExpectedAlias ,
- /*IN*/ const sal_Char* pExpectedService )
+void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
+ /*IN*/ sal_uInt32 eExpectedPart ,
+ /*IN*/ const sal_Char* pExpectedEvent ,
+ /*IN*/ const sal_Char* pExpectedAlias ,
+ /*IN*/ const sal_Char* pExpectedService ,
+ /*IN*/ const sal_Char* pExpectedEventArgs ,
+ /*IN*/ const sal_Char* pExpectedAliasArgs ,
+ /*IN*/ const sal_Char* pExpectedServiceArgs )
{
- ::rtl::OUString sEvent ;
- ::rtl::OUString sAlias ;
- ::rtl::OUString sService;
+ ::rtl::OUString sEvent ;
+ ::rtl::OUString sAlias ;
+ ::rtl::OUString sService ;
+ ::rtl::OUString sEventArgs ;
+ ::rtl::OUString sAliasArgs ;
+ ::rtl::OUString sServiceArgs;
::rtl::OUString sURL (::rtl::OUString::createFromAscii(pURL));
sal_Bool bOK = sal_True;
@@ -423,6 +526,14 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
(sEvent.getLength()>0 ) &&
(sEvent.compareToAscii(pExpectedEvent)==0)
);
+
+ if (bOK && pExpectedEventArgs!=NULL)
+ {
+ bOK = (
+ (aURL.getEventArgs(sEventArgs) ) &&
+ (sEventArgs.compareToAscii(pExpectedEventArgs)==0)
+ );
+ };
}
// check if URL has no event part
@@ -432,8 +543,10 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
)
{
bOK = (
- (!aURL.getEvent(sEvent)) &&
- (sEvent.getLength()==0 )
+ (!aURL.getEvent(sEvent) ) &&
+ (sEvent.getLength()==0 ) &&
+ (!aURL.getEventArgs(sEventArgs)) &&
+ (sEventArgs.getLength()==0 )
);
}
@@ -449,6 +562,14 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
(sAlias.getLength()>0 ) &&
(sAlias.compareToAscii(pExpectedAlias)==0)
);
+
+ if (bOK && pExpectedAliasArgs!=NULL)
+ {
+ bOK = (
+ (aURL.getAliasArgs(sAliasArgs) ) &&
+ (sAliasArgs.compareToAscii(pExpectedAliasArgs)==0)
+ );
+ };
}
// check if URL has the no alias part
@@ -458,8 +579,10 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
)
{
bOK = (
- (!aURL.getAlias(sAlias)) &&
- (sAlias.getLength()==0 )
+ (!aURL.getAlias(sAlias) ) &&
+ (sAlias.getLength()==0 ) &&
+ (!aURL.getAliasArgs(sAliasArgs)) &&
+ (sAliasArgs.getLength()==0 )
);
}
@@ -475,6 +598,14 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
(sService.getLength()>0 ) &&
(sService.compareToAscii(pExpectedService)==0)
);
+
+ if (bOK && pExpectedServiceArgs!=NULL)
+ {
+ bOK = (
+ (aURL.getServiceArgs(sServiceArgs) ) &&
+ (sServiceArgs.compareToAscii(pExpectedServiceArgs)==0)
+ );
+ };
}
// check if URL has the no service part
@@ -484,8 +615,10 @@ void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL ,
)
{
bOK = (
- (!aURL.getService(sService)) &&
- (sService.getLength()==0 )
+ (!aURL.getService(sService) ) &&
+ (sService.getLength()==0 ) &&
+ (!aURL.getServiceArgs(sServiceArgs)) &&
+ (sServiceArgs.getLength()==0 )
);
}