JUDE 5.3には編集APIのサンプルとしてDBリバースのプログラムが付属しています。
サンプルといっても十分便利。DB接続可能なときはこれを利用している。


何かしらのシステムやアプリを引き継ぐと、DDLすら提示されず、「テーブル定義書」「テーブル設計書」といった名称のxlsブックだけ出てくる場合がある。困ったことによくある。
目視でぽちぽちjudeにエントリしてもいいのだけど、編集APIのプラクティスを兼ねてインポートツールを書いた。

要するにCSVで記述したERエンティティをjudeモデルとして一括登録、というもの。
※注意:judeファイルになんらか問題が発生しても責任を負いかねます。自己責任で。そしてバックアップ or リビジョン管理重要。

judeユーティリティ


  1. xlsからCSVを作成する
    • 記述例はアーカイブ同梱のsamp1.xlsを参照
    • 「テーブル定義書」のレイアウトは様々。それに合わせて以下のようなCSVファイルを出力するようマクロを調整のこと
      • 1CSVファイル=1エンティティ
      • 1行=1属性
    • CSVファイル内の最初の列が「#」で始まる行はメタ情報行
      • #@entity行
        • 1列目:エンティティの論理名
        • 2列目:エンティティの物理名
      • 次に#で始まる行は各列の値の意味を指定するヘッダ。認識するヘッダは以下の通り
        logicalname属性の論理名
        physicalname属性の物理名
        domain属性のドメイン(の論理名)
        更新対象judeファイル内に同名の論理名を持つドメインがない場合は作成される
        type属性のデータ型
        更新対象judeファイル内に同名のデータ型がない場合は作成される
        length属性の長さ
        nnNOT NULLかどうか
        非空文字ならNOT NULL指定
        default属性のデフォルト値
        pkPRIMARY KEY制約をつけるかどうか
        非空文字ならPRIMARY KEY指定
    • excelがインストールされたwindows上で同梱のmake_csv.jsマクロ実行し、全シートをCSV出力します
      • 出力ファイル名は"シート名.csv"になります。
        シートごとに別ファイルに出力されます

        > cscript.exe make_csv.js samp1.xls
    • 編集APIの仕様で以下の点に注意
      • 論理名のないエンティティは登録できない
      • 論理名のない属性は登録できない
      • 同じ論理名を持つエンティティが既に存在すると登録できない
      • データ型に英小文字を指定しても英大文字になる
        • GUIでは英小文字名称のデータ型を登録できるけど、編集APIでcreateすると大文字になる。
  2. 出来たCSVをjudeファイルにインポートする
    • 実行例

      $ env CLASSPATH=./jude-pro.jar jruby ./import_ermodel.rb --fs=, -o new.jude samp2.csv
      ※インポートのデフォルトのフィールド区切りは「HT」です。--fsでカンマを指定しています。
      ※jude-pro.jarがカレントにある前提
    • 存在しないjudeファイルを指定してもよいし、既存のjudeファイルを指定してもよいです。
      存在しないjudeファイルを指定するとjudeファイルが作成されます。
      新規judeファイルに出力しインポート後の内容を確認して問題なさそうならマージするという手順がいいと思う。
    • 本スクリプトは日本語環境で作成されたjudeファイルを前提としています。
      編集APIサンプルのように createERModel(project, "ER Model");でIERModelを作成すると、日本語環境GUIでマージできなかった。日本語環境GUIで作ったjudeファイルの場合、IERModelの名称が"ERモデル"(これはエクスポートするとわかる)となっていることに関係するのではないかと想像している。

■実行環境
 OS: CentOS 5.2 i386
   JRE: Sun Java 1.6.0_07
     jruby: 1.1.4
     JUDE-Pro: 5.3.0

モデル編集APIは、「図要素」を編集できるようになるとうれしい。図中のモデルの位置だとか大きさ。GUIの自動レイアウトがもうひとつだなぁと感じている。何かしらのレイアウトエンジンを使って独自の整列ができるようになったらかなり素敵だと思うんだけどな。