/* Author: Jeff Dalton <J.Dalton@ed.ac.uk>
 * Updated: Mon Dec  3 21:14:43 2001 by Jeff Dalton
 * Copyright: (c) 2001, AIAI, University of Edinburgh
 */

package ix.ip2;

import javax.swing.*;

import java.lang.reflect.Constructor;

import ix.icore.IXAgent;
import ix.icore.domain.Domain;
import ix.iview.*;

import ix.util.*;

/**
 * The main frame of an IP2 user interface.
 */
public abstract class Ip2Frame extends JFrame {

    protected InternalDomainEditor domainEditor;

    public Ip2Frame(String title) {
	super(title);
    }

    public InternalDomainEditor makeDomainEditor(IXAgent agent, Domain dom) {
	String className
	    = Parameters.getParameter("domain-editor-class",
				      "ix.iview.SimpleDomainEditor");
	try {
	    Debug.noteln("Trying domain editor class", className);
	    Class c = Class.forName(className);
	    Class[] consClasses = {IXAgent.class, Domain.class};
	    Constructor cons = c.getConstructor(consClasses);
	    return (InternalDomainEditor)
		cons.newInstance(new Object[] {agent, dom});
	}
	catch (Exception e) {
	    Debug.noteException(e, false);
	    Debug.noteln("Creating a SimpleDomainEditor instead.");
	    return new SimpleDomainEditor(agent, dom);
	}
    }

    public InternalDomainEditor getDomainEditor() {
	ensureDomainEditor();
	return domainEditor;
    }

    protected abstract void ensureDomainEditor();

}
