拡張タブを作る

astah*プラグインには拡張タブビューがあります。これを使うと、例えばクラス情報のサマリを一覧にしてastah*上で閲覧できるプラグインを作成できます。

課題
”Hello World”という文字列を表示する拡張タブビューを作成してみましょう。


拡張タブを実装してみましょう

拡張タブビューはIPluginExtraTabViewインタフェースの実装クラスとして定義します。次のソースコードは、IPluginExtraTabViewを実装したHelloWorldViewの例です。

/*
 * パッケージ名は、生成したプラグインのパッケージ名よりも
 * 下に移してください。
 * プラグインのパッケージ名=> com.example
 *   com.change_vision.astah.extension.plugin => X
 *   com.example                                     => O
 *   com.example.internal                          => O
 *   learning                                         => X
 */
package com.example.internal;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import com.change_vision.jude.api.inf.AstahAPI;
import com.change_vision.jude.api.inf.project.ProjectAccessor;
import com.change_vision.jude.api.inf.project.ProjectEvent;
import com.change_vision.jude.api.inf.project.ProjectEventListener;
import com.change_vision.jude.api.inf.ui.IPluginExtraTabView;
import com.change_vision.jude.api.inf.ui.ISelectionListener;

public class HelloWorldView extends JPanel
      implements IPluginExtraTabView, ProjectEventListener {
  public HelloWorldView() {
    initComponents();
  }

  private void initComponents() {
    setLayout(new BorderLayout());
    add(createLabelPane(), BorderLayout.CENTER);
    addProjectEventListener();
  }

  private void addProjectEventListener() {
  try {
    AstahAPI api = AstahAPI.getAstahAPI();
    ProjectAccessor projectAccessor = api.getProjectAccessor();
    projectAccessor.addProjectEventListener(this);
  } catch (ClassNotFoundException e) {
    e.getMessage();
  }
  }

  private Container createLabelPane() {
    JLabel label = new JLabel("hello world");
    JScrollPane pane = new JScrollPane(label);
    return pane;
  }

  @Override
  public void projectChanged(ProjectEvent e) {
  }

  @Override
  public void projectClosed(ProjectEvent e) {
  }

   @Override
  public void projectOpened(ProjectEvent e) {
  }

  @Override
  public void addSelectionListener(ISelectionListener listener) {
  }

  @Override
  public Component getComponent() {
    return this;
  }

  @Override
  public String getDescription() {
    return "Show Hello World here";
  }

  @Override
  public String getTitle() {
    return "Hello World View";
  }

  public void activated() {
  }

  public void deactivated() {
  }
}

getComponent()は、表など拡張タブビュー上に表示されるコンテンツをastah*に返します。例では、拡張タブビュー上に”Hello World”を表示するHelloWorldViewインスタンスを返しています。拡張タブビューのタイトルはgetTitle()で定義します。

ProjectEventListenerインタフェースを実装したクラスは、astah*が現在開いているモデルのオブザーバーです。クラスの追加や削除などモデルに変更があった場合、projectChangedメソッドが呼ばれます。


拡張タブビューをastah*に追加してみましょう

続いてplugin.xmlに拡張タブビューを追加しましょう。

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
  <extension point="com.change_vision.astah.ui.view">
    <view
	      id="com.example.internal.HelloWorldView"
	      type="extraTab"
	      class="com.example.internal.HelloWorldView" />
  </extension>
</plugin>

各タグの意味は下記のとおりです。

Tag Name Attribute Required Description
extension 拡張ポイントを指定します
point com.change_vision.astah.ui.viewを指定
view ビューを指定します
id ビューのIDです
type 表示する場所を指定します
拡張ビューの場合、extraTabを指定します
class 拡張タブに表示する実装クラスを指定します


これで拡張タブビューを追加できました。