// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/AddressRepository.java
// @Repository
// public interface AddressRepository extends Neo4jRepository<BitcoinAddress, Long> {
// 
//     /**
//      * Find an address.
//      *
//      * @param address address
//      * @return address
//      */
//     Optional<BitcoinAddress> findByAddress(String address);
// 
//     /**
//      * Find a bitcoin address (with depth 0).
//      *
//      * @param address address
//      * @return bitcoin address
//      */
//     @Query("MATCH (a:BitcoinAddress) USING INDEX a:BitcoinAddress(address) WHERE a.address = $0 return a")
//     Optional<BitcoinAddress> findByAddressWithoutDepth(String address);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/BlockRepository.java
// @Repository
// public interface BlockRepository extends Neo4jRepository<BitcoinBlock, Long> {
// 
//     /**
//      * Find a block by its height.
//      *
//      * @param height height
//      * @return block
//      */
//     Optional<BitcoinBlock> findByHeight(int height);
// 
//     /**
//      * Find a block by its height without depth.
//      *
//      * @param height height
//      * @return block
//      */
//     @Query("MATCH (b:BitcoinBlock) WHERE b.height= $0 return b")
//     Optional<BitcoinBlock> findByHeightWithoutDepth(int height);
// 
//     /**
//      * Find a block by its hash.
//      *
//      * @param hash hash
//      * @return block
//      */
//     Optional<BitcoinBlock> findByHash(String hash);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionInputRepository.java
// @Repository
// public interface TransactionInputRepository extends Neo4jRepository<BitcoinTransactionInput, Long> {
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionOutputRepository.java
// @Repository
// public interface TransactionOutputRepository extends Neo4jRepository<BitcoinTransactionOutput, Long> {
// 
//     /**
//      * Find by txId and n.
//      *
//      * @param txId transaction id
//      * @param n output
//      * @return transaction output
//      */
//     Optional<BitcoinTransactionOutput> findByTxIdAndN(String txId, int n);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionRepository.java
// public interface TransactionRepository extends Neo4jRepository<BitcoinTransaction, Long> {
// 
// 	/**
// 	 * Find a block by its id.
// 	 *
// 	 * @param txId transaction id
// 	 * @return transaction
// 	 */
//     Optional<BitcoinTransaction> findByTxId(String txId);
// 
// }


import com.oakinvest.b2g.repository.AddressRepository;
import com.oakinvest.b2g.repository.BlockRepository;
import com.oakinvest.b2g.repository.TransactionInputRepository;
import com.oakinvest.b2g.repository.TransactionOutputRepository;
import com.oakinvest.b2g.repository.TransactionRepository;
import org.springframework.stereotype.Component;
package com.oakinvest.b2g.util.providers;


/**
 * Bitcoin repositories.
 *
 * Created by straumat on 11/06/17.
 */
@SuppressWarnings("unused")
@Component
public class RepositoriesProvider {

    /**
     * Bitcoin address repository.
     */
    private final AddressRepository addressRepository;

    /**
     * Bitcoin block repository.
     */
    private final BlockRepository blockRepository;

    /**
     * Bitcoin transaction repository.
     */
    private final TransactionRepository bitcoinTransactionRepository;

    /**
     * Bitcoin transaction input repository.
     */
    private final TransactionInputRepository bitcoinTransactionInputRepository;

    /**
     * Bitcoin transaction output repository.
     */
    private final TransactionOutputRepository bitcoinTransactionOutputRepository;

    /**
     * Constructor.
     * @param newAddressRepository Bitcoin address repository
     * @param newBlockRepository Bitcoin block repository
     * @param newBitcoinTransactionRepository Bitcoin transaction repository
     * @param newBitcoinTransactionInputRepository Bitcoin transaction input repository
     * @param newBitcoinTransactionOutputRepository Bitcoin transaction output repository
     */
    public RepositoriesProvider(final AddressRepository newAddressRepository, final BlockRepository newBlockRepository, final TransactionRepository newBitcoinTransactionRepository, final TransactionInputRepository newBitcoinTransactionInputRepository, final TransactionOutputRepository newBitcoinTransactionOutputRepository) {
        this.addressRepository = newAddressRepository;
        this.blockRepository = newBlockRepository;
        this.bitcoinTransactionRepository = newBitcoinTransactionRepository;
        this.bitcoinTransactionInputRepository = newBitcoinTransactionInputRepository;
        this.bitcoinTransactionOutputRepository = newBitcoinTransactionOutputRepository;
    }

    /**
     * Getter.
     * @return bitcoin address repository
     */
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/AddressRepository.java
// @Repository
// public interface AddressRepository extends Neo4jRepository<BitcoinAddress, Long> {
// 
//     /**
//      * Find an address.
//      *
//      * @param address address
//      * @return address
//      */
//     Optional<BitcoinAddress> findByAddress(String address);
// 
//     /**
//      * Find a bitcoin address (with depth 0).
//      *
//      * @param address address
//      * @return bitcoin address
//      */
//     @Query("MATCH (a:BitcoinAddress) USING INDEX a:BitcoinAddress(address) WHERE a.address = $0 return a")
//     Optional<BitcoinAddress> findByAddressWithoutDepth(String address);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/BlockRepository.java
// @Repository
// public interface BlockRepository extends Neo4jRepository<BitcoinBlock, Long> {
// 
//     /**
//      * Find a block by its height.
//      *
//      * @param height height
//      * @return block
//      */
//     Optional<BitcoinBlock> findByHeight(int height);
// 
//     /**
//      * Find a block by its height without depth.
//      *
//      * @param height height
//      * @return block
//      */
//     @Query("MATCH (b:BitcoinBlock) WHERE b.height= $0 return b")
//     Optional<BitcoinBlock> findByHeightWithoutDepth(int height);
// 
//     /**
//      * Find a block by its hash.
//      *
//      * @param hash hash
//      * @return block
//      */
//     Optional<BitcoinBlock> findByHash(String hash);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionInputRepository.java
// @Repository
// public interface TransactionInputRepository extends Neo4jRepository<BitcoinTransactionInput, Long> {
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionOutputRepository.java
// @Repository
// public interface TransactionOutputRepository extends Neo4jRepository<BitcoinTransactionOutput, Long> {
// 
//     /**
//      * Find by txId and n.
//      *
//      * @param txId transaction id
//      * @param n output
//      * @return transaction output
//      */
//     Optional<BitcoinTransactionOutput> findByTxIdAndN(String txId, int n);
// 
// }
// 
// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/repository/TransactionRepository.java
// public interface TransactionRepository extends Neo4jRepository<BitcoinTransaction, Long> {
// 
// 	/**
// 	 * Find a block by its id.
// 	 *
// 	 * @param txId transaction id
// 	 * @return transaction
// 	 */
//     Optional<BitcoinTransaction> findByTxId(String txId);
// 
// }


// Path: bitcoin-neo4j/project-back-end/src/main/java/com/oakinvest/b2g/util/providers/RepositoriesProvider.java
import com.oakinvest.b2g.repository.AddressRepository;
import com.oakinvest.b2g.repository.BlockRepository;
import com.oakinvest.b2g.repository.TransactionInputRepository;
import com.oakinvest.b2g.repository.TransactionOutputRepository;
import com.oakinvest.b2g.repository.TransactionRepository;
import org.springframework.stereotype.Component;

package com.oakinvest.b2g.util.providers;


/**
 * Bitcoin repositories.
 *
 * Created by straumat on 11/06/17.
 */
@SuppressWarnings("unused")
@Component
public class RepositoriesProvider {

    /**
     * Bitcoin address repository.
     */
    private final AddressRepository addressRepository;

    /**
     * Bitcoin block repository.
     */
    private final BlockRepository blockRepository;

    /**
     * Bitcoin transaction repository.
     */
    private final TransactionRepository bitcoinTransactionRepository;

    /**
     * Bitcoin transaction input repository.
     */
    private final TransactionInputRepository bitcoinTransactionInputRepository;

    /**
     * Bitcoin transaction output repository.
     */
    private final TransactionOutputRepository bitcoinTransactionOutputRepository;

    /**
     * Constructor.
     * @param newAddressRepository Bitcoin address repository
     * @param newBlockRepository Bitcoin block repository
     * @param newBitcoinTransactionRepository Bitcoin transaction repository
     * @param newBitcoinTransactionInputRepository Bitcoin transaction input repository
     * @param newBitcoinTransactionOutputRepository Bitcoin transaction output repository
     */
    public RepositoriesProvider(final AddressRepository newAddressRepository, final BlockRepository newBlockRepository, final TransactionRepository newBitcoinTransactionRepository, final TransactionInputRepository newBitcoinTransactionInputRepository, final TransactionOutputRepository newBitcoinTransactionOutputRepository) {
        this.addressRepository = newAddressRepository;
        this.blockRepository = newBlockRepository;
        this.bitcoinTransactionRepository = newBitcoinTransactionRepository;
        this.bitcoinTransactionInputRepository = newBitcoinTransactionInputRepository;
        this.bitcoinTransactionOutputRepository = newBitcoinTransactionOutputRepository;
    }

    /**
     * Getter.
     * @return bitcoin address repository
     */
    public final AddressRepository getAddressRepository() {