-// $Id: CQLGenerator.java,v 1.2 2002-10-30 11:13:18 mike Exp $
+// $Id: CQLGenerator.java,v 1.4 2002-11-06 00:05:58 mike Exp $
package org.z3950.zing.cql;
import java.util.Properties;
* this distribution - there is a <TT>generate_<I>x</I>()</TT> method
* for each grammar element <I>X</I>.
*
- * @version $Id: CQLGenerator.java,v 1.2 2002-10-30 11:13:18 mike Exp $
+ * @version $Id: CQLGenerator.java,v 1.4 2002-11-06 00:05:58 mike Exp $
* @see <A href="http://zing.z3950.org/cql/index.html"
* >http://zing.z3950.org/cql/index.html</A>
*/
* method, or decompiled into CQL using its <TT>toCQL</TT>
* 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();
}
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();
}
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")) {
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();
* A simple test-harness for the generator.
* <P>
* 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
+ * <I>name value</I> pairs provided on the command-line, and
+ * decompiles it into CQL which is written to standard output.
* <P>
* For example,
- * <TT>java org.z3950.zing.cql.CQLGenerator etc/generate.properties</TT>
+ * <TT>java org.z3950.zing.cql.CQLGenerator
+ * etc/generate.properties seed 18398</TT>,
* where the file <TT>generate.properties</TT> contains:<PRE>
- * seed=18398
* complexQuery=0.4
* complexClause=0.4
* equalsRelation=0.5
* @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 <props-file>");
+ if (args.length % 2 != 1) {
+ System.err.println("Usage: CQLGenerator <props-file> "+
+ "[<name> <value>]...");
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();