Remove framework property-based override mechanism from API Region enforcer

Also made missing configuration for an enabled API Regions enforcer
bundle an error.
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
index 010efec..e86c38a 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
@@ -24,6 +24,7 @@
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.logging.Level;
 
 public class Activator implements BundleActivator {
     static final String REGIONS_PROPERTY_NAME = "org.apache.sling.feature.apiregions.regions";
@@ -35,8 +36,12 @@
             return; // Component not enabled
 
         Dictionary<String, Object> props = new Hashtable<>();
-        RegionEnforcer enforcer = new RegionEnforcer(context, props, regions);
-        context.registerService(ResolverHookFactory.class, enforcer, props);
+        try {
+            RegionEnforcer enforcer = new RegionEnforcer(context, props, regions);
+            context.registerService(ResolverHookFactory.class, enforcer, props);
+        } catch (Exception e) {
+            RegionEnforcer.LOG.log(Level.SEVERE, "Problem activating API Regions runtime enforcement component", e);
+        }
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
index badaa5c..f4ecaec 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
@@ -40,7 +40,6 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
 import java.util.logging.Logger;
@@ -51,8 +50,6 @@
     static final String CLASSLOADER_PSEUDO_PROTOCOL = "classloader://";
     static final String PROPERTIES_RESOURCE_PREFIX = "sling.feature.apiregions.resource.";
     static final String PROPERTIES_FILE_LOCATION = "sling.feature.apiregions.location";
-    static final String SYNTHESIZED_BUNDLES_KEY = "sling.feature.apiregions.bundles";
-    static final String SYNTHESIZED_FEATURE = "org.apache.sling:org.apache.sling.feature.synthesized:0.0.0-SNAPSHOT";
 
     static final String IDBSNVER_FILENAME = "idbsnver.properties";
     static final String BUNDLE_FEATURE_FILENAME = "bundles.properties";
@@ -99,54 +96,9 @@
 
         enabledRegions = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(regionsProp.split(","))));
 
-        loadRegionsFromProperties(context, bsnVerMap, bundleFeatureMap, featureRegionMap);
         // TODO fix all collections
     }
 
-    private static void loadRegionsFromProperties(BundleContext context,
-            Map<Entry<String, Version>, List<String>> bsnVerMap,
-            Map<String, Set<String>> bundleFeatureMap,
-            Map<String, Set<String>> featureRegionMap) {
-        String prop = context.getProperty(SYNTHESIZED_BUNDLES_KEY);
-        if (prop == null)
-            return;
-
-        for (String bundle : prop.split(",")) {
-            String[] bundleinfo = bundle.split("=");
-            if (bundleinfo.length != 2) {
-                LOG.severe("Incorrect bundle info '" + bundle + "' in " + prop);
-                continue;
-            }
-
-            String bsnver = bundleinfo[0];
-            String info = bundleinfo[1];
-
-            String[] bsnver1 = bsnver.split(":");
-            if (bsnver1.length != 2) {
-                LOG.severe("Incorrect bsn and version '" + bsnver + "' in " + prop);
-                continue;
-            }
-
-            String bsn = bsnver1[0];
-            String ver = bsnver1[1];
-
-            String[] aidregion = info.split(";");
-            if (aidregion.length != 2) {
-                LOG.severe("Incorrect artifact and region '" + aidregion + "' in " + prop);
-                continue;
-            }
-
-            String aid = aidregion[0];
-            String region = aidregion[1];
-
-            addBsnVerArtifact(bsnVerMap, bsn, ver, aid);
-            addValuesToMap(bundleFeatureMap, aid, SYNTHESIZED_FEATURE);
-            addValuesToMap(featureRegionMap, SYNTHESIZED_FEATURE, region);
-
-            LOG.info("Added bundle " +  bsnver + " as " + aid + " to feature " + region);
-        }
-    }
-
     private static Map<Map.Entry<String, Version>, List<String>> populateBSNVerMap(URI idbsnverFile) throws IOException {
         if (idbsnverFile == null) {
             return new HashMap<>();
@@ -231,7 +183,8 @@
         }
 
         if (fn == null)
-            return null;
+            throw new IOException("API Region Enforcement enabled, but no configuration found to find "
+                    + "region definition resource: " + name);
 
         if (fn.contains(":")) {
             if (fn.startsWith(CLASSLOADER_PSEUDO_PROTOCOL)) {
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
index 9a279fd..c2f13d1 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
@@ -30,8 +30,11 @@
 import java.util.Hashtable;
 import java.util.Properties;
 
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.BUNDLE_FEATURE_FILENAME;
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.FEATURE_REGION_FILENAME;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.IDBSNVER_FILENAME;
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_RESOURCE_PREFIX;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.REGION_PACKAGE_FILENAME;
 
 public class ActivatorTest {
     private Properties savedProps;
@@ -50,15 +53,27 @@
 
     @Test
     public void testStart() throws Exception {
+        String i = getClass().getResource("/idbsnver1.properties").getFile();
+        String b = getClass().getResource("/bundles1.properties").getFile();
         String f = getClass().getResource("/features1.properties").getFile();
+        String r = getClass().getResource("/regions1.properties").getFile();
 
         Dictionary<String, Object> expectedProps = new Hashtable<>();
+        expectedProps.put(IDBSNVER_FILENAME, new File(i).toURI().toString());
+        expectedProps.put(BUNDLE_FEATURE_FILENAME, new File(b).toURI().toString());
         expectedProps.put(FEATURE_REGION_FILENAME, new File(f).toURI().toString());
+        expectedProps.put(REGION_PACKAGE_FILENAME, new File(r).toURI().toString());
 
         BundleContext bc = Mockito.mock(BundleContext.class);
         Mockito.when(bc.getProperty(Activator.REGIONS_PROPERTY_NAME)).thenReturn("*");
+        Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).
+            thenReturn(i);
+        Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).
+            thenReturn(b);
         Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).
             thenReturn(f);
+        Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).
+            thenReturn(r);
 
         Activator a = new Activator();
         a.start(bc);
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
index 2962cb4..45192bd 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
@@ -30,8 +30,6 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
 
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.BUNDLE_FEATURE_FILENAME;
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.FEATURE_REGION_FILENAME;
@@ -39,27 +37,33 @@
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_FILE_LOCATION;
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_RESOURCE_PREFIX;
 import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.REGION_PACKAGE_FILENAME;
-import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.SYNTHESIZED_BUNDLES_KEY;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 public class RegionEnforcerTest {
     @Test
     public void testRegionEnforcerNoConfiguration() throws Exception {
         BundleContext ctx = Mockito.mock(BundleContext.class);
 
-        RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
-        assertEquals(0, re.bsnVerMap.size());
-        assertEquals(0, re.bundleFeatureMap.size());
-        assertEquals(0, re.featureRegionMap.size());
-        assertEquals(0, re.regionPackageMap.size());
+        RegionEnforcer re;
+        try {
+            re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
+            fail("Expected exception. Enforcer is enabled but is missing configuration");
+        } catch (Exception e) {
+            // good
+        }
     }
 
     @Test
     public void testLoadBSNVerMap() throws Exception {
+        String e = getClass().getResource("/empty.properties").getFile();
         String f = getClass().getResource("/idbsnver1.properties").getFile();
         BundleContext ctx = Mockito.mock(BundleContext.class);
         Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(f);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
 
         Hashtable<String, Object> props = new Hashtable<>();
         RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -73,9 +77,13 @@
 
     @Test
     public void testLoadBundleFeatureMap() throws Exception {
+        String e = getClass().getResource("/empty.properties").getFile();
         String f = getClass().getResource("/bundles1.properties").getFile();
         BundleContext ctx = Mockito.mock(BundleContext.class);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
         Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(f);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
 
         Hashtable<String, Object> props = new Hashtable<>();
         RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -91,9 +99,13 @@
 
     @Test
     public void testLoadFeatureRegionMap() throws Exception {
+        String e = getClass().getResource("/empty.properties").getFile();
         String f = getClass().getResource("/features1.properties").getFile();
         BundleContext ctx = Mockito.mock(BundleContext.class);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
         Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(f);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
 
         Hashtable<String, Object> props = new Hashtable<>();
         RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -107,8 +119,12 @@
 
     @Test
     public void testLoadRegionPackageMap() throws Exception {
+        String e = getClass().getResource("/empty.properties").getFile();
         String f = getClass().getResource("/regions1.properties").getFile();
         BundleContext ctx = Mockito.mock(BundleContext.class);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
+        Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
         Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(f);
 
         Hashtable<String, Object> props = new Hashtable<>();
@@ -183,38 +199,4 @@
         assertEquals(Arrays.asList("r0", "r1", "r2", "r3"),
                 new ArrayList<>(re.featureRegionMap.get("org.sling:something:1.2.3")));
     }
-
-    @Test
-    public void testFrameworkPropertyBundleRegions() throws Exception {
-        BundleContext ctx = Mockito.mock(BundleContext.class);
-        Mockito.when(ctx.getProperty(SYNTHESIZED_BUNDLES_KEY)).thenReturn(
-                "org.foo.bar:1.2.3=org.foo:bar:1.2.3;myregion," +
-                "org.foo.jar:1.0.0=org.foo:jar:1.0.0;myregion");
-
-        RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
-
-        assertTrue(re.bsnVerMap.size() == 2);
-        List<String> al1 = re.bsnVerMap.get(new AbstractMap.SimpleEntry<>(
-                "org.foo.bar", Version.valueOf("1.2.3")));
-        assertEquals(1, al1.size());
-        String a1 = al1.iterator().next();
-
-        List<String> al2 = re.bsnVerMap.get(new AbstractMap.SimpleEntry<>(
-                "org.foo.jar", Version.valueOf("1.0.0")));
-        assertEquals(1, al2.size());
-        String a2 = al2.iterator().next();
-
-        Set<String> fl1 = re.bundleFeatureMap.get(a1);
-        assertEquals(1, fl1.size());
-        String f1 = fl1.iterator().next();
-        Set<String> fl2 = re.bundleFeatureMap.get(a2);
-        assertEquals(1, fl2.size());
-        String f2 = fl2.iterator().next();
-        assertEquals(f1, f2);
-
-        Set<String> rl = re.featureRegionMap.get(f1);
-        assertEquals(1, rl.size());
-        String r = rl.iterator().next();
-        assertEquals("myregion", r);
-    }
 }
diff --git a/src/test/resources/empty.properties b/src/test/resources/empty.properties
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/test/resources/empty.properties
@@ -0,0 +1 @@
+