Git Product home page Git Product logo

xtext-dmdl-editor's Introduction

DMDL EditorX

DMDL EditorXは、 Xtext で作成している、 Asakusa Framework のDMDLエディター(Eclipseプラグイン)です。

インストール方法

XtextのインストールされたEclipseが必要です。 XtextのダウンロードサイトFull Eclipse を使うか、 既存のEclipseに Xtext (2.4.2以降)をインストールしてください。

DMDL EditorXプラグインのインストールは、Eclipseの [新規ソフトウェアのインストール] で 更新サイトとして http://hishidama.github.io/xtext-dmdl-editor/site/ を指定して下さい。

出来ること

詳細は DMDL EditorXの説明サイト を参照して下さい。

  • キーワードに色が付く。
    • 色は設定で変更できる。
  • カーソル位置の括弧に対して、対応する括弧が(うっすらと)強調表示される。
  • フォールディング(ソース上のブロックを閉じること)が出来る。
  • アウトラインが表示される。
    • Ctrl+o でクイックアウトラインが表示される。
  • 階層を表示できる。
    • データモデル名を右クリックしてコンテキストメニューを開き、 [Open DataModel Hierarchy] を実行すると階層ビューが開く。
    • または F4
    • 階層ビューでは、データモデルを定義する元となっている(参照している)データモデルや、逆に自分を使用しているデータモデルを表示する。
    • アウトラインでは基本的に自分で定義したプロパティーしか表示されないが、階層表示では親モデルで定義されているプロパティーも表示される。
  • 入力補完が使える。
    • Windowsの場合は Ctrl+Space 、UNIXの場合は Alt+/ でキーワードを補完できる。
  • ソースの整形が出来る。
    • Ctrl+Shift+F でソースを整形する。
    • プロパティーページで設定すれば、ファイル保存時に自動的に整形する。
  • DMDLのエラーチェックが出来る。
    • 文法レベルのエラーは入力時に判定される。(Xtextの機能)
    • コンテキストメニューの [DMDL EditorX]→[DMDL error check] で構文解析・意味解析を行い、エラー箇所にマークを付ける。
      • Asakusa Framework本体のDMDLパーサーを呼び出す為、プロパティーページでAsakusa Frameworkの設定を行っておく必要がある。
    • Xtextの判定によるエラーは、エディター上でエラーが解消した時にエラーマークが削除される。DMDLパーサーで出たエラーは、再度エラーチェックを行わないと解消されない。
  • データモデルクラス名でクリップボードにコピーできる。
    • データモデル名やプロパティー名を右クリックして [Copy Java Name] を選択すると、クリップボードにデータモデルクラス名やプロパティー名のキャメルケースがコピーされる。
  • ハイパーリンクのジャンプが出来る。
    • Ctrl を押しながら 別データモデルを参照しているプロパティー別データモデルを参照しているデータモデル をクリックすると、定義元へジャンプする。
    • または F3
    • データモデル定義のモデル名を Ctrl を押しながらクリックすると、そのモデルから生成されたデータモデルクラス(Javaソース)へジャンプする。
  • ハイパーリンクの検索が出来る。
    • データモデル名やプロパティー名を右クリックして [Find References] を選択すると、データモデル名やプロパティー名が使われている箇所を検索する。
  • ハイパーリンクの改名が出来る。
    • データモデル名やプロパティー名を右クリックして [Rename Element] を選択すると、データモデル名やプロパティー名を変更できる。使われている箇所も連動して変更される。
  • Javaでの使用箇所を検索できる。
    • データモデル名やプロパティー名を右クリックして [Asakusa DSL References] を選択すると、Javaソース上でデータモデルクラスやプロパティーが使われている箇所を検索する。
  • DMDLのデータモデルおよびプロパティーをウィザードで新規作成することが出来る。
    • コンテキストメニューの [DMDL EditorX]→[New DataModel] でウィザードが開く。あるいはメニューバーの [ファイル]→[新規] やツールバー。
  • DMDLの属性(@directio.csvとか)の追加/削除が出来る。
    • コンテキストメニューの [DMDL EditorX]→[Add/Remove attribute of DataModel] でウィザードが開く。あるいはメニューバーの [ファイル]→[新規] やツールバー。
  • DMDLのデータモデル・プロパティー・属性を変更することが出来る。
    • DMDLエディター上で変更したいデータモデル上にカーソルを合わせ、ツールバーの [既存のデータモデルの編集] をクリックすると、変更するウィザードが開く。
  • DMDLからデータモデルクラス(Javaソース)の生成が出来る。
    • コンテキストメニューの [DMDL EditorX]→[DMDL compile] でコンパイルを行う。
      • Asakusa Framework本体のDMDLコンパイラーを呼び出す為、プロパティーページでAsakusa Frameworkの設定を行っておく必要がある。
    • エラーチェックと同様のプロパティーを使ってコンパイル対象を決定している。
  • DMDLからImporter/Exporterの雛形クラスを作成することが出来る。
    • コンテキストメニューの [DMDL EditorX]→[New importer/exporter class] でウィザードが開く。あるいはメニューバーの [ファイル]→[新規] やツールバー。
      • DMDLのコンパイルによってスケルトンクラス(AbstractHogeCsvInputDescription等)が作られていることが前提。(無いと、生成されたクラスがコンパイルエラーになる)

Javaエディターを拡張している機能もあります。

  • JavaソースからDMDLへのハイパーリンクによるジャンプが出来る。
    • データモデルクラスのクラス名・メソッド名を Ctrl を押しながらクリックして [Open DMDL] を選択すると、定義元のDMDLへジャンプする。
    • または、コンテキストメニューの [Open DMDL]
    • または Shift+F3
    • Importer/Exporterのクラス名からもDMDLへジャンプできる。
  • Javaソースからデータモデル名・プロパティー名でクリップボードにコピーできる。
    • データモデルクラスのクラス名・メソッド名を右クリックして [Copy DMDL Name] を選択すると、クリップボードにモデル名・プロパティー名がコピーされる。
    • データモデルクラスのクラス名・メソッド名を右クリックして [Copy DMDL Description] を選択すると、クリップボードにモデル・プロパティーの説明(日本語名)がコピーされる。
  • @Keyのgroup,orderの機能拡張。
    • プロパティー名にマウスカーソルを合わせるとプロパティーの情報がツールチップとして表示される。
    • プロパティー名を Ctrl を押しながらクリックすると、定義元のDMDLへジャンプする。
    • プロパティー名や「ASC」「DESC」の入力補完が出来る。
  • Javadocの入力補完が出来る。
    • フィールドの型や@param,@returnの型がデータモデルクラスの場合、該当Javadocの入力補完候補にデータモデル名が表示される。
  • フローでの演算子の使用箇所を検索できる。
    • Operatorクラスの演算子メソッドを右クリックして [Asakusa DSL References]→[Search in src/main(Flow)] を選択すると、JobFlow/FlowPart上で該当演算子が使われている箇所を検索する。
  • MasterSelectionの使用箇所を検索できる。
    • OperatorクラスのMasterSelectionメソッドを右クリックして [Asakusa DSL References]→[Search in src/main(Operator)] を選択すると、Operatorクラス内で該当MasterSelectionが使われている箇所を検索する。
  • Operatorのメソッド名を [Refactor]→[Rename...] で改名すると、使用している箇所の名前も連動して変更される。
  • Operator・FlowPartのクラス名を [Refactor]→[Rename...] で改名すると、FactoryやImplクラスの名前も連動して変更される。

DMDLとは直接関係無い機能ですが、以下のようなことも出来ます。

  • JobFlow・FlowPart・Batchクラスの雛形を作成することが出来る。
    • [ファイル]→[新規] の新規作成ウィザードを開き、DMDL EditorXの「New JobFlow class」「New FlowPart class」「New Batch class」。
  • JobFlow・FlowPartのテストクラスの雛形を作成することが出来る。
    • [ファイル]→[新規] の新規作成ウィザードを開き、DMDL EditorXの「New JobFlow Test class」「New FlowPart Test class」。
  • JobFlow・FlowPartのコンストラクターの引数およびフィールドを追加削除することが出来る。
    • Javaエディター上で右クリックしてコンテキストメニューを出し、 [Source]→[Modify JobFlow/FlowPart Field] を選択すると、編集ウィザードが起動する。
  • Flow DSLからOperatorへのハイパーリンクによるジャンプが出来る。
    • オペレーターファクトリークラスのクラス名・メソッド名を Ctrl を押しながらクリックして [Open Operator] を選択すると、定義元のOperatorへジャンプする。
    • または、コンテキストメニューの [Open Operator]
    • Asakusa Framework 0.5以降で使用可能。
  • Operatorクラスの演算子メソッドを使っているFlow DSLを検索できる。
    • Javaエディター上の演算子メソッドで右クリックしてコンテキストメニューを出し、 [Asakusa DSL References] を選択すると、検索ビューに検索結果が表示される。
  • Operatorクラスの演算子メソッドの雛形を作成することが出来る。
    • Javaエディター上で右クリックしてコンテキストメニューを出し、 [Source]→[New Operator Method] を選択すると、演算子作成ウィザードが起動する。
  • Operatorクラス内の@MasterJoin等のselectionを扱う機能がある
    • selectionに書かれたメソッド名を Ctrl を押しながらクリックすると、定義元の@MasterSelectionメソッドにジャンプする。
    • selection内のメソッド名の入力補完が出来る。
  • JobFlow・FlowPartのテストクラスのExcelファイル名からExcelファイルへのハイパーリンクによるジャンプが出来る。
    • prepare()・vefify()の文字列内のExcelファイル名部分を Ctrl を押しながらクリックすると、src/test/resourcesの下にあるExcelファイルにジャンプする。
  • バッチのコンパイルが出来る。
    • パッケージエクスプローラー上でBatchクラスを選択し、ツールバーの [バッチのコンパイル] をクリックすると、バッチをコンパイルする。

Asakusa Frameworkとは全く関係無い機能ですが、以下のような機能も含まれています。

  • メソッドの実引数の順序を変更できる。
    • Javaエディター上でメソッドを右クリックしてコンテキストメニューを出し、 [Source]→[Modify Method Invocation] を選択すると、変更ウィザードが起動する。
  • 文字列定数(ダブルクォーテーションで囲まれたString Literal)内の検索が出来る。
    • メニューバーの [Search]→[Search] で検索ダイアログを出し、「String Search」タブを選択する。
  • スタックトレースのソースファイルを検索できる。
    • メニューバーの [Search]→[Search] で検索ダイアログを出し、「StackTrace File Search」タブを選択し、スタックトレースのatの行を貼り付ける。
    • クラスパス上に存在しないJavaソースファイルを検索する目的の機能。内部クラス等には未対応。

※一部の機能(Javaソースからのハイパーリンクによるジャンプや Ctrl+Shif+F3 による検索ダイアログ等)については、プロジェクトにXtextネイチャーが追加されていないと使用できません。 dmdlファイルを開くことにより、そのプロジェクトにXtextネイチャーが追加されます。

xtext-dmdl-editor's People

Contributors

hishidama avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

xtext-dmdl-editor's Issues

importer 生成時に余計な import 文が生成される

いくつか試しにデータモデルから Direct I/O CSV 用の importer を作ってみたところ, 過去に作ったデータモデル用の importer クラスを import する文が余計に生成されている.
どこかにキャッシュが残っているような動きをする.

モデルの使用箇所一覧を出したい

現在, モデルの定義場所へのジャンプはできるが, その逆向きの「そのモデルが使われている場所」の一覧を見る方法が無い (or 分からない).

Eclipse のクラスやフィールドに対するコンテキストメニューの「参照 (References)」に近いイメージのものが欲しい.

データモデル検索ダイアログのfilterの機能拡張

データモデル検索ダイアログのfilterの機能を拡張する。

  • フィルター入力エリアを分けて、モデル名とプロパティー名の2種類とする。(現状は1種類で共用)
  • モデル名で検索した場合は、ツリーをモデル名まで開く。(現状は検索条件を入れるとツリーが閉じてしまう)
  • 「expand model」ボタンを追加する。(現状はツリーを開くボタンは「expand all」のみ)
  • モデル名・プロパティー名に対しては、小文字として検索する。(現状はcase sensitiveだが、モデル名・プロパティー名に大文字は無い)
  • 「*」をワイルドカードとして使用できるようにする。

"Open DMDL" メニューが出ない

「command + マウスオーバー」で表示されるはずのメニューが表示されない.
再現環境の OS は Windows 7, Eclipse 4.3.

集計モデルの作成ウィザードに集計種類ボタンを追加する

集計モデルの作成ウィザードにおいて、集計種類(any・count・sum等)を選択するにはeditボタンを押して編集ダイアログを出す必要がある。(個々のプロパティー毎にダイアログを開かなければならない)
この集計種類を(編集ダイアログを出さずに)表内で直接変更できるようなボタンを追加する。

namespaceにアンダースコアを使うと、生成されたImporter/Expoterがエラーになる

namespaceにアンダースコア入りの名前を指定すると、
Importer/Exporter生成ウィザードによって作られるクラスのimport文が正しくなくてコンパイルエラー状態になる。

@namespace(value = hoge_zzz)
example = {

import com.example.modelgen.hoge_zzz.csv.AbstractExampleCsvInputDescription;

DMDLコンパイラーによって実際に生成されるクラスは、パッケージ名が「hogeZzz」になる。

Copy Java Nameメニューの追加

dmdlファイルエディター上のモデル名やプロパティー名を右クリックして出てくるコンテキストメニューに「Copy Java Name」メニューを追加する。
これは、モデル名やプロパティー名をJavaのクラス名やメソッド名の一部(UpperCamelCase)としてクリップボードにコピーするもの。

FlowPart変更ウィザードの変数名をフィールドから取得する

現在のFlowPart変更ウィザードでは、変数名やコメントの値を、FlowPartクラスのコンストラクターから取得している。
しかし、変数名を変えたい場合は、フィールドをEclipseの機能で置換することの方が多い。
したがって、フィールドから情報を取るようにすれば、変数名の変更は以下の手順で出来るようになる。

  1. フィールドの変数名を変更する。
  2. FlowPart変更ウィザードを開き、何も変更せずそのまま終了する。(これで、コンストラクターの変数名も変わる)

Data Model の定義検索

定義へのジャンプとは別に "Open Type" ダイアログのような Data Model 専用の検索ダイアログが欲しい.

Search メニュー → Search... → Search ダイアログ, から検索できるのは分かりますが, 専用のものがあると嬉しいです.

テストクラス作成機能でJobFlowのテストクラスが作成できない

メニューには「New JobFlow/FlowPart Test class ...」とありますが、
ダイアログの「Class under test」でJobFlowクラスを指定すると、
「is not FlowPart class」とエラーが出ます。

バージョンは以下の通りです。
Asakusa Framework : 0.7.0
Mac OS X 10.9.5
Java 1.7.0_25
DMDL EditorX Feature 0.0.1.201410041324
Xtend IDE 2.7.2.v201409160908
Xtend Library for GWT 2.7.2.v201409160908
Xtext Complete SDK 2.7.2.v201409160908
Xtext Redistributable 2.7.2.v201409160908

結合モデルの作成ウィザードでキーを1つずつ登録できるようにする

結合モデル作成ウィザードの結合キー定義ページで
左側の表から(キーとしたいプロパティーのペアを同時に選択してコピーするのではなく)
キーとしたいプロパティーを1回ずつコピーして結合キーを定義できるようにする。

つまり、以下のような動作を出来るようにする。

  1. 左側の表からモデルAのプロパティーA1を選択してコピーする。(右側の表にA1のみの行が作られる)
  2. 右側の表からA1のみの行を選択する。
  3. 左側の表からモデルBのプロパティーB1を選択してコピーする。(右側の表のA1の行にB1が追加される)

※現状では、3の動作を行うと、「A1のみの行」はそのままで、新たに「B1のみの行」が追加される。

モデル属性付与に失敗する

@アイコンからモデル属性付与を行おうとすると以下メッセージが出て失敗します。

「{model name}の加工に失敗しました。{dmdl file path}にエラーがある可能性があります。」

バージョンは下記の通りです。
Asakusa Framework : 0.7.0
Mac OS X 10.9.5
Java 1.7.0_25
DMDL EditorX Feature 0.0.1.201410041324
Xtend IDE 2.7.2.v201409160908
Xtend Library for GWT 2.7.2.v201409160908
Xtext Complete SDK 2.7.2.v201409160908
Xtext Redistributable 2.7.2.v201409160908

dmdlファイルの中身は、以下のような状態です。


"商品マスタ"
item_master = {

    "商品ID"
    item_id : INT;

    "商品名"
    item_name : TEXT;
};

"売上明細"
sales_detail = {

    "明細ID"
    sales_id : INT;

    "商品ID"
    item_id : INT;

    "売上数"
    count : INT;
};

"結合明細"
joined joined_sales = item_master -> {

    "商品ID"
    item_id -> item_id;

    "商品名"
    item_name -> item_name;
} % item_id
+ sales_detail -> {

    "明細ID"
    sales_id -> sales_id;

    "商品ID"
    item_id -> item_id;

    "売上数"
    count -> count;
} % item_id;

"出力明細"
output_sales = {

    "フラグ"
    flg : TEXT;
} + joined_sales;

Copy DMDL Nameメニューの追加

Javaエディター上のクラス名やメソッド名を右クリックして出てくるコンテキストメニューに「Copy DMDL Name」メニューを追加する。
これは、クラス名やメソッド名をデータモデルのモデル名やプロパティー名としてクリップボードにコピーするもの。

ExporterのgetOrderの入力補完

ExporterクラスのgetOrderメソッド内に文字列に対してプロパティー名の入力補完およびツールチップの表示が出来るようにする。
(getOrderメソッド内は、基本的にはソート用のプロパティー名を列挙するだけのはずなので、文字列はプロパティー名と見なす)

プロパティー一覧を用いたソース生成機能

モデルのプロパティーを複数選択し、同様の処理を生成する機能を追加する。

例えばプロパティー「foo」「bar」を指定し、テンプレートとして「result.set$(name.toCamelCase)Option(in.get$(nameToCamelCase)Option());」という指定をすると、

result.setFooOption(in.getFooOption());
result.setBarOption(in.getBarOption());

というソースが生成されるようにする。

AsakusaFW 0.9.0でDMDLコンパイルがエラーになる

AsakusaFW 0.9.0でDMDLのコンパイルを行うとエラーになる。

  • 「com.asakusafw.dmdl.parser.DmdlSyntaxExceptionがClassNotFoundException」という旨のダイアログが出る。
  • コンソールに「エラー: メイン・クラスcom.asakusafw.dmdl.java.Mainが見つからなかったかロードできませんでした」

Data Model の参照検索で削除された Data Model が表示されてしまう

  1. Eclipse から clean, build を実行
  2. Eclipse から DMDL ファイルを消す
  3. その DMDL ファイルから参照されていた Data Model で Find Reference メニューを実行する

Search View にファイル名が空だが Data Model 名が存在する検索結果が表示されます.
この行は手順2で消した DMDL ファイルを表示しようとしているのだと思います.

再度, 手順1を行うとファイル名が空の検索結果が出なくなります.

存在しないファイルについては表示させない動作を期待します.

FlowPartFactory#create()からコンストラクターへのジャンプ

JobFlowやFlowPart内でOperatorFactoryのクラス名やメソッドを右クリックして「Open Operator」を選択すると、Operatorクラス(該当メソッド)へジャンプすることが出来る。

FlowPartFactoryでも、「Open Operator」を選択すると、FlowPartクラスへジャンプすることが出来る。
しかし、FlowPartFactoryのcreateメソッドを指定してジャンプすると、FlowPartクラス名部分が開く。
createメソッドが選択されていた場合はFlowPartクラスのコンストラクターにジャンプできるようにしたい。

シンタックスエラーがあるDMDLをウィザードで編集するとスクリプトが消える

シンタックスエラーがあるDMDLスクリプトに対して
DMDLスクリプト内容を編集するウィザードを実行すると、
DMDLスクリプトのテキストが空になるという現象が発生しました。
以下再現手順です。

  1. src/main/dmdl/hoge.dmdl を作成し、以下のように記述する。
message = { };
  1. hoge.dmdlのエディタを開いた状態(シンタックスエラーが表示されている)で、メニューバーの @+ ボタン (データモデルに属性を追加) を押下する
  2. ウィザードをてきとうに進めて、最後のページの「完了」ボタンを押下する

上記の手順で完了ボタンを押しても
ウィザードのページが閉じられず、
エディタの内容が空になります。

可能であれば、シンタックスエラーがある状態では
ウィザードを実行できないようにするのがよいと思います。

属性を追加すると改行コード, タブの種類の混在が起きてしまう

改行コードが CR+LF , タブがハードタブである DMDL ファイルにウィザードから属性を追加すると, 変更を受けた行の改行コードが LF になり, タブがスペース 4 個になっています.
コンパイルも問題無くできるので動作に異常は無いと思いますが, git などでソースコードを管理している場合, 空白文字の変更が履歴に残ってしまい, 履歴を追うときにやや気になります.

飽くまで気になる程度の重要度です.

「データモデルの定義」画面で末尾にプロパティを挿入したい

「データモデルの作成」ウィザードの「データモデルの定義」では, テーブルの行を選択し, プロパティの挿入, 編集, 削除が行える.
末尾へプロパティを挿入する場合は, 末尾の空の行をクリックしてからプロパティの追加を行えば良いが, プロパティの数が1画面で表示できる量を越えると末尾の空行がクリックできなくなる.
その結果, 末尾にプロパティを追加したいときは, 最後尾のプロパティを選択し, 新たにプロパティを挿入し, 1 つ下に下げる操作を行うことになってしまう.

常に末尾にダミーの空プロパティを付けて, その行を選択して追加することで, 末尾へのプロパティの挿入操作が行えないだろうか?

1文字入力する度にダイアログが出る

Xtext2.7だと、DMDLエディター上で1文字入力する度に「The resource is concurrently edited in another editor. Do you want to continue?」というダイアログが出る。
このダイアログでYesを押すとしばらく出てこなくなるが、一旦ファイルを保存するとまた出てくる。

Xtext2.6では発生しない。

Operatorメソッド作成ウィザードのフィールド作成ページの新設

Operatorメソッド作成ウィザードにおいて、例えばConvert演算子ではフィールドにオブジェクトを用意し、それを使うようなソースを生成している。
フィールドを使うかどうかを選択する(使うならフィールド名を入力する)ページを用意した方がいいような気がしてきた。

importer が複数同時に作成できてしまう

importer を作成するデータモデルが複数選択できるが, basePath, resourcePattern, dataSize の設定が同一の importer が, それぞれのデータモデルに対して作成される.
(親クラスはそれぞれ適切なものが選択されている.)

データモデル選択画面で 1 つしか選べないようにする方が良いと思う.

アンダースコア入りメソッド名のOperatorへのジャンプ

フロークラスからOperatorクラスへのハイパーリンクのジャンプ機能において、
Operatorのメソッド名がアンダースコア入りの場合に そのメソッドにジャンプできない。

(例えばOperatorのaaaBbb_CccDddというメソッドはOperatorFactoryではaaabbbCccdddになるようで、一致していないので現状ではジャンプできない)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.