【工具思维】IDE的辅助plugin


前言

在带团队的时候,不止一次跟团队强调做技术要有从编码思维-工具思维-产品思维的上升意识,不要只做基础的编码实现。

本文也算抛砖引玉,介绍下在系统演进过程复用IDE的plugin机制实现的辅助小工具,解决一系列组件在运维测试过程中的痛点问题。

一、IDE插件开发

针对IDE的插件开发实现,模式相对来说较为简单,在IDE已经集成,直接创建插件工程。
在这里插入图片描述
生成后plugin.xml文件需要修改:
在这里插入图片描述

<idea-plugin>
    <!-- 插件唯一id,不能和其他插件项目重复,所以推荐使用com.xxx.xxx的格式;插件不同版本之间不能更改,若没有指定,则与插件名称相同 -->
    <id>com.your.company.unique.plugin.id</id>
    <!-- 插件名称,别人在官方插件库搜索你的插件时使用的名称 -->
    <name>PoisonChickenSoup</name>
    <!-- 插件版本号 -->
    <version>1.0</version>
    <!-- 供应商主页和email(不能使用默认值,必须修改成自己的)-->
    <vendor email="xxxxx@sina.com" url="http://www.zzz.com">Zte</vendor>
    <!-- 插件的描述 (不能使用默认值,必须修改成自己的。并且需要大于40个字符)-->
    <description><![CDATA[
     This plugin tools just for URM debug located assist
    ]]></description>
    <!-- 插件版本变更信息,支持HTML标签;
          将展示在 settings | Plugins 对话框和插件仓库的Web页面 -->
    <change-notes><![CDATA[
     TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST
    ]]>
    </change-notes>
    <!-- 插件兼容IDEAbuild 号-->
    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
    <idea-version since-build="173.0"/>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <!-- 插件所依赖的其他插件的id -->
    <!-- uncomment to enable plugin in all products
    <depends>com.intellij.modules.lang</depends>
    -->

    <extensions defaultExtensionNs="com.intellij">
        <!-- 声明该插件对IDEA core或其他插件的扩展 -->
        <!-- Add your extensions here -->
        <toolWindow id="XXXXX"
                    secondary="true"
                    anchor="right" factoryClass="com.xxx.NoteListWindowFactory"
                    icon="/a1.png">

        </toolWindow>
    </extensions>

    <application-components>
        <component>
            <implementation-class>com.xxxxx.pcs.dialog.TuantAppComponent</implementation-class>
        </component>
    </application-components>
    <!-- 编写插件动作 -->
    <actions>
        <!-- Add your actions here -->
    </actions>
</idea-plugin>

相关标签解释可以参考中文注释。

二、主体功能展示

以要实现的一个功能为例,该功能主要是针对波长信息进行解析,由于在数据库中波长信息是一个byte数组,而具体波长每一位被谁占用,哪一位空间,人工是无法一眼计算出来的,而这部分数据又是十分关键的数据,直接影响业务创建是否正常,所以在判断是否出现资源信息不一致性,则需要借助工具解析后,进行判断。

如数据库中定义的为:

AQICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB

最终的占用明细如下,其中192个波,3个波被占用,剩余189个波;占用信息一目了然

{
    "num0Count": 0,
    "num2Count": 3,
    "totalCount": 192,
    "output": "122211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
    "num1Count": 189
}

最终的工具展示信息显示,通过侧边栏的方式,嵌入到IDE中
在这里插入图片描述

三、主体功能开发

1、创建NoteListWindowFactory

import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import org.jetbrains.annotations.NotNull;

public class NoteListWindowFactory implements ToolWindowFactory {
    @Override
    public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) {
        //创建出NoteListWindow对象
        NoteListWindow noteListWindow = new NoteListWindow();
        //获取内容工厂的实例
        ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
        //获取用于toolWindow显示的内容
        Content content = contentFactory.createContent(noteListWindow.getPanel1(), "", false);
        //给toolWindow设置内容
        toolWindow.getContentManager().addContent(content);
    }
}

同时为了让IDE感知到该界面,需要在plugin.xml中配置

    <extensions defaultExtensionNs="com.intellij">
        <!-- 声明该插件对IDEA core或其他插件的扩展 -->
        <!-- Add your extensions here -->
        <toolWindow id="xxxx"
                    secondary="true"
                    anchor="right" factoryClass="com.xxxx.NoteListWindowFactory"
                    icon="/a1.png">

        </toolWindow>
    </extensions>

2、NoteListWindow

做为主界面,通过创建GUI Frame实现
在这里插入图片描述

关于布局问题,自已控制即可:
在这里插入图片描述

在这里插入图片描述

核心的回调函数是两个textArea焦点失去后的函数,包括

        textArea1.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                final WaveResult waveResult = AssistServiceImpl.calWave(textArea1.getText().trim());
                textArea3.setText(JSONUtil.toJsonPrettyStr(waveResult));
            }
        });
        textArea2.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                System.out.println("AAAAAAAAAAA");
                final List<MappingResult> mappingResults = AssistServiceImpl.calMapping(textArea2.getText().trim());
                textArea3.setText(JSONUtil.toJsonPrettyStr(mappingResults));
            }
        });

当需要第三方工具类时,需要导入:
在这里插入图片描述

四、效果

在这里插入图片描述

五、总结

编码思维-工具思维-产品思维,当老板交给你一个活,编码也许需要2周,有工具也许需要5天,有产品的也许2天就可以搞定。

共勉!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值