2 * Copyright (c) 2014 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.shardstrategy;
11 import com.google.common.base.Optional;
12 import com.google.common.base.Preconditions;
14 import java.util.concurrent.ConcurrentHashMap;
15 import org.opendaylight.controller.cluster.datastore.Configuration;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 public class ShardStrategyFactory {
19 private static Map<String, ShardStrategy> moduleNameToStrategyMap =
20 new ConcurrentHashMap<>();
22 private static final String UNKNOWN_MODULE_NAME = "unknown";
23 private static Configuration configuration;
26 public static void setConfiguration(final Configuration configuration){
27 ShardStrategyFactory.configuration = configuration;
28 moduleNameToStrategyMap = configuration.getModuleNameToShardStrategyMap();
31 public static ShardStrategy getStrategy(final YangInstanceIdentifier path) {
32 Preconditions.checkState(configuration != null, "configuration should not be missing");
33 Preconditions.checkNotNull(path, "path should not be null");
36 String moduleName = getModuleName(path);
37 ShardStrategy shardStrategy = moduleNameToStrategyMap.get(moduleName);
38 if (shardStrategy == null) {
39 return new DefaultShardStrategy();
46 private static String getModuleName(final YangInstanceIdentifier path) {
47 String namespace = path.getPathArguments().iterator().next().getNodeType().getNamespace().toASCIIString();
49 Optional<String> optional =
50 configuration.getModuleNameFromNameSpace(namespace);
52 if(!optional.isPresent()){
53 return UNKNOWN_MODULE_NAME;
56 return optional.get();