/* * * Copyright 2014 http://Bither.net * * 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 net.bither.db; import net.bither.bitherj.core.In; import net.bither.bitherj.core.Out; import net.bither.bitherj.core.Tx; import net.bither.bitherj.db.AbstractDb; import net.bither.bitherj.exception.AddressFormatException; import net.bither.bitherj.utils.Base58; import net.bither.bitherj.utils.Utils; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; public class TxHelper { public static Tx applyCursor(ResultSet c) throws AddressFormatException, SQLException { Tx txItem = new Tx(); int idColumn = c.findColumn(AbstractDb.TxsColumns.BLOCK_NO); if (idColumn != -1 && c.getObject(idColumn) != null) { txItem.setBlockNo(c.getInt(idColumn)); } else { txItem.setBlockNo(Tx.TX_UNCONFIRMED); } idColumn = c.findColumn(AbstractDb.TxsColumns.TX_HASH); if (idColumn != -1) { txItem.setTxHash(Base58.decode(c.getString(idColumn))); } idColumn = c.findColumn(AbstractDb.TxsColumns.SOURCE); if (idColumn != -1) { txItem.setSource(c.getInt(idColumn)); } if (txItem.getSource() >= 1) { txItem.setSawByPeerCnt(txItem.getSource() - 1); txItem.setSource(1); } else { txItem.setSawByPeerCnt(0); txItem.setSource(0); } idColumn = c.findColumn(AbstractDb.TxsColumns.TX_TIME); if (idColumn != -1) { txItem.setTxTime(c.getInt(idColumn)); } idColumn = c.findColumn(AbstractDb.TxsColumns.TX_VER); if (idColumn != -1) { txItem.setTxVer(c.getInt(idColumn)); } idColumn = c.findColumn(AbstractDb.TxsColumns.TX_LOCKTIME); if (idColumn != -1) { txItem.setTxLockTime(c.getInt(idColumn)); } return txItem; } public static In applyCursorIn(ResultSet c) throws AddressFormatException, SQLException { In inItem = new In(); int idColumn = c.findColumn(AbstractDb.InsColumns.TX_HASH); if (idColumn != -1) { inItem.setTxHash(Base58.decode(c.getString(idColumn))); } idColumn = c.findColumn(AbstractDb.InsColumns.IN_SN); if (idColumn != -1) { inItem.setInSn(c.getInt(idColumn)); } idColumn = c.findColumn(AbstractDb.InsColumns.PREV_TX_HASH); if (idColumn != -1) { inItem.setPrevTxHash(Base58.decode(c.getString(idColumn))); } idColumn = c.findColumn(AbstractDb.InsColumns.PREV_OUT_SN); if (idColumn != -1) { inItem.setPrevOutSn(c.getInt(idColumn)); } idColumn = c.findColumn(AbstractDb.InsColumns.IN_SIGNATURE); if (idColumn != -1) { String inSignature = c.getString(idColumn); if (!Utils.isEmpty(inSignature)) { inItem.setInSignature(Base58.decode(c.getString(idColumn))); } } idColumn = c.findColumn(AbstractDb.InsColumns.IN_SEQUENCE); if (idColumn != -1) { inItem.setInSequence(c.getInt(idColumn)); } return inItem; } public static Out applyCursorOut(ResultSet c) throws AddressFormatException, SQLException { Out outItem = new Out(); int idColumn = c.findColumn(AbstractDb.OutsColumns.TX_HASH); if (idColumn != -1) { outItem.setTxHash(Base58.decode(c.getString(idColumn))); } idColumn = c.findColumn(AbstractDb.OutsColumns.OUT_SN); if (idColumn != -1) { outItem.setOutSn(c.getInt(idColumn)); } idColumn = c.findColumn(AbstractDb.OutsColumns.OUT_SCRIPT); if (idColumn != -1) { outItem.setOutScript(Base58.decode(c.getString(idColumn))); } idColumn = c.findColumn(AbstractDb.OutsColumns.OUT_VALUE); if (idColumn != -1) { outItem.setOutValue(c.getLong(idColumn)); } idColumn = c.findColumn(AbstractDb.OutsColumns.OUT_STATUS); if (idColumn != -1) { outItem.setOutStatus(Out.getOutStatus(c.getInt(idColumn))); } idColumn = c.findColumn(AbstractDb.OutsColumns.OUT_ADDRESS); if (idColumn != -1) { outItem.setOutAddress(c.getString(idColumn)); } return outItem; } public static void addInsAndOuts(TxDBHelper mDb, Tx txItem) throws AddressFormatException, SQLException { String txHashStr = Base58.encode(txItem.getTxHash()); txItem.setOuts(new ArrayList<Out>()); txItem.setIns(new ArrayList<In>()); String sql = "select * from ins where tx_hash=? order by in_sn"; PreparedStatement statement = mDb.getPreparedStatement(sql, new String[]{txHashStr}); ResultSet c = statement.executeQuery(); while (c.next()) { In inItem = TxHelper.applyCursorIn(c); inItem.setTx(txItem); txItem.getIns().add(inItem); } c.close(); statement.close(); sql = "select * from outs where tx_hash=? order by out_sn"; statement = mDb.getPreparedStatement(sql, new String[]{txHashStr}); c = statement.executeQuery(); while (c.next()) { Out outItem = TxHelper.applyCursorOut(c); outItem.setTx(txItem); txItem.getOuts().add(outItem); } c.close(); statement.close(); } }