<commit_before>/**
* Copyright 2016 ZuInnoTe (<NAME>) <<EMAIL>>
*
* 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 org.zuinnote.hadoop.bitcoin.format.mapred;



import org.zuinnote.hadoop.bitcoin.format.exception.HadoopCryptoLedgerConfigurationException;
import org.zuinnote.hadoop.bitcoin.format.exception.BitcoinBlockReadException;

import java.io.IOException;
import java.io.InputStream;

import java.nio.ByteBuffer;

import org.apache.hadoop.io.BytesWritable; 

import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Reporter;

import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;




public class BitcoinRawBlockRecordReader  extends AbstractBitcoinRecordReader<BytesWritable, BytesWritable> {
private static final Log LOG = LogFactory.getLog(BitcoinRawBlockRecordReader.class.getName());


public BitcoinRawBlockRecordReader(FileSplit split,JobConf job, Reporter reporter) throws IOException,HadoopCryptoLedgerConfigurationException,BitcoinBlockReadException {
	super(split,job,reporter);
}


	

/**
*
* Create an empty key
*
* @return key
*/
public BytesWritable createKey() {
	return new BytesWritable();
}

/**
*
* Create an empty value
*
* @return value
*/
public BytesWritable createValue() {
	return new BytesWritable();
}



/**
*
* Read a next block. 
*
* @param key is a 64 byte array (hashMerkleRoot and prevHashBlock)
* @param value is a deserialized Java object of class BitcoinBlock
*
* @return true if next block is available, false if not
*/
public boolean next(BytesWritable key, BytesWritable value) throws IOException {
	// read all the blocks, if necessary a block overlapping a split
	while(getFilePosition()<=getEnd()) { // did we already went beyond the split (remote) or do we have no further data left?
		ByteBuffer dataBlock=null;
		try {
			dataBlock=getBbr().readRawBlock();
		} catch (BitcoinBlockReadException e) {
			// log
			LOG.error(e);
		}	
		if (dataBlock==null) return false;
		byte newKey[]=getBbr().getKeyFromRawBlock(dataBlock);
		key.set(newKey,0,newKey.length);
		byte[] dataBlockArray=new byte[0];
		if (dataBlock.hasArray()==true) {
			dataBlockArray=dataBlock.array();
		} else {
			dataBlockArray=new byte[dataBlock.capacity()];
			dataBlock.get(dataBlockArray);
		}
		value.set(dataBlockArray,0,dataBlockArray.length);
		return true;
	}
	return false;<commit_msg>Fixed sonarqube issue<commit_after>/**
* Copyright 2016 ZuInnoTe (<NAME>) <<EMAIL>>
*
* 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 org.zuinnote.hadoop.bitcoin.format.mapred;



import org.zuinnote.hadoop.bitcoin.format.exception.HadoopCryptoLedgerConfigurationException;
import org.zuinnote.hadoop.bitcoin.format.exception.BitcoinBlockReadException;

import java.io.IOException;
import java.io.InputStream;

import java.nio.ByteBuffer;

import org.apache.hadoop.io.BytesWritable; 

import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Reporter;

import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;




public class BitcoinRawBlockRecordReader  extends AbstractBitcoinRecordReader<BytesWritable, BytesWritable> {
private static final Log LOG = LogFactory.getLog(BitcoinRawBlockRecordReader.class.getName());


public BitcoinRawBlockRecordReader(FileSplit split,JobConf job, Reporter reporter) throws IOException,HadoopCryptoLedgerConfigurationException,BitcoinBlockReadException {
	super(split,job,reporter);
}


	

/**
*
* Create an empty key
*
* @return key
*/
public BytesWritable createKey() {
	return new BytesWritable();
}

/**
*
* Create an empty value
*
* @return value
*/
public BytesWritable createValue() {
	return new BytesWritable();
}



/**
*
* Read a next block. 
*
* @param key is a 64 byte array (hashMerkleRoot and prevHashBlock)
* @param value is a deserialized Java object of class BitcoinBlock
*
* @return true if next block is available, false if not
*/
public boolean next(BytesWritable key, BytesWritable value) throws IOException {
	// read all the blocks, if necessary a block overlapping a split
	while(getFilePosition()<=getEnd()) { // did we already went beyond the split (remote) or do we have no further data left?
		ByteBuffer dataBlock=null;
		try {
			dataBlock=getBbr().readRawBlock();
		} catch (BitcoinBlockReadException e) {
			// log
			LOG.error(e);
		}	
		if (dataBlock==null) return false;
		byte newKey[]=getBbr().getKeyFromRawBlock(dataBlock);
		key.set(newKey,0,newKey.length);
		byte[] dataBlockArray;
		if (dataBlock.hasArray()==true) {
			dataBlockArray=dataBlock.array();
		} else {
			dataBlockArray=new byte[dataBlock.capacity()];
			dataBlock.get(dataBlockArray);
		}
		value.set(dataBlockArray,0,dataBlockArray.length);
		return true;
	}
	return false;
{'fraction_non_alphanumeric': 0.10175017158544955, 'fraction_numerical': 0.004289636238846946, 'mean_word_length': 5.0592515592515594, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4050157', 'n_tokens_mistral': 1831, 'n_tokens_neox': 1735, 'n_words': 508}