/**
*
*/
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.VCPENetworkModel;
import org.opennaas.extensions.vcpe.model.helper.VCPENetworkModelHelper;
import org.opennaas.gui.vcpe.entities.BGP;
import org.opennaas.gui.vcpe.entities.BoD;
import org.opennaas.gui.vcpe.entities.Interface;
import org.opennaas.gui.vcpe.entities.Link;
import org.opennaas.gui.vcpe.entities.LogicalInfrastructure;
import org.opennaas.gui.vcpe.entities.LogicalRouter;
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.PhysicalRouter;
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 VCPE GUI beans to OpenNaaS beans
*
* @author Jordi
*/
public class VCPEBeanUtils {
/**
* Convert a OpenNaaS model to a GUI VCPENetwork model
*
* @param openNaasModel
* @return VCPENetwork
*/
public static LogicalInfrastructure getLogicalInfrastructure(VCPENetworkModel modelIn) {
LogicalInfrastructure modelOut = null;
if (modelIn.getTemplateType().equals(Template.SINGLE_PROVIDER.toString())) {
modelOut = getSingleProviderLogical(modelIn);
} else if (modelIn.getTemplateType().equals(Template.MULTIPLE_PROVIDER.toString())) {
modelOut = getMultipleProviderLogical(modelIn);
}
return modelOut;
}
/**
* @param modelIn
* @return
*/
private static MultipleProviderLogical getMultipleProviderLogical(VCPENetworkModel modelIn) {
MultipleProviderLogical modelOut = new MultipleProviderLogical();
// VCPE info
modelOut.setId(modelIn.getId());
modelOut.setName(modelIn.getName());
modelOut.setTemplateType(modelIn.getTemplateType());
// Networks
org.opennaas.extensions.vcpe.model.IPNetworkDomain providerNetwork1 = (org.opennaas.extensions.vcpe.model.IPNetworkDomain) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.WAN1);
org.opennaas.extensions.vcpe.model.IPNetworkDomain providerNetwork2 = (org.opennaas.extensions.vcpe.model.IPNetworkDomain) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.WAN2);
org.opennaas.extensions.vcpe.model.IPNetworkDomain clientNetwork = (org.opennaas.extensions.vcpe.model.IPNetworkDomain) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.LAN_CLIENT);
modelOut.setProviderNetwork1(getNetwork(providerNetwork1));
modelOut.setProviderNetwork2(getNetwork(providerNetwork2));
modelOut.setClientNetwork(getNetwork(clientNetwork));
// Logical Routers
org.opennaas.extensions.vcpe.model.LogicalRouter providerLR1 = (org.opennaas.extensions.vcpe.model.LogicalRouter) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.LR_1_ROUTER);
org.opennaas.extensions.vcpe.model.LogicalRouter providerLR2 = (org.opennaas.extensions.vcpe.model.LogicalRouter) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.LR_2_ROUTER);
org.opennaas.extensions.vcpe.model.LogicalRouter clientLR = (org.opennaas.extensions.vcpe.model.LogicalRouter) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.LR_CLIENT_ROUTER);
modelOut.setProviderLR1(getLogicalRouter(providerLR1));
modelOut.setProviderLR2(getLogicalRouter(providerLR2));
modelOut.setClientLR(getLogicalRouter(clientLR));
return modelOut;
}
/**
* Get the logical infrastructure of a single provider
*
* @param modelIn
* @return
*/
private static SingleProviderLogical getSingleProviderLogical(VCPENetworkModel modelIn) {
SingleProviderLogical modelOut = new SingleProviderLogical();
// Network dates
modelOut.setId(modelIn.getId());
modelOut.setName(modelIn.getName());
modelOut.setOwner(modelIn.getOwner());
modelOut.setClientIpRange(modelIn.getClientIpRange());
modelOut.setNocIpRange(modelIn.getNocIpRange());
modelOut.setTemplateType(modelIn.getTemplateType());
// Logical Routers
org.opennaas.extensions.vcpe.model.LogicalRouter logicalRouterMaster = (org.opennaas.extensions.vcpe.model.LogicalRouter) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.VCPE1_ROUTER);
org.opennaas.extensions.vcpe.model.LogicalRouter logicalRouterBackup = (org.opennaas.extensions.vcpe.model.LogicalRouter) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.VCPE2_ROUTER);
org.opennaas.extensions.vcpe.model.Router logicalRouterCore = (org.opennaas.extensions.vcpe.model.Router) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.CORE_PHY_ROUTER);
modelOut.setLogicalRouterMaster(getLogicalRouter(logicalRouterMaster));
modelOut.setLogicalRouterBackup(getLogicalRouter(logicalRouterBackup));
modelOut.setRouterCore(getPhysicalRouter(logicalRouterCore));
// BGP
BGP bgp = getBGP(modelIn.getBgp());
modelOut.setBgp(bgp);
// BoD
BoD bod = getBoD(modelIn);
modelOut.setBod(bod);
// VRRP
modelOut.setVrrp(getVRRP(modelIn.getVrrp()));
// Links
List<Link> links = getLinks(VCPENetworkModelHelper.getLinks(modelIn.getElements()));
modelOut.setLinks(links);
return modelOut;
}
/**
* Convert a OpenNaaS model to a GUI PhysicalInfrastructure
*
* @param openNaasModel
* @return VCPENetwork
*/
public static PhysicalInfrastructure getPhysicalInfrastructure(VCPENetworkModel modelIn) {
PhysicalInfrastructure modelOut = null;
if (modelIn.getTemplateType().equals(Template.SINGLE_PROVIDER.toString())) {
modelOut = getSingleProviderPhysical(modelIn);
} else if (modelIn.getTemplateType().equals(Template.MULTIPLE_PROVIDER.toString())) {
modelOut = getMultipleProviderPhysical(modelIn);
}
return modelOut;
}
/**
* Get the physical infrastructure of a multiple provider
*
* @param modelIn
* @return PhysicalInfrastructure
*/
private static PhysicalInfrastructure getMultipleProviderPhysical(VCPENetworkModel modelIn) {
MultipleProviderPhysical modelOut = new MultipleProviderPhysical();
modelOut.setTemplateType(modelIn.getTemplateType());
// Routers
org.opennaas.extensions.vcpe.model.Router physicalRouterMaster = (org.opennaas.extensions.vcpe.model.Router) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, TemplateConstants.ROUTER_1_PHY);
modelOut.setPhysicalRouter(getPhysicalRouter(physicalRouterMaster));
return modelOut;
}
/**
* Get the physical infrastructure of a single provider
*
* @param modelIn
* @return PhysicalInfrastructure
*/
private static PhysicalInfrastructure getSingleProviderPhysical(VCPENetworkModel modelIn) {
SingleProviderPhysical modelOut = new SingleProviderPhysical();
modelOut.setTemplateType(modelIn.getTemplateType());
// Routers
org.opennaas.extensions.vcpe.model.Router physicalRouterMaster = (org.opennaas.extensions.vcpe.model.Router) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.CPE1_PHY_ROUTER);
org.opennaas.extensions.vcpe.model.Router physicalRouterBackup = (org.opennaas.extensions.vcpe.model.Router) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.CPE2_PHY_ROUTER);
org.opennaas.extensions.vcpe.model.Router physicalRouterCore = (org.opennaas.extensions.vcpe.model.Router) VCPENetworkModelHelper
.getElementByTemplateName(modelIn, SPTemplateConstants.CORE_PHY_ROUTER);
modelOut.setPhysicalRouterMaster(getPhysicalRouter(physicalRouterMaster));
modelOut.setPhysicalRouterBackup(getPhysicalRouter(physicalRouterBackup));
modelOut.setPhysicalRouterCore(getPhysicalRouter(physicalRouterCore));
return modelOut;
}
/**
* @param providerNetwork1
* @return
*/
private static Network getNetwork(IPNetworkDomain networkIn) {
Network networkOut = new Network();
networkOut.setName(networkIn.getName());
networkOut.setTemplateName(networkIn.getTemplateName());
networkOut.setASNumber(networkIn.getASNumber());
networkOut.setNetworkInterface(getInterface(networkIn.getInterfaces().get(0)));
networkOut.setiPAddressRange(networkIn.getIPAddressRanges().get(0));
networkOut.setOwner(networkIn.getOwner());
return networkOut;
}
/**
* @param physicalRouterCore
* @return
*/
private static PhysicalRouter getPhysicalRouter(org.opennaas.extensions.vcpe.model.Router phyRouterIn) {
PhysicalRouter phyRouterOut = new PhysicalRouter();
if (phyRouterIn != null) {
phyRouterOut.setName(phyRouterIn.getName());
phyRouterOut.setTemplateName(phyRouterIn.getTemplateName());
// Interfaces
List<org.opennaas.gui.vcpe.entities.Interface> interfaces = new ArrayList<org.opennaas.gui.vcpe.entities.Interface>();
phyRouterOut.setInterfaces(interfaces);
for (int i = 0; i < phyRouterIn.getInterfaces().size(); i++) {
Interface inter = getInterface(phyRouterIn.getInterfaces().get(i));
interfaces.add(inter);
}
}
return phyRouterOut;
}
/**
* Return a GUI logical router from a OpenNaaS logical router
*
* @param inLR
* @return
*/
private static LogicalRouter getLogicalRouter(org.opennaas.extensions.vcpe.model.LogicalRouter lrIn) {
LogicalRouter lrOut = new LogicalRouter();
if (lrIn != null) {
lrOut.setName(lrIn.getName());
lrOut.setTemplateName(lrIn.getTemplateName());
// Interfaces
List<org.opennaas.gui.vcpe.entities.Interface> interfaces = new ArrayList<org.opennaas.gui.vcpe.entities.Interface>();
lrOut.setInterfaces(interfaces);
for (int i = 0; i < lrIn.getInterfaces().size(); i++) {
Interface inter = getInterface(lrIn.getInterfaces().get(i));
interfaces.add(inter);
}
}
lrOut.setPhysicalRouter(getPhysicalRouter(lrIn.getPhysicalRouter()));
return lrOut;
}
/**
* @param string
* @param interface1
* @return
*/
private static Interface getInterface(org.opennaas.extensions.vcpe.model.Interface interfaceIn) {
Interface outIface = new Interface();
outIface.setName(interfaceIn.getPhysicalInterfaceName());
outIface.setTemplateName(interfaceIn.getTemplateName());
outIface.setPort(String.valueOf(interfaceIn.getPort()));
outIface.setIpAddress(interfaceIn.getIpAddress());
outIface.setVlan((int) interfaceIn.getVlan());
String templateName = interfaceIn.getTemplateName();
if (templateName.equals(SPTemplateConstants.DOWN1_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.DOWN2_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.DOWN1_PHY_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.DOWN2_PHY_INTERFACE_LOCAL)
|| templateName.equals(TemplateConstants.ROUTER_1_PHY_IFACE_DOWN)
|| templateName.equals(TemplateConstants.LR_1_IFACE_DOWN)
|| templateName.equals(TemplateConstants.LR_2_IFACE_DOWN)
|| templateName.equals(TemplateConstants.LR_CLIENT_IFACE_DOWN)) {
outIface.setType(Interface.Types.DOWN.toString());
} else if (templateName.equals(SPTemplateConstants.UP1_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.UP2_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.UP1_PHY_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.UP2_PHY_INTERFACE_LOCAL)
|| templateName.equals(TemplateConstants.ROUTER_1_PHY_IFACE_UP1)
|| templateName.equals(TemplateConstants.ROUTER_1_PHY_IFACE_UP2)
|| templateName.equals(TemplateConstants.LR_1_IFACE_UP)
|| templateName.equals(TemplateConstants.LR_2_IFACE_UP)
|| templateName.equals(TemplateConstants.LR_CLIENT_IFACE_UP1)
|| templateName.equals(TemplateConstants.LR_CLIENT_IFACE_UP2)) {
outIface.setType(Interface.Types.UP.toString());
} else if (templateName.equals(SPTemplateConstants.INTER1_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.INTER2_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.INTER1_PHY_INTERFACE_LOCAL)
|| templateName.equals(SPTemplateConstants.INTER2_PHY_INTERFACE_LOCAL)) {
outIface.setType(Interface.Types.INTER.toString());
} else if (templateName.equals(SPTemplateConstants.CORE_PHY_LO_INTERFACE)
|| templateName.equals(SPTemplateConstants.CORE_LO_INTERFACE)
|| templateName.equals(SPTemplateConstants.LO1_PHY_INTERFACE)
|| templateName.equals(SPTemplateConstants.LO2_PHY_INTERFACE)
|| templateName.equals(SPTemplateConstants.LO1_INTERFACE)
|| templateName.equals(SPTemplateConstants.LO2_INTERFACE)
|| templateName.equals(TemplateConstants.ROUTER_1_PHY_IFACE_LO)
|| templateName.equals(TemplateConstants.LR_1_IFACE_LO)
|| templateName.equals(TemplateConstants.LR_2_IFACE_LO)
|| templateName.equals(TemplateConstants.LR_CLIENT_IFACE_LO)) {
outIface.setType(Interface.Types.LOOPBACK.toString());
} else if (templateName.equals(TemplateConstants.ROUTER_1_PHY_IFACE_LT)) {
outIface.setType(Interface.Types.LOGICALTUNNEL.toString());
} else if (templateName.equals(SPTemplateConstants.UP1_INTERFACE_PEER)
|| templateName.equals(SPTemplateConstants.UP2_INTERFACE_PEER)) {
outIface.setType(Interface.Types.WAN.toString());
} else {
outIface.setType(Interface.Types.OTHER.toString());
}
return outIface;
}
/**
* Convert the OpenNaaS list links in GUI links
*
* @param links
* @return list of links
*/
private static List<Link> getLinks(List<org.opennaas.extensions.vcpe.model.Link> inLinks) {
List<Link> outLinks = new ArrayList<Link>();
for (int i = 0; i < inLinks.size(); i++) {
outLinks.add(getLink(inLinks.get(i)));
}
return outLinks;
}
/**
* Convert a OpenNaaS link in a GUI link
*
* @param link
* @return a link
*/
private static Link getLink(org.opennaas.extensions.vcpe.model.Link inLink) {
Link outlink = new Link();
outlink.setId(inLink.getId());
outlink.setType(inLink.getType());
outlink.setSource(getInterface(inLink.getSource()));
outlink.setDestination(getInterface(inLink.getSink()));
// Implemented By
List<Link> implementedBy = new ArrayList<Link>();
outlink.setImplementedBy(implementedBy);
for (int i = 0; inLink.getImplementedBy() != null && i < inLink.getImplementedBy().size(); i++) {
implementedBy.add(getLink(inLink.getImplementedBy().get(i)));
}
return outlink;
}
/**
* Get the values of the BGP
*
* @param modelIn
*
* @return BoD
*/
private static BoD getBoD(VCPENetworkModel modelIn) {
BoD bod = new BoD();
// Interfaces
Interface ifaceClient = getInterface((org.opennaas.extensions.vcpe.model.Interface) VCPENetworkModelHelper
.getElementByTemplateName(modelIn.getElements(), SPTemplateConstants.CLIENT1_INTERFACE_AUTOBAHN));
Interface ifaceClientBackup = getInterface((org.opennaas.extensions.vcpe.model.Interface) VCPENetworkModelHelper
.getElementByTemplateName(modelIn.getElements(), SPTemplateConstants.CLIENT2_INTERFACE_AUTOBAHN));
// Links
Link linkMaster = getLink((org.opennaas.extensions.vcpe.model.Link) VCPENetworkModelHelper
.getElementByTemplateName(modelIn.getElements(), SPTemplateConstants.DOWN1_LINK_AUTOBAHN));
Link linkInter = getLink((org.opennaas.extensions.vcpe.model.Link) VCPENetworkModelHelper
.getElementByTemplateName(modelIn.getElements(), SPTemplateConstants.INTER_LINK_AUTOBAHN));
Link linkBackup = getLink((org.opennaas.extensions.vcpe.model.Link) VCPENetworkModelHelper
.getElementByTemplateName(modelIn.getElements(), SPTemplateConstants.DOWN2_LINK_AUTOBAHN));
bod.setIfaceClient(ifaceClient);
bod.setIfaceClientBackup(ifaceClientBackup);
bod.setLinkMaster(linkMaster);
bod.setLinkInter(linkInter);
bod.setLinkBackup(linkBackup);
return bod;
}
/**
* Get the values of the BGP
*
* @param bgp
* @return bgp entity
*/
private static BGP getBGP(org.opennaas.extensions.vcpe.model.BGP bgpIn) {
BGP bgpOut = new BGP();
if (bgpIn != null) {
bgpOut.setClientASNumber(bgpIn.getClientASNumber());
bgpOut.setNocASNumber(bgpIn.getNocASNumber());
List<String> clientPrefixes = new ArrayList<String>();
clientPrefixes.addAll(bgpIn.getCustomerPrefixes());
bgpOut.setClientPrefixes(clientPrefixes);
}
return bgpOut;
}
/**
* Get the values of the VRRP
*
* @param vrrp
* @return
*/
private static VRRP getVRRP(org.opennaas.extensions.vcpe.model.VRRP vrrpIn) {
VRRP vrrpOut = new VRRP();
if (vrrpIn != null) {
vrrpOut.setVirtualIPAddress(vrrpIn.getVirtualIPAddress());
vrrpOut.setPriorityMaster(vrrpIn.getPriorityMaster());
vrrpOut.setPriorityBackup(vrrpIn.getPriorityBackup());
vrrpOut.setGroup(vrrpIn.getGroup());
}
return vrrpOut;
}
}