From e59bf8c39d3d43a75d8a9a32857e52e2e04b51cd Mon Sep 17 00:00:00 2001
From: Nicholas Blair <nicholas.blair@wisc.edu>
Date: Thu, 3 Mar 2016 14:52:13 -0600
Subject: [PATCH] UdsPersonUserDetailsImpl#getPvi now returns computed PVI

---
 .../uwss/uds/UdsPersonUserDetailsImpl.java    | 18 +++++++++++-------
 .../uds/UdsPersonUserDetailsImplTest.java     | 19 +++++++++++++++++++
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
index cc5772f..da5aa1b 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
@@ -30,6 +30,7 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails {
 
   private static final long serialVersionUID = 2930942419916444606L;
   public static final String NETID_IDNAME = "NETID";
+  public static final String PVI_IDNAME = "PVI";
   public static final String PHOTOID_IDNAME = "PHOTOID";
   public static final String UWMSNSUDS_SOURCE = "UWMSNSUDS";
   public static final String USER_DETAILS_SOURCE = "uds";
@@ -180,22 +181,24 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails {
   
   /**
    * {@inheritDoc}
-   * 
-   * This implementation always returns null.
-   * 
-   * TODO it may be possible to extract a PVI value from person.getIdentifiers
    */
   @Override
   public String getPvi() {
+    if(person.getIdentifiers() == null) {
+      return null;
+    }
+    for(Identifier identifier: person.getIdentifiers().getIdentifiers()) {
+      if(UWMSNSUDS_SOURCE.equals(identifier.getSource()) && PVI_IDNAME.equals(identifier.getIdName())) {
+        return identifier.getValue();
+      }
+    }
     return null;
   }
   
   /**
    * {@inheritDoc}
    * 
-   * This implementation always returns null.
-   * 
-   * TODO it may be possible to extract a EPPN value from person.getIdentifiers
+   * This implementation always returns null; UDS Person does not return EPPN.
    */
   @Override
   public String getEppn() {
@@ -207,6 +210,7 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails {
    * This implementation always returns null.
    * 
    * TODO it may be possible to extract an emplid value from person.getIdentifiers
+   * Example observed: edu.wisc.services.uds.person.v1_1.Identifier@715ef617[source=UWMSNSS, idName=EMPLID, value=000123456]
    */
   @Override
   public String getIsisEmplid() {
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
index 036dfa9..9397790 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
@@ -120,4 +120,23 @@ public class UdsPersonUserDetailsImplTest {
     assertEquals("Badger", new UdsPersonUserDetailsImpl(person).getLastName());
   }
 
+  /**
+   * Confirm successful result for {@link UdsPersonUserDetailsImpl#getPvi()}.
+   */
+  @Test
+  public void getPvi_success() {
+    String pvi = "UW111E111";
+    Identifier identifier = new Identifier();
+    identifier.setSource("UWMSNSUDS");
+    identifier.setIdName("PVI");
+    identifier.setValue(pvi);
+
+    Identifiers identifiers = new Identifiers();
+    identifiers.getIdentifiers().add(identifier);
+    Person person = new Person();
+    person.setIdentifiers(identifiers);
+
+    assertEquals(pvi, new UdsPersonUserDetailsImpl(person).getPvi());
+  }
+
 }
-- 
GitLab