// $Id: gendaml.java,v 1.4 2002/08/12 07:50:44 mdean Exp $


/**
 * generate OWL from the .csv NASDAQ Directory
 */
class gendaml
{
    /**
     * handle comma-separated and quoted values
     */
    static class MyTokenizer
    {
	String line;
	char separator;
	int start = 0;

	MyTokenizer(String line,
		    char separator)
	{
	    this.line = line;
	    this.separator = separator;
	}

	String nextToken()
	{
	    String retval;

	    int end;
	    if ((start < line.length())
		&& (line.charAt(start) == '"'))
		end = line.indexOf('"', start + 1) + 1;
	    else
		end = line.indexOf(separator, start);
	    if (end == (-1))
		{
		    retval = line.substring(start);
		    start = line.length();
		}
	    else
		{
		    retval = line.substring(start, end);
		    start = end + 1;
		}

	    // remove quotes
	    if ((retval.length() > 0)
		&& (retval.charAt(0) == '"'))
		return retval.substring(1, retval.length() - 1);
	    else
		return retval;
	}
    }

    public static void main(String args[])
	throws Exception
    {
	if (args.length != 1)
	    {
		System.err.println("Usage:  nasdaq.txt");
		System.exit(1);
	    }

	com.hp.hpl.mesa.rdf.jena.model.Model model = new com.hp.hpl.mesa.rdf.jena.mem.ModelMem();
	com.hp.hpl.mesa.rdf.jena.model.Resource nasdaq100Resource = model.createResource(nasdaq_ont.baseURI + "#Nasdaq_100");
	com.hp.hpl.mesa.rdf.jena.model.Resource nasdaqFinancial100Resource = model.createResource(nasdaq_ont.baseURI + "#Nasdaq_Financial_100");
	
	java.io.BufferedReader stream = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(args[0])));
	String line;
	while ((line = stream.readLine()) != null)
	    {
		MyTokenizer tokenizer = new MyTokenizer(line, ',');
		String symbol = tokenizer.nextToken();
		String name = tokenizer.nextToken();
		String market = tokenizer.nextToken();
		String index = tokenizer.nextToken();
		String description = tokenizer.nextToken();
		String nasdaqFinancial100 = tokenizer.nextToken();
		String nasdaq100 = tokenizer.nextToken();

		com.hp.hpl.mesa.rdf.jena.model.Resource symbolResource = model.createResource("#" + symbol);
		model.add(symbolResource,
			  com.hp.hpl.mesa.rdf.jena.vocabulary.RDF.type,
			  nasdaq_ont.Symbol);
		model.add(symbolResource,
			  nasdaq_ont.symbol,
			  symbol);
		model.add(symbolResource,
			  nasdaq_ont.name,
			  name);
		model.add(symbolResource,
			  nasdaq_ont.market,
			  model.createResource(nasdaq_ont.baseURI + "#" + market));
		if (index.length() > 0)
		    model.add(symbolResource,
			      nasdaq_ont.index,
			      model.createResource(nasdaq_ont.baseURI + "#" + index));
		model.add(symbolResource,
			  nasdaq_ont.description,
			  description);
		if (nasdaqFinancial100.length() > 0)
		    model.add(nasdaqFinancial100Resource,
			      nasdaq_ont.stock,
			      symbolResource);
		if (nasdaq100.length() > 0)
		    model.add(nasdaq100Resource,
			      nasdaq_ont.stock,
			      symbolResource);
	    }

	// serialize model
	java.io.PrintWriter writer = new java.io.PrintWriter(new java.io.FileOutputStream("nasdaq.owl"));
	model.write(writer);
	writer.close();
    }
}
