From 1d08ae6ab3c2c74db11d1c54a56c7c54d7798ddb Mon Sep 17 00:00:00 2001
From: Nicholas Blair <nicholas.blair@wisc.edu>
Date: Mon, 22 Aug 2016 08:51:01 -0500
Subject: [PATCH] refactor: consolidate Loader

The same ObjectMapper instance with a YAMLFactory can load both YAML and JSON.
---
 .../wisc/uwss/local/LocalUserDetailsLoader.java  | 10 +++++-----
 .../uwss/local/YamlLocalUserDetailsLoader.java   | 16 ----------------
 .../local/LocalUserDetailsManagerImplTest.java   | 11 ++++++++---
 .../src/test/resources/log4j.properties          |  4 ++--
 4 files changed, 15 insertions(+), 26 deletions(-)
 delete mode 100644 uw-spring-security-core/src/main/java/edu/wisc/uwss/local/YamlLocalUserDetailsLoader.java

diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUserDetailsLoader.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUserDetailsLoader.java
index ef46c13..290fedb 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUserDetailsLoader.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUserDetailsLoader.java
@@ -3,6 +3,7 @@ package edu.wisc.uwss.local;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 
 import org.springframework.core.io.Resource;
 
@@ -19,25 +20,24 @@ import edu.wisc.uwss.UWSpringSecurityException;
  * This interface is an alternative to {@link LocalUserDetailsAttributesMapper}.
  *
  * @see {@link LocalUserDetailsAttributesMapper}
+ * @see {@link LocalUserDetailsLoader.Default}
  * @author Nicholas Blair
  */
 public interface LocalUserDetailsLoader {
 
   /**
-   *
    * @param resource a {@link Resource} with an accessible {@link java.io.InputStream}
    * @return a never null, but potentially empty, {@link List} of {@link UWUserDetails} instances
+   * @throws UWSpringSecurityException if the {@link Resource} couldn't be read
    */
   List<UWUserDetails> loadUsers(Resource resource);
 
   /**
-   * Default loader uses Jackson.
-   *
-   * This implementation can be subclassed
+   * Default loader uses Jackson and can parse both JSON and YAML formats.
    */
   public static class Default implements LocalUserDetailsLoader {
 
-    private ObjectMapper objectMapper = new ObjectMapper();
+    private ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
 
     /**
      * Visible for subclasses to override.
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/YamlLocalUserDetailsLoader.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/YamlLocalUserDetailsLoader.java
deleted file mode 100644
index 0973e28..0000000
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/YamlLocalUserDetailsLoader.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package edu.wisc.uwss.local;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-
-/**
- * {@link LocalUserDetailsLoader} implementation that can load YAML.
- *
- * @author Nicholas Blair
- */
-public class YamlLocalUserDetailsLoader extends LocalUserDetailsLoader.Default {
-  @Override
-  protected ObjectMapper getObjectMapper() {
-    return new ObjectMapper(new YAMLFactory());
-  }
-}
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/LocalUserDetailsManagerImplTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/LocalUserDetailsManagerImplTest.java
index 5982c08..cc4e17e 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/LocalUserDetailsManagerImplTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/LocalUserDetailsManagerImplTest.java
@@ -89,7 +89,7 @@ public class LocalUserDetailsManagerImplTest {
   }
   /**
    * Confirm that {@link LocalUserDetailsManagerImpl} with {@link LocalUserDetailsManagerImpl#setLoaderEnabled(boolean)}
-   * of true results in equivalent {@link UWUserDetails} instances being loaded.
+   * of true results in equivalent {@link UWUserDetails} instances being loaded from JSON.
    *
    * @throws IOException
    */
@@ -114,6 +114,12 @@ public class LocalUserDetailsManagerImplTest {
     assertEquals(withAttributesMapper.loadUserByUsername("jim"), withLoader.loadUserByUsername("jim"));
 
   }
+  /**
+   * Confirm that {@link LocalUserDetailsManagerImpl} with {@link LocalUserDetailsManagerImpl#setLoaderEnabled(boolean)}
+   * of true results in equivalent {@link UWUserDetails} instances being loaded from YAML.
+   *
+   * @throws IOException
+   */
   @Test
   public void init_compare_yaml_loader_vs_attributesmapper() throws IOException {
     Properties properties = new Properties();
@@ -124,8 +130,7 @@ public class LocalUserDetailsManagerImplTest {
     withAttributesMapper.init();
 
     LocalUserDetailsManagerImpl withLoader = new LocalUserDetailsManagerImpl()
-            .setLocalUserDetailsLoader(new YamlLocalUserDetailsLoader())
-            .setLocalUserResource(new ClassPathResource("edu/wisc/uwss/local/local-users.json"))
+            .setLocalUserResource(new ClassPathResource("edu/wisc/uwss/local/local-users.yaml"))
             .setLoaderEnabled(true);
     withLoader.init();
 
diff --git a/uw-spring-security-core/src/test/resources/log4j.properties b/uw-spring-security-core/src/test/resources/log4j.properties
index 51828d1..cd82d48 100644
--- a/uw-spring-security-core/src/test/resources/log4j.properties
+++ b/uw-spring-security-core/src/test/resources/log4j.properties
@@ -1,6 +1,6 @@
 log4j.rootCategory=DEBUG, R
-#log4j.appender.R=org.apache.log4j.varia.NullAppender
-log4j.appender.R=org.apache.log4j.ConsoleAppender
+log4j.appender.R=org.apache.log4j.varia.NullAppender
+#log4j.appender.R=org.apache.log4j.ConsoleAppender
 
 log4j.appender.R.layout=org.apache.log4j.PatternLayout
 log4j.appender.R.layout.ConversionPattern=%d %p [%t] %c - %m%n
-- 
GitLab