blob: 16bb237b135c4e4bfaeba9de0ea5cd9045e4b553 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.oodt.cas.filemgr.tools;
//OODT imports
import org.apache.oodt.cas.filemgr.structs.Reference;
import org.apache.oodt.cas.filemgr.structs.Product;
import org.apache.oodt.cas.filemgr.structs.exceptions.CatalogException;
import org.apache.oodt.cas.filemgr.structs.exceptions.DataTransferException;
import org.apache.oodt.cas.filemgr.system.XmlRpcFileManagerClient;
//JDK imports
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
/**
* @author woollard
* @version $Revision$
*
* <p>
* A utility class that deletes products in the File Manager Catalog based on
* productID.
* </p>
*
*/
@Deprecated
public class DeleteProduct {
/* our log stream */
private static final Logger LOG = Logger.getLogger(DeleteProduct.class.getName());
/* our File Manager client */
private static XmlRpcFileManagerClient client = null;
/* whether or not we should commit our deletions */
private boolean commit = true;
public DeleteProduct(String fileManagerUrl, boolean commit) {
try {
client = new XmlRpcFileManagerClient(new URL(fileManagerUrl));
} catch (Exception e) {
LOG.log(Level.SEVERE,
"Unable to create file manager client: Message: "
+ e.getMessage() + ": errors to follow");
}
this.commit = commit;
if (!this.commit) {
LOG.log(Level.INFO, "Commit disabled.");
} else {
LOG.log(Level.INFO, "Commit enabled.");
}
}
/**
* @param args
*/
public static void main(String[] args) {
String productId = null;
String fileManagerUrl = null;
boolean commitChanges = true;
boolean readFromStdIn = false;
String usage = "DeleteProduct --productID <product id> "
+ "--fileManagerUrl <url to file manager> [--read] [--nocommit]\n";
for (int i = 0; i < args.length; i++) {
if (args[i].equals("--productID")) {
productId = args[++i];
} else if (args[i].equals("--fileManagerUrl")) {
fileManagerUrl = args[++i];
} else if (args[i].equals("--read")) {
readFromStdIn = true;
} else if (args[i].equals("--nocommit")) {
commitChanges = false;
}
}
if ((productId == null && !readFromStdIn) || fileManagerUrl == null) {
System.err.println(usage);
System.exit(1);
}
DeleteProduct remover = new DeleteProduct(fileManagerUrl, commitChanges);
if (readFromStdIn) {
List prodIds = readProdIdsFromStdin();
for (Iterator i = prodIds.iterator(); i.hasNext();) {
String prodId = (String) i.next();
remover.remove(prodId);
}
} else
remover.remove(productId);
}
private static List readProdIdsFromStdin() {
List prodIds = new Vector();
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
while ((line = br.readLine()) != null) {
prodIds.add(line);
}
} catch (IOException e) {
LOG.log(Level.WARNING, "Error reading prod id: line: [" + line
+ "]: Message: " + e.getMessage(), e);
} finally {
if (br != null) {
try {
br.close();
} catch (Exception ignore) {
}
br = null;
}
}
return prodIds;
}
private void remove(String productId) {
Product target = null;
try {
target = client.getProductById(productId);
} catch (CatalogException e) {
LOG.log(Level.WARNING, "Unable to obtain product : [" + productId
+ "] from file manager: [" + client.getFileManagerUrl()
+ "]: Message: " + e.getMessage());
}
if (target == null) {
// could not file product
return;
}
// delete references first
Vector refs = new Vector();
try {
refs = (Vector) client.getProductReferences(target);
} catch (CatalogException e) {
LOG.log(Level.WARNING,
"Unable to obtain references for product : [" + productId
+ "] from file manager: ["
+ client.getFileManagerUrl() + "]: Message: "
+ e.getMessage());
}
for (int i = 0; i < refs.size(); i++) {
Reference ref = (Reference) refs.get(i);
if (commit) {
try {
client.removeFile(new File(new URI(ref
.getDataStoreReference())).getAbsolutePath());
} catch (DataTransferException e) {
LOG.log(Level.WARNING, "Unable to delete reference : ["
+ ref.getDataStoreReference() + "] for product : ["
+ productId + "] from file manager : ["
+ client.getFileManagerUrl() + "]: Message: "
+ e.getMessage());
} catch (URISyntaxException e) {
LOG.log(Level.WARNING,
"uri syntax exception getting file absolute path from URI: ["
+ ref.getDataStoreReference()
+ "]: Message: " + e.getMessage());
}
} else {
LOG.log(Level.INFO, "Delete file: ["
+ ref.getDataStoreReference() + "]");
}
}
if (commit) {
// now delete product
try {
client.removeProduct(target);
} catch (CatalogException e) {
LOG.log(Level.WARNING, "Unable to remove product : ["
+ productId + "] from file manager: ["
+ client.getFileManagerUrl() + "]: Message: "
+ e.getMessage());
}
} else {
LOG.log(Level.INFO, "Remote catalog entry for product: ["
+ target.getProductName() + "]");
}
}
}