// AID-GENERATED
// =========================================================================
// This class was generated by AID - Abstract Interface Definition          
// DO NOT MODIFY, but use the org.freehep.aid.Aid utility to regenerate it. 
// =========================================================================

// Copyright 2000-2004, FreeHEP.
package hep.graphics.heprep;

import java.util.List;

/**
 * The HepRep interface.
 *
 * Any of these methods may throw a UnsupportedOperationException in Java.
 *
 * This interface is NOT final yet.
 *
 * @author Mark Donszelmann
 */

import java.util.Set;
public interface HepRep {

    /**
     * Add a layer to the list of layers in this heprep.
     * The layer is added to the back of the list.
     *
     * @param layer name of layer to be added to the back of the list.
     */
    public void addLayer(String layer);

    /**
     * Returns the list of layers.
     *
     * @return the known layer names, in the order back-to-front.
     */
    public List/*<String>*/ getLayerOrder();

    /**
     * Add a typetree to this heprep.
     *
     * @param typeTree to be added.
     */
    public void addTypeTree(HepRepTypeTree typeTree);

    /**
     * Remove a typetree from this heprep.
     *
     * @param typeTree to be removed.
     */
    public void removeTypeTree(HepRepTypeTree typeTree);


    /**
     * Returns the collection of all typetrees of this heprep.
     *
     * @deprecated, use getTypeTreeList()
     * @return collection of HepRepTypeTrees.
     */
    Set/*<HepRepTypeTree>*/ getTypeTrees();
    /**
     * Returns the collection of all typetrees of this heprep.
     *
     * @return collection of HepRepTypeTrees.
     */
    public List/*<HepRepTypeTree>*/ getTypeTreeList();

    /**
     * Returns a named and versioned typetree.
     *
     * @param name name of the typetree.
     * @param version version of the typetree.
     * @return named and versioned HepRepTypeTree.
     */
    public HepRepTypeTree getTypeTree(String name, String version);

    /**
     * Searches for a named type in any of the typetrees.
     * The first occurrence found is returned.
     *
     * @param name name of type.
     * @return named HepRepType.
     */
//    HepRepType* getType(String name);
    /**
     * Adds an instancetree to this heprep.
     *
     */
    public void addInstanceTree(HepRepInstanceTree instanceTree);

    /**
     * Overlays an instancetree to this heprep, overriding attributes and adding children.
     *
     * @param instanceTree to be overlaid.
     */
    public void overlayInstanceTree(HepRepInstanceTree instanceTree);

    /**
     * Remove an instanectree from this heprep.
     *
     * @param instanceTree to be removed.
     */
    public void removeInstanceTree(HepRepInstanceTree instanceTree);


    /**
     * Returns a collection of instancetrees.
     *
     * @deprecated, use getInstaceTreeList()
     * @return collection of HepRepInstanceTrees.
     */
    Set/*<HepRepInstanceTree>*/ getInstanceTrees();
    /**
     * Returns a collection of instancetrees.
     *
     * @return collection of HepRepInstanceTrees.
     */
    public List/*<HepRepInstanceTree>*/ getInstanceTreeList();

    /**
     * Returns a named and versioned instancetree.
     * FIXME: doc is incorrect here, should only return TOP of the tree. Filling
     * in should be done by getInstances calls.
     * <p>
     * This tree needs to be added to the heprep afterwards.
     *
     * @param name name of the instancetree.
     * @param version version of the instancetree.
     * @return HepRepIntanceTree
     */
    public HepRepInstanceTree getInstanceTreeTop(String name, String version);

    /**
     * Returns a named and versioned instancetree for a list of typenames.
     * <p>
     * This tree needs to be added to the heprep afterwards.
     *
     * @param name name of the instancetree.
     * @param version version of the instancetree.
     * @param typeNames a list of typenames for which we need instancetrees.
     * @return HepRepIntanceTree
     */
    public HepRepInstanceTree getInstances(String name, String version, String[] typeNames);

    /**
     * Returns a named and versioned instancetree for a list of typenames
     * after executing some action and for specific filters.
     *
     * This tree needs to be added to the heprep afterwards.
     * <p>
     * The inversion effect of invertAtts depends on the values of
     * GetDrawAtts and GetNonDrawAtts as follows:
     * <UL>
     * <LI>GetDrawAtts	GetNonDrawAtts	effect of InvertAtts
     * <LI>FALSE		FALSE			all Attributes specified will be downloaded
     * <LI>TRUE		    FALSE			Draw Attributes specified will be omitted, NonDraw Attributes specified will be included
     * <LI>FALSE		TRUE			Draw Attributes specified will be included, NonDraw Attributes specified will be omitted
     * <LI>TRUE		    TRUE			all Attributes specified will be omitted
     * </UL>
     *
     * @param name name of the instancetree.
     * @param version version of the instancetree.
     * @param typeNames a list of typenames for which we need instancetrees.
     * @param actions execute this list of actions before returning.
     * @param getPoints include the HepRepPoints in the instance tree.
     * @param getDrawAtts include the Draw attributes in the instance tree.
     * @param getNonDrawAtts include the Non-Draw attributes in the instance tree.
     * @param invertAtts list of attributes to be included or not depending on getDrawAtts and getNonDrawAtts.
     * @return HepRepIntanceTree
     */
    public HepRepInstanceTree getInstancesAfterAction(String name, String version, String[] typeNames, HepRepAction[] actions, boolean getPoints, boolean getDrawAtts, boolean getNonDrawAtts, String[] invertAtts);

    /**
     * Returns last exception thrown and clears it. Useful for implementations without
     * exception handling.
     *
     * @return last exception and clears it.
     */
    public String checkForException();

    /**
     * Returns a deep copy of the heprep, with all its attached trees, where
     * instances are filtered using a HepRepSelectFilter.
     *
     * @return copy of heprep.
     * @throws CloneNotSupportedException in case copy is not possible
     */
    public HepRep copy() throws CloneNotSupportedException;
    /**
     * Returns a deep copy of the heprep, with all its attached trees, where
     * instances are filtered using a HepRepSelectFilter.
     *
     * @param filter to be used for filtering instances.
     * @return copy of heprep.
     * @throws CloneNotSupportedException in case copy is not possible
     */
    public HepRep copy(HepRepSelectFilter filter) throws CloneNotSupportedException;
} // class or interface

