/**
*
*/
package org.opennaas.gui.vcpe.utils.model;
import java.util.ArrayList;
import java.util.List;
import org.opennaas.extensions.vcpe.manager.templates.mp.TemplateConstants;
import org.opennaas.extensions.vcpe.manager.templates.sp.SPTemplateConstants;
import org.opennaas.extensions.vcpe.model.IPNetworkDomain;
import org.opennaas.extensions.vcpe.model.VCPENetworkElement;
import org.opennaas.extensions.vcpe.model.VCPENetworkModel;
import org.opennaas.gui.vcpe.entities.BGP;
import org.opennaas.gui.vcpe.entities.Interface;
import org.opennaas.gui.vcpe.entities.LogicalInfrastructure;
import org.opennaas.gui.vcpe.entities.MultipleProviderLogical;
import org.opennaas.gui.vcpe.entities.MultipleProviderPhysical;
import org.opennaas.gui.vcpe.entities.Network;
import org.opennaas.gui.vcpe.entities.PhysicalInfrastructure;
import org.opennaas.gui.vcpe.entities.Router;
import org.opennaas.gui.vcpe.entities.SingleProviderLogical;
import org.opennaas.gui.vcpe.entities.SingleProviderPhysical;
import org.opennaas.gui.vcpe.entities.VRRP;
import org.opennaas.gui.vcpe.enums.Template;
/**
* This class provides the methods to convert OpenNaaS beans to VCPE GUI beans
*
* @author Jordi
*/
public class OpennaasBeanUtils {
/**
* Convert a OpenNaaS model to a GUI VCPENetwork model
*
* @param openNaasModel
* @return VCPENetwork
*/
public static VCPENetworkModel getVCPENetwork(LogicalInfrastructure modelIn) {
VCPENetworkModel modelOut = null;
if (modelIn.getTemplateType().equals(Template.SINGLE_PROVIDER.toString())) {
modelOut = getVCPENetworkFromSP((SingleProviderLogical) modelIn);
} else if (modelIn.getTemplateType().equals(Template.MULTIPLE_PROVIDER.toString())) {
modelOut = getVCPENetworkFromMP((MultipleProviderLogical) modelIn);
}
return modelOut;
}
/**
* Get params to call the ws to create the SP VCPENetwork enviroment
*
* @param modelIn
* @return
*/
public static VCPENetworkModel getVCPENetworkFromSP(SingleProviderLogical modelIn) {
VCPENetworkModel modelOut = new VCPENetworkModel();
modelOut.setId(modelIn.getId());
modelOut.setName(modelIn.getName());
modelOut.setOwner(modelIn.getOwner());
modelOut.setTemplateType(modelIn.getTemplateType());
modelOut.setClientIpRange(modelIn.getClientIpRange());
modelOut.setNocIpRange(modelIn.getNocIpRange());
// BGP
if (modelIn.getBgp() != null) {
modelOut.setBgp(getBGP(modelIn.getBgp()));
}
// VRRP
if (modelIn.getVrrp() != null) {
modelOut.setVrrp(getVRRP(modelIn.getVrrp()));
}
// Elements
List<VCPENetworkElement> elements = new ArrayList<VCPENetworkElement>();
modelOut.setElements(elements);
// Core Router
org.opennaas.extensions.vcpe.model.Router routerCore = getRouterOpennaas(modelIn.getRouterCore());
// LogicalRouters
org.opennaas.extensions.vcpe.model.Router logicalRouterMaster = getRouterOpennaas(modelIn.getLogicalRouterMaster());
org.opennaas.extensions.vcpe.model.Router logicalRouterBackup = getRouterOpennaas(modelIn.getLogicalRouterBackup());
elements.add(routerCore);
elements.add(logicalRouterMaster);
elements.add(logicalRouterBackup);
// Add interfaces to elements
elements.addAll(logicalRouterMaster.getInterfaces());
elements.addAll(logicalRouterBackup.getInterfaces());
elements.addAll(routerCore.getInterfaces());
// Add interfaces BoD
if (modelIn.getBod() != null) {
elements.add(getInterfaceOpennaas(modelIn.getBod().getIfaceClient()));
elements.add(getInterfaceOpennaas(modelIn.getBod().getIfaceClientBackup()));
}
return modelOut;
}
/**
* Get params to call the ws to create the MP VCPENetwork enviroment
*
* @param modelIn
* @return
*/
public static VCPENetworkModel getVCPENetworkFromMP(MultipleProviderLogical modelIn) {
VCPENetworkModel modelOut = new VCPENetworkModel();
// Id
modelOut.setId(modelIn.getId());
// Name
modelOut.setName(modelIn.getName());
// Template
modelOut.setTemplateType(modelIn.getTemplateType());
// Elements
List<VCPENetworkElement> elements = new ArrayList<VCPENetworkElement>();
modelOut.setElements(elements);
// Networks
org.opennaas.extensions.vcpe.model.IPNetworkDomain providerNetwork1 = getNetworkOpennaas(modelIn.getProviderNetwork1());
org.opennaas.extensions.vcpe.model.IPNetworkDomain providerNetwork2 = getNetworkOpennaas(modelIn.getProviderNetwork2());
org.opennaas.extensions.vcpe.model.IPNetworkDomain clientNetwork = getNetworkOpennaas(modelIn.getClientNetwork());
if (providerNetwork1 != null) {
elements.add(providerNetwork1);
elements.addAll(providerNetwork1.getInterfaces());
}
if (providerNetwork2 != null) {
elements.add(providerNetwork2);
elements.addAll(providerNetwork2.getInterfaces());
}
if (clientNetwork != null) {
elements.add(clientNetwork);
elements.addAll(clientNetwork.getInterfaces());
}
// LogicalRouters
org.opennaas.extensions.vcpe.model.Router providerLR1 = getRouterOpennaas(modelIn.getProviderLR1());
org.opennaas.extensions.vcpe.model.Router providerLR2 = getRouterOpennaas(modelIn.getProviderLR2());
org.opennaas.extensions.vcpe.model.Router clientRouter = getRouterOpennaas(modelIn.getClientLR());
if (providerLR1 != null) {
elements.add(providerLR1);
elements.addAll(providerLR1.getInterfaces());
}
if (providerLR2 != null) {
elements.add(providerLR2);
elements.addAll(providerLR2.getInterfaces());
}
if (clientRouter != null) {
elements.add(clientRouter);
elements.addAll(clientRouter.getInterfaces());
}
return modelOut;
}
/**
* Convert a OpenNaaS model to a GUI VCPEPhysicalNetwork model
*
* @param openNaasModel
* @return VCPENetwork
*/
public static VCPENetworkModel getPhysicalInfrastructure(PhysicalInfrastructure modelIn) {
VCPENetworkModel modelOut = null;
if (modelIn.getTemplateType().equals(Template.SINGLE_PROVIDER.toString())) {
modelOut = getSingleProviderPhysical((SingleProviderPhysical) modelIn);
} else if (modelIn.getTemplateType().equals(Template.MULTIPLE_PROVIDER.toString())) {
modelOut = getMultipleProviderPhysical((MultipleProviderPhysical) modelIn);
}
return modelOut;
}
/**
* Convert a GUI model to a Opennaas physical multiple provider model
*
* @param modelIn
*
* @return
*/
private static VCPENetworkModel getMultipleProviderPhysical(MultipleProviderPhysical modelIn) {
VCPENetworkModel modelOut = new VCPENetworkModel();
modelOut.setTemplateType(modelIn.getTemplateType());
// Router phy
org.opennaas.extensions.vcpe.model.Router physicalRouter = getRouterOpennaas(modelIn.getPhysicalRouter());
physicalRouter.setTemplateName(TemplateConstants.ROUTER_1_PHY);
List<VCPENetworkElement> elements = new ArrayList<VCPENetworkElement>();
elements.add(physicalRouter);
elements.addAll(physicalRouter.getInterfaces());
modelOut.setElements(elements);
return modelOut;
}
/**
* Convert a GUI model to a Opennaas physical simple provider model
*
* @param modelIn
* @return
*/
private static VCPENetworkModel getSingleProviderPhysical(SingleProviderPhysical modelIn) {
VCPENetworkModel modelOut = new VCPENetworkModel();
modelOut.setTemplateType(modelIn.getTemplateType());
// Routers Master
org.opennaas.extensions.vcpe.model.Router physicalRouterMaster = getRouterOpennaas(modelIn.getPhysicalRouterMaster());
physicalRouterMaster.setTemplateName(SPTemplateConstants.CPE1_PHY_ROUTER);
// Routers Backup
org.opennaas.extensions.vcpe.model.Router physicalRouterBackup = getRouterOpennaas(modelIn.getPhysicalRouterBackup());
physicalRouterBackup.setTemplateName(SPTemplateConstants.CPE2_PHY_ROUTER);
// Routers Core
org.opennaas.extensions.vcpe.model.Router physicalRouterCore = getRouterOpennaas(modelIn.getPhysicalRouterBackup());
physicalRouterCore.setTemplateName(SPTemplateConstants.CORE_PHY_ROUTER);
List<VCPENetworkElement> elements = new ArrayList<VCPENetworkElement>();
elements.add(physicalRouterMaster);
elements.add(physicalRouterBackup);
elements.add(physicalRouterCore);
elements.addAll(physicalRouterMaster.getInterfaces());
elements.addAll(physicalRouterBackup.getInterfaces());
elements.addAll(physicalRouterCore.getInterfaces());
modelOut.setElements(elements);
return modelOut;
}
/**
* @param providerNetwork1
* @return
*/
private static IPNetworkDomain getNetworkOpennaas(Network inNetwork) {
IPNetworkDomain outNetwork = null;
if (inNetwork != null) {
outNetwork = new IPNetworkDomain();
outNetwork.setName(inNetwork.getName());
outNetwork.setTemplateName(inNetwork.getTemplateName());
outNetwork.setASNumber(inNetwork.getASNumber());
outNetwork.setOwner(inNetwork.getOwner());
List<String> ipAddressRanges = new ArrayList<String>();
ipAddressRanges.add(inNetwork.getiPAddressRange());
outNetwork.setIPAddressRanges(ipAddressRanges);
List<org.opennaas.extensions.vcpe.model.Interface> interfaces = new ArrayList<org.opennaas.extensions.vcpe.model.Interface>();
interfaces.add(getInterfaceOpennaas(inNetwork.getNetworkInterface()));
outNetwork.setInterfaces(interfaces);
}
return outNetwork;
}
/**
* @param physicalRouterCore
* @return
*/
private static org.opennaas.extensions.vcpe.model.Router getRouterOpennaas(Router phyRouterIn) {
org.opennaas.extensions.vcpe.model.Router phyRouterOut = null;
if (phyRouterIn != null) {
phyRouterOut = new org.opennaas.extensions.vcpe.model.Router();
phyRouterOut.setName(phyRouterIn.getName());
phyRouterOut.setTemplateName(phyRouterIn.getTemplateName());
// Interfaces
List<org.opennaas.extensions.vcpe.model.Interface> interfaces = new ArrayList<org.opennaas.extensions.vcpe.model.Interface>();
phyRouterOut.setInterfaces(interfaces);
for (int i = 0; i < phyRouterIn.getInterfaces().size(); i++) {
org.opennaas.extensions.vcpe.model.Interface inter = getInterfaceOpennaas(phyRouterIn.getInterfaces().get(i));
interfaces.add(inter);
}
}
return phyRouterOut;
}
/**
* Return a OpenNaaS logical interface from a GUI interface<br>
* If is a physical interface -> port = 0 , vlan = 0 and name = physicalInterfaceName
*
* @param interface
* @return Interface
*/
private static org.opennaas.extensions.vcpe.model.Interface getInterfaceOpennaas(Interface inIface) {
org.opennaas.extensions.vcpe.model.Interface outIface = new org.opennaas.extensions.vcpe.model.Interface();
// If physical interface name = physicalInterfaceName
outIface.setName(inIface.getCompleteName());
outIface.setIpAddress(inIface.getIpAddress());
outIface.setVlan(inIface.getVlan() != null ? inIface.getVlan() : 0);
outIface.setTemplateName(inIface.getTemplateName());
outIface.setPhysicalInterfaceName(inIface.getName());
outIface.setPort(inIface.getPort() != null ? Integer.parseInt(inIface.getPort()) : 0);
return outIface;
}
/**
* Get the values of OpenNaaS BGP from GUI BGP
*
* @param bgp
* @return bgp entity
*/
private static org.opennaas.extensions.vcpe.model.BGP getBGP(BGP bgpIn) {
org.opennaas.extensions.vcpe.model.BGP bgpOut = new org.opennaas.extensions.vcpe.model.BGP();
bgpOut.setClientASNumber(bgpIn.getClientASNumber());
bgpOut.setNocASNumber(bgpIn.getNocASNumber());
List<String> clientPrefixes = new ArrayList<String>();
clientPrefixes.addAll(bgpIn.getClientPrefixes());
bgpOut.setCustomerPrefixes(clientPrefixes);
return bgpOut;
}
/**
* Get the values of OpenNaaS VRRP from GUI VRRP
*
* @param vrrp
* @return vrrp entity
*/
private static org.opennaas.extensions.vcpe.model.VRRP getVRRP(VRRP vrrpIn) {
org.opennaas.extensions.vcpe.model.VRRP vrrpOut = new org.opennaas.extensions.vcpe.model.VRRP();
vrrpOut.setVirtualIPAddress(vrrpIn.getVirtualIPAddress());
vrrpOut.setPriorityMaster(vrrpIn.getPriorityMaster());
vrrpOut.setPriorityBackup(vrrpIn.getPriorityBackup());
vrrpOut.setGroup(vrrpIn.getGroup());
return vrrpOut;
}
}