0%

Hadoop-Intellij-Plugin 插件设计和源码分析----HDFS文件系统浏览器设计和实现3

  本节,简单介绍一下,HDFS文件系统浏览器的管理,FileSystemBrowserManager和扩展IDEA浮动面板的实现。

文件系统浏览管理类:FileSystemBrowserManager

  FileSystemBrowserManager作用是在IDEA加载一个新的工程时,进行FileSystem的相关设置。他是Project级别的插件组件,实现了抽象类
AbstractProjectComponent,该类继承ApplicationAdapter、实现接口ProjectComponent、ProjectManagerListener。FileSystemBrowserManager需要进行持久化,因此还实现了 PersistentStateComponent接口。持久化文件使用 注解 @State、@Storage 来注明。
代码判断如下:

1
@State(name = "HadoopNavigator.Project.FileSystemBrowserManager",
2
        storages = {@Storage(file = "$PROJECT_CONFIG_DIR$/hdfsnavigator.xml", scheme = StorageScheme.DIRECTORY_BASED),
3
                    @Storage(file = "$PROJECT_FILE$")})
4
public class FileSystemBrowserManager
5
        extends AbstractProjectComponent
6
        implements PersistentStateComponent<Element>{}

hdfsnavigator.xml 为持久化文件。

1
/**
2
 * 获取活动的连接对象
3
 * @return
4
 */
5
@Nullable
6
public ConnectionHandler getActiveConnection()
7
{
8
    FileSystemBrowserTree activeBrowserTree = getActiveBrowserTree();
9
    if (activeBrowserTree != null)
10
    {
11
        BrowserTreeModel browserTreeModel = activeBrowserTree.getModel();
12
        if ((browserTreeModel instanceof TabbedBrowserTreeModel))
13
        {
14
            TabbedBrowserTreeModel tabbedBrowserTreeModel = (TabbedBrowserTreeModel) browserTreeModel;
15
            return tabbedBrowserTreeModel.getConnectionHandler();
16
        }
17
        FileSystemBrowserTreeNode browserTreeNode = activeBrowserTree.getSelectedNode();
18
        if (browserTreeNode != null)
19
        {
20
            return browserTreeNode.getConnectionHandler();
21
        }
22
    }
23
    return null;
24
}
25
/**
26
 * 获取浮动面板对象
27
 * @return
28
 */
29
@NotNull
30
public ToolWindow getBrowserToolWindow()
31
{
32
    ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(getProject());
33
    return toolWindowManager.getToolWindow(TOOL_WINDOW_ID);
34
}
35
/**
36
 * 获取主窗体对象
37
 * @return
38
 */
39
@NotNull
40
public BrowserToolWindowForm getToolWindowForm()
41
{
42
    return this.toolWindowForm.get();
43
}
1
/**
2
 * 插件初始化
3
 */
4
public void initComponent()
5
{
6
    //注册监听器
7
    EventUtil.subscribe(null, ProjectLifecycleListener.TOPIC, this.projectLifecycleListener);
8
}
9
/*
10
Project项目生命周期监听处理
11
 */
12
private ProjectLifecycleListener projectLifecycleListener = new ProjectLifecycleListener()
13
{
14
    @Override
15
    public void projectComponentsInitialized(@NotNull Project project)
16
    {
17
        //注册HDFS连接集合监听器
18
        EventUtil.subscribe(project,null, ConnectionBundleSettingsListener.TOPIC,this.connectionBundleSettingsListener);
19
    }
20
21
    private ConnectionBundleSettingsListener connectionBundleSettingsListener  = new ConnectionBundleSettingsListener()
22
    {
23
        /**
24
         * 重新构建UI
25
         */
26
        @Override
27
        public void settingsChanged()
28
        {
29
            getToolWindowForm().rebuild();
30
        }
31
    };
32
};

自定义IDEA的浮动面板插件。

  IDEA浮动面板,可以理解为 Tool Window。如要显示一个自定义的Tool Window,也很简单,首先,要自定义类,实现ToolWindowFactory接口,该接口有 一个方法 createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow),在自定义类中重写。代码如下:

1
/**
2
 * 定义ToolWindow 
3
 * Created by fangyuzhong on 17-7-15.
4
 */
5
public class FileSystemBrowserToolWindowFactory implements ToolWindowFactory,DumbAware
6
{
7
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow)
8
    {
9
        BrowserToolWindowForm toolWindowForm = FileSystemBrowserManager.getInstance(project).getToolWindowForm();
10
        ContentFactory contentFactory = new ContentFactoryImpl();
11
        Content content = contentFactory.createContent(toolWindowForm.getComponent(), null, false);
12
        toolWindow.getContentManager().addContent(content);
13
        toolWindow.setIcon(Icons.FILE_SYSTEM_HDFS);
14
    }
15
}

然后,在插件配置文件扩展点节点,注册该类即可。

1
<!--插件扩展点-->
2
<extensions defaultExtensionNs="com.intellij">
3
  <!-- 注册文件系统浏览器 FileSystemBrowser 的 Tool Window -->
4
  <toolWindow id="Hadoop FileSystem" icon="/img/hadoop-logo-16x16.png"
5
              anchor="left"
6
              factoryClass="com.fangyuzhong.intelliJ.hadoop.fsbrowser.FileSystemBrowserToolWindowFactory"/>
7
</extensions>

  设置显示的文字和相关图标。运行插件后,会在 IDEA的 View菜单—> Tool Windows —-> 显示 Hadoop FileSystem

总结

  经过前面的几节和本节的内容,就已经把Hadoop的文件系统浏览器的界面UI这块说完了。后面的几节,将会介绍HDFS文件浏览器的其他设计和实现。

----------------------- 本文结束 感谢阅读 -----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!