verifierhandlerimpl.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 820 行 · 第 1/2 页

JAVA
820
字号
    currentItem.firstSet(values);    for (QName value : values) {      if (! name.getLocalName().equals(value.getLocalName())) {      }      else if (name.getPrefix() == null || name.getPrefix().equals("")) {	return name.getName() + " xmlns=\"" + name.getNamespaceURI() + "\"";      }      else {	return name.getName() + " xmlns:" + name.getPrefix() + "=\"" + name.getNamespaceURI() + "\"";      }    }    return name.getName();  }  /**   * Returns a string containing the allowed values.   */  private String errorMessageDetail(Item item, Item parentItem,				    String parentName, QName qName)  {    Item currentItem = item;        if (currentItem == null)      currentItem = parentItem;    HashSet<QName> values = new LinkedHashSet<QName>();    currentItem.firstSet(values);    String expected = null;    if (values.size() <= 5)      expected = namesToString(values, parentName, qName,			       currentItem.allowEmpty());        return (getLineContext(getFileName(), getLine())	    + syntaxMessage(item, parentItem, parentName, qName, expected));  }  /**   * Returns a string containing the allowed values.   */  private String requiredMessageDetail(Item item, Item parentItem,				       String parentName, QName qName)  {    Item currentItem = item;    if (currentItem == null)      currentItem = parentItem;    HashSet<QName> values = new LinkedHashSet<QName>();    currentItem.requiredFirstSet(values);          String expected = null;        if (values.size() <= 5) {      expected = namesToString(values, parentName, qName,			       currentItem.allowEmpty());    }        return (getLineContext(getFileName(), getLine())	    + syntaxMessage(item, parentItem, parentName, qName, expected));  }  /**   * Returns a string containing the allowed values.   */  private String attributeMessageDetail(Item item, Item parentItem,					String parentName, QName qName)  {    Item currentItem = item;    if (currentItem == null)      currentItem = parentItem;        String allowed = allowedAttributes(currentItem, qName);        return (getLineContext(getFileName(), getLine())	    + syntaxMessage(item, parentItem, parentName, qName, allowed));  }  /**   * Returns a string containing the allowed values.   */  private String syntaxMessage(Item item, Item parentItem,			       String parentName, QName qName,			       String expected)  {    String syntaxPrefix;    if (parentName == null || parentName.equals("#top"))      syntaxPrefix = "Syntax: ";    else      syntaxPrefix = "<" + parentName + "> syntax: ";        String msg = "";    Item topParent = null;    for (Item parent = item;	 parent != null;	 parent = null) { // parent.getParent()) {      if (qName != null && parent.allowsElement(qName)) {	msg = "\n Check for duplicate and out-of-order tags.";	if (expected != null)	  msg += expected + "\n";		msg += "\n";	String prefix = "Syntax: ";	if (parent == parentItem)	  prefix = syntaxPrefix;		msg += prefix + parent.toSyntaxDescription(prefix.length());	break;      }            // topParent = parent;    }    if (topParent == null || topParent instanceof EmptyItem) {      topParent = parentItem;      if (qName != null && topParent.allowsElement(qName)) {	msg = "\n Check for duplicate and out-of-order tags.";	if (expected != null)	  msg += expected + "\n";		msg += "\n";	String prefix = syntaxPrefix;	msg += prefix + topParent.toSyntaxDescription(prefix.length());      }    }    if (msg.equals("")) {      msg = "";      if (expected != null)	msg += expected + "\n";            msg += "\n";      String prefix = syntaxPrefix;      msg += prefix + topParent.toSyntaxDescription(prefix.length());    }    return msg;  }  /**   * Returns a string containing the allowed values.   */  private String requiredValues(Item item, String parentName, QName qName)  {    if (item == null)      return "";    HashSet<QName> values = new LinkedHashSet<QName>();    item.requiredFirstSet(values);    return namesToString(values, parentName, qName, item.allowEmpty());  }  private String namesToString(HashSet<QName> values,			       String parentName,			       QName qName,			       boolean allowEmpty)  {    CharBuffer cb = new CharBuffer();    if (values.size() > 0) {      ArrayList<QName> sortedValues = new ArrayList<QName>(values);      Collections.sort(sortedValues);            for (int i = 0; i < sortedValues.size(); i++) {        QName name = sortedValues.get(i);        if (i == 0)          cb.append("\n\n");        else if (i == sortedValues.size() - 1)          cb.append(" or\n");        else          cb.append(",\n");	if (name.getName().equals("#text")) {	  cb.append("text");	}        else if (name.getNamespaceURI() == null || qName == null)          cb.append("<" + name.getName() + ">");        else if (qName.getNamespaceURI() != name.getNamespaceURI()) {          if (name.getPrefix() != null)            cb.append("<" + name.getName() + " xmlns:" + name.getPrefix() + "=\"" + name.getNamespaceURI() + "\">");          else            cb.append("<" + name.getName() + " xmlns=\"" + name.getNamespaceURI() + "\">");        }        else          cb.append("<" + name.getName() + ">");      }      if (values.size() == 1)        cb.append(" is expected");      else        cb.append(" are expected");      if (allowEmpty) {        if (parentName == null || parentName.equals("#top"))          cb.append(",\nor the document may end.");        else          cb.append(",\nor </" + parentName + "> may close.");      }      else        cb.append(".");    }    else if (allowEmpty) {      if (parentName == null || parentName.equals("#top"))        cb.append("\n\nThe document is expected to end.");      else        cb.append("\n\n</" + parentName + "> is expected to close.");    }    return cb.toString();  }        /**   * Returns a string containing the allowed values.   */  private String allowedAttributes(Item item, QName qName)  {    if (item == null)      return "";    HashSet<QName> values = new LinkedHashSet<QName>();    item.attributeSet(values);    CharBuffer cb = new CharBuffer();    if (values.size() > 0) {      ArrayList<QName> sortedValues = new ArrayList<QName>(values);      Collections.sort(sortedValues);            for (int i = 0; i < sortedValues.size(); i++) {        QName name = sortedValues.get(i);        if (i == 0)          cb.append("\n\n");        else if (i == sortedValues.size() - 1)          cb.append(" or ");        else          cb.append(", ");	String uri = name.getNamespaceURI();        if (uri == null || uri.equals(""))          cb.append("'" + name.getName() + "'");        else if (qName == null || qName.getName().equals(name.getName()))          cb.append("'" + name.getCanonicalName() + "'");        else          cb.append("'" + name.getName() + "'");      }      if (values.size() == 1)        cb.append(" is expected.");      else        cb.append(" are expected.");    }    return cb.toString();  }        /**   * Returns the current location.   */  private String getLocation()  {    if (_locator == null)      return "";    else      return "" + _locator.getLineNumber();  }    /**   * Checks if the document was valid.   *    * <p>   * This method can be only called after this handler receives   * the <code>endDocument</code> event.   *    * @return   *		<b>true</b> if the document was valid,   *		<b>false</b> if not.   *    * @exception IllegalStateException   *		If this method is called before the endDocument event is dispatched.   */  public boolean isValid() throws IllegalStateException  {    return _isValid;  }  private String getLineContext(String filename, int errorLine)  {    if (filename == null || errorLine <= 0)      return "";        ReadStream is = null;    try {      Path path = Vfs.lookup().lookup(filename);      StringBuilder sb = new StringBuilder("\n\n");      is = path.openRead();      int line = 0;      String text;      while ((text = is.readLine()) != null) {	line++;	if (errorLine - 2 <= line && line <= errorLine + 2) {	  sb.append(line);	  sb.append(": ");	  sb.append(text);	  sb.append("\n");	}      }      return sb.toString();    } catch (IOException e) {      log.log(Level.FINEST, e.toString(), e);      return "";    } finally {      if (is != null)	is.close();    }  }  static class StartKey {    private Item _item;    private QName _name;        public StartKey(Item item, QName name)    {      _item = item;      _name = name;    }        public StartKey()    {    }    public void init(Item item, QName name)    {      _item = item;      _name = name;    }    public int hashCode()    {      return _name.hashCode() + 137 * System.identityHashCode(_item);    }    public boolean equals(Object o)    {      if (o == this)        return true;      if (o.getClass() != StartKey.class)        return false;      StartKey key = (StartKey) o;      return _name.equals(key._name) && _item == key._item;    }  }  static class EndElementKey {    private Item _item;        public EndElementKey(Item item)    {      _item = item;    }        public EndElementKey()    {    }    public void init(Item item)    {      _item = item;    }    public int hashCode()    {      return 137 + _item.hashCode();    }    public boolean equals(Object o)    {      if (o == this)        return true;      if (o.getClass() != EndElementKey.class)        return false;      EndElementKey key = (EndElementKey) o;      return _item.equals(key._item);    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?