Author: vgritsenko Date: Thu Aug 9 17:25:00 2007 New Revision: 564441 URL: http://svn.apache.org/viewvc?view=rev&rev=564441 Log: cleaning up symbol table code. renaming incorrectly named getNormalizedLocalName method.
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/DocumentHandler.java xml/xindice/trunk/java/src/org/apache/xindice/xml/SymbolTable.java Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?view=diff&rev=564441&r1=564440&r2=564441 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Thu Aug 9 17:25:00 2007 @@ -942,7 +942,7 @@ * * @return The System Collection */ - public SystemCollection getSystemCollection() throws DBException { + public SystemCollection getSystemCollection() { return getDatabase().getSystemCollection(); } @@ -1540,7 +1540,7 @@ } } catch (Exception e) { if (log.isWarnEnabled()) { - log.warn(localDebugHeader + "Error building symbol table from system collection", e); + log.warn(localDebugHeader + "Error loading symbol table from system collection", e); } } } Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java?view=diff&rev=564441&r1=564440&r2=564441 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/SystemCollection.java Thu Aug 9 17:25:00 2007 @@ -123,12 +123,9 @@ * @throws DBException if unable to save symbols */ public void saveSymbols(Collection collection, SymbolTable symbols) throws DBException { - String name = getSymbolTableName(collection); - - Collection symCol = getCollection(SYMBOLS); - if (symbols != null) { - symCol.setObject(name, symbols); + String name = getSymbolTableName(collection); + getCollection(SYMBOLS).setObject(name, symbols); symbols.setDirty(false); } } Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/DocumentHandler.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/DocumentHandler.java?view=diff&rev=564441&r1=564440&r2=564441 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/DocumentHandler.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/DocumentHandler.java Thu Aug 9 17:25:00 2007 @@ -176,7 +176,7 @@ public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { // Modify the stack info to normalize the symbolID if (namespaceURI != null && namespaceURI.length() > 0) { - String elemNSID = SymbolTable.getNormalizedLocalName(localName, namespaceURI); + String elemNSID = SymbolTable.getNormalizedQName(localName, namespaceURI); info.symbolID = symbols.getSymbol(elemNSID, namespaceURI, true); } Modified: xml/xindice/trunk/java/src/org/apache/xindice/xml/SymbolTable.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/xml/SymbolTable.java?view=diff&rev=564441&r1=564440&r2=564441 ============================================================================== --- xml/xindice/trunk/java/src/org/apache/xindice/xml/SymbolTable.java (original) +++ xml/xindice/trunk/java/src/org/apache/xindice/xml/SymbolTable.java Thu Aug 9 17:25:00 2007 @@ -50,67 +50,85 @@ private short maxSymbol = -1; - public SymbolTable() { + public static final class SymbolInfo implements Serializable { + private final String namespaceURI; + private final String qname; + private final short symbol; + + private SymbolInfo(String qname, String namespaceURI, short symbol) { + this.namespaceURI = namespaceURI; + this.qname = qname; + this.symbol = symbol; + } + + private SymbolInfo(String qname, short symbol) { + this.namespaceURI = null; + this.qname = qname; + this.symbol = symbol; + } + + public String getNamespaceURI() { + return namespaceURI; + } + + public String getQName() { + return qname; + } + + public short getSymbolID() { + return symbol; + } } - public SymbolTable(Element elem) { - streamFromXML(elem); + // + // Static Methods + // + + public static String getNormalizedQName(String localName, String namespaceURI) { + return "ns" + namespaceURI.hashCode() + ':' + localName; } - public static String getLookupName(String qname, String namespaceURI) { - StringBuffer sb = new StringBuffer(128); - sb.append('['); - sb.append(namespaceURI); - sb.append(']'); - sb.append(qname); - return sb.toString(); + private static String getLookupName(String qname, String namespaceURI) { + return '[' + namespaceURI + ']' + qname; } public static short getNormalizedSymbol(SymbolTable symbols, String lookup, NamespaceMap nsMap, boolean create) { + // Parse [<namespaceURI>]<nsPrefix>:<localName> with optional nsPrefix if (lookup.startsWith("[")) { int idx = lookup.indexOf(']'); String nsURI = lookup.substring(1, idx); int cidx = lookup.indexOf(idx + 1, ':'); String name = cidx != -1 ? lookup.substring(cidx + 1) : lookup.substring(idx + 1); - return symbols.getSymbol(getNormalizedLocalName(name, nsURI), nsURI, create); - } else { - int idx = lookup.indexOf(':'); - if (idx != -1) { - String pfx = lookup.substring(0, idx); - String nsURI = (String) nsMap.get(pfx); - if (nsURI != null) { - String name = lookup.substring(idx + 1); - return symbols.getSymbol(getNormalizedLocalName(name, nsURI), nsURI, create); - } else { - return symbols.getSymbol(lookup); - } - } else { - return symbols.getSymbol(lookup, create); + + return symbols.getSymbol(getNormalizedQName(name, nsURI), nsURI, create); + } + + // Parse <nsPrefix>:<localName> with passed in nsMap + int idx = lookup.indexOf(':'); + if (idx != -1) { + String pfx = lookup.substring(0, idx); + String nsURI = (String) nsMap.get(pfx); + if (nsURI != null) { + String name = lookup.substring(idx + 1); + return symbols.getSymbol(getNormalizedQName(name, nsURI), nsURI, create); } + + // Attempt to lookup <nsPrefix>:<localName> when nsMap has no namespace URI for the prefix + return symbols.getSymbol(lookup, create); } + + return symbols.getSymbol(lookup, create); } - public static String getNormalizedLocalName(String localName, String namespaceURI) { - StringBuffer sb = new StringBuffer(32); - sb.append("ns"); - sb.append(namespaceURI.hashCode()); - sb.append(':'); - sb.append(localName); - return sb.toString(); + // + // Instance Methods + // + + public SymbolTable() { } - public static String getNormalizedQName(String qName, String namespaceURI) { - StringBuffer sb = new StringBuffer(32); - sb.append("ns"); - sb.append(namespaceURI.hashCode()); - sb.append(':'); - int idx = qName.indexOf(':'); - if (idx != -1) { - sb.append(qName.substring(idx + 1)); - } else { - sb.append(qName); - } - return sb.toString(); + public SymbolTable(Element elem) { + streamFromXML(elem); } public final boolean isDirty() { @@ -122,15 +140,25 @@ this.lastModified = System.currentTimeMillis(); } + public final SymbolInfo getSymbolInfo(short symbol) { + return (SymbolInfo) names.get(new Short(symbol)); + } + public final SymbolInfo getSymbolInfo(String qname, String namespaceURI) { String lookupName = getLookupName(qname, namespaceURI); return (SymbolInfo) symbols.get(lookupName); } + + public final short getSymbol(String qname) { + return getSymbol(qname, false); + } - public final short getSymbol(String qname, String namespaceURI, boolean create) { - String lookupName = getLookupName(qname, namespaceURI); + public final short getSymbol(String qname, String namespaceURI) { + return getSymbol(qname, namespaceURI, false); + } - SymbolInfo info = (SymbolInfo) symbols.get(lookupName); + public final short getSymbol(String qname, boolean create) { + SymbolInfo info = (SymbolInfo) symbols.get(qname); if (info != null) { return info.symbol; } @@ -138,8 +166,8 @@ if (create) { synchronized (symbols) { short id = ++maxSymbol; - info = new SymbolInfo(qname, namespaceURI, id); - symbols.put(lookupName, info); + info = new SymbolInfo(qname, id); + symbols.put(qname, info); names.put(new Short(id), info); setDirty(true); return id; @@ -149,8 +177,10 @@ return -1; } - public final short getSymbol(String qname, boolean create) { - SymbolInfo info = (SymbolInfo) symbols.get(qname); + public final short getSymbol(String qname, String namespaceURI, boolean create) { + String lookupName = getLookupName(qname, namespaceURI); + + SymbolInfo info = (SymbolInfo) symbols.get(lookupName); if (info != null) { return info.symbol; } @@ -158,8 +188,8 @@ if (create) { synchronized (symbols) { short id = ++maxSymbol; - info = new SymbolInfo(qname, id); - symbols.put(qname, info); + info = new SymbolInfo(qname, namespaceURI, id); + symbols.put(lookupName, info); names.put(new Short(id), info); setDirty(true); return id; @@ -169,18 +199,6 @@ return -1; } - public final short getSymbol(String qname, String namespaceURI) { - return getSymbol(qname, namespaceURI, false); - } - - public final short getSymbol(String qname) { - return getSymbol(qname, false); - } - - public final SymbolInfo getSymbolInfo(short symbol) { - return (SymbolInfo) names.get(new Short(symbol)); - } - public final String getNamespaceURI(short symbol) { SymbolInfo info = getSymbolInfo(symbol); return info != null ? info.namespaceURI : null; @@ -244,35 +262,6 @@ } names.put(id, info); - } - } - - public static final class SymbolInfo implements Serializable { - private String namespaceURI; - private String qname; - private short symbol; - - public SymbolInfo(String qname, String namespaceURI, short symbol) { - this.qname = qname; - this.namespaceURI = namespaceURI; - this.symbol = symbol; - } - - public SymbolInfo(String qname, short symbol) { - this.qname = qname; - this.symbol = symbol; - } - - public String getNamespaceURI() { - return namespaceURI; - } - - public String getQName() { - return qname; - } - - public short getSymbolID() { - return symbol; } } }