2020
2121import java .text .DecimalFormat ;
2222import java .util .ArrayList ;
23+ import java .util .Arrays ;
2324import java .util .Calendar ;
2425import java .util .Date ;
2526import java .util .EnumSet ;
@@ -2166,6 +2167,27 @@ public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering off
21662167 return response ;
21672168 }
21682169
2170+ private void createCapabilityResponse (List <CapabilityResponse > capabilityResponses ,
2171+ String name ,
2172+ String value ,
2173+ boolean canChoose ,
2174+ String objectName ) {
2175+ CapabilityResponse capabilityResponse = new CapabilityResponse ();
2176+ capabilityResponse .setName (name );
2177+ capabilityResponse .setValue (value );
2178+ capabilityResponse .setCanChoose (canChoose );
2179+ capabilityResponse .setObjectName (objectName );
2180+
2181+ capabilityResponses .add (capabilityResponse );
2182+ }
2183+
2184+ private void createCapabilityResponse (List <CapabilityResponse > capabilityResponses ,
2185+ String name ,
2186+ String value ,
2187+ boolean canChoose ) {
2188+ createCapabilityResponse (capabilityResponses , name , value , canChoose , null );
2189+ }
2190+
21692191 @ Override
21702192 public NetworkResponse createNetworkResponse (ResponseView view , Network network ) {
21712193 // need to get network profile in order to retrieve dns information from
@@ -2299,6 +2321,7 @@ public NetworkResponse createNetworkResponse(ResponseView view, Network network)
22992321 response .setDns2 (profile .getDns2 ());
23002322 // populate capability
23012323 Map <Service , Map <Capability , String >> serviceCapabilitiesMap = ApiDBUtils .getNetworkCapabilities (network .getId (), network .getDataCenterId ());
2324+ Map <Service , Set <Provider >> serviceProviderMap = ApiDBUtils .listNetworkOfferingServices (network .getNetworkOfferingId ());
23022325 List <ServiceResponse > serviceResponses = new ArrayList <ServiceResponse >();
23032326 if (serviceCapabilitiesMap != null ) {
23042327 for (Map .Entry <Service , Map <Capability , String >>entry : serviceCapabilitiesMap .entrySet ()) {
@@ -2311,20 +2334,58 @@ public NetworkResponse createNetworkResponse(ResponseView view, Network network)
23112334 serviceResponse .setName (service .getName ());
23122335
23132336 // set list of capabilities for the service
2314- List <CapabilityResponse > capabilityResponses = new ArrayList <CapabilityResponse >();
2337+ List <CapabilityResponse > capabilityResponses = new ArrayList <>();
23152338 Map <Capability , String > serviceCapabilities = entry .getValue ();
23162339 if (serviceCapabilities != null ) {
23172340 for (Map .Entry <Capability ,String > ser_cap_entries : serviceCapabilities .entrySet ()) {
23182341 Capability capability = ser_cap_entries .getKey ();
2319- CapabilityResponse capabilityResponse = new CapabilityResponse ();
23202342 String capabilityValue = ser_cap_entries .getValue ();
2321- capabilityResponse .setName (capability .getName ());
2322- capabilityResponse .setValue (capabilityValue );
2323- capabilityResponse .setObjectName ("capability" );
2324- capabilityResponses .add (capabilityResponse );
2343+ if (Service .Lb == service && capability .getName ().equals (Capability .SupportedLBIsolation .getName ())) {
2344+ capabilityValue = networkOffering .isDedicatedLB () ? "dedicated" : "shared" ;
2345+ }
2346+
2347+ Set <String > capabilitySet = new HashSet <>(Arrays .asList (Capability .SupportedLBIsolation .getName (),
2348+ Capability .SupportedSourceNatTypes .getName (),
2349+ Capability .RedundantRouter .getName ()));
2350+ boolean canChoose = capabilitySet .contains (capability .getName ());
2351+
2352+ createCapabilityResponse (capabilityResponses , capability .getName (),
2353+ capabilityValue , canChoose , "capability" );
2354+ }
2355+ }
2356+
2357+ if (Service .SourceNat == service ) {
2358+ // overwrite
2359+ capabilityResponses = new ArrayList <>();
2360+ createCapabilityResponse (capabilityResponses , Capability .SupportedSourceNatTypes .getName (),
2361+ networkOffering .isSharedSourceNat () ? "perzone" : "peraccount" , true );
2362+
2363+ createCapabilityResponse (capabilityResponses , Capability .RedundantRouter .getName (),
2364+ networkOffering .isRedundantRouter () ? "true" : "false" , true );
2365+ } else if (service == Service .StaticNat ) {
2366+ createCapabilityResponse (capabilityResponses , Capability .ElasticIp .getName (),
2367+ networkOffering .isElasticIp () ? "true" : "false" , false );
2368+
2369+ createCapabilityResponse (capabilityResponses , Capability .AssociatePublicIP .getName (),
2370+ networkOffering .isAssociatePublicIP () ? "true" : "false" , false );
2371+ } else if (Service .Lb == service ) {
2372+ createCapabilityResponse (capabilityResponses , Capability .ElasticLb .getName (),
2373+ networkOffering .isElasticLb () ? "true" : "false" , false );
2374+
2375+ createCapabilityResponse (capabilityResponses , Capability .InlineMode .getName (),
2376+ networkOffering .isInline () ? "true" : "false" , false );
2377+ }
2378+ serviceResponse .setCapabilities (capabilityResponses );
2379+
2380+ List <ProviderResponse > providers = new ArrayList <>();
2381+ for (Provider provider : serviceProviderMap .get (service )) {
2382+ if (provider != null ) {
2383+ ProviderResponse providerRsp = new ProviderResponse ();
2384+ providerRsp .setName (provider .getName ());
2385+ providers .add (providerRsp );
23252386 }
2326- serviceResponse .setCapabilities (capabilityResponses );
23272387 }
2388+ serviceResponse .setProviders (providers );
23282389
23292390 serviceResponse .setObjectName ("service" );
23302391 serviceResponses .add (serviceResponse );
0 commit comments