快捷搜索:  汽车  科技

plug in插件教程(工具思维-IDE的辅助plugin)

plug in插件教程(工具思维-IDE的辅助plugin){ "num0Count": 0 "num2Count": 3 "totalCount": 192 "output": "122211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" "num1Count": 189 } 最终的工具展示信息显示,通过侧边栏的方式,嵌入到IDE中AQICAgEBAQEBAQEBAQEBAQEBAQ

工具思维-IDE的辅助plugin
  • 前言
  • 一、IDE插件开发
  • 二、主体功能展示
  • 三、主体功能开发
    • 1、创建NoteListWindowFactory
    • 2、NoteListWindow
  • 四、效果
  • 五、总结

前言

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

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

一、IDE插件开发

针对IDE的插件开发实现,模式相对来说较为简单,在IDE已经集成,直接创建插件工程。

plug in插件教程(工具思维-IDE的辅助plugin)(1)


生成后plugin.xml文件需要修改:

plug in插件教程(工具思维-IDE的辅助plugin)(2)

<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中

plug in插件教程(工具思维-IDE的辅助plugin)(3)

三、主体功能开发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实现

plug in插件教程(工具思维-IDE的辅助plugin)(4)

关于布局问题,自已控制即可:

plug in插件教程(工具思维-IDE的辅助plugin)(5)

plug in插件教程(工具思维-IDE的辅助plugin)(6)

核心的回调函数是两个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)); } });

当需要第三方工具类时,需要导入:

plug in插件教程(工具思维-IDE的辅助plugin)(7)

四、效果

plug in插件教程(工具思维-IDE的辅助plugin)(8)

五、总结

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

共勉!!!

猜您喜欢: