FileDocCategorySizeDatePackage
MLetParser.javaAPI DocJava SE 6 API7510Tue Jun 10 00:26:16 BST 2008javax.management.loading

MLetParser

public class MLetParser extends Object
This class is used for parsing URLs.
since
1.5

Fields Summary
private int
c
The current character
private static String
tag
Tag to parse.
private String
dbgTag
The name of this class to be used for trace messages
Constructors Summary
public MLetParser()
Create an MLet parser object



  /*
  * ------------------------------------------
  *   CONSTRUCTORS
  * ------------------------------------------
  */

              
      
    
Methods Summary
private voiddebug(java.lang.String clz, java.lang.String func, java.lang.String info)

        Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MLET, clz, func, info);
    
private voiddebug(java.lang.String func, java.lang.String info)

        debug(dbgTag, func, info);
    
private booleanisDebugOn()

        return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MLET);
    
private booleanisTraceOn()

        return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MLET);
    
public java.util.Listparse(java.net.URL url)
Scan an html file for tags

	String mth = "parse";
	// Warning Messages
	String requiresTypeWarning = "<arg type=... value=...> tag requires type parameter.";
	String requiresValueWarning = "<arg type=... value=...> tag requires value parameter.";
	String paramOutsideWarning = "<arg> tag outside <mlet> ... </mlet>.";
	String requiresCodeWarning = "<mlet> tag requires either code or object parameter.";
	String requiresJarsWarning = "<mlet> tag requires archive parameter.";

	URLConnection conn;

	conn = url.openConnection();
	Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),
							     "UTF-8"));

	// The original URL may have been redirected - this
	// sets it to whatever URL/codebase we ended up getting
	//
	url = conn.getURL();

	List<MLetContent> mlets = new ArrayList<MLetContent>();
	Map<String,String> atts = null;

	List<String> types = new ArrayList<String>();
	List<String> values = new ArrayList<String>();

	// debug("parse","*** Parsing " + url );
	while(true) {
	    c = in.read();
	    if (c == -1)
		break;
	    if (c == '<") {
		c = in.read();
		if (c == '/") {
		    c = in.read();
		    String nm = scanIdentifier(in);
                    if (c != '>")
                        throw new IOException("Missing '>' in tag");
		    if (nm.equalsIgnoreCase(tag)) {
			if (atts != null) {
			    mlets.add(new MLetContent(url, atts, types, values));
			}
			atts = null;
			types = new ArrayList<String>();
			values = new ArrayList<String>();
		    }
		} else {
		    String nm = scanIdentifier(in);
		    if (nm.equalsIgnoreCase("arg")) {
			Map<String,String> t = scanTag(in);
			String att = t.get("type");
			if (att == null) {
			    if (isTraceOn()) {
				trace(mth, requiresTypeWarning);
			    }
			    throw new IOException(requiresTypeWarning);
			} else {
			    if (atts != null) {
				types.add(att);
			    } else {
				if (isTraceOn()) {
				    trace(mth, paramOutsideWarning);
				}
				throw new IOException(paramOutsideWarning);
			    }
			}
			String val = t.get("value");
			if (val == null) {
			    if (isTraceOn()) {
				trace(mth, requiresValueWarning);
			    }
			    throw new IOException(requiresValueWarning);
			} else {
			    if (atts != null) {
				values.add(val);
			    } else {
				if (isTraceOn()) {
				    trace(mth, paramOutsideWarning);
				}
				throw new IOException(paramOutsideWarning);
			    }
			}
		    } else {
			if (nm.equalsIgnoreCase(tag)) {
			    atts = scanTag(in);
			    if (atts.get("code") == null && atts.get("object") == null) {
				if (isTraceOn()) {
				    trace(mth, requiresCodeWarning);
				}
				atts = null;
				throw new IOException(requiresCodeWarning);
			    }
			    if (atts.get("archive") == null) {
				if (isTraceOn()) {
				    trace(mth, requiresJarsWarning);
				}
				atts = null;
				throw new IOException(requiresJarsWarning);
			    }
			}
		    }
		}
	    }
	}
	in.close();
	return mlets;
    
public java.util.ListparseURL(java.lang.String urlname)
Parse the document pointed by the URL urlname

	// Parse the document
	//
	URL url = null;
	if (urlname.indexOf(':") <= 1) {
	    String userDir = System.getProperty("user.dir");
	    String prot;
	    if (userDir.charAt(0) == '/" ||
		userDir.charAt(0) == File.separatorChar) {
		prot = "file:";
	    } else {
		prot = "file:/";
	    }
	    url =
		new URL(prot + userDir.replace(File.separatorChar, '/") + "/");
	    url = new URL(url, urlname);
	} else {
	    url = new URL(urlname);
	}
	// Return list of parsed MLets
	//
	return parse(url);
    
public java.lang.StringscanIdentifier(java.io.Reader in)
Scan identifier

	StringBuilder buf = new StringBuilder();
	while (true) {
	    if (((c >= 'a") && (c <= 'z")) ||
		((c >= 'A") && (c <= 'Z")) ||
		((c >= '0") && (c <= '9")) || (c == '_")) {
		buf.append((char)c);
		c = in.read();
	    } else {
		return buf.toString();
	    }
	}
    
public java.util.MapscanTag(java.io.Reader in)
Scan tag

	Map<String,String> atts = new HashMap<String,String>();
	skipSpace(in);
	while (c >= 0 && c != '>") {
            if (c == '<")
                throw new IOException("Missing '>' in tag");
	    String att = scanIdentifier(in);
	    String val = "";
	    skipSpace(in);
	    if (c == '=") {
		int quote = -1;
		c = in.read();
		skipSpace(in);
		if ((c == '\'") || (c == '\"")) {
		    quote = c;
		    c = in.read();
		}
		StringBuilder buf = new StringBuilder();
		while ((c > 0) &&
		       (((quote < 0) && (c != ' ") && (c != '\t") &&
			 (c != '\n") && (c != '\r") && (c != '>"))
			|| ((quote >= 0) && (c != quote)))) {
		    buf.append((char)c);
		    c = in.read();
		}
		if (c == quote) {
		    c = in.read();
		}
		skipSpace(in);
		val = buf.toString();
	    }
	    atts.put(att.toLowerCase(), val);
	    skipSpace(in);
	}
	return atts;
    
public voidskipSpace(java.io.Reader in)
Scan spaces.

	while ((c >= 0) && ((c == ' ") || (c == '\t") || (c == '\n") || (c == '\r"))) {
	    c = in.read();
	}
    
private voidtrace(java.lang.String clz, java.lang.String func, java.lang.String info)

        Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MLET, clz, func, info);
    
private voidtrace(java.lang.String func, java.lang.String info)

        trace(dbgTag, func, info);