Author: cziegeler
Date: Thu Apr  6 06:03:13 2017
New Revision: 1790344

URL: http://svn.apache.org/viewvc?rev=1790344&view=rev
Log:
SLING-6772 : Provide default mapping for service users

Modified:
    
sling/trunk/bundles/extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
    
sling/trunk/bundles/extensions/serviceusermapper/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java

Modified: 
sling/trunk/bundles/extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java?rev=1790344&r1=1790343&r2=1790344&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
 (original)
+++ 
sling/trunk/bundles/extensions/serviceusermapper/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java
 Thu Apr  6 06:03:13 2017
@@ -72,8 +72,14 @@ public class ServiceUserMapperImpl imple
 
         @AttributeDefinition(name = "Default User",
             description = "The name of the user to use as the default if no 
service mapping"
-                + "applies. If this property is missing or empty no default 
user is defined.")
+                + " applies. If this property is missing or empty no default 
user is defined.")
         String user_default();
+
+        @AttributeDefinition(name = "Default Mapping",
+                description = "If enabled and no mapping for a requested 
service user exists and no " +
+                      " default user is defined, a " +
+                     "default mapping is applied which uses the service user 
\"serviceuser@\" + {bundleId} + [\":\" + subServiceName]")
+        boolean user_default_mapping() default true;
     }
 
     /** default log */
@@ -83,13 +89,15 @@ public class ServiceUserMapperImpl imple
 
     private String defaultUser;
 
-    private Map<Long, MappingConfigAmendment> amendments = new HashMap<Long, 
MappingConfigAmendment>();
+    private boolean useDefaultMapping;
+
+    private Map<Long, MappingConfigAmendment> amendments = new HashMap<>();
 
     private Mapping[] activeMappings = new Mapping[0];
 
-    private final List<ServiceUserValidator> validators = new 
CopyOnWriteArrayList<ServiceUserValidator>();
+    private final List<ServiceUserValidator> validators = new 
CopyOnWriteArrayList<>();
 
-    private SortedMap<Mapping, Registration> activeRegistrations = new 
TreeMap<Mapping, Registration>();
+    private SortedMap<Mapping, Registration> activeRegistrations = new 
TreeMap<>();
 
     private BundleContext bundleContext;
 
@@ -107,7 +115,7 @@ public class ServiceUserMapperImpl imple
         final String[] props = config.user_mapping();
 
         if ( props != null ) {
-            final ArrayList<Mapping> mappings = new 
ArrayList<Mapping>(props.length);
+            final ArrayList<Mapping> mappings = new ArrayList<>(props.length);
             for (final String prop : props) {
                 if (prop != null && prop.trim().length() > 0 ) {
                     try {
@@ -124,6 +132,7 @@ public class ServiceUserMapperImpl imple
             this.globalServiceUserMappings = new Mapping[0];
         }
         this.defaultUser = config.user_default();
+        this.useDefaultMapping = config.user_default_mapping();
 
         RegistrationSet registrationSet = null;
         this.bundleContext = bundleContext;
@@ -208,13 +217,13 @@ public class ServiceUserMapperImpl imple
     }
 
     protected RegistrationSet updateMappings() {
-        final List<MappingConfigAmendment> sortedMappings = new 
ArrayList<MappingConfigAmendment>();
+        final List<MappingConfigAmendment> sortedMappings = new ArrayList<>();
         for(final MappingConfigAmendment amendment : this.amendments.values() 
) {
             sortedMappings.add(amendment);
         }
         Collections.sort(sortedMappings);
 
-        final List<Mapping> mappings = new ArrayList<Mapping>();
+        final List<Mapping> mappings = new ArrayList<>();
         for(final Mapping m : this.globalServiceUserMappings) {
             mappings.add(m);
         }
@@ -242,8 +251,8 @@ public class ServiceUserMapperImpl imple
             return result;
         }
 
-        final SortedSet<Mapping> orderedNewMappings = new 
TreeSet<Mapping>(Arrays.asList(newMappings));
-        final SortedMap<Mapping, Registration> newRegistrations = new 
TreeMap<Mapping, Registration>();
+        final SortedSet<Mapping> orderedNewMappings = new 
TreeSet<>(Arrays.asList(newMappings));
+        final SortedMap<Mapping, Registration> newRegistrations = new 
TreeMap<>();
 
         // keep those that are still mapped
         for (Map.Entry<Mapping, Registration> registrationEntry: 
activeRegistrations.entrySet()) {
@@ -319,7 +328,7 @@ public class ServiceUserMapperImpl imple
 
         for (final Registration registration : registrationSet.added) {
             Mapping mapping = registration.mapping;
-            final Dictionary<String, Object> properties = new 
Hashtable<String, Object>();
+            final Dictionary<String, Object> properties = new Hashtable<>();
             if (mapping.getSubServiceName() != null) {
                 properties.put(ServiceUserMapped.SUBSERVICENAME, 
mapping.getSubServiceName());
             }
@@ -368,6 +377,13 @@ public class ServiceUserMapperImpl imple
             }
         }
 
+        // use default mapping if configured and no default user
+        if ( this.defaultUser == null || this.defaultUser.isEmpty() ) {
+            final String userName = "serviceuser@" + serviceName + 
(subServiceName == null ? "" : ":" + subServiceName);
+            log.debug("internalGetUserId: no mapping found, using default 
mapping [{}]", userName);
+            return userName;
+
+        }
         log.debug("internalGetUserId: no mapping found, fallback to default 
user [{}]", this.defaultUser);
         return this.defaultUser;
     }
@@ -418,8 +434,8 @@ public class ServiceUserMapperImpl imple
     }
 
     class RegistrationSet {
-        Collection<Registration> added = new ArrayList<Registration>();
-        Collection<Registration> removed = new ArrayList<Registration>();
+        Collection<Registration> added = new ArrayList<>();
+        Collection<Registration> removed = new ArrayList<>();
     }
 }
 

Modified: 
sling/trunk/bundles/extensions/serviceusermapper/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/serviceusermapper/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java?rev=1790344&r1=1790343&r2=1790344&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/serviceusermapper/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java
 (original)
+++ 
sling/trunk/bundles/extensions/serviceusermapper/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java
 Thu Apr  6 06:03:13 2017
@@ -42,6 +42,8 @@ public class ServiceUserMapperImplTest {
 
     private static final String BUNDLE_SYMBOLIC2 = "bundle2";
 
+    private static final String BUNDLE_SYMBOLIC3 = "bundle3";
+
     private static final String SUB = "sub";
 
     private static final String NONE = "none";
@@ -58,6 +60,7 @@ public class ServiceUserMapperImplTest {
 
     private static final Bundle BUNDLE2;
 
+    private static final Bundle BUNDLE3;
 
     static {
         BUNDLE1 = mock(Bundle.class);
@@ -65,6 +68,9 @@ public class ServiceUserMapperImplTest {
 
         BUNDLE2 = mock(Bundle.class);
         when(BUNDLE2.getSymbolicName()).thenReturn(BUNDLE_SYMBOLIC2);
+
+        BUNDLE3 = mock(Bundle.class);
+        when(BUNDLE3.getSymbolicName()).thenReturn(BUNDLE_SYMBOLIC3);
     }
 
     @Test
@@ -77,6 +83,57 @@ public class ServiceUserMapperImplTest {
             BUNDLE_SYMBOLIC2 + ":" + SUB + "=" + ANOTHER_SUB //
         });
         when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(false);
+
+        final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
+        sum.configure(null, config);
+
+        TestCase.assertEquals(SAMPLE, sum.getServiceUserID(BUNDLE1, null));
+        TestCase.assertEquals(ANOTHER, sum.getServiceUserID(BUNDLE2, null));
+        TestCase.assertEquals(SAMPLE, sum.getServiceUserID(BUNDLE1, ""));
+        TestCase.assertEquals(ANOTHER, sum.getServiceUserID(BUNDLE2, ""));
+        TestCase.assertEquals(SAMPLE_SUB, sum.getServiceUserID(BUNDLE1, SUB));
+        TestCase.assertEquals(ANOTHER_SUB, sum.getServiceUserID(BUNDLE2, SUB));
+        TestCase.assertEquals(NONE, sum.getServiceUserID(BUNDLE3, null));
+        TestCase.assertEquals(NONE, sum.getServiceUserID(BUNDLE3, SUB));
+    }
+
+    @Test
+    public void test_getServiceUserIDwithDefaultMappingEnabledAndDefaultUser() 
{
+        ServiceUserMapperImpl.Config config = 
mock(ServiceUserMapperImpl.Config.class);
+        when(config.user_mapping()).thenReturn(new String[] {
+            BUNDLE_SYMBOLIC1 + "=" + SAMPLE, //
+            BUNDLE_SYMBOLIC2 + "=" + ANOTHER, //
+            BUNDLE_SYMBOLIC1 + ":" + SUB + "=" + SAMPLE_SUB, //
+            BUNDLE_SYMBOLIC2 + ":" + SUB + "=" + ANOTHER_SUB //
+        });
+        when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(true);
+
+        final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
+        sum.configure(null, config);
+
+        TestCase.assertEquals(SAMPLE, sum.getServiceUserID(BUNDLE1, null));
+        TestCase.assertEquals(ANOTHER, sum.getServiceUserID(BUNDLE2, null));
+        TestCase.assertEquals(SAMPLE, sum.getServiceUserID(BUNDLE1, ""));
+        TestCase.assertEquals(ANOTHER, sum.getServiceUserID(BUNDLE2, ""));
+        TestCase.assertEquals(SAMPLE_SUB, sum.getServiceUserID(BUNDLE1, SUB));
+        TestCase.assertEquals(ANOTHER_SUB, sum.getServiceUserID(BUNDLE2, SUB));
+        TestCase.assertEquals(NONE, sum.getServiceUserID(BUNDLE3, null));
+        TestCase.assertEquals(NONE, sum.getServiceUserID(BUNDLE3, SUB));
+    }
+
+    @Test
+    public void 
test_getServiceUserIDwithDefaultMappingEnabledAndNoDefaultUser() {
+        ServiceUserMapperImpl.Config config = 
mock(ServiceUserMapperImpl.Config.class);
+        when(config.user_mapping()).thenReturn(new String[] {
+            BUNDLE_SYMBOLIC1 + "=" + SAMPLE, //
+            BUNDLE_SYMBOLIC2 + "=" + ANOTHER, //
+            BUNDLE_SYMBOLIC1 + ":" + SUB + "=" + SAMPLE_SUB, //
+            BUNDLE_SYMBOLIC2 + ":" + SUB + "=" + ANOTHER_SUB //
+        });
+        when(config.user_default()).thenReturn(null);
+        when(config.user_default_mapping()).thenReturn(true);
 
         final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
         sum.configure(null, config);
@@ -87,6 +144,8 @@ public class ServiceUserMapperImplTest {
         TestCase.assertEquals(ANOTHER, sum.getServiceUserID(BUNDLE2, ""));
         TestCase.assertEquals(SAMPLE_SUB, sum.getServiceUserID(BUNDLE1, SUB));
         TestCase.assertEquals(ANOTHER_SUB, sum.getServiceUserID(BUNDLE2, SUB));
+        TestCase.assertEquals("serviceuser@" + BUNDLE_SYMBOLIC3, 
sum.getServiceUserID(BUNDLE3, null));
+        TestCase.assertEquals("serviceuser@" + BUNDLE_SYMBOLIC3 + ":" + SUB, 
sum.getServiceUserID(BUNDLE3, SUB));
     }
 
     @Test
@@ -99,6 +158,7 @@ public class ServiceUserMapperImplTest {
                 BUNDLE_SYMBOLIC2 + ":" + SUB + "=" + ANOTHER_SUB //
         });
         when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(false);
 
         final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
         sum.configure(null, config);
@@ -131,6 +191,7 @@ public class ServiceUserMapperImplTest {
                 BUNDLE_SYMBOLIC1 + ":" + SUB + "=" + SAMPLE_SUB, //
         });
         when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(false);
 
         final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
         sum.configure(null, config);
@@ -172,6 +233,7 @@ public class ServiceUserMapperImplTest {
         ServiceUserMapperImpl.Config config = 
mock(ServiceUserMapperImpl.Config.class);
         when(config.user_mapping()).thenReturn(new String[] {});
         when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(false);
 
         final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
         sum.configure(null, config);
@@ -214,6 +276,7 @@ public class ServiceUserMapperImplTest {
                 BUNDLE_SYMBOLIC1 + ":" + SUB + "=" + SAMPLE_SUB, //
                 });
         when(config.user_default()).thenReturn(NONE);
+        when(config.user_default_mapping()).thenReturn(false);
 
         final ServiceUserMapperImpl sum = new ServiceUserMapperImpl();
         sum.registerAsync = false;
@@ -262,7 +325,7 @@ public class ServiceUserMapperImplTest {
 
 
         final BundleContext bundleContext = mock(BundleContext.class);
-        final Map<String, Map<Object, Dictionary>> registrations = new 
HashMap<String, Map<Object, Dictionary>>();
+        final Map<String, Map<Object, Dictionary>> registrations = new 
HashMap<>();
 
         public ServiceRegistrationContextHelper() {
             when(bundleContext.registerService(any(String.class), 
any(Object.class), any(Dictionary.class)))


Reply via email to