package reversetutorial.jdo; import java.util.*; import javax.jdo.*; /** * Interprets a JDOQL query for magazines given on the command line and * prints the results. */ public class Finder { /** * Usage: java reversetutorial.jdo.Finder <JDOQL query> */ public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: java reversetutorial.jdo.Finder " + ""); return; } PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory ("META-INF/jdo.properties"); PersistenceManager pm = pmf.getPersistenceManager(); pm.currentTransaction().setNontransactionalRead(true); try { executeQuery(pm, args[0]); } finally { pm.close(); pmf.close(); } } /** * Run a query for magazines matching the given filter. */ private static void executeQuery(PersistenceManager pm, String filter) { Query q = pm.newQuery(Magazine.class, filter); q.declareVariables("Magazine mag; Article art"); Collection results = (Collection) q.execute(); try { Iterator itr = results.iterator(); if (!itr.hasNext()) System.out.println("No magazines matches your query"); else while (itr.hasNext()) printMatch((Magazine) itr.next()); } finally { q.close(results); } } /** * Outputs information about a magazine matching a query. */ private static void printMatch(Magazine mag) { System.out.println("Magazine:"); System.out.println("\tIsbn: " + mag.getIsbn()); System.out.println("\tIssue: " + mag.getIssue()); System.out.println("\tName: " + mag.getName()); System.out.println("\tPrice: " + mag.getPrice()); System.out.println("\tPublisher:"); System.out.println("\t\tName: " + mag.getPublisher().getName()); System.out.println("\t\tRevenue: " + mag.getPublisher().getRevenue()); Collection articles = mag.getArticles(); Article art; StringBuffer subBuffer; for (Iterator itr = articles.iterator(); itr.hasNext();) { art = (Article) itr.next(); System.out.println("\tArticle:"); System.out.println("\t\tTitle: " + art.getTitle()); System.out.println("\t\tAuthor: " + art.getAuthorName()); } } }