// Copyright 2001-2003, FreeHEP.
package org.freehep.graphicsio.cgm;
import java.io.IOException;
import org.freehep.util.io.Tag;
import org.freehep.util.io.TaggedInputStream;
import org.freehep.util.io.TaggedOutputStream;
/**
* CGM specific tag, from which all other CGM Tags inherit.
*
* @author Mark Donszelmann
* @author Charles Loomis
* @version $Id: CGMTag.java 8584 2006-08-10 23:06:37Z duns $
*/
public abstract class CGMTag extends Tag {
/**
* Constructs a CGMTag.
*
* @param elementClass class of the element
* @param id id of the element
* @param version cgm version in which this element was first supported
*/
protected CGMTag(int elementClass, int id, int version) {
super(((elementClass & 0x0f) << 7) + id, version);
}
public Tag read(int tagID, TaggedInputStream input, int len)
throws IOException {
return read(tagID, (CGMInputStream) input, len);
}
public CGMTag read(int tagID, CGMInputStream cgm, int len)
throws IOException {
return new CGMDummyTag(tagID, cgm, len);
}
public void write(int tagID, TaggedOutputStream output) throws IOException {
write(tagID, (CGMOutputStream) output);
}
/**
* Writes the extra tag information to the outputstream in binary format.
* This implementation writes nothing, but concrete tags may override this
* method. This method is called just after the TagHeader is written.
*
* @param tagID id of the tag
* @param cgm Binary CGM output stream
*/
public void write(int tagID, CGMOutputStream cgm) throws IOException {
// empty
}
/**
* Writes the full tag to the Writer in Clear Text format.
*
* @param tagID id of the tag
* @param cgm Clear Text CGM Writer
*/
public abstract void write(int tagID, CGMWriter cgm) throws IOException;
/**
* @return a description of the tagName and tagID
*/
public String toString() {
return "CGMTag " + getName() + " (" + getTag() + ")";
}
}