Package batch.internal.support

Source Code of batch.internal.support.ResourceLineReader

package batch.internal.support;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.springframework.core.io.Resource;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import batch.InvalidBatchException;
import batch.internal.InputSource;

/**
* An {@link InputSource} that reads lines one by one from a resource. A line is either terminated by a newline (as per
* {@link BufferedReader#readLine()}), or can be continued onto the next line if a field surrounded by quotes (\")
* contains a newline.
*/
@SuppressWarnings("rawtypes")
public class ResourceLineReader implements InputSource {
  private static final String QUOTE = "\"";

  private final BufferedReader reader;

  private final Resource resource;

  public ResourceLineReader(Resource resource) throws IOException {
    Assert.notNull(resource, "'resource' cannot be null.");
    this.resource = resource;
    this.reader = new BufferedReader(new InputStreamReader(resource.getInputStream()));
  }

  public Object read() {
    try {
      String line = this.reader.readLine();
      String result = line;
      while (StringUtils.countOccurrencesOf(result, QUOTE) % 2 != 0 && line != null) {
        StringBuffer buffer = new StringBuffer(result);
        buffer.append("\n" + (line = this.reader.readLine()));
        result = buffer.toString();
      }
      return result;
    } catch (IOException e) {
      throw new InvalidBatchException("Unable to read from resource '" + resource + "'.", e);
    }
  }
}
TOP

Related Classes of batch.internal.support.ResourceLineReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.