package jacorb.ir.gui.typesystem.remote;

import org.omg.CORBA.*;
import javax.swing.tree.*;
import jacorb.ir.gui.typesystem.*;

/**
 * Abstrakte Oberklasse für alle Klassen, die in unserem Baum Children haben sollen.
 * Neben den "echten" CORBA-Container-Klassen soll das z.B. auch StructDef sein.
 * Letztere Klassen sollen also bei uns konzeptionell Container sein, weil sie member
 * besitzen (auch wenn sie nicht von CORBA::Container erben)
 * 
 */

public abstract class IRContainer 
    extends IRNode 
    implements AbstractContainer
{

    /**
     * AbstractContainer constructor comment.
     */
    protected IRContainer() {
	super();
    }
 
   /**
    * @param irObject org.omg.CORBA.IRObject
    */

    protected IRContainer ( IRObject irObject) 
    {
	super(irObject);
    }

    /**
     * Erzeugt TypeSystemNodes für alle contained Objekte.
     * Default-Implementierung, die für "echte" CORBA-Container funktionert.
     * Für andere Klassen (z.B. IRStruct), die keine echten CORBA-Container sind,
     * wird diese Methode überschrieben mit individuellem Code zum Auslesen der members.
     * @return org.omg.CORBA.Object
     */

    public jacorb.ir.gui.typesystem.ModelParticipant[] contents () 
    {
	Container container = ContainerHelper.narrow((org.omg.CORBA.Object)this.irObject);
	Contained[] contents = container.contents(DefinitionKind.dk_all, true);	

	jacorb.ir.gui.typesystem.TypeSystemNode[] result = 
            new jacorb.ir.gui.typesystem.TypeSystemNode[contents.length];

	for (int i=0; i<contents.length; i++) 
        {
            result[i] = RemoteTypeSystem.createTypeSystemNode(contents[i]);
	}	
	return result;
    }
}





