package io.fathom.cloud.dbaas.api.os.resources; import io.fathom.cloud.dbaas.DbaasServiceImpl; import io.fathom.cloud.dbaas.api.os.model.DbBackupList; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Lists; import com.google.inject.persist.Transactional; @Path("/openstack/dbaas/{project}/backups") @Transactional public class DbBackupsResource extends DbaasResourceBase { private static final Logger log = LoggerFactory.getLogger(DbBackupsResource.class); @Inject DbaasServiceImpl dbaasService; @GET public DbBackupList getInstances() { DbBackupList backups = new DbBackupList(); backups.backups = Lists.newArrayList(); return backups; } // private static final String IMAGE_META_PREFIX = "x-image-meta-"; // // @POST // @Consumes({ "application/octet-stream" }) // public Response createImage(File file) throws CloudException, IOException // { // if (file == null) { // throw new IllegalArgumentException("No content supplied"); // } // // ImageImpl image; // { // Map<String, String> metadata = extractHeaders(); // if (metadata.containsKey("size")) { // long size = Long.valueOf(metadata.get(DbaasService.METADATA_KEY_SIZE)); // if (size != file.length()) { // throw new IllegalArgumentException(); // } // } // metadata.put("size", "" + Long.valueOf(file.length())); // // image = imageService.createImage(getProject().getId(), metadata); // } // // { // BlobData data = BlobData.build(file); // image = imageService.uploadData(image, data); // } // // WrappedInstance result = new WrappedInstance(); // result.image = toModel(image.getData()); // // return // Response.status(Status.CREATED).entity(result).type(MediaType.APPLICATION_JSON_TYPE).build(); // } // // private Map<String, String> extractHeaders() { // Map<String, String> metadata = Maps.newHashMap(); // // Enumeration<String> headerNames = httpRequest.getHeaderNames(); // while (headerNames.hasMoreElements()) { // String headerName = headerNames.nextElement(); // // // Header names are case-insensitive // String normalized = headerName.toLowerCase(); // if (normalized.startsWith(IMAGE_META_PREFIX)) { // String key = headerName.substring(IMAGE_META_PREFIX.length()); // String value = httpRequest.getHeader(headerName); // // metadata.put(key, value); // } // } // // return metadata; // } // // @GET // @Path("detail") // @Produces({ JSON }) // public ImageListResponse doImageDetailsGet() throws CloudException { // ImageListResponse response = new ImageListResponse(); // // response.images = Lists.newArrayList(); // // ImageFilter filter = new ImageFilter(); // filter.name = httpRequest.getParameter("name"); // // for (DbaasService.Instance data : imageService.listImages(getProject(), // filter)) { // response.images.add(toModel(data)); // } // // return response; // } // // @DELETE // @Path("{id}") // public Response deleteImage(@PathParam("id") String id) throws // CloudException, IOException { // ImageData image = findImage(id); // if (image == null) { // throw new WebApplicationException(Status.NOT_FOUND); // } // // imageService.deleteImage(getProject(), image.getId()); // // return Response.status(Status.NO_CONTENT).build(); // } // // @PUT // @Path("{id}") // public Response updateImage(@PathParam("id") String id, File content) // throws CloudException, IOException { // if (content != null && content.length() != 0) { // throw new UnsupportedOperationException(); // } // // ImageData image = findImage(id); // if (image == null) { // throw new WebApplicationException(Status.NOT_FOUND); // } // // // TODO: Some // // -H 'x-image-meta-protected: True' // // -H 'x-glance-registry-purge-props: false' // // Map<String, String> metadata = extractHeaders(); // // image = imageService.updateImage(getProject(), image.getId(), metadata); // // // ResponseBuilder response = Response.ok(); // // setHttpHeaders(image, response); // // return response.build(); // // WrappedInstance result = new WrappedInstance(); // result.image = toModel(image); // return // Response.status(Status.CREATED).entity(result).type(MediaType.APPLICATION_JSON_TYPE).build(); // } // // @HEAD // @Path("{id}") // public Response getImageInfo(@PathParam("id") String id) throws // CloudException, IOException { // ImageData image = findImage(id); // if (image == null) { // throw new WebApplicationException(Status.NOT_FOUND); // } // // ResponseBuilder response = Response.ok(); // setHttpHeaders(image, response); // return response.build(); // } // // @GET // @Path("{id}") // public Response getImage(@PathParam("id") String id) throws // CloudException, IOException { // ImageData image = findImage(id); // if (image == null) { // throw new WebApplicationException(Status.NOT_FOUND); // } // // ResponseBuilder response; // ImageLocation imageLocation = image.getLocation(); // if (imageLocation.hasStored()) { // String cookie = imageLocation.getStored(); // // BlobData blob = imageDataService.getImageFile(cookie); // // response = Response.ok().entity(blob.asEntity()); // // ByteString md5 = blob.getHash(); // response.header("Content-MD5", Hex.toHex(md5.toByteArray())); // } else { // response = Response.status(Status.NO_CONTENT); // } // // setHttpHeaders(image, response); // return response.build(); // } // // private void setHttpHeaders(ImageData image, ResponseBuilder response) { // // TODO: We could fix this up to be less hacky, but this works for now // // response.header("x-image-meta-id", "" + image.getId()); // // if (image.hasName()) { // response.header("x-image-meta-name", image.getName()); // } // // if (image.hasDiskFormat()) { // response.header("x-image-meta-disk_format", image.getDiskFormat()); // } // // if (image.hasContainerFormat()) { // response.header("x-image-meta-container_format", // image.getContainerFormat()); // } // // if (image.hasImageSize()) { // response.header("x-image-meta-size", "" + image.getImageSize()); // } // if (image.hasImageChecksum()) { // response.header("x-image-meta-checksum", // Hex.toHex(image.getImageChecksum().toByteArray())); // } // // if (image.hasCreatedAt()) { // response.header("x-image-meta-created_at", // Clock.toDate(image.getCreatedAt())); // } // if (image.hasUpdatedAt()) { // response.header("x-image-meta-updated_at", // Clock.toDate(image.getUpdatedAt())); // } // // if (image.hasDeletedAt()) { // response.header("x-image-meta-deleted_at", // Clock.toDate(image.getDeletedAt())); // } // // if (image.hasImageState()) { // String status = image.getImageState().toString().toLowerCase(); // response.header("x-image-meta-status", status); // } // // if (image.hasIsPublic()) { // response.header("x-image-meta-is_public", // Boolean.toString(image.getIsPublic())); // } // // response.header("x-image-meta-protected", image.getIsProtected()); // response.header("x-image-meta-owner", "" + image.getOwnerProject()); // // if (image.hasAttributes()) { // for (KeyValueData kv : image.getAttributes().getUserAttributesList()) { // response.header("x-image-meta-property-" + kv.getKey(), kv.getValue()); // } // } // // // x-image-meta-uri // // // http://glance.example.com/v1/images/71c675ab-d94f-49cd-a114-e12490b328d9 // // x-image-meta-min-ram 256 // // x-image-meta-min-disk 0 // // x-image-meta-owner null // // x-image-meta-property-distro Ubuntu 10.04 LTS // } }