All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.novartis.opensource.yada.io.YADABufferedReader Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2016 Novartis Institutes for BioMedical Research Inc.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.novartis.opensource.yada.io;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;

import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * A subclass of {@link java.io.BufferedReader} which contains methods for returning a line of input 
 * as a {@link JSONObject}
 * @author David Varon
 *
 */
public class YADABufferedReader extends BufferedReader {
	
	/**
	 * Local logger handle
	 */
	private static Logger l = Logger.getLogger(YADABufferedReader.class);
	
	/**
	 * Instance variable.  The {@link FileHelper} enables functionality essential to {@link #readLine2JSON()} 
	 * such as access to the index of column headers which are required to be used as json keys.
	 */
	private FileHelper helper;
	
	/**
	 * Override of super-constructor with additional {@code helper} argument.
	 * @param reader a java i/o object
	 * @param helper a YADA FileHelper to handle headers
	 * @throws YADAIOException when the {@code helper} can't be set
	 */
	public YADABufferedReader(Reader reader, FileHelper helper) throws YADAIOException 
	{
		super(reader);
		setFileHelper(helper);
	}
	
	/**
	 * Override of super-constructor with additional {@code helper} argument.
	 * @param reader java i/o component
	 * @param bufferSize the size of the internal buffer to store processed content
	 * @param helper the YADA FileHelper for handling headers
	 * @throws YADAIOException when the {@code helper} can't be set
	 */
	public YADABufferedReader(Reader reader, int bufferSize, FileHelper helper) throws YADAIOException 
	{
		super(reader, bufferSize);
		setFileHelper(helper);
	}
	
	/**
	 * Called by the constructor to set the instance variable, this method also, in turn sets the 
	 * the current object (a subclass of {@link java.io.Reader}) as an instance variable in the {@code helper}
	 * (via {@link FileHelper#setReader(Reader)}). It also calls {@link FileHelper#setHeaders()} 
	 * @param helper the FileHelper subclass to handle headers
	 * @throws YADAIOException when helper can't set the headers
	 * @see FileHelper
	 */
	private void setFileHelper(FileHelper helper) throws YADAIOException {
		this.helper = helper;
		helper.setReader(this);
		helper.setHeaders();
	}
		
	/**
	 * Alternative to {@link java.io.BufferedReader#readLine()} which will wrap content of a line in JSON using corresponding 
	 * indexed column headers as keys.
	 * @return a json object containing a line of content with corresponding column headers as keys and column values as values.
	 * @throws YADAIOException when the content can't be read, or wrapped in JSON successfully
	 */
	public JSONObject readLine2JSON() throws YADAIOException 
	{
		JSONObject result = null;
		try 
		{
			String   orig = this.readLine();
			l.debug(orig);
			if (null != orig)
			{
				String[] line = orig.split(this.helper.getDelimiter());
				String[] head = this.helper.getColHeaderArray();
				if (line.length == head.length)
				{
					result = new JSONObject();
					for (int i=0;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy