package werti.util;


import java.net.MalformedURLException;

import java.rmi.RemoteException;

import java.util.Iterator;
import java.util.List;

import danbikel.lisp.Sexp;

import danbikel.parser.Decoder;
import danbikel.parser.DecoderServer;
import danbikel.parser.DecoderServerRemote;
import danbikel.parser.Parser;

import danbikel.switchboard.AbstractSwitchboardUser;
import danbikel.switchboard.Switchboard;
import danbikel.switchboard.SwitchboardRemote;

import org.apache.log4j.Logger;

import werti.uima.types.annot.Token;

public class ParserClient extends Parser {
	private static final Logger log =
		Logger.getLogger(ParserClient.class);

	public static final long serialVersionUID = 2;

	public ParserClient(DecoderServer srv) throws RemoteException {
		super(srv);
	}

	public ParserClient() throws RemoteException {
		super(50);
		try {
			final SwitchboardRemote sb =
				AbstractSwitchboardUser.getSwitchboard(Switchboard.defaultBindingName, 2);
			register("Switchboard");
			// FIXME: if no servers are running, this runs forever.
			server = (DecoderServerRemote) sb.getServer(id);
			
			// security check added by Niels
			if ( server == null ) {
				throw new RemoteException("Cannot obtain remote server, perhaps no servers are running?");
			}
			
			decoder = new Decoder(id, server);
		} catch (MalformedURLException murle) {
			log.fatal(murle);
		}
	}

	public Sexp parseSentence(List<Token> sentence) throws Exception {
		StringBuilder sexp = new StringBuilder();

		for (Iterator<Token> i = sentence.iterator(); i.hasNext(); ) {
			final Token t = i.next();
			sexp.append("(");
			sexp.append(t.getCoveredText());
			sexp.append(" (");
			sexp.append(t.getTag());
			sexp.append("))");
		}

		log.debug("Parsing Sexp: " + sexp.toString());
		
		return parse(Sexp.read(sexp.toString()).list());
	}

	public static void main (String[] args) {
		
		throw new RuntimeException("Function body removed for comptability to JAba 1.5");
		
		/*try {
			final ParserClient parser = new ParserClient();

			final Console cons = System.console();

			while (true) {
				System.out.println("Sentence?");
				final String sentence = cons.readLine();
				final Sexp parsed = parser.parse(Sexp.read(sentence).list());
				System.out.println(parsed);
			}
		} catch (Exception e) {
			System.err.println(e);
			e.printStackTrace(System.out);
		}*/
	}
}
