0%

Hadoop-Intellij-Plugin 插件设计和源码分析----文件系统配置设计和实现1

  HDFS文件系统浏览器的配置设置分为两部分,一个是配置的基础类,涉及到对象的持久化写入,该部分定义相关的接口和抽象类的实现;另一部分是具体的对象持久化配置,包括HDFS连接配置持久化和整个系统的通用配置(国际化多语言的支持和文件树展现方式)持久化。本节讲解配置的基础类。
配置的基础类,定义在core 包中。整个的类的关系图如下:

定义持久化配置接口PersistentConfiguration

  该接口定义读取和写入持久化配置方法:

1
/**
2
 * 定义持久化配置接口
3
 * Created by fangyuzhong on 17-7-21.
4
 */
5
public  interface PersistentConfiguration
6
{
7
    /**
8
     * 读取持久化配置 config
9
     * @param paramElement
10
     */
11
      void readConfiguration(Element paramElement);
12
    /**
13
     * 写入持久化配置 config
14
     * @param paramElement
15
     */
16
      void writeConfiguration(Element paramElement);
17
}

定义Boolean、Enum、Int、String类型的对象持久化

  这些对象,继承了抽象类Setting,并且实现了PersistentConfiguration接口。抽象类Setting,代码如下:

1
/**
2
 * 定义抽象设置类
3
 * Created by fangyuzhong on 17-7-21.
4
 */
5
public abstract class Setting<T, E>
6
{
7
    private T value;
8
    private String name;
9
    protected Setting(String configName, T value)
10
    {
11
        this.name = configName;
12
        this.value = value;
13
    }
14
    /**
15
     * 配置项名称
16
     * @return
17
     */
18
    public String getName()
19
    {
20
        return this.name;
21
    }
22
    /*
23
     * 配置项的值
24
     * @return
25
     */
26
    public T value()
27
    {
28
        return  this.value;
29
    }
30
    /**
31
     * 设置配置项的值
32
     * @param value
33
     * @return
34
     */
35
    public boolean setValue(T value)
36
    {
37
        boolean response = !CommonUtil.safeEqual(this.value, value);
38
        this.value = value;
39
        return response;
40
    }
41
    /**
42
     * 获取配置项的值
43
     * @return
44
     */
45
    public T getValue()
46
    {
47
        return  this.value;
48
    }
49
    /**
50
     * 获取Setting的返回值
51
     * @return
52
     */
53
    public String toString()
54
    {
55
        return "[" + getClass().getSimpleName() + "] " + this.name + " = " + this.value;
56
    }
57
    /**
58
     * 
59
     * @param paramE
60
     * @return
61
     * @throws ConfigurationException
62
     */
63
    public abstract boolean to(E paramE)
64
            throws ConfigurationException;
65
    /**
66
     * 
67
     * @param paramE
68
     */
69
    public abstract void from(E paramE);
70
}

定义抽象配置类Configuration

  抽象类Configuration是一个抽象的泛型类,创建和读取配置的主窗体UI对象:ConfigurationEditorForm,同时也继承了ConfigurationUtil类。
ConfigurationEditorForm类是配置的UI对象的抽象类,所有配置的UI对象都需要实现该类。该类继承了通用窗体类FileSystemBaseFormImpl。

工程配置持久化ProjectConfiguration和配置集合类CompositeConfigurationEditorForm

  ProjectConfiguration 为工程配置抽象类,继承了配置Configuration,泛型类,定义了获取当前的工程Project。

1
/**
2
 * 定义工程配置类
3
 * Created by fangyuzhong on 17-7-21.
4
 */
5
public abstract class ProjectConfiguration<T extends ConfigurationEditorForm>
6
        extends Configuration<T>
7
        implements ProjectSupplier
8
{
9
10
    private Project project;
11
    /**
12
     * 初始化工程配置
13
     * @param project
14
     */
15
    public ProjectConfiguration(Project project)
16
    {
17
        this.project = project;
18
    }
19
    /**
20
     *获取工程Project
21
     * @return
22
     */
23
    public Project getProject()
24
    {
25
        return this.project;
26
    }
27
}

  CompositeConfigurationEditorForm 类为配置集合类,插件的配置分为多个项,因此需要将多个配置组合到一起。代码如下:

1
/**
2
 *定义配置集合类
3
 * Created by fangyuzhong on 17-7-21.
4
 */
5
public abstract class CompositeConfiguration<T extends CompositeConfigurationEditorForm>
6
        extends Configuration<T>
7
{
8
    private Configuration[] configurations;
9
    /**
10
     * 获取配置集合类
11
     * @return
12
     */
13
    public final Configuration[] getConfigurations()
14
    {
15
        if (this.configurations == null)
16
        {
17
            this.configurations = createConfigurations();
18
        }
19
        return this.configurations;
20
    }
21
    /**
22
     * 创建配置集合
23
     * @return
24
     */
25
    protected abstract Configuration[] createConfigurations();
26
    /**
27
     * 是否修改
28
     * @return
29
     */
30
    public final boolean isModified()
31
    {
32
        for (Configuration configuration : getConfigurations())
33
        {
34
            if (configuration.isModified())
35
            {
36
                return true;
37
            }
38
        }
39
        return super.isModified();
40
    }
41
    /**
42
     * 应用程序
43
     * @throws ConfigurationException
44
     */
45
    public void apply()
46
            throws ConfigurationException
47
    {
48
        T settingsEditor = (T) getSettingsEditor();
49
        if (((this instanceof TopLevelConfig)) && (settingsEditor != null))
50
        {
51
            GUIUtil.stopTableCellEditing(settingsEditor.getComponent());
52
        }
53
        for (Configuration configuration : getConfigurations())
54
        {
55
            configuration.apply();
56
        }
57
        super.apply();
58
        onApply();
59
    }
60
    /**
61
     * 重置
62
     */
63
    public final void reset()
64
    {
65
        for (Configuration configuration : getConfigurations())
66
        {
67
            configuration.reset();
68
        }
69
        super.reset();
70
    }
71
    /**
72
     * 释放UI资源
73
     */
74
    public void disposeUIResources()
75
    {
76
        for (Configuration configuration : getConfigurations())
77
        {
78
            configuration.disposeUIResources();
79
        }
80
        super.disposeUIResources();
81
    }
82
    /**
83
     * 读取配置
84
     * @param element
85
     */
86
    public void readConfiguration(Element element)
87
    {
88
        Configuration[] configurations = getConfigurations();
89
        for (Configuration configuration : configurations)
90
        {
91
            readConfiguration(element,configuration);
92
        }
93
    }
94
    /**
95
     * 写入配置
96
     * @param element
97
     */
98
    public void writeConfiguration(Element element)
99
    {
100
        Configuration[] configurations = getConfigurations();
101
        for (Configuration configuration : configurations)
102
        {
103
104
            writeConfiguration(element,configuration);
105
        }
106
    }
107
}

基础配置部分大致就这么多了,下一节,具体分析一下各个配置项。

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