/* JJT: 0.2.2 */

package w3c.pics.parser;


class PICSNonInternet_Node extends SimpleNode implements URLEvalNode {
  PICSNonInternet_Node(int id) {
    super(id);
  }

  String text = null;
  
  public String getText() {
    return text;
  }

  public boolean isValid(String URL) {
    if (this.children[0]!=null) {
      boolean retval = 
	((URLEvalNode)this.children[0]).isValid(URL);
      if (!retval)
	return false;
      int colon = URL.indexOf(":");
      /* noscheme  is URL substring after the colon */
      String noscheme = URL.substring(colon+1);
      int nodecolon = text.indexOf(":");
      /* nocolon is pattern substring after the colon */
      String nocolon = text.substring(colon+1);

      if (nocolon.startsWith("%*")) {
	if (nocolon.equals("%*")){
	  if (!noscheme.equals("*"))
	    return false;
	}
	else if (nocolon.endsWith("%*")) {
	  String nostar = nocolon.substring(2, nocolon.length()-2);
	  if (!noscheme.equals("*"+nostar+"*")) {
	    return false;
	  }
	}
	else if (nocolon.endsWith("*")) {
	  String nostar = nocolon.substring(2, nocolon.length()-1);
	  if (!noscheme.startsWith("*"+nostar)) {
	    return false;
	  }
	}
	else {
	  String nostar = nocolon.substring(2);
	  if (!noscheme.equals("*"+nostar)) {
	    return false;
	  }
	}
      }
      else if (nocolon.startsWith("*")) {
	if (nocolon.equals("*")){
	  /* matches anything */
	}
	else if (nocolon.endsWith("%*")) {
	  String nostars = nocolon.substring(1, nocolon.length()-2);
	  if (!noscheme.endsWith(nostars+"*")) {
	    return false;
	  }
	}
	else if (nocolon.endsWith("*")) {
	  String nostars = nocolon.substring(1, nocolon.length()-1);
	  if (noscheme.indexOf(nostars)==-1) {
	    return false;
	  } 
	}
	else {
	  String nostars = nocolon.substring(1);
	  if (!noscheme.endsWith(nostars)) {
	    return false;
	  }
	}
      }
      else {
	if (nocolon.endsWith("%*")) {
	  String nostars = nocolon.substring(0, nocolon.length()-2);
	  if (!noscheme.equals(nostars+"*")) {
	    return false;
	  }
	}
	else if (nocolon.endsWith("*")) {
	  String nostars = nocolon.substring(0, nocolon.length()-1);
	  if (!noscheme.startsWith(nostars)) {
	    return false;
	  }
	}
	else {
	  if (!noscheme.equals(nocolon)) {
	    return false;
	  }
	}
      }
    }
    return true;
  }

}
