/* The contents of this file are subject to the license and copyright terms * detailed in the license directory at the root of the source tree (also * available online at http://fedora-commons.org/license/). */ package fedora.client.utility; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; import org.apache.axis.types.NonNegativeInteger; import fedora.client.FedoraClient; import fedora.common.Constants; import fedora.server.access.FedoraAPIA; import fedora.server.types.gen.FieldSearchQuery; import fedora.server.types.gen.FieldSearchResult; import fedora.server.types.gen.ListSession; import fedora.server.types.gen.ObjectFields; /** * @author Chris Wilper * @version $Id$ */ public class AutoFinder { private final FedoraAPIA m_apia; public AutoFinder(FedoraAPIA apia) throws MalformedURLException, ServiceException { m_apia = apia; } public FieldSearchResult findObjects(String[] resultFields, int maxResults, FieldSearchQuery query) throws RemoteException { return findObjects(m_apia, resultFields, maxResults, query); } public FieldSearchResult resumeFindObjects(String sessionToken) throws RemoteException { return resumeFindObjects(m_apia, sessionToken); } public static FieldSearchResult findObjects(FedoraAPIA skeleton, String[] resultFields, int maxResults, FieldSearchQuery query) throws RemoteException { return skeleton.findObjects(resultFields, new NonNegativeInteger("" + maxResults), query); } public static FieldSearchResult resumeFindObjects(FedoraAPIA skeleton, String sessionToken) throws RemoteException { return skeleton.resumeFindObjects(sessionToken); } public static void showUsage(String message) { System.err.println(message); System.err.println("Usage: fedora-find host port user password fields phrase protocol [context]"); System.err.println(""); System.err.println(" host - The Fedora server host or ip address."); System.err.println(" port - The Fedora server port."); System.err.println(" user - The username of a repository user."); System.err.println(" password - The password of a repository user."); System.err.println(" fields - Space-delimited list of fields."); System.err.println(" phrase - Phrase to search for in any field (with ? and * wildcards)"); System.err.println(" protocol - The protocol to communication with the Fedora server (http|https)"); System.err.println(" context - Optional, the name of the context the Fedora server is deployed in (default is fedora)"); } public static void printValue(String name, String value) { if (value != null) { System.out.println(" " + name + " " + value); } } public static void printValue(String name, String[] value) { if (value != null) { for (String element : value) { AutoFinder.printValue(name, element); } } } public static void main(String[] args) throws Exception { System.setProperty("java.awt.headless", "true"); if (args.length < 7 || args.length > 8) { AutoFinder.showUsage("Seven or eight arguments required."); System.exit(0); } String context = Constants.FEDORA_DEFAULT_APP_CONTEXT; String host = args[0]; int port = Integer.parseInt(args[1]); String user = args[2]; String pass = args[3]; String fields = args[4]; String phrase = args[5]; String protocol = args[6]; if (args.length == 8 && !args[7].equals("")){ context = args[7]; } try { // FIXME: Get around hardcoding the path in the baseURL String baseURL = protocol + "://" + host + ":" + port + "/" + context; FedoraClient fc = new FedoraClient(baseURL, user, pass); AutoFinder finder = new AutoFinder(fc.getAPIA()); FieldSearchQuery query = new FieldSearchQuery(); query.setTerms(phrase); FieldSearchResult result = finder.findObjects(fields.split(" "), 20, query); int matchNum = 0; while (result != null) { for (int i = 0; i < result.getResultList().length; i++) { ObjectFields o = result.getResultList()[i]; matchNum++; System.out.println("#" + matchNum); AutoFinder.printValue("pid ", o.getPid()); AutoFinder.printValue("state ", o.getState()); AutoFinder.printValue("ownerId ", o.getOwnerId()); AutoFinder.printValue("cDate ", o.getCDate()); AutoFinder.printValue("mDate ", o.getMDate()); AutoFinder.printValue("dcmDate ", o.getDcmDate()); AutoFinder.printValue("title ", o.getTitle()); AutoFinder.printValue("creator ", o.getCreator()); AutoFinder.printValue("subject ", o.getSubject()); AutoFinder.printValue("description ", o.getDescription()); AutoFinder.printValue("publisher ", o.getPublisher()); AutoFinder.printValue("contributor ", o.getContributor()); AutoFinder.printValue("date ", o.getDate()); AutoFinder.printValue("type ", o.getType()); AutoFinder.printValue("format ", o.getFormat()); AutoFinder.printValue("identifier ", o.getIdentifier()); AutoFinder.printValue("source ", o.getSource()); AutoFinder.printValue("language ", o.getLanguage()); AutoFinder.printValue("relation ", o.getRelation()); AutoFinder.printValue("coverage ", o.getCoverage()); AutoFinder.printValue("rights ", o.getRights()); System.out.println(""); } ListSession sess = result.getListSession(); if (sess != null) { result = finder.resumeFindObjects(sess.getToken()); } else { result = null; } } } catch (Exception e) { System.err.println("ERROR: " + e.getClass().getName() + (e.getMessage() == null ? "" : ": " + e.getMessage())); } } }