This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/karaf.git
commit 1d708171c1d9261f00fe3298c390295eebcb459b Author: Guillaume Nodet <[email protected]> AuthorDate: Thu Nov 23 08:40:59 2017 +0100 [KARAF-5475] Ability to use custom layouts using fragments --- .../java/org/apache/karaf/audit/Activator.java | 46 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/audit/src/main/java/org/apache/karaf/audit/Activator.java b/audit/src/main/java/org/apache/karaf/audit/Activator.java index 959bd50..7e3bcd2 100644 --- a/audit/src/main/java/org/apache/karaf/audit/Activator.java +++ b/audit/src/main/java/org/apache/karaf/audit/Activator.java @@ -39,11 +39,14 @@ import org.osgi.service.event.EventHandler; import javax.security.auth.Subject; import java.io.IOException; +import java.lang.reflect.Constructor; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Dictionary; +import java.util.Enumeration; +import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; @@ -198,8 +201,47 @@ public class Activator extends BaseActivator implements ManagedService { case "gelf": return new GelfLayout(); default: - logger.warn("Unknown layout: " + type + ". Using a simple layout."); - return new SimpleLayout(); + try { + return createCustomLayout(type); + } catch (Exception e) { + logger.error("Error creating layout: " + type + ". Using a simple layout.", e); + return new SimpleLayout(); + } + } + } + + private EventLayout createCustomLayout(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException, java.lang.reflect.InvocationTargetException { + Class<?> clazz = Class.forName(type); + Constructor<?> cnsMap = null; + Constructor<?> cnsDef = null; + Object layout = null; + try { + cnsMap = clazz.getConstructor(Map.class); + } catch (NoSuchMethodException e) { + // ignore + } + try { + cnsDef = clazz.getConstructor(); + } catch (NoSuchMethodException e) { + // ignore + } + if (cnsMap != null) { + Map<String, Object> params = new HashMap<>(); + for (Enumeration<String> e = getConfiguration().keys(); e.hasMoreElements(); ) { + String key = e.nextElement(); + Object val = getConfiguration().get(key); + params.put(key, val); + } + layout = cnsMap.newInstance(params); + } else if (cnsDef != null) { + layout = cnsDef.newInstance(); + } else { + throw new IllegalArgumentException("Unable to find a supported constructor"); + } + if (layout instanceof EventLayout) { + return (EventLayout) layout; + } else { + throw new IllegalArgumentException("The built layout does not implement " + EventLayout.class.getName()); } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
