/** @since solr 1.2 */ void processUpdate( UpdateRequestProcessor processor, XMLStreamReader parser, SolrParams solrParams) throws XMLStreamException, IOException, FactoryConfigurationError, InstantiationException, IllegalAccessException, TransformerConfigurationException { AddUpdateCommand addCmd = null; while (true) { int event = parser.next(); switch (event) { case XMLStreamConstants.END_DOCUMENT: parser.close(); return; case XMLStreamConstants.START_ELEMENT: String currTag = parser.getLocalName(); if (currTag.equals(XmlUpdateRequestHandler.ADD)) { XmlUpdateRequestHandler.log.trace("SolrCore.update(add)"); addCmd = new AddUpdateCommand(); boolean overwrite = true; // the default Boolean overwritePending = null; Boolean overwriteCommitted = null; for (int i = 0; i < parser.getAttributeCount(); i++) { String attrName = parser.getAttributeLocalName(i); String attrVal = parser.getAttributeValue(i); if (XmlUpdateRequestHandler.OVERWRITE.equals(attrName)) { overwrite = StrUtils.parseBoolean(attrVal); } else if (XmlUpdateRequestHandler.ALLOW_DUPS.equals(attrName)) { overwrite = !StrUtils.parseBoolean(attrVal); } else if (XmlUpdateRequestHandler.COMMIT_WITHIN.equals(attrName)) { addCmd.commitWithin = Integer.parseInt(attrVal); } else if (XmlUpdateRequestHandler.OVERWRITE_PENDING.equals(attrName)) { overwritePending = StrUtils.parseBoolean(attrVal); } else if (XmlUpdateRequestHandler.OVERWRITE_COMMITTED.equals(attrName)) { overwriteCommitted = StrUtils.parseBoolean(attrVal); } else { XmlUpdateRequestHandler.log.warn("Unknown attribute id in add:" + attrName); } } // check if these flags are set if (overwritePending != null && overwriteCommitted != null) { if (overwritePending != overwriteCommitted) { throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "can't have different values for 'overwritePending' and 'overwriteCommitted'"); } overwrite = overwritePending; } addCmd.overwriteCommitted = overwrite; addCmd.overwritePending = overwrite; addCmd.allowDups = !overwrite; } else if ("doc".equals(currTag)) { XmlUpdateRequestHandler.log.trace("adding doc..."); addCmd.clear(); addCmd.solrDoc = readDoc(parser); processor.processAdd(addCmd); } else if (XmlUpdateRequestHandler.COMMIT.equals(currTag) || XmlUpdateRequestHandler.OPTIMIZE.equals(currTag)) { XmlUpdateRequestHandler.log.trace("parsing " + currTag); CommitUpdateCommand cmd = new CommitUpdateCommand(XmlUpdateRequestHandler.OPTIMIZE.equals(currTag)); boolean sawWaitSearcher = false, sawWaitFlush = false; for (int i = 0; i < parser.getAttributeCount(); i++) { String attrName = parser.getAttributeLocalName(i); String attrVal = parser.getAttributeValue(i); if (XmlUpdateRequestHandler.WAIT_FLUSH.equals(attrName)) { cmd.waitFlush = StrUtils.parseBoolean(attrVal); sawWaitFlush = true; } else if (XmlUpdateRequestHandler.WAIT_SEARCHER.equals(attrName)) { cmd.waitSearcher = StrUtils.parseBoolean(attrVal); sawWaitSearcher = true; } else if (UpdateParams.MAX_OPTIMIZE_SEGMENTS.equals(attrName)) { cmd.maxOptimizeSegments = Integer.parseInt(attrVal); } else if (UpdateParams.EXPUNGE_DELETES.equals(attrName)) { cmd.expungeDeletes = StrUtils.parseBoolean(attrVal); } else { XmlUpdateRequestHandler.log.warn("unexpected attribute commit/@" + attrName); } } // If waitFlush is specified and waitSearcher wasn't, then // clear waitSearcher. if (sawWaitFlush && !sawWaitSearcher) { cmd.waitSearcher = false; } processor.processCommit(cmd); } // end commit else if (XmlUpdateRequestHandler.ROLLBACK.equals(currTag)) { XmlUpdateRequestHandler.log.trace("parsing " + currTag); RollbackUpdateCommand cmd = new RollbackUpdateCommand(); processor.processRollback(cmd); } // end rollback else if (XmlUpdateRequestHandler.DELETE.equals(currTag)) { XmlUpdateRequestHandler.log.trace("parsing delete"); processDelete(processor, parser, solrParams); } // end delete break; } } }