ログイン
検索
メインメニュー
ブログ一覧
Kotaさんのエントリ  Kotaさんのエントリ配信

2007/10/03
CRUDのAPIサンプルコード

執筆者: Kota (11:59 am)
Kota@最近イサムノグチのAKARIゲットしました。

さて、昨日10/2にComminity5.1、Professional5.1がリリースされました。
β版との差異は以下です。
・CRUDのAPI
・SQLエクスポートの外部キー出力オプション
・ライセンス設定の改善
・不具合修正



今回はCRUDのAPIを取り上げます。
ここでちょっとCRUDのAPIをコンソールに出力するサンプルを示します。
APIを使う際には、インストールフォルダ配下のjude-api.jar、jude-pro.jarを追加する必要があります。

「概要」
fileNameに定義してある*.judeを開き、全CRUDの情報をコンソールに出力する。

「CRUDのAPIサンプルコード」

import java.awt.Color;

import com.change_vision.jude.api.inf.model.IDiagram;
import com.change_vision.jude.api.inf.model.IElement;
import com.change_vision.jude.api.inf.model.IMatrixDiagram;
import com.change_vision.jude.api.inf.model.IModel;
import com.change_vision.jude.api.inf.model.INamedElement;
import com.change_vision.jude.api.inf.presentation.IHeaderCell;
import com.change_vision.jude.api.inf.presentation.IValueCell;
import com.change_vision.jude.api.inf.project.ProjectAccessor;
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;

public class UseCrudFromJude {
	
    private static ProjectAccessor prjAccessor;
    protected static IModel project;
	
    public static void main(String[] args) {
    	
    	String fileName = "C:\\ICRUDTest.jude";
    	
    	if (open(fileName)){
    		IDiagram[] dgms = project.getDiagrams();
    		for (int i = 0 ; i < dgms.length; i++) {
    			if (dgms[i] instanceof IMatrixDiagram) {
    				showDeatilInConsole((IMatrixDiagram)dgms[i]);
    			}
    		}
    		close();
    	}
    }
    
    private static void showDeatilInConsole(IMatrixDiagram dgm) {
    	
    	System.out.println("---------------------------------------------------");
    	System.out.println("CRUDの名前=" + dgm.getName());
    	
    	//CRUDの全ての列のヘッダーセルを取得します。
    	IHeaderCell[] columnHeaders = dgm.getColumnHeaders();
    	System.out.println("CRUDの全ての列のヘッダーセルの数=" + columnHeaders.length);
    	
    	//CRUDの表示対象の列のヘッダーセルを取得します。
    	IHeaderCell[] showColumnHeaders = dgm.getShowColumnHeaders();
    	System.out.println("CRUDの表示対象の列のヘッダーセルの数=" + showColumnHeaders.length);
    	
    	//CRUDの表示対象の列のヘッダーセルの内容を表示します。
    	for (int i = 0; i < showColumnHeaders.length; i++) {
    		showIHeaderCellDeatilInConsole(i, showColumnHeaders[i]);
    	}
    	
    	//CRUDの全ての行のヘッダーセルを取得します。
    	IHeaderCell[] rowHeaders = dgm.getRowHeaders();
    	System.out.println("CRUDの全ての行のヘッダーセルの数=" + rowHeaders.length);
    	
    	//CRUDの表示対象の行のヘッダーセルを取得します。
    	IHeaderCell[] showRowHeaders = dgm.getShowRowHeaders();
    	System.out.println("CRUDの表示対象の行のヘッダーセルの数=" + showRowHeaders.length);
    	
    	//CRUDの表示対象の行のヘッダーセルの内容を表示します。
    	for (int i = 0; i < showRowHeaders.length; i++) {
    		showIHeaderCellDeatilInConsole(i, showRowHeaders[i]);
    	}
    	
    	//CRUDの表示対象のIValueCellの値を取得します。
    	for (int i = 0; i < showRowHeaders.length; i++) {
    		for (int j = 0; j < showColumnHeaders.length; j++) {
    			showIValueCellDeatilInConsole(i, j, dgm.getShowValueCell(i, j));
    		}
    	}
    	
    	//CRUDの行が"図のグルーピング表示"かどうかを取得します。
    	boolean isShownByGroupRow = dgm.isRowShownByGroup();
    	System.out.println("CRUDの行が\"図のグルーピング表示\"かどうか=" + isShownByGroupRow);
    	
    	//CRUDの列が"図のグルーピング表示"かどうかを取得します。
    	boolean isShownByGroupColumn = dgm.isColumnShownByGroup();
    	System.out.println("CRUDの列が\"図のグルーピング表示\"かどうか=" + isShownByGroupColumn);
    	
    	//CRUDの行が"全体行表示"モードかどうかを取得します。
    	boolean isShownTotalRow = dgm.isRowShownTotal();
    	System.out.println("CRUDの行が\"全体行表示\"モードかどうか=" + isShownTotalRow);
    	
    	//CRUDの列が"全体列表示"モードかどうかを取得します。
    	boolean isShownTotalColum = dgm.isColumnShownTotal();
    	System.out.println("CRUDの列が\"全体列表示\"モードかどうか=" + isShownTotalColum);
    	
    	//CRUD列の表示が"物理モデル"かどうかを取得します。
    	boolean isShownByPhysical = dgm.isShownByPhysical();
    	System.out.println("CRUD列の表示が\"物理モデル\"かどうか=" + isShownByPhysical);
    	
    	//CRUDが"図の値の自動設定"かどうかを取得します。
    	boolean isSetDiagramCellValueAutomatically = dgm.isSetDiagramCellValueAutomatically();
    	System.out.println("CRUDが\"図の値の自動設定\"かどうか=" + isSetDiagramCellValueAutomatically);
    }
    
    private static void showIHeaderCellDeatilInConsole(int i, IHeaderCell hc) {
		//ラベルを取得します。
		String label = hc.getLabel();
		//ヘッダーセルが表示対象かどうかを取得します。
		boolean isVisible = hc.isVisible();
		//ヘッダーセルが列かどうかを取得します。
		boolean isColumnHeader = hc.isColumnHeader();
		//ヘッダーセルが全体かどうかを取得します。
		boolean isTotal = hc.isTotal();
		//親のヘッダーセルを取得します。
		IHeaderCell parentHc = hc.getParent();
		//モデルを取得します。
		IElement model = hc.getModel();
		StringBuffer shownString = new StringBuffer();
		shownString.append("IHeaderCell:[");
		shownString.append(i);
		shownString.append("]=");
		shownString.append(label);
		shownString.append(" ヘッダーセルが表示対象かどうか=");
		shownString.append(isVisible);
		shownString.append(" ヘッダーセルが列かどうか=");
		shownString.append(isColumnHeader);
		shownString.append(" ヘッダーセルが全体かどうか=");
		shownString.append(isTotal);
		if (parentHc != null) {
			shownString.append(" 親のヘッダーセル=");
			shownString.append(parentHc.getLabel());
		} else {
			shownString.append(" 親のヘッダーセル=NULL");
		}
		if (model != null) {
			shownString.append(" モデル=");
			shownString.append(((INamedElement)model).getName());
		} else {
			shownString.append(" モデル=NULL");
		}
		System.out.println(shownString.toString());
    }
    
    private static void showIValueCellDeatilInConsole(int i, int j, IValueCell p) {
    	//値を取得します。
		String value = p.getValue();
		//色を取得します。
		Color c = p.getColor();
		boolean isCreate = p.isCreate();
		boolean isRead = p.isRead();
		boolean isUpdate = p.isUpdate();
		boolean isDelete = p.isDelete();
		System.out.println("IValueCell:[" + i + "][" + j + "]=" + value + " Color=" + c);
    }
    
    private static boolean open(final String filePath) {
    	try {
        	prjAccessor = ProjectAccessorFactory.getProjectAccessor();
        	prjAccessor.open(filePath);
        	project = prjAccessor.getProject();
        	return true;
        } catch (Throwable e) {
        	e.printStackTrace();
        	return false;
        }
    }
    
    private static void close() {
    	prjAccessor.close();
    }
}



「実行結果サンプル」

---------------------------------------------------
CRUDの名前=CRUD0
CRUDの全ての列のヘッダーセルの数=4
CRUDの表示対象の列のヘッダーセルの数=4
IHeaderCell:[0]=ER Diagram0 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=true ヘッダーセルが全体かどうか=false 親のヘッダーセル=NULL モデル=ER Diagram0
IHeaderCell:[1]=Entity0 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=true ヘッダーセルが全体かどうか=false 親のヘッダーセル=ER Diagram0 モデル=Entity0
IHeaderCell:[2]=Entity1 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=true ヘッダーセルが全体かどうか=false 親のヘッダーセル=ER Diagram0 モデル=Entity1
IHeaderCell:[3]=Total ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=true ヘッダーセルが全体かどうか=true 親のヘッダーセル=NULL モデル=NULL
CRUDの全ての行のヘッダーセルの数=4
CRUDの表示対象の行のヘッダーセルの数=4
IHeaderCell:[0]=UseCase Diagram0 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=false ヘッダーセルが全体かどうか=false 親のヘッダーセル=NULL モデル=UseCase Diagram0
IHeaderCell:[1]=UseCase0 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=false ヘッダーセルが全体かどうか=false 親のヘッダーセル=UseCase Diagram0 モデル=UseCase0
IHeaderCell:[2]=UseCase1 ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=false ヘッダーセルが全体かどうか=false 親のヘッダーセル=UseCase Diagram0 モデル=UseCase1
IHeaderCell:[3]=Total ヘッダーセルが表示対象かどうか=true ヘッダーセルが列かどうか=false ヘッダーセルが全体かどうか=true 親のヘッダーセル=NULL モデル=NULL
IValueCell:[0][0]=CRUD Color=null
IValueCell:[0][1]=CU Color=null
IValueCell:[0][2]=RD Color=null
IValueCell:[0][3]=CRUD Color=null
IValueCell:[1][0]=CR Color=null
IValueCell:[1][1]=C Color=null
IValueCell:[1][2]=R Color=java.awt.Color[r=255,g=41,b=102]
IValueCell:[1][3]=CR Color=null
IValueCell:[2][0]=UD Color=null
IValueCell:[2][1]=U Color=null
IValueCell:[2][2]=D Color=null
IValueCell:[2][3]=UD Color=null
IValueCell:[3][0]=CRUD Color=null
IValueCell:[3][1]=CU Color=null
IValueCell:[3][2]=RD Color=null
IValueCell:[3][3]=CRUD Color=null
CRUDの行が"図のグルーピング表示"かどうか=true
CRUDの列が"図のグルーピング表示"かどうか=true
CRUDの行が"全体行表示"モードかどうか=true
CRUDの列が"全体列表示"モードかどうか=true
CRUD列の表示が"物理モデル"かどうか=false
CRUDが"図の値の自動設定"かどうか=true



どうでしょうか?
JUDE/ProfessionalからはCRUDをEXCELファイルに変換等できますが、
自作アプリにAPI経由で*.judeのCRUDにアクセスしてみてもおもしろいと思います。
是非お試しください!
Kotaさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (6163)
このエントリのトラックバックURL
http://astah-users.change-vision.com/ja/modules/weblog/weblog-tb.php?162
このエントリは以下のURLにトラックバックしています。
2007-10-03/13:15:08
印刷用ページ 友達に送る