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 + -
显示快捷键?