/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

import com.sun.star.comp.loader.FactoryHelper;
import com.sun.star.lang.*;
import com.sun.star.uno.*;
import com.sun.star.registry.XRegistryKey;
import java.io.*;
import java.net.*;


/** This component implements XTypeProvider for use with StarBasic.
 *  The XServiceInfo is implemented to have an interface in which we can put some
 *  code just for the sake of debugging.
 *
 *  To debug with JPDA (jdk 1.3), put these lines in the java.ini within the  [Java] section:
 *  -Xdebug
 *  -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
 *
 *  When the Virtual Machine service is instantiated it will block until the debugger
 *  attaches to it on port 8000. You can chose a different port. You attach to the VM using
 *  jdb by
 *
 *  jdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000
 *
 *  myhost is the hostname where the VM is running.
*/
public class TestComponent implements XServiceInfo, XTypeProvider
{
    public static final String __serviceName="JavaTestComponent";

    // XTypeProvider
    public com.sun.star.uno.Type[] getTypes(  )
    {
        Type[] retValue= new Type[2];
        retValue[0]= new Type( XServiceInfo.class);
        retValue[1]= new Type( XTypeProvider.class);
        return retValue;
    }
    // XTypeProvider
    public byte[] getImplementationId(  )
    {
        return new byte[0];
    }


    // XServiceName
    public String getImplementationName(  )
    {
        // the functions are for debugging

        // Test security settings
        File f= new File("c:/temp/javasecurity.txt");
        try {
            f.createNewFile();

               // local connection
        URL url= new URL("http://localhost:8080/index.html");
        url.openStream();
        // remote connection
        url= new URL("http://www.w3.org/index.html");
        url.openStream();
        }catch( MalformedURLException mue) {
        }catch( IOException e) {
            String s= e.getMessage();
            System.out.println(s);
        }

        return __serviceName;
    }
    // XServiceName
    public boolean supportsService( /*IN*/String ServiceName )
    {

        return false;
    }

    //XServiceName
    public String[] getSupportedServiceNames(  )
    {
        String[] retValue= new String[0];
        return retValue;
    }

    public static XSingleServiceFactory __getServiceFactory(String implName,
    XMultiServiceFactory multiFactory,
    XRegistryKey regKey)
    {
        XSingleServiceFactory xSingleServiceFactory = null;

        if (implName.equals( TestComponent.class.getName()) )
            xSingleServiceFactory = FactoryHelper.getServiceFactory( TestComponent.class,
            TestComponent.__serviceName,
            multiFactory,
            regKey);

        return xSingleServiceFactory;
    }

  /**
   * Writes the service information into the given registry key.
   * This method is called by the <code>JavaLoader</code>
   * <p>
   * @return  returns true if the operation succeeded
   * @param   regKey       the registryKey
   * @see                  com.sun.star.comp.loader.JavaLoader
   */
    public static boolean __writeRegistryServiceInfo(XRegistryKey regKey)
    {
        return FactoryHelper.writeRegistryServiceInfo( TestComponent.class.getName(),
        TestComponent.__serviceName, regKey);
    }

}
