package io.fathom.cloud.compute.api.os.resources; import io.fathom.cloud.CloudException; import io.fathom.cloud.compute.api.os.model.Flavor; import io.fathom.cloud.compute.api.os.model.ListFlavorsResponse; import io.fathom.cloud.compute.api.os.model.WrappedFlavor; import io.fathom.cloud.compute.services.Flavors; import io.fathom.cloud.protobuf.CloudModel.FlavorData; import io.fathom.cloud.server.resources.FathomCloudResourceBase; import java.util.Collections; import java.util.Comparator; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.google.common.collect.Lists; @Path("/openstack/compute/{project}/flavors") @Produces({ MediaType.APPLICATION_JSON }) public class FlavorsResource extends FathomCloudResourceBase { @Inject Flavors flavors; @GET public ListFlavorsResponse listFlavors() throws CloudException { return listFlavors(false); } @GET @Path("detail") public ListFlavorsResponse listFlavorsDetailed() throws CloudException { return listFlavors(true); } @GET @Path("{id}") public WrappedFlavor showFlavor(@PathParam("id") long id) throws CloudException { FlavorData flavor = flavors.find(id); notFoundIfNull(flavor); WrappedFlavor response = new WrappedFlavor(); response.flavor = toModel(flavor, true); return response; } private ListFlavorsResponse listFlavors(boolean details) throws CloudException { ListFlavorsResponse response = new ListFlavorsResponse(); response.flavors = Lists.newArrayList(); for (FlavorData flavor : flavors.list()) { response.flavors.add(toModel(flavor, details)); } Collections.sort(response.flavors, new Comparator<Flavor>() { @Override public int compare(Flavor o1, Flavor o2) { return Integer.compare(o1.ram, o2.ram); } }); return response; } Flavor toModel(FlavorData data, boolean details) { Flavor flavor = new Flavor(); flavor.id = data.getId() + ""; flavor.name = data.getName(); flavor.ram = data.getRam(); flavor.disk = data.getDisk(); flavor.swap = data.getSwap(); flavor.vcpus = data.getVcpus(); flavor.ephemeral = data.getEphemeral(); return flavor; } }