2010年1月28日木曜日

EMFQuery

先日Teneoを調べていたのだがEMFプロジェクトの中にEMF Queryというのがあり、それを使うと十分に使えるんじゃないか?思い調べてみました。
EMF Queryのサンプルからちょこっと変更を加えた下記コードのように記述すると動作することが確認されました。

  1. public class Sample {  
  2.  public static void main(String[] args) {  
  3.   // TODO Auto-generated method stub  
  4.   BookCategory category = null;  
  5.   Collection<eobject> selectedEObjects = null;  
  6.   selectedEObjects = new java.util.ArrayList<eobject>();  
  7.   Library library = EXTLibraryFactory.eINSTANCE.createLibrary();  
  8.   Writer writer = EXTLibraryFactory.eINSTANCE.createWriter();  
  9.   writer.setFirstName("FirstName");  
  10.   writer.setLastName("LastName");  
  11.   writer.setName("FullName");  
  12.   for (int i = 0; i < 10; i++) {  
  13.    Book book = EXTLibraryFactory.eINSTANCE.createBook();  
  14.    book.setPublicationDate(new Date());  
  15.    book.setPages(i*100);  
  16.    book.setAuthor(writer);  
  17.    book.setCategory(BookCategory.MYSTERY_LITERAL);  
  18.    book.setTitle("タイトル"+i);  
  19.    library.getBooks().add(book);  
  20.    selectedEObjects.add((EObject) book);  
  21.    category = book.getCategory();  
  22.   }  
  23.   // PREPAREDSTATEMENT   
  24.   SELECT select = new SELECT(  
  25.     new FROM(selectedEObjects),  
  26.     new WHERE(new EObjectAttributeValueCondition(  
  27.       EXTLibraryPackage.eINSTANCE.getBook_Pages(),  
  28.       NumberCondition.between(500, Integer.MAX_VALUE)  
  29.      )  
  30.     )  
  31.    );  
  32.   //Execute Query & getResultSet  
  33.   Collection<eobject> resultset = select.execute();  
  34.   System.out.println(resultset);  
  35.   for (EObject object:resultset) {  
  36.    System.out.println(object.toString());  
  37.   }  
  38.   
  39.  }  
  40. }  
  41. </eobject></eobject></eobject>  

2010年1月26日火曜日

EMFのTeneoについて

EMFは大体理解できたが色々なさサブプロジェクトの理解ができていないため、
色々理解していこうと思います。

Teneoの和訳

TeneoはEclipseLinkやHibernateを使ったEMFに対するDB永続性のソリューションである。
DBスキーマに関連したリレーショナルマッピングへのEMFのアトミック生成をサポート。
ソリューションはEMFの特性をサポートするランタイムレイヤを含んでいる。
EMFオブジェクトは格納できる。HQLやEJB-SQLのようなクエリで検索できる。
EMFリソースの実装はEMF Editorとの統合を提供されている。
永続ロジックとマッピングはEJB3/JPAのようなアノテーションを使ってコントロールできる。
EJB3/JPAマッピングのほとんどがサポートされている。
ドキュメントとチュートリアルがelver.org で乗っている。

上記の和訳は非常に難しいことを言っているがDBのようなクエリがEMFオブジェクト
で利用できますというのが大きいです。


参考リンク
elver

hibernate

2010年1月24日日曜日

Pluginを作成するために便利なプラグイン

Eclipse MarketPlaceを見ていていいなぁと思ったものを紹介。


RCP Toolbox
RichClientGUIというサイトで配布されているサンプル?ツール。
起動するとデモ+ソースコードが見れるので、それを流用してサクサク
プラグインが作成できるかもなぁということで。




SWTXML
SWTをXMLで記述できる技術。まぁFlexに対抗するためにはやる必要な機能だもんなぁ。
これがJavaのソースコードに変換できればかっこいいのだが。調査中。

2010年1月22日金曜日

RCPのwelcome画面のカスタマイズ

RCPのWelcome画面をカスタマイズについて調べました。

・Widget編
org.eclipse.ui.introの拡張ポイントを追加
introを追加
 ID:intro
 class:HelloWorldIntroPart
introproductBindingを追加
productID:sample.product
introID:intro

HelloWorldIntroPartの実装を行います。IIntroPartインタフェースを実装する。
getTitle,getTitleImageを必ず実装します。
createPartControlを実装。
基本的にSWTで表示する方法と同じ方法で画面を作成する。

メリット:完全にSWTに紐づいているのでWelcome画面のボタンでアクションを起こすことができる。


・XHTML編
product.configurationのbrandingのwelcome PageのIntroIDを
指定する。
introIDを指定すると指定したplugin.xmlに拡張にintro,intro.config
が追加される。

content:introContent.xhtml

introContent.xhtmlとroot.xhtmlを確認し、XHTMLを編集していくことで
独自のWelcomeページを見ることができる。





・welcome画面を閉じる仕組み

  1. private IIntroSite introsite;  
  2. private IIntroPart intropart;  
  3.   
  4. workbench = PlatformUI.getWorkbench();  
  5. workbench.getIntroManager().closeIntro(intropart);  

2010年1月17日日曜日

VisualEditorでのScrolledFormの編集方法

VisualEditorでScrolledFormを使って画面作成したが、再度開きなおすと編集ができなくなってしまいます。
ScrolledFormとSectionを使うのが動作的にNGっぽいのでどうしようかと考えた結果。

Compositeで作成した後ScrolledFormに手で書き換えてやれば動作するのではという結論

1.Compositeで画面を作成する。
2.大本画面のCompositeをScrolledFormに型を変換する。
3.composite.setLayout()をcomposite.getBody().setLayout()に変換
4.ウィジェット生成メソッドのcreateXXXXの引数のScrolledFormのcompositeをcomposite.getBody()に変換する。・
5.以上作成完了
6.再度編集しなおすときは上記の逆の作業を行う。


非常にめんどくさいですが、上記方法でうまくいくことを確認できたので、今のところはOKかなとおもいます。