package simplex.bn25.makino335926.trading.Position;

import simplex.bn25.makino335926.trading.StockDisplayAndRegister.CsvReader; // 銘柄マスタ用のCSVリーダー
import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.CsvReader; // 取引データ用のCSVリーダー
import simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.Trade;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;

// クラス: DisplayPosition(保有ポジションを表形式で表示するクラス)
public class DisplayPosition {

/**
 * メソッド: displayPosition
 * 取引データから保有ポジションを計算し、銘柄コードを昇順に並べて表形式で表示する。
 */
public static void displayPosition() {
    // 取引データをCSVファイルから読み込む
    List<Trade> trades = simplex.bn25.makino335926.trading.TradeRegisterAndDisplay.CsvReader.readTradesFromCsv();
    if (trades.isEmpty()) {
        System.out.println("> エラーが発生したため、保有ポジション表示を中止しました。");
        return; // 取引データがない場合、処理を中断
    }

    // 銘柄マスタデータを読み込む
    Map<String, String> stockNames = getStockNames();
    if (stockNames.isEmpty()) {
        System.out.println("> エラーが発生したため、保有ポジション表示を中止しました。");
        return; // 銘柄マスタデータがない場合、処理を中断
    }

    // 保有ポジションを計算し、TreeMapを利用して昇順にソート
    Map<String, Long> positions = new TreeMap<>(PositionCalculator.calculatePositions(trades));

    // ヘッダーを表示
    System.out.println("|===============================================|");
    System.out.println("| Ticker | Name                       | Quantity |");
    System.out.println("|--------+----------------------------+----------|");

    // 各銘柄の保有ポジションを表示(昇順にソートされた状態で表示)
    positions.forEach((ticker, quantity) -> {
        String name = stockNames.getOrDefault(ticker, "Unknown"); // 銘柄名を取得
        System.out.printf("| %-6s | %-26s | %10s |\n", ticker, name, String.format("%,d", quantity));
    });

    // テーブル終了線を表示
    System.out.println("|===============================================|");
}

/**
 * メソッド: getStockNames
 * 銘柄マスタデータを読み込み、銘柄コードと銘柄名の対応関係をMapで返す。
 * ファイルが読み込めなかった場合はエラーメッセージを表示し、空のMapを返す。
 * 
 * @return Map<String, String> 銘柄コードをキー、銘柄名を値とするMap
 */
private static Map<String, String> getStockNames() {
    Map<String, String> stockNames = new HashMap<>(); // 初期化

    try {
        // 銘柄マスタのCSVデータを読み込む
        List<String[]> stockData = CsvReader.readCsvFile();
        for (String[] stock : stockData) {
            if (stock.length > 1) {
                stockNames.put(stock[0], stock[1]); // 銘柄コードをキー、銘柄名を値として保存
            }
        }
    } catch (Exception e) {
        // ファイル読み込み失敗時の例外処理
        System.out.println("> 銘柄マスタデータの読み込み中にエラーが発生しました: " + e.getMessage());
    }

    return stockNames; // 銘柄情報のMapを返す
}

}

コメント

タイトルとURLをコピーしました