FileDocCategorySizeDatePackage
TR9401CatalogReader.javaAPI DocJava SE 6 API4004Tue Jun 10 00:23:00 BST 2008com.sun.org.apache.xml.internal.resolver.readers

TR9401CatalogReader

public class TR9401CatalogReader extends TextCatalogReader
Parses OASIS Open Catalog files.

This class reads OASIS Open Catalog files, returning a stream of tokens.

This code interrogates the following non-standard system properties:

xml.catalog.debug

Sets the debug level. A value of 0 is assumed if the property is not set or is not a number.

see
Catalog
author
Norman Walsh Norman.Walsh@Sun.COM
version
1.0

Fields Summary
Constructors Summary
Methods Summary
public voidreadCatalog(com.sun.org.apache.xml.internal.resolver.Catalog catalog, java.io.InputStream is)
Start parsing an OASIS TR9401 Open Catalog file. The file is actually read and parsed as needed by nextEntry.

In a TR9401 Catalog the 'DELEGATE' entry delegates public identifiers. There is no delegate entry for system identifiers or URIs.

param
catalog The Catalog to populate
param
is The input stream from which to read the TR9401 Catalog
throws
MalformedURLException Improper fileUrl
throws
IOException Error reading catalog file


    catfile = is;

    if (catfile == null) {
      return;
    }

    Vector unknownEntry = null;

    try {
      while (true) {
	String token = nextToken();

	if (token == null) {
	  if (unknownEntry != null) {
	    catalog.unknownEntry(unknownEntry);
	    unknownEntry = null;
	  }
	  catfile.close();
	  catfile = null;
	  return;
	}

	String entryToken = null;
	if (caseSensitive) {
	  entryToken = token;
	} else {
	  entryToken = token.toUpperCase();
	}

	if (entryToken.equals("DELEGATE")) {
	  entryToken = "DELEGATE_PUBLIC";
	}

	try {
	  int type = CatalogEntry.getEntryType(entryToken);
	  int numArgs = CatalogEntry.getEntryArgCount(type);
	  Vector args = new Vector();

	  if (unknownEntry != null) {
	    catalog.unknownEntry(unknownEntry);
	    unknownEntry = null;
	  }

	  for (int count = 0; count < numArgs; count++) {
	    args.addElement(nextToken());
	  }

	  catalog.addEntry(new CatalogEntry(entryToken, args));
	} catch (CatalogException cex) {
	  if (cex.getExceptionType() == CatalogException.INVALID_ENTRY_TYPE) {
	    if (unknownEntry == null) {
	      unknownEntry = new Vector();
	    }
	    unknownEntry.addElement(token);
	  } else if (cex.getExceptionType() == CatalogException.INVALID_ENTRY) {
	    catalog.getCatalogManager().debug.message(1, "Invalid catalog entry", token);
	    unknownEntry = null;
	  } else if (cex.getExceptionType() == CatalogException.UNENDED_COMMENT) {
	    catalog.getCatalogManager().debug.message(1, cex.getMessage());
	  }
	}
      }
    } catch (CatalogException cex2) {
      if (cex2.getExceptionType() == CatalogException.UNENDED_COMMENT) {
	catalog.getCatalogManager().debug.message(1, cex2.getMessage());
      }
    }