Difference between revisions of "Documentation/DevGuide/OfficeDev/Resolving Path Variables"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Initial author Sun Microsystems, Inc.)
 
m (1 revision(s))
(No difference)

Revision as of 13:03, 15 February 2008



This section explains how to use the OpenOffice.org implementation of the path substitution service. The following code snippet creates a path substitution service.

 import com.sun.star.lang.XMultiServiceFactory;
 import com.sun.star.uno.Exception;
 import com.sun.star.uno.XInterface;
 import com.sun.star.util.XStringSubstitution
 
 XStringSubstitution createPathSubstitution() {
   
     /////////////////////////////////////////////////////////////////////
     // Obtain Process Service Manager.
     /////////////////////////////////////////////////////////////////////
 
     XMultiServiceFactory xServiceFactory = ...
 
     /////////////////////////////////////////////////////////////////////
     // Create Path Substitution. This needs to be done only once per process.
     /////////////////////////////////////////////////////////////////////
 
     XInterface xPathSubst;
     try {
         xPathSubst = xServiceFactory.createInstance(
             "com.sun.star.util.PathSubstitution" );
     }
     catch (com.sun.star.uno.Exception e) {
     }
 
     if (xPathSubst != null)
         return (XStringSubstitution)UnoRuntime.queryInterface( 
             XStringSubstitution.class, xPathSubst );
     else
         return null;
 }

The service is implemented as a one-instance service and supports the interface com.sun.star.util.XStringSubstitution. The interface has three methods:

 string substituteVariables( [in] string aText, [in] boolean bSubstRequired )
 string reSubstituteVariables( [in] string aText )
 string getSubstituteVariableValue( [in] string variable )

The method substituteVariables() returns a string where all known variables are replaced by their value. Unknown variables are not replaced. The argument bSubstRequired can be used to indicate that the client needs a full substitution - otherwise the function fails and throws a com.sun.star.container.NoSuchElementException. For example: $(inst)/share/autotext/$(vlang) could be substituted to file:///c:/OpenOffice.org1.0.2/share/autotext/english.

The method reSubstituteVariables() returns a string where parts of the provided path aText are replaced by variables that represent this part of the path. If a matching variable is not found, the path is not modified.

The predefined variable $(path) is not used for substitution. Instead, it is a placeholder for the path environment variable does not have a static value during runtime. The path variables $(lang), $(langid) and $(vlang), which represent a directory or a filename in a path, only match inside or at the end of a provided path. For example: english is not replaced by $(vlang), whereas file:///c:/english is replaced by file:///c:/$(vlang).

The method getSubstituteVariableValue() returns the current value of the provided path variable as a predefined or a user-defined value. If an unknown variable name is provided, a com.sun.star.container.NoSuchElementException is thrown. The argument variable can be provided with preceding "$(" and succeeding ")" or without them. So both $(work) and work can be used.

This code example shows how to access, substitute, and resubstitute path variables by means of the OpenOffice.org API.

 import com.sun.star.bridge.XUnoUrlResolver;
 import com.sun.star.uno.UnoRuntime;
 import com.sun.star.uno.XComponentContext;
 import com.sun.star.lang.XMultiComponentFactory;
 import com.sun.star.beans.XPropertySet;
 import com.sun.star.beans.PropertyValue;
 
 import com.sun.star.util.XStringSubstitution;
 import com.sun.star.frame.TerminationVetoException;
 import com.sun.star.frame.XTerminateListener;
 
 /*
  * Provides example code how to access and use the
  * path substitution sercvice.
  */
 public class PathSubstitutionTest extends java.lang.Object {
 
     /*
      * List of predefined path variables supported by
      * the path substitution service.
      */
     private static String[] predefinedPathVariables = {
         "$(home)","$(inst)","$(prog)","$(temp)","$(user)",
         "$(work)","$(path)","$(lang)","$(langid)","$(vlang)"
     };
 
     /*
      * @param args the command line arguments
      */
     public static void main(String[] args) {
 
         XComponentContext xRemoteContext = null;
         XMultiComponentFactory xRemoteServiceManager = null;
         XStringSubstitution xPathSubstService = null;
 
         try {
             // connect
             XComponentContext xLocalContext =
                 com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);
             XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();
             Object urlResolver = xLocalServiceManager.createInstanceWithContext(
                 "com.sun.star.bridge.UnoUrlResolver", xLocalContext );
             XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( 
                 XUnoUrlResolver.class, urlResolver );
             Object initialObject = xUnoUrlResolver.resolve( 
                 "uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager" );
             XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(
                 XPropertySet.class, initialObject);
             Object context = xPropertySet.getPropertyValue("DefaultContext"); 
             xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(
                 XComponentContext.class, context);
             xRemoteServiceManager = xRemoteContext.getServiceManager();
 
             Object pathSubst = xRemoteServiceManager.createInstanceWithContext(
                 "com.sun.star.comp.framework.PathSubstitution", xRemoteContext );
             xPathSubstService = (XStringSubstitution)UnoRuntime.queryInterface(
                 XStringSubstitution.class, pathSubst);
 
             /* Work with path variables */
             workWithPathVariables( xPathSubstService );
         }
         catch (java.lang.Exception e){
             e.printStackTrace();
         }
         finally {
             System.exit(0);
         }
     }
 
     /*
      * Retrieve, resubstitute path variables
      * @param xPathSubstService the path substitution service
      */
     public static void workWithPathVariables( XStringSubstitution xPathSubstService )
     {
         if ( xPathSubstService != null ) {
             for ( int i=0; i<predefinedPathVariables.length; i++ ) {
                 try {
                         /* Retrieve values for predefined path variables */ 
                         String aPath = xPathSubstService.getSubstituteVariableValue( 
                                             predefinedPathVariables[i] );
                         System.out.println( "Variable="+ predefinedPathVariables[i] + 
                                             " Path=" + aPath );
                      
                         /* Check resubstitute */
                         String aValue = xPathSubstService.reSubstituteVariables( aPath );
                         System.out.println( "Path=" + aPath +
                                             " Variable=" + aValue );
                 }
                 catch ( com.sun.star.container.NoSuchElementException e) {
                     System.out.println( "NoSuchElementExceptio has been thrown accessing"
                                         + predefinedPathVariables[i]);
                 }
             }
         }
     }
 }
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools