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的运行。