X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=unused%2Fsrcjar_unused%2Forg%2Fapache%2Flog4j%2Fnet%2FZeroConfSupport.java;fp=unused%2Fsrcjar_unused%2Forg%2Fapache%2Flog4j%2Fnet%2FZeroConfSupport.java;h=2fb85dca1ac0949ff79a0789d70c05a6c1bbe500;hb=7e01e1b3e9c8abdf952e085dba51e9266f12b1ee;hp=0000000000000000000000000000000000000000;hpb=88635c3965bb2f1f45e53c2d5f66fed19b93012a;p=jalview.git diff --git a/unused/srcjar_unused/org/apache/log4j/net/ZeroConfSupport.java b/unused/srcjar_unused/org/apache/log4j/net/ZeroConfSupport.java new file mode 100644 index 0000000..2fb85dc --- /dev/null +++ b/unused/srcjar_unused/org/apache/log4j/net/ZeroConfSupport.java @@ -0,0 +1,206 @@ +/* + * 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.apache.log4j.net; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import org.apache.log4j.helpers.LogLog; + +public class ZeroConfSupport { + private static Object jmDNS = initializeJMDNS(); + + Object serviceInfo; + private static Class jmDNSClass; + private static Class serviceInfoClass; + + public ZeroConfSupport(String zone, int port, String name, Map properties) { + //if version 3 is available, use it to constuct a serviceInfo instance, otherwise support the version1 API + boolean isVersion3 = false; + try { + //create method is in version 3, not version 1 + jmDNSClass.getMethod("create", null); + isVersion3 = true; + } catch (NoSuchMethodException e) { + //no-op + } + + if (isVersion3) { + LogLog.debug("using JmDNS version 3 to construct serviceInfo instance"); + serviceInfo = buildServiceInfoVersion3(zone, port, name, properties); + } else { + LogLog.debug("using JmDNS version 1.0 to construct serviceInfo instance"); + serviceInfo = buildServiceInfoVersion1(zone, port, name, properties); + } + } + + public ZeroConfSupport(String zone, int port, String name) { + this(zone, port, name, new HashMap()); + } + + private static Object createJmDNSVersion1() + { + try { + return jmDNSClass.newInstance(); + } catch (InstantiationException e) { + LogLog.warn("Unable to instantiate JMDNS", e); + } catch (IllegalAccessException e) { + LogLog.warn("Unable to instantiate JMDNS", e); + } + return null; + } + + private static Object createJmDNSVersion3() + { + try { + Method jmDNSCreateMethod = jmDNSClass.getMethod("create", null); + return jmDNSCreateMethod.invoke(null, null); + } catch (IllegalAccessException e) { + LogLog.warn("Unable to instantiate jmdns class", e); + } catch (NoSuchMethodException e) { + LogLog.warn("Unable to access constructor", e); + } catch (InvocationTargetException e) { + LogLog.warn("Unable to call constructor", e); + } + return null; + } + + private Object buildServiceInfoVersion1(String zone, int port, String name, Map properties) { + //version 1 uses a hashtable + Hashtable hashtableProperties = new Hashtable(properties); + try { + Class[] args = new Class[6]; + args[0] = String.class; + args[1] = String.class; + args[2] = int.class; + args[3] = int.class; //weight (0) + args[4] = int.class; //priority (0) + args[5] = Hashtable.class; + Constructor constructor = serviceInfoClass.getConstructor(args); + Object[] values = new Object[6]; + values[0] = zone; + values[1] = name; + values[2] = new Integer(port); + values[3] = new Integer(0); + values[4] = new Integer(0); + values[5] = hashtableProperties; + Object result = constructor.newInstance(values); + LogLog.debug("created serviceinfo: " + result); + return result; + } catch (IllegalAccessException e) { + LogLog.warn("Unable to construct ServiceInfo instance", e); + } catch (NoSuchMethodException e) { + LogLog.warn("Unable to get ServiceInfo constructor", e); + } catch (InstantiationException e) { + LogLog.warn("Unable to construct ServiceInfo instance", e); + } catch (InvocationTargetException e) { + LogLog.warn("Unable to construct ServiceInfo instance", e); + } + return null; + } + + private Object buildServiceInfoVersion3(String zone, int port, String name, Map properties) { + try { + Class[] args = new Class[6]; + args[0] = String.class; //zone/type + args[1] = String.class; //display name + args[2] = int.class; //port + args[3] = int.class; //weight (0) + args[4] = int.class; //priority (0) + args[5] = Map.class; + Method serviceInfoCreateMethod = serviceInfoClass.getMethod("create", args); + Object[] values = new Object[6]; + values[0] = zone; + values[1] = name; + values[2] = new Integer(port); + values[3] = new Integer(0); + values[4] = new Integer(0); + values[5] = properties; + Object result = serviceInfoCreateMethod.invoke(null, values); + LogLog.debug("created serviceinfo: " + result); + return result; + } catch (IllegalAccessException e) { + LogLog.warn("Unable to invoke create method", e); + } catch (NoSuchMethodException e) { + LogLog.warn("Unable to find create method", e); + } catch (InvocationTargetException e) { + LogLog.warn("Unable to invoke create method", e); + } + return null; + } + + public void advertise() { + try { + Method method = jmDNSClass.getMethod("registerService", new Class[]{serviceInfoClass}); + method.invoke(jmDNS, new Object[]{serviceInfo}); + LogLog.debug("registered serviceInfo: " + serviceInfo); + } catch(IllegalAccessException e) { + LogLog.warn("Unable to invoke registerService method", e); + } catch(NoSuchMethodException e) { + LogLog.warn("No registerService method", e); + } catch(InvocationTargetException e) { + LogLog.warn("Unable to invoke registerService method", e); + } + } + + public void unadvertise() { + try { + Method method = jmDNSClass.getMethod("unregisterService", new Class[]{serviceInfoClass}); + method.invoke(jmDNS, new Object[]{serviceInfo}); + LogLog.debug("unregistered serviceInfo: " + serviceInfo); + } catch(IllegalAccessException e) { + LogLog.warn("Unable to invoke unregisterService method", e); + } catch(NoSuchMethodException e) { + LogLog.warn("No unregisterService method", e); + } catch(InvocationTargetException e) { + LogLog.warn("Unable to invoke unregisterService method", e); + } + } + + private static Object initializeJMDNS() { + try { + jmDNSClass = Class.forName("javax.jmdns.JmDNS"); + serviceInfoClass = Class.forName("javax.jmdns.ServiceInfo"); + } catch (ClassNotFoundException e) { + LogLog.warn("JmDNS or serviceInfo class not found", e); + } + + //if version 3 is available, use it to constuct a serviceInfo instance, otherwise support the version1 API + boolean isVersion3 = false; + try { + //create method is in version 3, not version 1 + jmDNSClass.getMethod("create", null); + isVersion3 = true; + } catch (NoSuchMethodException e) { + //no-op + } + + if (isVersion3) { + return createJmDNSVersion3(); + } else { + return createJmDNSVersion1(); + } + } + + public static Object getJMDNSInstance() { + return jmDNS; + } +}