X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Forg%2Fz3950%2Fzing%2Fcql%2FCQLGenerator.java;h=747bf520baea4171b1bf4a71b517e81ec45fa31a;hb=18405938a115378cc571d697060ac40775c62fb7;hp=67e70d1b5f924a15e121e4804b001d19c0188aa1;hpb=caeab95a0bbe3a694746bb3244e6605c36927c1e;p=cql-java-moved-to-github.git diff --git a/src/org/z3950/zing/cql/CQLGenerator.java b/src/org/z3950/zing/cql/CQLGenerator.java index 67e70d1..747bf52 100644 --- a/src/org/z3950/zing/cql/CQLGenerator.java +++ b/src/org/z3950/zing/cql/CQLGenerator.java @@ -1,4 +1,4 @@ -// $Id: CQLGenerator.java,v 1.2 2002-10-30 11:13:18 mike Exp $ +// $Id: CQLGenerator.java,v 1.5 2002-11-20 01:15:14 mike Exp $ package org.z3950.zing.cql; import java.util.Properties; @@ -22,7 +22,7 @@ import java.io.FileNotFoundException; * this distribution - there is a generate_x() method * for each grammar element X. * - * @version $Id: CQLGenerator.java,v 1.2 2002-10-30 11:13:18 mike Exp $ + * @version $Id: CQLGenerator.java,v 1.5 2002-11-20 01:15:14 mike Exp $ * @see http://zing.z3950.org/cql/index.html */ @@ -125,17 +125,18 @@ public class CQLGenerator { * method, or decompiled into CQL using its toCQL * method. */ - public CQLNode generate() throws ParameterMissingException { + public CQLNode generate() throws MissingParameterException { return generate_cql_query(); } - private CQLNode generate_cql_query() throws ParameterMissingException { + private CQLNode generate_cql_query() throws MissingParameterException { if (!maybe("complexQuery")) { return generate_search_clause(); } CQLNode node1 = generate_cql_query(); CQLNode node2 = generate_search_clause(); + // ### should generate prefix-mapping nodes if (maybe("proxOp")) { // ### generate proximity nodes } else { @@ -149,7 +150,7 @@ public class CQLGenerator { return generate_search_clause(); } - private CQLNode generate_search_clause() throws ParameterMissingException { + private CQLNode generate_search_clause() throws MissingParameterException { if (maybe("complexClause")) { return generate_cql_query(); } @@ -183,14 +184,14 @@ public class CQLGenerator { return qualifier; } - private CQLRelation generate_relation() throws ParameterMissingException { + private CQLRelation generate_relation() throws MissingParameterException { String base = generate_base_relation(); CQLRelation rel = new CQLRelation(base); // ### should generate modifiers too return rel; } - private String generate_base_relation() throws ParameterMissingException { + private String generate_base_relation() throws MissingParameterException { if (maybe("equalsRelation")) { return "="; } else if (maybe("numericRelation")) { @@ -242,10 +243,10 @@ public class CQLGenerator { return ""; // shut up compiler warning } - boolean maybe(String param) throws ParameterMissingException { + boolean maybe(String param) throws MissingParameterException { String probability = params.getProperty(param); if (probability == null) - throw new ParameterMissingException(param); + throw new MissingParameterException(param); double dice = rnd.nextDouble(); double threshhold = new Double(probability).doubleValue(); @@ -260,13 +261,14 @@ public class CQLGenerator { * A simple test-harness for the generator. *

* It generates a single random query using the parameters - * specified in a nominated properties file, and decompiles it - * into CQL which is written to standard output. + * specified in a nominated properties file, plus any additional + * name value pairs provided on the command-line, and + * decompiles it into CQL which is written to standard output. *

* For example, - * java org.z3950.zing.cql.CQLGenerator etc/generate.properties + * java org.z3950.zing.cql.CQLGenerator + * etc/generate.properties seed 18398, * where the file generate.properties contains:

-     *	seed=18398
      *	complexQuery=0.4
      *	complexClause=0.4
      *	equalsRelation=0.5
@@ -281,25 +283,32 @@ public class CQLGenerator {
      * @param configFile
      *	The name of a properties file from which to read the
      *	configuration parameters (see above).
+     * @param name
+     *	The name of a configuration parameter.
+     * @param value
+     *	The value to assign to the configuration parameter named in
+     *	the immediately preceding command-line argument.
      * @return
      *	A CQL query expressed in a form that should be comprehensible
      *	to all conformant CQL compilers.
      */
     public static void main (String[] args) throws Exception {
-	if (args.length != 1) {
-	    System.err.println("Usage: CQLGenerator ");
+	if (args.length % 2 != 1) {
+	    System.err.println("Usage: CQLGenerator  "+
+			       "[ ]...");
 	    System.exit(1);
 	}
 
 	String configFile = args[0];
 	InputStream f = new FileInputStream(configFile);
 	if (f == null)
-	    throw new FileNotFoundException("getResourceAsStream(" +
-					    configFile + ")");
+	    throw new FileNotFoundException(configFile);
 
 	Properties params = new Properties();
 	params.load(f);
 	f.close();
+	for (int i = 1; i < args.length; i += 2)
+	    params.setProperty(args[i], args[i+1]);
 
 	CQLGenerator generator = new CQLGenerator(params);
 	CQLNode tree = generator.generate();