/** load the CSV input */
  @Override
  public void load(
      SolrQueryRequest req,
      SolrQueryResponse rsp,
      ContentStream stream,
      UpdateRequestProcessor processor)
      throws IOException {
    errHeader = "CSVLoader: input=" + stream.getSourceInfo();
    Reader reader = null;
    try {
      reader = stream.getReader();
      if (skipLines > 0) {
        if (!(reader instanceof BufferedReader)) {
          reader = new BufferedReader(reader);
        }
        BufferedReader r = (BufferedReader) reader;
        for (int i = 0; i < skipLines; i++) {
          r.readLine();
        }
      }

      CSVParser parser = new CSVParser(reader, strategy);

      // parse the fieldnames from the header of the file
      if (fieldnames == null) {
        fieldnames = parser.getLine();
        if (fieldnames == null) {
          throw new SolrException(
              SolrException.ErrorCode.BAD_REQUEST, "Expected fieldnames in CSV input");
        }
        prepareFields();
      }

      // read the rest of the CSV file
      for (; ; ) {
        int line = parser.getLineNumber(); // for error reporting in MT mode
        String[] vals = null;
        try {
          vals = parser.getLine();
        } catch (IOException e) {
          // Catch the exception and rethrow it with more line information
          input_err("can't read line: " + line, null, line, e);
        }
        if (vals == null) break;

        if (vals.length != fieldnames.length) {
          input_err("expected " + fieldnames.length + " values but got " + vals.length, vals, line);
        }

        addDoc(line, vals);
      }
    } finally {
      if (reader != null) {
        IOUtils.closeQuietly(reader);
      }
    }
  }
 @Override
 void add(SolrInputDocument doc, int line, int column, String val) {
   CSVParser parser = new CSVParser(new StringReader(val), strategy);
   try {
     String[] vals = parser.getLine();
     if (vals != null) {
       for (String v : vals) base.add(doc, line, column, v);
     } else {
       base.add(doc, line, column, val);
     }
   } catch (IOException e) {
     throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
   }
 }