/*
 *  (C) 2001 by Argonne National Laboratory
 *      See COPYRIGHT in top-level directory.
 */

/*
 *  @author  Anthony Chan
 */

package logformat.clog2TOdrawable;

import logformat.clog2.RecHeader;
import logformat.clog2.RecCargo;
import base.drawable.Coord;
import base.drawable.Category;
import base.drawable.Topology;
import base.drawable.Primitive;

public class Topo_Event extends Topology
{
    private static   Class[]   argtypes            = null;

    private          Category  type                = null;

    public Topo_Event()
    {
        super( Topology.EVENT_ID );
        if ( argtypes == null )
            argtypes = new Class[] { RecHeader.class, RecCargo.class };
            // argtypes = new Class[] { RecHeader.class, RecBare.class };
    }

    public void setCategory( final Category in_type )
    {
        type = in_type;
    }

    // only for extended class
    public Category getCategory()
    {
        return type;
    }

    // The 2nd argument, cargo, is expected to be NULL;
    public Primitive matchEvent( final RecHeader header,
                                 final RecCargo  cargo )
    throws NoMatchingEventException
    {
        Obj_Event event = new Obj_Event( this.getCategory() );
        event.setStartVertex( new Coord( header.time, header.gthdLineID ) );
        if ( cargo != null ) // This is a precaution measure
            event.setInfoBuffer( cargo.bytes );
        return event;
    }

    public ObjMethod getEventObjMethod()
    {
        ObjMethod obj_fn = new ObjMethod();
        obj_fn.obj = this;
        try {
            obj_fn.method = this.getClass().getMethod( "matchEvent",
                                                       argtypes );
        } catch ( NoSuchMethodException err ) {
            err.printStackTrace();
            return null;
        }
        return obj_fn;
    }
}
