1. 概述

1) 在透视图中的位置的定义:Perspective.java

String repositoryId = "org.talend.repository.views.repository";
        IFolderLayout leftTopLayout = layout.createFolder("navigatorLayout", IPageLayout.LEFT, new Float(0.3),
                IPageLayout.ID_EDITOR_AREA);
        leftTopLayout.addView(repositoryId);
        leftTopLayout.addView(navigatorId);

2) 在插件:org.talend.repository中对org.eclipse.ui.views进行扩展,对应的实现类:org.talend.repository.ui.views.RepositoryView

3) 结果:

2. 模型中的数据的获取

viewer.setContentProvider(new RepositoryContentProvider(this));

 

RepositoryContentProvider.getElements(Object parent);
RepositoryContentProvider.initialize();
       RepositoryNode root = view.getRoot();
        List<RepositoryNode> nodes = root.getChildren();

        IRepositoryFactory factory = RepositoryFactoryProvider.getInstance(view.getRepositoryContext());
        try {
            // 0. Recycle bin
            RepositoryNode recBinNode = new RepositoryNode(null, root, ENodeType.STABLE_SYSTEM_FOLDER);
            recBinNode.setProperties(EProperties.LABEL, ERepositoryObjectType.RECYCLE_BIN);
            recBinNode.setProperties(EProperties.CONTENT_TYPE, ERepositoryObjectType.RECYCLE_BIN);
            nodes.add(recBinNode);
// 1. Business process
// 2. Process
// 3. Routines 3.1. Snippets
// 4. Documentation
// 5. Metadata 5.1. Metadata connections 5.2. Metadata file delimited 5.3. Metadata file positional 5.4. Metadata file regexp

// bin folder in Business Process& Process and so on is used to store the items which have been removed. 

 

3. Repository View中Action

3.1) 定义

共有两处对org.talend.repository.actions进行扩展。

org.talend.designer.core中

org.talend.repository中

3.2) 触发

 1)从扩展点中获取和注册所有的Action

RepositoryView.makeActions(){
  refreshAction = new RefreshAction(this);

   this.getSite().getKeyBindingService().registerAction(refreshAction);

  List<ITreeContextualAction> contextualsActions = ActionsHelper.getActions();

   for (ITreeContextualAction action : contextualsActions) {
    this.getSite().getKeyBindingService().registerAction(action);
   }
   doubleClickAction = new RepositoryDoubleClickAction(this, contextualsActions);

}

ActionsHelper.getActions()根据扩展点:org.talend.repository.actions 取得所有的定义中的Actions。

4. Repository View中的popupMenu

hookContextMenu();

定义一个MenuManager,根据当前所选择的RepositoryNode弹出不同包含不同Actions的右键菜单。

    private void fillContextMenu(IMenuManager manager) {
        IStructuredSelection sel = (IStructuredSelection) viewer.getSelection();

        for (ITreeContextualAction action : contextualsActions) {
            action.init(getViewer(), sel);
            if (action.isVisible()) {
                manager.add(action);
            }
        }
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

 在Action的public void init(TreeViewer viewer, IStructuredSelection selection)方法里面,判断当前选择的action是否可用。

5. Repository View中的toolbar Action

contributeToActionBars();

目前只添加了refresh Action.

6. 初始化D&D

initDragAndDrop();

?

7. DoubleClickAction进行监听和触发

hookDoubleClickAction(){
        viewer.addDoubleClickListener(new IDoubleClickListener() {

            public void doubleClick(DoubleClickEvent event) {
                doubleClickAction.run();
            }
        });
}

  

Note:

对该视图的加载优先于Perspective.java的运行。