ー・・ーーー
 こんにちは。ご無沙汰しております。
 SD-CARD Handler for YAESU SYSTEM FUSION (α Ver.)のエントリでは結構頻繁にバージョンアップ情報を更新していたのですが、独立のエントリとしては久しぶりのアップになってしまいました。

・ー・ー・・

今月7日に公開しましたSD-CARD Handler for YAESU SYSTEM FUSION (α Ver.) Version 202406060818 版には
(1)画像の読み書き機能に加え、
(2)MESSAGEの読み書き機能、
(3)VOICEの読み出し機能
を実装しました。これでやっと「SD-CARD Handler for YAESU SYSTEM FUSION」と呼べるものになったと思います。このため、元の名称「SD-CARD Handler(仮) for YAESU SYSTEM FUSION (α Ver.)」から「(仮)」の文字を削除しました。hi
 また、プログラム自体も大幅に修正しましたので、それまでのプログラムとは構成も異なっています。
 この時点でやっと、全体的なプログラムの構造が定まったと思いますので、このエントリから暫くは「プログラム」について解説をしていきたいと思います。殆どが備忘録になるかと思いますが、SD-CARD Handlerを自分仕様に変更される方の参考になれば幸いです。
 なお、現在のVersionは202406060818-2としてありますが、これはMessageについても消去扱いのものを表示させるかさせないかという選択肢をつけたものとなっただけです。

・ー・ー・・

本プログラムは、Spring Boot3と呼ばれるフレームワークを使用しています。このためプログラムは多くのモジュールを抱きかかえることになるのですが、解説するのはフレームワーク以外のところだけにとどめます。
で、プログラムの構成は下図のようになっています。


続いて、ブラウザに表示するためのテンプレートの構成は下図のようになっています。


・ー・ー・・

 これ、Spring Boot3フレームワークの上に乗っかってるので、ただのクラスファイルの羅列に見えますよね~。main()を探しても、そこからどのように動いているのかが、皆目チンプンカンプンになってしまいます。
 フレームワークについて触れると長くなるので、ここではまずは要点だけを挙げます。

・ー・ー・・

 javaにしろCにしろ、プログラムのエントリポイントはあります。
 javaの場合、public void static main() がこれです。プログラム中にひとつしかないので、staticなんですよね。
 で、これは、net.dialectech.springCoreパッケージ中、のYsfSdCardHandlerApplication.javaファイル中にあります。このファイルには、public の YsfSdCardHandlerApplicationクラスがあって、この中にpublic static void main(String[] args)という行があり、ここがプログラムのエントリポイントになります。
 この中で、
SpringApplication.run(YsfSdCardHandlerApplication.class, args);
 という行があり、ここがSpring Bootの制御を始めさせるところになっています。
 そのあとは、ちょっとモジョモジョ~なところ(実はデバッグ用の設定があって、デバッグモードで動作させると、SD-CARD以外のところにエントリを設けることができるようにしてあります。そういう処理をするところが含まれています。)と、ブラウザをキックするところが記述されています。

 というわけで、フレームワークの入り口についてはこの程度にして、次に、プログラム本体についての概要に触れていきます。

・ー・ー・・

 Spring Bootの場合、クラスの頭に「@Controller」と書いてあるものを、フレームワークは拾ってくれます。つまり、WEBリクエストに直接応答するところにもこの記述がされていれば拾ってくれるわけです。具体的にどのように紐づけるのかは、フレームワークが勝手にやっていますので、プログラマはそこまで気にしなくてもよいようになっています。
 で、ブラウザからのリクエストについての応答についてですが、たとえば画像プレーンでいうと、パッケージnet.dialectech.ftmSdCardHandler.actions中のCHandlerImageActionクラスが担当しています。で、各メソッドの頭につけてある「@RequestMapping」というのが、ひとつひとつのリクエストに応答する処理関数(メソッド)となっています。
たとえば、SD-CARD中の完全削除を担当するメソッドはブラウザから「deleteImageCompletely」というリクエストを飛ばしますが、これはactDataDeleteImageCompletely(~)というメソッドが処理をするようになっています。
 自分の場合、リクエストに対する応答メソッドの名称は、すべてactData~というように統一していますので、こういう名称のものは全てブラウザからのリクエストに応答するものとなっています。
 あと特徴的なのは、net.dialectech.ftmSdCardHandler.supporters.fileSystemパッケージでしょう。ここにある2つのファイル中CYsfFileSystemクラスは、シングルトンにしてあって、SD-CARDの書き込み・読み出しを担当しています。その名の通り、File Systemのラッパーみたいな感じです。
 もうひとつの、CYsfFileSystemCorePartクラスはCYsfFileSystemクラスの基礎となっているクラスですが、これは、SD-CARDに限らず、バンクの処理もできるようになっています。言い換えれば、バンクもSD-CARDも同体系のファイルシステムとしてアクセスできるようにしてあって、SD-CARDのみを特別扱いしたという感じにしてあるんです。
 他には、同じパッケージ中にあるCYsfCodeConverterは例のヤエス特殊文字コード体系(!?)の変換を扱うクラスです。このクラスは共通にどの操作でも使うものですので、singleton扱いにしてあります。まぁ、staticでもよかったんですが、まぁSingletonの方が若干安心できるっちゅうか、なんちゅうか・・・。
 あとは、net.dialectech.ftmSdCardHandler.dataパッケージ中に各DIRの構造に対応する論理データ~binaryの変換なんかを含んでデータ構造を定義してあります。
・・・・とまぁ、こんな感じで大枠を作ってあります。
 こんなところでした。ちなみに、webブラウザで表示される側は、プロジェクトのsrc/main/resources/template/pages配下に収めてあります。このなかのbase.htmlが最初の画面(5つのプレーン)を全て定義してあるThymeleafファイルになっています。
 ザクっとこんな感じでした。^^;

次回からは、もうちょっと中身に踏み込むつもりです。


・ー・ー・・
「SD-CARD Handler for YAESU SYSTEM FUSION Ⓡ」のダウンロードリンクは、ブログエントリSD-CARD Handler for YAESU SYSTEM FUSION (α Ver.)の記事の中に固定してあります。現在、2024/6/6版を掲載しています。なおインストールにより、乃至プログラムを動作させたために生じた損害について、私は責を負いません。その他の注意事項は上記エントリに記載してあります。