private VpcOffering createVpcOfferingInTransaction(String name, String displayText, Multimap<Network.Service, Network.Provider> svcProviderMap, boolean isDefault, VpcOffering.State state, Long serviceOfferingId) { // create vpc offering object VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId, false, false); if (state != null) { offering.setState(state); } if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Adding vpc offering %s", offering)); } offering = _vpcOffDao.persist(offering); // populate services and providers if (svcProviderMap != null) { for (Map.Entry<Network.Service, Network.Provider> entry : svcProviderMap.entries()) { Network.Service service = entry.getKey(); Network.Provider provider = entry.getValue(); VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); if (s_logger.isTraceEnabled()) { s_logger.trace(String.format("Added service for the vpc offering: %s with provider %s", offService, provider.getName())); } } } return offering; }
@Nonnull private VpcOffering updateVpcOfferingInTransaction(VpcOffering offering, Multimap<Network.Service, Network.Provider> svcProviderMap) { if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Updating vpc offering %s", offering)); } List<VpcOfferingServiceMapVO> currentVpcOfferingServices = _vpcOffSvcMapDao.listByVpcOffId(offering.getId()); Multimap<Network.Service, Network.Provider> currentSvcProviderMap = HashMultimap.create(); for (VpcOfferingServiceMapVO vpcOfferingService : currentVpcOfferingServices) { Network.Service service = Network.Service.getService(vpcOfferingService.getService()); Network.Provider provider = Network.Provider.getProvider(vpcOfferingService.getProvider()); currentSvcProviderMap.put(service, provider); } for (Map.Entry<Network.Service, Network.Provider> entry : svcProviderMap.entries()) { Network.Service service = entry.getKey(); Network.Provider provider = entry.getValue(); if (!currentSvcProviderMap.containsEntry(service, provider)) { VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Added service for the vpc offering: %s", offService)); } } } return offering; }
@Override public VpcOffering doInTransaction(final TransactionStatus status) { // create vpc offering object VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId, supportsDistributedRouter, offersRegionLevelVPC, redundantRouter); if (state != null) { offering.setState(state); } s_logger.debug("Adding vpc offering " + offering); offering = _vpcOffDao.persist(offering); // populate services and providers if (svcProviderMap != null) { for (final Network.Service service : svcProviderMap.keySet()) { final Set<Provider> providers = svcProviderMap.get(service); if (providers != null && !providers.isEmpty()) { for (final Network.Provider provider : providers) { final VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); s_logger.trace("Added service for the vpc offering: " + offService + " with provider " + provider.getName()); } } else { throw new InvalidParameterValueException("Provider is missing for the VPC offering service " + service.getName()); } } } return offering; } });