/** * Copyright (C) 2011-2015 The XDocReport Team <xdocreport@googlegroups.com> * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * CentralRegistrationClass.java * * Created on 2012.02.09 - 15:36:36 * */ package fr.opensagres.xdocreport; import com.sun.star.lang.XSingleComponentFactory; import com.sun.star.registry.XRegistryKey; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.JarURLConnection; import java.net.URL; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.jar.Attributes; import java.util.jar.Manifest; /** * * @author pascalleclercq */ public class CentralRegistrationClass { public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { String regClassesList = getRegistrationClasses(); StringTokenizer t = new StringTokenizer(regClassesList, " "); while (t.hasMoreTokens()) { String className = t.nextToken(); if (className != null && className.length() != 0) { try { Class regClass = Class.forName(className); Method writeRegInfo = regClass.getDeclaredMethod("__getComponentFactory", new Class[]{String.class}); Object result = writeRegInfo.invoke(regClass, sImplementationName); if (result != null) { return (XSingleComponentFactory)result; } } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (ClassCastException ex) { ex.printStackTrace(); } catch (SecurityException ex) { ex.printStackTrace(); } catch (NoSuchMethodException ex) { ex.printStackTrace(); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } catch (InvocationTargetException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } } } return null; } public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) { boolean bResult = true; String regClassesList = getRegistrationClasses(); StringTokenizer t = new StringTokenizer(regClassesList, " "); while (t.hasMoreTokens()) { String className = t.nextToken(); if (className != null && className.length() != 0) { try { Class regClass = Class.forName(className); Method writeRegInfo = regClass.getDeclaredMethod("__writeRegistryServiceInfo", new Class[]{XRegistryKey.class}); Object result = writeRegInfo.invoke(regClass, xRegistryKey); bResult &= ((Boolean)result).booleanValue(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (ClassCastException ex) { ex.printStackTrace(); } catch (SecurityException ex) { ex.printStackTrace(); } catch (NoSuchMethodException ex) { ex.printStackTrace(); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } catch (InvocationTargetException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } } } return bResult; } private static String getRegistrationClasses() { CentralRegistrationClass c = new CentralRegistrationClass(); String name = c.getClass().getCanonicalName().replace('.', '/').concat(".class"); try { Enumeration<URL> urlEnum = c.getClass().getClassLoader().getResources("META-INF/MANIFEST.MF"); while (urlEnum.hasMoreElements()) { URL url = urlEnum.nextElement(); String file = url.getFile(); JarURLConnection jarConnection = (JarURLConnection) url.openConnection(); Manifest mf = jarConnection.getManifest(); Attributes attrs = (Attributes) mf.getAttributes(name); if ( attrs != null ) { String classes = attrs.getValue( "RegistrationClasses" ); return classes; } } } catch (IOException ex) { ex.printStackTrace(); } return ""; } /** Creates a new instance of CentralRegistrationClass */ private CentralRegistrationClass() { } }