Package org.openoffice.accessibility.misc

Source Code of org.openoffice.accessibility.misc.OfficeConnection

/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/

package org.openoffice.accessibility.misc;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintStream;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

import com.sun.star.uno.UnoRuntime;
import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.comp.helper.Bootstrap;

/** This class establishes a connection to a StarOffice application.
*/
public class OfficeConnection
    extends TimerTask
{
    final public static long snDelay = 3000;

  public static synchronized OfficeConnection Instance ()
  {
    if (saInstance == null)
      saInstance = new OfficeConnection ();
    return saInstance;
  }




  static public void SetPipeName (String sPipeName)
  {
    ssDefaultPipeName = sPipeName;
  }




    public void AddConnectionListener (ActionListener aListener)
    {
        SimpleOffice aOffice = SimpleOffice.Instance();
        if (IsValid())
            aListener.actionPerformed (
                new ActionEvent (aOffice,0,"<connected>"));
        maListeners.add (aListener);
    }



    /** @descr Return the service manager that represents the connected
                StarOffice application
    */
    public XMultiServiceFactory GetServiceManager ()
    {
        return maServiceManager;
    }
   



    /** Return a flag that indicates if the constructor has been able to
    establish a valid connection.
    */
    public boolean IsValid ()
    {
        return (maServiceManager != null);
    }



  
    /** Connect to a already running StarOffice application that has
    been started with a command line argument like
    "-accept=pipe,name=<username>;urp;"
    */
    private boolean Connect ()
    {
        mbInitialized = true;
        //  Set up connection string.
    String sConnectString = "uno:pipe,name=" + msPipeName
        + ";urp;StarOffice.ServiceManager";

    // connect to a running office and get the ServiceManager
        try
        {
            //  Create a URL Resolver.
            XMultiServiceFactory aLocalServiceManager =
                Bootstrap.createSimpleServiceManager();
            XUnoUrlResolver aURLResolver =
        (XUnoUrlResolver) UnoRuntime.queryInterface (
          XUnoUrlResolver.class,
          aLocalServiceManager.createInstance (
            "com.sun.star.bridge.UnoUrlResolver")
          );
           
            maServiceManager =
        (XMultiServiceFactory) UnoRuntime.queryInterface (
                    XMultiServiceFactory.class,
                    aURLResolver.resolve (sConnectString)
                    );
        }

        catch (Exception e)
        {
            if (maOut != null)
            {
                maOut.println ("Could not connect with "
                    + sConnectString + " : " + e);
                maOut.println ("Please start OpenOffice/StarOffice with "
                    + "\"-accept=pipe,name=" + msPipeName + ";urp;\"");
            }
        }

    return maServiceManager != null;
    }


    public void run ()
    {
    if ( ! IsValid())
        {
            MessageArea.println ("trying to connect");
            if (Connect())
            {
                // Stop the timer.
                cancel ();

                ActionEvent aEvent = new ActionEvent (this,0,"<connected>");
                for (int i=0; i<maListeners.size(); i++)
                    ((ActionListener)maListeners.elementAt(i)).actionPerformed(aEvent);
            }
        }
    }

    private OfficeConnection ()
    {
        this (null);
    }


    private OfficeConnection (PrintStream aOut)
    {
        msPipeName = ssDefaultPipeName;
        maOut = aOut;
        maListeners = new Vector();
    maServiceManager = null;

        maTimer = new Timer (true);
        maTimer.schedule (this, 0, snDelay);
    }
   

  private static OfficeConnection saInstance = null;
    private static String ssDefaultPipeName = System.getenv( "USER" );

    private XMultiServiceFactory maServiceManager;
    String msPipeName;
   
    /** A value of true just indicates that it has been tried to establish a connection,
        not that that has been successfull.
    */
    private boolean mbInitialized = false;
   
    /// Stream used to print messages.
    private PrintStream maOut;
    private Timer maTimer;
    private Vector maListeners;
}
TOP

Related Classes of org.openoffice.accessibility.misc.OfficeConnection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.