// Copyright 2001, FreeHEP. package org.freehep.util.io; import java.io.IOException; /** * Generic Tag to be used by TaggedIn/OutputStreams. The tag contains an ID, * name and a version. Concrete subclasses should implement the IO Read and * Write methods. * * @author Mark Donszelmann * @author Charles Loomis * @version $Id: Tag.java,v 1.3 2008-05-04 12:21:24 murkle Exp $ */ public abstract class Tag { private int tagID; private String name; private int version; /** * This is the tagID for the default tag handler. */ final public static int DEFAULT_TAG = -1; protected Tag(int tagID, int version) { this.tagID = tagID; this.version = version; this.name = null; } /** * Get the tag number. * * @return tagID */ public int getTag() { return tagID; } /** * Get the version number. * * @return version number */ public int getVersion() { return version; } /** * Get the tag name. * * @return tag name */ public String getName() { if (name == null) { name = getClass().getName(); int dot = name.lastIndexOf("."); name = (dot >= 0) ? name.substring(dot + 1) : name; } return name; } /** * This returns the type of block * * @return tag type */ public int getTagType() { return 0; } /** * This reads the information from the given input and returns a new Tag * * @param tagID * id of the tag to read * @param input * stream to read from * @param len * length to read * @return read Tag * @throws IOException * if read fails */ public abstract Tag read(int tagID, TaggedInputStream input, int len) throws IOException; /** * This writes the information to the given output * * @param tagID * id of tag to write * @param output * stream to write to * @throws IOException * if write fails */ public abstract void write(int tagID, TaggedOutputStream output) throws IOException; @Override public abstract String toString(); }