diff options
Diffstat (limited to 'sangria-slf4j')
4 files changed, 214 insertions, 0 deletions
diff --git a/sangria-slf4j/pom.xml b/sangria-slf4j/pom.xml new file mode 100644 index 0000000..8127fbe --- /dev/null +++ b/sangria-slf4j/pom.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>com.tavianator</groupId> + <artifactId>sangria</artifactId> + <version>1.0-SNAPSHOT</version> + </parent> + + <artifactId>sangria-slf4j</artifactId> + <packaging>jar</packaging> + <name>Sangria SLF4J</name> + <description>SLF4J injection</description> + + <dependencies> + <dependency> + <groupId>com.tavianator</groupId> + <artifactId>sangria-contextual</artifactId> + </dependency> + + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>1.7.6</version> + </dependency> + + <dependency> + <groupId>com.google.code.findbugs</groupId> + <artifactId>jsr305</artifactId> + <optional>true</optional> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-integration</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>1.7.6</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> diff --git a/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/SangriaSlf4jModule.java b/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/SangriaSlf4jModule.java new file mode 100644 index 0000000..9be0f8a --- /dev/null +++ b/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/SangriaSlf4jModule.java @@ -0,0 +1,33 @@ +/********************************************************************* + * Sangria * + * Copyright (C) 2014 Tavian Barnes <tavianator@tavianator.com> * + * * + * This library is free software. It comes without any warranty, to * + * the extent permitted by applicable law. You can redistribute it * + * and/or modify it under the terms of the Do What The Fuck You Want * + * To Public License, Version 2, as published by Sam Hocevar. See * + * the COPYING file or http://www.wtfpl.net/ for more details. * + *********************************************************************/ + +package com.tavianator.sangria.slf4j; + +import com.google.inject.AbstractModule; +import org.slf4j.Logger; + +import com.tavianator.sangria.contextual.ContextSensitiveBinder; + +/** + * Module for SLF4J {@link Logger} injection. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.0 + * @since 1.0 + */ +public class SangriaSlf4jModule extends AbstractModule { + @Override + protected void configure() { + ContextSensitiveBinder.create(binder()) + .bind(Logger.class) + .toContextSensitiveProvider(Slf4jLoggerProvider.class); + } +} diff --git a/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/Slf4jLoggerProvider.java b/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/Slf4jLoggerProvider.java new file mode 100644 index 0000000..cae4836 --- /dev/null +++ b/sangria-slf4j/src/main/java/com/tavianator/sangria/slf4j/Slf4jLoggerProvider.java @@ -0,0 +1,40 @@ +/********************************************************************* + * Sangria * + * Copyright (C) 2014 Tavian Barnes <tavianator@tavianator.com> * + * * + * This library is free software. It comes without any warranty, to * + * the extent permitted by applicable law. You can redistribute it * + * and/or modify it under the terms of the Do What The Fuck You Want * + * To Public License, Version 2, as published by Sam Hocevar. See * + * the COPYING file or http://www.wtfpl.net/ for more details. * + *********************************************************************/ + +package com.tavianator.sangria.slf4j; + +import javax.inject.Singleton; + +import com.google.inject.spi.InjectionPoint; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.tavianator.sangria.contextual.ContextSensitiveProvider; + +/** + * Actual {@link Logger} provider implementation. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.0 + * @since 1.0 + */ +@Singleton +class Slf4jLoggerProvider implements ContextSensitiveProvider<Logger> { + @Override + public Logger getInContext(InjectionPoint injectionPoint) { + return LoggerFactory.getLogger(injectionPoint.getDeclaringType().getRawType()); + } + + @Override + public Logger getInUnknownContext() { + return LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + } +} diff --git a/sangria-slf4j/src/test/java/com/tavianator/sangria/slf4j/SangriaSlf4jModuleTest.java b/sangria-slf4j/src/test/java/com/tavianator/sangria/slf4j/SangriaSlf4jModuleTest.java new file mode 100644 index 0000000..254584b --- /dev/null +++ b/sangria-slf4j/src/test/java/com/tavianator/sangria/slf4j/SangriaSlf4jModuleTest.java @@ -0,0 +1,75 @@ +/********************************************************************* + * Sangria * + * Copyright (C) 2014 Tavian Barnes <tavianator@tavianator.com> * + * * + * This library is free software. It comes without any warranty, to * + * the extent permitted by applicable law. You can redistribute it * + * and/or modify it under the terms of the Do What The Fuck You Want * + * To Public License, Version 2, as published by Sam Hocevar. See * + * the COPYING file or http://www.wtfpl.net/ for more details. * + *********************************************************************/ + +package com.tavianator.sangria.slf4j; + +import javax.inject.Inject; +import javax.inject.Provider; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Provides; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; + +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +/** + * Tests for {@link SangriaSlf4jModule}. + * + * @author Tavian Barnes (tavianator@tavianator.com) + * @version 1.0 + * @since 1.0 + */ +public class SangriaSlf4jModuleTest { + @Inject Logger logger; + @Inject Provider<Logger> provider; + + @Before + public void setUp() { + Guice.createInjector(new SangriaSlf4jModule()).injectMembers(this); + } + + @Test + public void testLogger() { + assertThat(logger.getName(), equalTo("com.tavianator.sangria.slf4j.SangriaSlf4jModuleTest")); + } + + @Test + public void testProvider() { + assertThat(provider.get().getName(), equalTo(Logger.ROOT_LOGGER_NAME)); + } + + @Test + public void testProviderMethod() { + Injector injector = Guice.createInjector(new AbstractModule() { + @Override + protected void configure() { + install(new SangriaSlf4jModule()); + } + + @Provides + String getLoggerName(Logger logger) { + return logger.getName(); + } + }); + + assertThat(injector.getInstance(String.class), equalTo(Logger.ROOT_LOGGER_NAME)); + } + + @Test + public void testDeDuplication() { + Guice.createInjector(new SangriaSlf4jModule(), new SangriaSlf4jModule()); + } +} |