+ private static EntityOwnerSelectionStrategyConfig parseConfiguration(final Builder builder, final Configuration config) {
+ // Historic note: java.util.Dictionary since introduction of java.util.Map in Java 1.2
+ final Dictionary<String, Object> properties = config.getProperties();
+ if (properties == null) {
+ LOG.debug("Empty strategy configuration {}, using defaults", config);
+ return builder.build();
+ }
+
+ // No java.util.Iterable: Wheeey, pre-Java 5 world!!!
+ final Enumeration<String> keys = properties.keys();
+ while (keys.hasMoreElements()) {
+ final String key = keys.nextElement();
+ if (!key.startsWith(ENTITY_TYPE_PREFIX)) {
+ LOG.debug("Ignoring non-conforming property key : {}");
+ continue;
+ }
+
+ final String[] strategyClassAndDelay = ((String) properties.get(key)).split(",");
+ final Class<? extends EntityOwnerSelectionStrategy> aClass;
+ try {
+ aClass = loadClass(strategyClassAndDelay[0]);
+ } catch (ClassNotFoundException e) {
+ LOG.error("Failed to load class {}, ignoring it", strategyClassAndDelay[0], e);
+ continue;
+ }
+
+ final long delay;
+ if (strategyClassAndDelay.length > 1) {
+ delay = Long.parseLong(strategyClassAndDelay[1]);
+ } else {
+ delay = 0;
+ }
+
+ String entityType = key.substring(key.lastIndexOf(".") + 1);
+ builder.addStrategy(entityType, aClass, delay);
+ LOG.debug("Entity Type '{}' using strategy {} delay {}", entityType, aClass, delay);
+ }
+
+ return builder.build();