package org.opennaas.extensions.vcpe.manager; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.opennaas.core.resources.ActivatorException; import org.opennaas.core.resources.ILifecycle; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.IResourceManager; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.SerializationException; import org.opennaas.core.resources.descriptor.CapabilityDescriptor; import org.opennaas.core.resources.descriptor.Information; import org.opennaas.core.resources.descriptor.vcpe.VCPENetworkDescriptor; import org.opennaas.core.security.acl.IACLManager; import org.opennaas.extensions.vcpe.Activator; import org.opennaas.extensions.vcpe.capability.builder.IVCPENetworkBuilderCapability; import org.opennaas.extensions.vcpe.capability.builder.VCPENetworkBuilderCapability; import org.opennaas.extensions.vcpe.capability.ip.VCPEIPCapability; import org.opennaas.extensions.vcpe.capability.vrrp.VCPEVRRPCapability; import org.opennaas.extensions.vcpe.manager.isfree.IsFreeChecker; import org.opennaas.extensions.vcpe.manager.model.VCPEManagerModel; import org.opennaas.extensions.vcpe.manager.templates.ITemplate; import org.opennaas.extensions.vcpe.manager.templates.TemplateSelector; import org.opennaas.extensions.vcpe.manager.templates.mp.TemplateConstants; import org.opennaas.extensions.vcpe.model.BGP; import org.opennaas.extensions.vcpe.model.IPNetworkDomain; import org.opennaas.extensions.vcpe.model.Link; import org.opennaas.extensions.vcpe.model.Router; import org.opennaas.extensions.vcpe.model.VCPENetworkModel; import org.opennaas.extensions.vcpe.model.helper.VCPENetworkModelHelper; import org.springframework.security.access.AccessDeniedException; public class VCPENetworkManager implements IVCPENetworkManager { private Log log = LogFactory.getLog(VCPENetworkManager.class); public static final String RESOURCE_VCPENET_TYPE = "vcpenet"; private VCPEManagerModel model; private ExecutorService executor; private Map<String, Future<Boolean>> futures; /** * @throws IOException */ public VCPENetworkManager() throws IOException { initModel(); executor = Executors.newSingleThreadExecutor(); futures = new HashMap<String, Future<Boolean>>(); } /** * */ public void destroy() { executor.shutdown(); if (!executor.isTerminated()) { executor.shutdownNow(); } } /** * @param model */ public void setModel(VCPEManagerModel model) { this.model = model; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#getModel() */ @Override public VCPEManagerModel getModel() throws VCPENetworkManagerException { return model; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#create(org.opennaas.extensions.vcpe.model.VCPENetworkModel) */ @Override public String create(VCPENetworkModel vcpeNetworkModel) throws VCPENetworkManagerException { log.info("Creating new VCPE: " + vcpeNetworkModel.getName()); // Create the resource IResource resource = createResource(vcpeNetworkModel.getName()); vcpeNetworkModel.setId(resource.getResourceIdentifier().getId()); // Secure vCPE Resource for users try { secureVCPE(resource, vcpeNetworkModel); } catch (Exception e) { log.error("Error securing vCPE", e); // error, remove resource removeResource(resource.getResourceIdentifier().getId()); throw new VCPENetworkManagerException("Error securing vCPE: " + e.getMessage()); } // Start the resource startResource(resource.getResourceIdentifier().getId()); BuildVCPECallable c = new BuildVCPECallable(vcpeNetworkModel); Future<Boolean> future = executor.submit(c); futures.put(resource.getResourceIdentifier().getId(), future); // TODO find a way to execute rollback if something fails return resource.getResourceIdentifier().getId(); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#update(org.opennaas.extensions.vcpe.model.VCPENetworkModel) */ @Override public String update(VCPENetworkModel partialModel) throws VCPENetworkManagerException { log.info("Updating a VCPE: " + partialModel.getName()); VCPENetworkModel newModel; String vcpeId = null; try { newModel = getVCPENetworkById(partialModel.getId()).deepCopy(); newModel = fillModel(partialModel, newModel); log.info("First remove a VCPE: " + partialModel.getName()); remove(partialModel.getId()); log.info("Create the new VCPE: " + partialModel.getName()); vcpeId = create(newModel); } catch (SerializationException e) { log.error("can't update the vcpe"); throw new VCPENetworkManagerException(e); } return vcpeId; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#remove(java.lang.String) */ @Override public Boolean remove(String vcpeNetworkId) throws VCPENetworkManagerException { log.info("Removing VCPE: " + vcpeNetworkId); boolean isRemoved = true; // Destroy environment destroy(vcpeNetworkId); // Stop the resource stopResource(vcpeNetworkId); // Remove the resource removeResource(vcpeNetworkId); return isRemoved; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetManager#getVCPENetworkById(java.lang.String) */ @Override public VCPENetworkModel getVCPENetworkById(String vcpeNetworkId) throws VCPENetworkManagerException { return (VCPENetworkModel) getVCPENetworkByIdSecured(vcpeNetworkId).getModel(); } private IResource getVCPENetworkByIdSecured(String vcpeNetworkId) throws VCPENetworkManagerException { if (!getAclManager().isResourceAccessible(vcpeNetworkId)) throw new VCPENetworkManagerException("Access denied to resource: " + vcpeNetworkId); return doGetVCPENetworkById(vcpeNetworkId); } private IResource doGetVCPENetworkById(String vcpeNetworkId) throws VCPENetworkManagerException { IResource resource = null; try { resource = getResourceManager().getResourceById(vcpeNetworkId); if (resource == null) { throw new VCPENetworkManagerException("Don't find a VCPENetwork with id = " + vcpeNetworkId); } } catch (ResourceException e) { throw new VCPENetworkManagerException(e.getMessage()); } return resource; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetManager#getAllVCPENetworks() */ @Override public List<VCPENetworkModel> getAllVCPENetworks() throws VCPENetworkManagerException { List<IResource> vcpes = doGetAllVCPENetworks(); for (int i = vcpes.size() - 1; i >= 0; i--) { if (!getAclManager().isResourceAccessible(vcpes.get(i).getResourceIdentifier().getId())) { log.debug("Access denied to resource " + vcpes.get(i).getResourceIdentifier().getId()); vcpes.remove(i); log.debug("Resource removed from returnObject."); } } return getModelsFromVCPEs(vcpes); } /** * Assumes given resources are VCPEs. * * @param resources * @return * @throws VCPENetworkManagerException */ private List<VCPENetworkModel> getModelsFromVCPEs(List<IResource> resources) throws VCPENetworkManagerException { List<VCPENetworkModel> result = new ArrayList<VCPENetworkModel>(); for (int i = 0; i < resources.size(); i++) { if (resources.get(i).getModel() != null) { result.add((VCPENetworkModel) resources.get(i).getModel()); } } return result; } private List<IResource> doGetAllVCPENetworks() throws VCPENetworkManagerException { return getResourceManager().listResourcesByType(VCPENetworkDescriptor.RESOURCE_TYPE); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#getPhysicalInfrastructureSuggestion(java.lang.String) */ @Override public VCPENetworkModel getPhysicalInfrastructureSuggestion(String templateType) throws VCPENetworkManagerException { ITemplate template = TemplateSelector.getTemplate(templateType); VCPENetworkModel phySuggestion = template.getPhysicalInfrastructureSuggestion(); return phySuggestion; } /* * (non-Javadoc) * * @see * org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#getLogicalInfrastructureSuggestion(org.opennaas.extensions.vcpe.model.VCPENetworkModel * ) */ @Override public VCPENetworkModel getLogicalInfrastructureSuggestion(VCPENetworkModel physical) throws VCPENetworkManagerException { ITemplate template = TemplateSelector.getTemplate(physical.getTemplateType()); VCPENetworkModel suggestion = template.getLogicalInfrastructureSuggestion(physical); return suggestion; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#isVLANFree(java.lang.String) */ @Override public Boolean isVLANFree(String vcpeId, String router, String vlan, String ifaceName) throws VCPENetworkManagerException { return IsFreeChecker.isVLANFree(vcpeId, router, vlan, ifaceName); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#isInterfaceFree(java.lang.String) */ @Override public Boolean isInterfaceFree(String vcpeId, String router, String ifaceName) throws VCPENetworkManagerException { return IsFreeChecker.isInterfaceFree(vcpeId, router, ifaceName); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#isIPFree(java.lang.String) */ @Override public Boolean isIPFree(String vcpeId, String router, String ip) throws VCPENetworkManagerException { return IsFreeChecker.isIPFree(vcpeId, router, ip); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#hasFinishedBuild(java.lang.String) */ @Override public boolean hasFinishedBuild(String resourceId) throws VCPENetworkManagerException { Future<Boolean> f = futures.get(resourceId); if (f == null) { throw new VCPENetworkManagerException("No building task for resource " + resourceId); } return f.isDone(); } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#getBuildResult(java.lang.String) */ @Override public boolean getBuildResult(String resourceId) throws VCPENetworkManagerException { if (!hasFinishedBuild(resourceId)) { throw new VCPENetworkManagerException("Build task has not yet finished."); } Future<Boolean> f = futures.get(resourceId); if (f == null) { throw new VCPENetworkManagerException("No building task for resource " + resourceId); } boolean result; try { result = f.get(); } catch (InterruptedException e) { log.error("Creation of VCPE has been interrupted", e); throw new VCPENetworkManagerException("Creation of VCPE has been interrupted: " + e.getMessage()); } catch (ExecutionException e) { if (e.getCause() instanceof VCPENetworkManagerException) throw (VCPENetworkManagerException) e.getCause(); else { throw new VCPENetworkManagerException(e.getCause()); } } finally { // remove future from pending tasks futures.remove(resourceId); } return result; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#getUserFilteredVCPEModel(java.lang.String) */ @Override public VCPENetworkModel getUserFilteredVCPEModel(String vcpeNetworkId) { log.info("Filtering VCPE " + vcpeNetworkId + " model."); VCPENetworkModel filteredModel = null; try { IResource resource = getVCPENetworkByIdSecured(vcpeNetworkId); VCPENetworkModel model = (VCPENetworkModel) resource.getModel(); filteredModel = filterVCPENetworkModel(model); } catch (ResourceException re) { throw new VCPENetworkManagerException(re.getMessage()); } catch (AccessDeniedException ad) { throw new VCPENetworkManagerException(ad.getMessage()); } catch (SerializationException se) { throw new VCPENetworkManagerException(se.getMessage()); } log.info("VCPE " + vcpeNetworkId + " model filtered."); return filteredModel; } /* * (non-Javadoc) * * @see org.opennaas.extensions.vcpe.manager.IVCPENetworkManager#editFilteredVCPE(java.lang.String, * org.opennaas.extensions.vcpe.model.VCPENetworkModel) */ @Override public VCPENetworkModel editFilteredVCPE(String vcpeNetworkId, VCPENetworkModel filteredModel) { log.info("Updating VCPE " + vcpeNetworkId + " model."); VCPENetworkModel updatedModel = new VCPENetworkModel(); try { IResource vcpeResource = getVCPENetworkByIdSecured(vcpeNetworkId); VCPENetworkModel oldModel = (VCPENetworkModel) vcpeResource.getModel(); updatedModel = updateVCPEModelInformation(oldModel, filteredModel); } catch (ResourceException re) { throw new VCPENetworkManagerException(re.getMessage()); } catch (AccessDeniedException ad) { throw new VCPENetworkManagerException(ad.getMessage()); } log.info("VCPE " + vcpeNetworkId + " model updated."); return updatedModel; } /** * Create the resource VCPENetwork * * @param vcpeNetworkName * @return the resource */ private IResource createResource(String vcpeNetworkName) { log.debug("Creating new VCPE resource: " + vcpeNetworkName); IResource resource = null; try { resource = getResourceManager().createResource(getResourceDescriptor(vcpeNetworkName)); if (resource == null || resource.getResourceIdentifier() == null) { throw new VCPENetworkManagerException("Can't create the resource. "); } } catch (Exception e) { throw new VCPENetworkManagerException("Can't create the resource. " + e.getMessage() != null ? e.getMessage() : ""); } return resource; } /** * Start the resource * * @param resource * @return true if the resource has been started */ private Boolean startResource(String vcpeNetworId) { log.debug("Starting VCPE resource: " + vcpeNetworId); IResource resource = null; try { IResourceManager manager = getResourceManager(); resource = manager.getResourceById(vcpeNetworId); manager.startResource(resource.getResourceIdentifier()); if (!resource.getState().equals(ILifecycle.State.ACTIVE)) { manager.removeResource(resource.getResourceIdentifier()); throw new VCPENetworkManagerException("Can't start the resource."); } } catch (Exception e) { removeResource(vcpeNetworId); throw new VCPENetworkManagerException("Can't start the resource. " + e.getMessage() != null ? e.getMessage() : ""); } return true; } /** * Build the environment from the model * * @param vcpeNetworkModel * @return true if the environment has been created */ private Boolean build(VCPENetworkModel vcpeNetworkModel) { log.debug("Building VCPE resource: " + vcpeNetworkModel.getName()); IResource resource = null; try { resource = getResourceManager() .getResourceById(vcpeNetworkModel.getId()); ITemplate template = TemplateSelector.getTemplate(vcpeNetworkModel.getTemplateType()); VCPENetworkModel model = template.buildModel(vcpeNetworkModel); // Execute the capability and generate the real environment IVCPENetworkBuilderCapability vcpeNetworkBuilderCapability = (IVCPENetworkBuilderCapability) resource .getCapabilityByInterface(IVCPENetworkBuilderCapability.class); vcpeNetworkBuilderCapability.buildVCPENetwork(model); } catch (Exception e) { if (resource != null) { stopResource(vcpeNetworkModel.getId()); removeResource(vcpeNetworkModel.getId()); } throw new VCPENetworkManagerException("Can't build the environment of the resource. " + e.getMessage() != null ? e.getMessage() : ""); } return true; } /** * Stop the VCPNetwork resource * * @param vcpeNetworkId * @return true if the resource has been stopped */ private Boolean stopResource(String vcpeNetworkId) { log.debug("Stopping VCPE resource: " + vcpeNetworkId); IResource resource = null; try { IResourceManager manager = getResourceManager(); resource = manager.getResourceById(vcpeNetworkId); manager.stopResource(resource.getResourceIdentifier()); } catch (Exception e) { throw new VCPENetworkManagerException("Can't stop the resource. " + e.getMessage() != null ? e.getMessage() : ""); } return true; } /** * Remove the resource * * @param vcpeNetworkId * @return true if the resource has been removed */ private Boolean removeResource(String vcpeNetworkId) { log.debug("Removing VCPE resource: " + vcpeNetworkId); IResource resource = null; try { IResourceManager manager = getResourceManager(); resource = manager.getResourceById(vcpeNetworkId); manager.removeResource(resource.getResourceIdentifier()); } catch (Exception e) { throw new VCPENetworkManagerException("Can't remove the resource. " + e.getMessage() != null ? e.getMessage() : ""); } return true; } /** * Destroy the environment * * @param vcpeNetworkId * @return true if the environment has been destroyed * @throws VCPENetworkManagerException */ private Boolean destroy(String vcpeNetworkId) { log.debug("Destroying VCPE resource: " + vcpeNetworkId); IResource resource = null; try { resource = getResourceManager().getResourceById(vcpeNetworkId); // Execute the capability and destroy the real enviroment IVCPENetworkBuilderCapability vcpeNetworkBuilderCapability = (IVCPENetworkBuilderCapability) resource .getCapabilityByInterface(IVCPENetworkBuilderCapability.class); vcpeNetworkBuilderCapability.destroyVCPENetwork(); } catch (Exception e) { stopResource(vcpeNetworkId); removeResource(vcpeNetworkId); throw new VCPENetworkManagerException(e.getMessage()); } return true; } /** * Get the descriptor with his capability to create the resource * * @param params * @return VCPENetworkDescriptor */ private VCPENetworkDescriptor getResourceDescriptor(String resourceName) { VCPENetworkDescriptor descriptor = new VCPENetworkDescriptor(); Information information = new Information(); information.setType(RESOURCE_VCPENET_TYPE); information.setName(resourceName); descriptor.setInformation(information); // Capability Builder List<CapabilityDescriptor> capabs = new ArrayList<CapabilityDescriptor>(); capabs.add(getBuilderCapability()); capabs.add(getVRRPCapability()); capabs.add(getIPCapability()); descriptor.setCapabilityDescriptors(capabs); return descriptor; } /** * Get the builder capability of the VCPENetwork to create the resource * * @return CapabilityDescriptor */ private CapabilityDescriptor getBuilderCapability() { return getCapabilityDescriptor(VCPENetworkBuilderCapability.CAPABILITY_TYPE); } /** * Get the VRRP capability of the VCPENetwork * * @return CapabilityDescriptor */ private CapabilityDescriptor getVRRPCapability() { return getCapabilityDescriptor(VCPEVRRPCapability.CAPABILITY_TYPE); } /** * Get the VRRP capability of the VCPENetwork * * @return CapabilityDescriptor */ private CapabilityDescriptor getIPCapability() { return getCapabilityDescriptor(VCPEIPCapability.CAPABILITY_TYPE); } /** * Creates a CapabilityDescriptor for a capability of given capabilityType * * @param capabilityType * @return CapabilityDescriptor */ private CapabilityDescriptor getCapabilityDescriptor(String capabilityType) { CapabilityDescriptor desc = new CapabilityDescriptor(); Information info = new Information(); info.setType(capabilityType); desc.setCapabilityInformation(info); return desc; } /** * @throws IOException */ private void initModel() throws IOException { VCPEManagerModel model = new VCPEManagerModel(); PhysicalInfrastructureLoader loader = new PhysicalInfrastructureLoader(); model.setPhysicalInfrastructure(loader.loadPhysicalInfrastructure()); setModel(model); } /** * @param oldModel * @param filteredModel * @return * @throws ResourceException * @throws AccessDeniedException */ private VCPENetworkModel updateVCPEModelInformation(VCPENetworkModel oldModel, VCPENetworkModel filteredModel) throws ResourceException, AccessDeniedException { updateRoutersInformation(oldModel, filteredModel); updateBGPConfiguration(oldModel, filteredModel); updateIPRanges(oldModel, filteredModel); return oldModel; } /** * @param oldModel * @param filteredModel */ private void updateIPRanges(VCPENetworkModel oldModel, VCPENetworkModel filteredModel) { if (filteredModel.getClientIpRange() != null && !filteredModel.getClientIpRange().isEmpty()) oldModel.setClientIpRange(filteredModel.getClientIpRange()); if (filteredModel.getNocIpRange() != null && !filteredModel.getNocIpRange().isEmpty()) oldModel.setNocIpRange(filteredModel.getNocIpRange()); } /** * Fill the model to update it if hasn't all the network domains. * * @param partialModel * @param newModel * @return the complete model */ private VCPENetworkModel fillModel(VCPENetworkModel partialModel, VCPENetworkModel newModel) { // Network Provider1 if ((IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.WAN1) != null) { IPNetworkDomain partialNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.WAN1); IPNetworkDomain newNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(newModel, TemplateConstants.WAN1); fillNetworkDomainModel(partialNetwork, newNetwork); } if ((IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.WAN2) != null) { IPNetworkDomain partialNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.WAN2); IPNetworkDomain newNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(newModel, TemplateConstants.WAN2); fillNetworkDomainModel(partialNetwork, newNetwork); } if ((IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.LAN_CLIENT) != null) { IPNetworkDomain partialNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(partialModel, TemplateConstants.LAN_CLIENT); IPNetworkDomain newNetwork = (IPNetworkDomain) VCPENetworkModelHelper .getElementByTemplateName(newModel, TemplateConstants.LAN_CLIENT); fillNetworkDomainModel(partialNetwork, newNetwork); } return newModel; } /** * @param partialModel * @param newModel */ private void fillNetworkDomainModel(IPNetworkDomain partialNetwork, IPNetworkDomain newNetwork) { newNetwork.setASNumber(partialNetwork.getASNumber()); newNetwork.setName(partialNetwork.getName()); newNetwork.setOwner(partialNetwork.getOwner()); newNetwork.setInterfaces(partialNetwork.getInterfaces()); newNetwork.setIPAddressRanges(partialNetwork.getIPAddressRanges()); } /** * @param oldModel * @param filteredModel */ private void updateBGPConfiguration(VCPENetworkModel oldModel, VCPENetworkModel filteredModel) { BGP oldBGP = oldModel.getBgp(); BGP newBGP = oldModel.getBgp(); if (newBGP.getClientASNumber() != null && !newBGP.getClientASNumber().equals(oldBGP.getClientASNumber())) oldBGP.setClientASNumber(newBGP.getClientASNumber()); if (newBGP.getNocASNumber() != null && !newBGP.getNocASNumber().equals(oldBGP.getNocASNumber())) oldBGP.setNocASNumber(newBGP.getNocASNumber()); } /** * @param oldModel * @param filteredModel * @throws ResourceException * @throws AccessDeniedException */ private void updateRoutersInformation(VCPENetworkModel oldModel, VCPENetworkModel filteredModel) throws VCPENetworkManagerException, ResourceException, AccessDeniedException { IResourceManager resourceManager; log.debug("Updating routers information."); resourceManager = getResourceManager(); List<Router> routerList = VCPENetworkModelHelper.getRouters(filteredModel.getElements()); for (Router router : routerList) { log.debug("Checking user access to router " + router.getName()); // this call is done to launch an AccessDeniedException, if necessary resourceManager.getResource( resourceManager.getIdentifierFromResourceName("router", router.getName())); log.debug("Updating router " + router.getName() + " information"); if (VCPENetworkModelHelper.getRouterByName(oldModel.getElements(), router.getName()) == null) throw new ResourceException("No router with name " + router.getName() + " in model."); List<Link> routerLinks = VCPENetworkModelHelper.getAllRouterLinksFromModel(filteredModel, router); VCPENetworkModelHelper.updateRouterInformation(oldModel, router, routerLinks); } log.debug("Routers information updated."); } /** * @param originalModel * @return * @throws SerializationException * @throws ResourceException */ private VCPENetworkModel filterVCPENetworkModel(VCPENetworkModel originalModel) throws SerializationException, ResourceException { IResourceManager resourceManager; VCPENetworkModel filteredModel = originalModel.deepCopy(); resourceManager = getResourceManager(); List<Router> routerList = VCPENetworkModelHelper.getRouters(originalModel.getElements()); for (Router router : routerList) { log.debug("Cheking user access to router " + router.getName()); String routerName = router.getName(); try { resourceManager.getResource( resourceManager.getIdentifierFromResourceName("router", routerName)); } catch (AccessDeniedException ad) { log.debug("Access denied to router " + router.getName() + ". Removing router from VCPE model."); VCPENetworkModelHelper.removeAllRouterInformationFromModel(filteredModel, routerName); log.debug("Router " + router.getName() + " removed from VCPE model."); } } return filteredModel; } private IACLManager getAclManager() throws VCPENetworkManagerException { try { return Activator.getACLManagerService(); } catch (ActivatorException e) { throw new VCPENetworkManagerException(e.getMessage()); } } private IResourceManager getResourceManager() throws VCPENetworkManagerException { try { return Activator.getResourceManagerService(); } catch (ActivatorException e) { throw new VCPENetworkManagerException(e.getMessage()); } } /** * */ private class BuildVCPECallable implements Callable<Boolean> { VCPENetworkModel vcpeNetworkModel; public BuildVCPECallable(VCPENetworkModel vcpeNetworkModel) { this.vcpeNetworkModel = vcpeNetworkModel; } @Override public Boolean call() throws Exception { return build(vcpeNetworkModel); } public VCPENetworkModel getVcpeNetworkModel() { return vcpeNetworkModel; } } private void secureVCPE(IResource vcpeNeworkResource, VCPENetworkModel vcpeNetworkModel) throws VCPENetworkManagerException { List<String> users = new ArrayList<String>(); users.add("admin"); if (vcpeNetworkModel.getTemplateType().equals(ITemplate.SP_VCPE_TEMPLATE)) { users.add("noc1"); users.add("noc2"); users.add(vcpeNetworkModel.getOwner()); } else if (vcpeNetworkModel.getTemplateType().equals(ITemplate.MP_VCPE_TEMPLATE)) { users.add(((IPNetworkDomain) VCPENetworkModelHelper.getElementByTemplateName(vcpeNetworkModel, TemplateConstants.LAN_CLIENT)).getOwner()); users.add(((IPNetworkDomain) VCPENetworkModelHelper.getElementByTemplateName(vcpeNetworkModel, TemplateConstants.WAN1)).getOwner()); users.add(((IPNetworkDomain) VCPENetworkModelHelper.getElementByTemplateName(vcpeNetworkModel, TemplateConstants.WAN2)).getOwner()); } for (String user : users) { getAclManager().secureResource(vcpeNeworkResource.getResourceIdentifier().getId(), user); } } }