public void clearVariable(XdmVariable variable) { variables.remove(variable.getName()); }
@Override public boolean equals(Object obj) { if (obj instanceof XdmVariable) { XdmVariable var = (XdmVariable)obj; return name.equals(var.getName()); } return false; }
private Map<String,String> generateQNameMap(XdmVariable[] vars) { Map<String,String> map = new LinkedHashMap<String,String>(); for (int i = 0; i < vars.length; i++) { XdmVariable var = vars[i]; XName varName = var.getName(); String ns = varName.getNamespace(); if (ns == null) { continue; } if (map.get(ns) == null) { map.put(ns, "tmpq" + i); } } return (map); }
private void putPrologue(StringBuffer sb, XdmVariable[] vars, Map<String,String> qnameMap) { for (Iterator<Map.Entry<String,String>> it = qnameMap.entrySet().iterator(); it.hasNext();) { Map.Entry<String,String> entry = it.next(); String ns = entry.getKey(); String prefix = entry.getValue(); sb.append("declare namespace "); sb.append(prefix).append("=\"").append(ns).append("\"\n"); } if (qnameMap.size() != 0) { sb.append("\n"); } for (int i = 0; i < vars.length; i++) { XdmVariable var = vars[i]; String argName = generateQName(qnameMap, var.getName()); sb.append("define variable $"); sb.append(argName); sb.append(" as "); sb.append(var.getValue().getValueType().toString()); sb.append(" external\n"); } if (vars.length != 0) { sb.append("\n"); } }
String argName = generateQName(qnameMap, var.getName());
public void setVariable(XdmVariable variable) { XdmValue value = variable.getValue(); if (value instanceof XdmSequence<?>) { throw new UnimplementedFeatureException("Setting variables that are sequences is not supported"); } // "set" implies replacing a var with the same XName, add() doesn't replace clearVariable(variable); if (1 + getVariableCount() > VAR_LIMIT) { throw new IllegalArgumentException("Cannot exceed " + VAR_LIMIT + " external variables"); } XdmVariable[] vars = new XdmVariable[1]; vars[0] = variable; variables.put(variable.getName(), vars); }
private void encodeQueryVariables(StringBuffer sb, Logger logger) { XdmVariable[] vars = getVariables(); for (int i = 0; i < vars.length; i++) { XdmVariable var = vars[i]; XName xname = var.getName(); XdmValue value = var.getValue(); sb.append("&evn").append(i).append("="); if (xname.getNamespace() != null) { sb.append(xname.getNamespace()); } sb.append("&evl").append(i).append("=").append(xname.getLocalname()); sb.append("&evt").append(i).append("="); IOHelper.urlEncodeToStringBuffer(sb, value.getValueType().toString()); sb.append("&evv").append(i).append("="); IOHelper.urlEncodeToStringBuffer(sb, value.asString()); // TODO: Test this output if (logger.isLoggable(Level.FINEST)) { logger.finest(" ev" + i + ": " + xname.toString() + "(" + value.getValueType() + ") " + value.toString()); } } }
String name = variable.getName().getLocalname(); String value = variable.getValue().asString();