/*
* Copyright 2009 VoidSearch.com
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.voidsearch.voidbase.storage.distributed.router.topology;
import com.voidsearch.voidbase.storage.distributed.router.strategy.Strategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ConcurrentHashMap;
public class StorageTopology {
protected static Strategy strategy = null;
protected static StorageTopology topology = null;
protected static final ConcurrentHashMap<String, StorageNode> nodes = new ConcurrentHashMap<String, StorageNode>();
protected static final Logger logger = LoggerFactory.getLogger(StorageTopology.class.getName());
protected StorageTopology() {
super();
}
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public static synchronized StorageTopology getInstance() {
if (topology == null) {
topology = new StorageTopology();
}
return topology;
}
public synchronized void addNode(StorageNode node) throws StorageTopologyException {
if (node == null) {
throw new StorageTopologyException("Invalid node object.");
}
if (node.id == null || node.id < 0) {
throw new StorageTopologyException("Invalid node ID.");
}
if (node.name == null) {
throw new StorageTopologyException("Invalid node name.");
}
if (nodes.containsKey(node.name)) {
throw new StorageTopologyException("Node with name " + node.name + " already exists.");
}
nodes.put(node.name, node);
}
}