Author: riverma
Date: Thu Jan 31 00:50:43 2013
New Revision: 1440772

URL: http://svn.apache.org/viewvc?rev=1440772&view=rev
Log:
OODT-554 resolution: Add the ability to delete an FM product via the 
CAS-Curator REST API

Modified:
    
oodt/trunk/curator/src/main/java/org/apache/oodt/cas/curation/service/MetadataResource.java

Modified: 
oodt/trunk/curator/src/main/java/org/apache/oodt/cas/curation/service/MetadataResource.java
URL: 
http://svn.apache.org/viewvc/oodt/trunk/curator/src/main/java/org/apache/oodt/cas/curation/service/MetadataResource.java?rev=1440772&r1=1440771&r2=1440772&view=diff
==============================================================================
--- 
oodt/trunk/curator/src/main/java/org/apache/oodt/cas/curation/service/MetadataResource.java
 (original)
+++ 
oodt/trunk/curator/src/main/java/org/apache/oodt/cas/curation/service/MetadataResource.java
 Thu Jan 31 00:50:43 2013
@@ -55,6 +55,7 @@ import net.sf.json.JSONObject;
 import net.sf.json.JSONSerializer;
 
 //OODT imports
+import org.apache.oodt.cas.curation.service.CurationService;
 import org.apache.oodt.cas.curation.structs.ExtractorConfig;
 import org.apache.oodt.cas.curation.util.CurationXmlStructFactory;
 import org.apache.oodt.cas.curation.util.ExtractorConfigReader;
@@ -102,6 +103,8 @@ public class MetadataResource extends Cu
   
   public static final String UPDATE = "update";
   
+  public static final String DELETE = "delete";
+  
   // single instance of CAS catalog shared among all requests
   private Catalog catalog = null;
     
@@ -612,6 +615,64 @@ public class MetadataResource extends Cu
     catalog.addMetadata(newMetadata, newProduct);
   }
 
+  /**
+   * Method to delete a specific product from the catalog
+   * 
+   * @param id
+   *   identifier of CAS product - either 'id' or 'name' must be specified
+   * @param name
+   *   name of CAS product - either 'id' or 'name' must be specified
+   * @return the product ID of the deleted product if deletion successful
+   */
+  @POST
+  @Path(DELETE)
+  @Consumes("application/x-www-form-urlencoded")
+  @Produces("text/plain")
+  public String deleteCatalogMetadata(
+                 @FormParam("id") String id, 
+                 @FormParam("name") String name) {
+
+         try {
+                 // retrieve product from catalog
+                 Product product = null;
+                 if (StringUtils.hasText(id)) {
+                         id = id.substring(id.lastIndexOf("/") + 1);
+                         product = 
CurationService.config.getFileManagerClient().getProductById(id);
+                 } else if (StringUtils.hasText(name)) {
+                         product = 
CurationService.config.getFileManagerClient().getProductByName(name);
+                 } else {
+                         throw new Exception("Either the HTTP parameter 'id' 
or the HTTP parameter 'name' must be specified");
+                 }
+
+                 // remove product from catalog
+                 this.deleteCatalogProduct(product);
+
+                 // return product id to downstream processors
+                 return "id="+product.getProductId();
+
+         } catch (Exception e) {
+
+                 e.printStackTrace();
+                 // return error message
+                 throw new WebApplicationException(e, 
Response.Status.INTERNAL_SERVER_ERROR);
+
+         }
+  }  
+
+  /**
+   * Deletes a given product from the catalog
+   * 
+   * @param product
+   *          The {@link Product} to delete
+   * @throws FileNotFoundException
+   * @throws IOException
+   * @throws CatalogException
+   *           If any error occurs during this delete operation.
+   */
+  public void deleteCatalogProduct(Product product) 
+  throws FileNotFoundException, IOException, CatalogException {
+         CurationService.config.getFileManagerClient().removeProduct(product);
+  }  
 
   private Metadata getProductTypeMetadataForPolicy(String policy,
       String productTypeName) throws MalformedURLException,


Reply via email to