2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy;
11 import com.google.common.base.Preconditions;
13 import java.util.Map.Entry;
14 import org.opendaylight.controller.cluster.datastore.entityownership.selectionstrategy.EntityOwnerSelectionStrategyConfig.Builder;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
19 * Reads the entity owner selection strategy config.
22 public final class EntityOwnerSelectionStrategyConfigReader {
24 private static final Logger LOG = LoggerFactory.getLogger(EntityOwnerSelectionStrategyConfigReader.class);
25 private static final String ENTITY_TYPE_PREFIX = "entity.type.";
27 private EntityOwnerSelectionStrategyConfigReader() {
31 @SuppressWarnings("checkstyle:IllegalCatch")
32 public static EntityOwnerSelectionStrategyConfig loadStrategyWithConfig(final Map<Object, Object> props) {
33 final EntityOwnerSelectionStrategyConfig.Builder builder = EntityOwnerSelectionStrategyConfig.newBuilder();
35 if (props != null && !props.isEmpty()) {
36 parseConfiguration(builder, props);
39 LOG.debug("Could not read strategy configuration file, will use default configuration.");
41 LOG.debug("Configuration file is empty, will use default configuration.");
44 return builder.build();
47 private static EntityOwnerSelectionStrategyConfig parseConfiguration(final Builder builder,
48 final Map<Object, Object> properties) {
50 for (final Entry<Object, Object> entry : properties.entrySet()) {
51 final String key = (String) entry.getKey();
52 if (!key.startsWith(ENTITY_TYPE_PREFIX)) {
53 LOG.debug("Ignoring non-conforming property key : {}", key);
57 final String[] strategyClassAndDelay = ((String) properties.get(key)).split(",");
58 final Class<? extends EntityOwnerSelectionStrategy> aClass = loadClass(strategyClassAndDelay[0]);
61 if (strategyClassAndDelay.length > 1) {
62 delay = Long.parseLong(strategyClassAndDelay[1]);
67 final String entityType = key.substring(key.lastIndexOf(".") + 1);
68 builder.addStrategy(entityType, aClass, delay);
69 LOG.debug("Entity Type '{}' using strategy {} delay {}", entityType, aClass, delay);
72 return builder.build();
75 @SuppressWarnings("unchecked")
76 private static Class<? extends EntityOwnerSelectionStrategy> loadClass(final String strategyClassAndDelay) {
79 clazz = EntityOwnerSelectionStrategyConfigReader.class.getClassLoader().loadClass(strategyClassAndDelay);
80 } catch (final ClassNotFoundException e) {
81 throw new IllegalArgumentException("Failed to load strategy " + strategyClassAndDelay, e);
84 Preconditions.checkArgument(EntityOwnerSelectionStrategy.class.isAssignableFrom(clazz),
85 "Selected implementation %s must implement EntityOwnerSelectionStrategy, clazz");
87 return (Class<? extends EntityOwnerSelectionStrategy>) clazz;