/* * 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 . */ package org.openoffice; import com.sun.star.comp.loader.FactoryHelper; import com.sun.star.configuration.backend.PropertyInfo; import com.sun.star.configuration.backend.XLayer; import com.sun.star.configuration.backend.XLayerContentDescriber; import com.sun.star.configuration.backend.XLayerHandler; import com.sun.star.configuration.backend.XSingleLayerStratum; import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XServiceInfo; import com.sun.star.lang.XSingleServiceFactory; import com.sun.star.lang.XTypeProvider; import com.sun.star.registry.XRegistryKey; import com.sun.star.uno.Type; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XInterface; import com.sun.star.util.XTimeStamped; public class JavaSystemBackend implements XSingleLayerStratum, XTypeProvider, XServiceInfo, XTimeStamped, XComponent { public static final String __serviceName = "com.sun.star.configuration.backend.PlatformBackend"; public static final String __implName = "org.openoffice.JavaSystemBackend"; public static final String testComponent = "org.openoffice.Office.Common"; protected static XMultiServiceFactory msf = null; protected XLayer aLayer = null; /** * Get the implementation id. * @return An empty implementation id. * @see com.sun.star.lang.XTypeProvider */ public byte[] getImplementationId() { return new byte[0]; } /** * Function for reading the implementation name. * * @return the implementation name * @see com.sun.star.lang.XServiceInfo */ public String getImplementationName() { return __implName; } public com.sun.star.configuration.backend.XLayer getLayer(String str, String str1) throws com.sun.star.configuration.backend.BackendAccessException, com.sun.star.lang.IllegalArgumentException { if (aLayer == null) { System.out.println("JavaSystemBackend::getLayer() called for " + str); aLayer = new CommonLayer(); } return aLayer; } /** * Function for reading all supported services * * @return An aaray with all supported service names * @see com.sun.star.lang.XServiceInfo */ public String[] getSupportedServiceNames() { String[] supServiceNames = { __serviceName }; return supServiceNames; } public String getTimestamp() { //not really implemented return "2004-03-31"; } /** * Get all implemented types of this class. * @return An array of implemented interface types. * @see com.sun.star.lang.XTypeProvider */ public Type[] getTypes() { Type[] type = new Type[5]; type[0] = new Type(XInterface.class); type[1] = new Type(XTypeProvider.class); type[2] = new Type(XSingleLayerStratum.class); type[3] = new Type(XServiceInfo.class); type[4] = new Type(XTimeStamped.class); return type; } public com.sun.star.configuration.backend.XUpdatableLayer getUpdatableLayer(String str) throws com.sun.star.configuration.backend.BackendAccessException, com.sun.star.lang.NoSupportException, com.sun.star.lang.IllegalArgumentException { throw new com.sun.star.lang.NoSupportException( "Cannot write to test backend", this); } /** * Does the implementation support this service? * * @param serviceName The name of the service in question * @return true, if service is supported, false otherwise * @see com.sun.star.lang.XServiceInfo */ public boolean supportsService(String serviceName) { return serviceName.equals(__serviceName); } /** * * Gives a factory for creating the service. * This method is called by the JavaLoader *

* @return returns a XSingleServiceFactory for creating the component * @param implName the name of the implementation for which a service is desired * @param multiFactory the service manager to be used if needed * @param regKey the registryKey * @see com.sun.star.comp.loader.JavaLoader */ public static XSingleServiceFactory __getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) { XSingleServiceFactory xSingleServiceFactory = null; msf = multiFactory; if (implName.equals(JavaSystemBackend.class.getName())) { xSingleServiceFactory = FactoryHelper.getServiceFactory( JavaSystemBackend.class, __serviceName, multiFactory, regKey); } return xSingleServiceFactory; } /** * Writes the service information into the given registry key. * This method is called by the JavaLoader *

* @return returns true if the operation succeeded * @param regKey the registryKey * @see com.sun.star.comp.loader.JavaLoader */ public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { boolean success = FactoryHelper.writeRegistryServiceInfo(__implName, __serviceName, regKey); if (success) { try { String keyName = "/" + __implName + "/DATA/SupportedComponents"; XRegistryKey newKey = regKey.createKey(keyName); String[] supportedComponents = { testComponent }; newKey.setAsciiListValue(supportedComponents); } catch (Exception ex) { success = false; // prevent startup loop System.out.println("can't register component"); } } return success; } public void addEventListener(com.sun.star.lang.XEventListener xEventListener) { } public void dispose() { System.out.println("JavaSystemBackend::dispose() called"); } public void removeEventListener(com.sun.star.lang.XEventListener xEventListener) { } private class CommonLayer implements XLayer, XTimeStamped { public void readData(XLayerHandler xLayerHandler) throws com.sun.star.lang.NullPointerException, com.sun.star.lang.WrappedTargetException, com.sun.star.configuration.backend.MalformedDataException { System.out.println("CommonLayer is read"); if (xLayerHandler == null) { throw new com.sun.star.lang.NullPointerException( "null is not a legal LayerHandler"); } XLayerContentDescriber xLayerContentDescriber = null; try { xLayerContentDescriber = UnoRuntime.queryInterface( XLayerContentDescriber.class, msf.createInstance( "com.sun.star.comp.configuration.backend.LayerDescriber")); } catch (com.sun.star.uno.Exception e) { throw new com.sun.star.lang.NullPointerException(e, "exception while creating LayerDesccriber"); } if (xLayerContentDescriber == null) { throw new com.sun.star.lang.NullPointerException( "created LayerDescriber isn't valid"); } PropertyInfo[] pInfo = new PropertyInfo[1]; pInfo[0] = new PropertyInfo(); pInfo[0].Name = "org.openoffice.Office.Common/Undo/Steps"; pInfo[0].Value = Integer.valueOf(12); pInfo[0].Type = "int"; pInfo[0].Protected = false; xLayerContentDescriber.describeLayer(xLayerHandler, pInfo); } public String getTimestamp() { //not really implemented return "2004-03-31"; } } }