| /************************************************************** |
| * |
| * 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; |
| |
| 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.XStringSubstitution; |
| import com.sun.star.util.XTimeStamped; |
| |
| |
| /** |
| * |
| * @author sw93809 |
| */ |
| public class JavaSystemBackend implements XSingleLayerStratum, XTypeProvider, |
| XServiceInfo, XTimeStamped, XComponent { |
| public final static String __serviceName = "com.sun.star.configuration.backend.PlatformBackend"; |
| public final static String __implName = "org.openoffice.JavaSystemBackend"; |
| public final static 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) { |
| if (serviceName.equals(__serviceName)) { |
| return true; |
| } |
| |
| return false; |
| } |
| |
| /** |
| * |
| * Gives a factory for creating the service. |
| * This method is called by the <code>JavaLoader</code> |
| * <p> |
| * @return returns a <code>XSingleServiceFactory</code> 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 <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) { |
| 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) { |
| } |
| |
| protected 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 = (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( |
| "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 = new Integer(12); |
| pInfo[0].Type = "int"; |
| pInfo[0].Protected = false; |
| xLayerContentDescriber.describeLayer(xLayerHandler, pInfo); |
| } |
| |
| public String getTimestamp() { |
| //not really implemented |
| return "2004-03-31"; |
| } |
| } |
| } |