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)))