/*
* Copyright (c) 2017 Cisco Systems. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.groupbasedpolicy.renderer.vpp.lisp.bvi;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created by Shakib Ahmed on 4/26/17.
*/
public class BviHostSpecificInfo {
private HashMap<String, HashMap<String, String>> hostIdToSubnetMapper;
private Multimap<String, String> subnetUuidToHostIdList;
public BviHostSpecificInfo() {
hostIdToSubnetMapper = new HashMap<>();
subnetUuidToHostIdList = ArrayListMultimap.create();
}
private HashMap<String, String> getSubnetsOfHost(String hostName) {
return hostIdToSubnetMapper.get(hostName);
}
private void putSubnetInfoOfAHost(String hostId, String subnetUuid, String interfaceName) {
HashMap<String, String> subnetsOfAHost = getSubnetsOfHost(hostId);
if (subnetsOfAHost == null) {
subnetsOfAHost = new HashMap<>();
hostIdToSubnetMapper.put(hostId, subnetsOfAHost);
}
subnetsOfAHost.put(subnetUuid, interfaceName);
}
public boolean bviAlreadyExists(String hostName, String subnetUuid) {
return hostIdToSubnetMapper.containsKey(hostName) &&
hostIdToSubnetMapper.get(hostName).containsKey(subnetUuid);
}
public void addBviForHost(String hostName, String subnetUuid, String interfaceName) {
putSubnetInfoOfAHost(hostName, subnetUuid, interfaceName);
subnetUuidToHostIdList.put(subnetUuid, hostName);
}
public int getBviCount(String hostName) {
if (hostIdToSubnetMapper.get(hostName) == null) {
return 0;
}
return hostIdToSubnetMapper.get(hostName).size();
}
public void clearSubnet(String subnetUuid) {
subnetUuidToHostIdList.get(subnetUuid).forEach(hostId -> {
deleteParticularSubnetFromHost(hostId, subnetUuid);
});
subnetUuidToHostIdList.get(subnetUuid).clear();
}
private void deleteParticularSubnetFromHost(String hostId, String subnetUuid) {
hostIdToSubnetMapper.get(hostId).remove(subnetUuid);
}
public List<String> getHostsWithSubnet(String subnetUuid) {
return subnetUuidToHostIdList.get(subnetUuid).stream().collect(Collectors.toList());
}
public String getInterfaceNameForBviInHost(String hostId, String subnetUuid) {
if (hostIdToSubnetMapper.get(hostId) != null) {
return hostIdToSubnetMapper.get(hostId).get(subnetUuid);
} else {
return null;
}
}
}