详细插件源码开发流程查看
参考
http://blog.csdn.net/lmj623565791/article/details/51548272;
本文主要内容出自:【张鸿洋的博客】
翻译插件源码
package com.rjz.text;
import com.google.gson.Gson;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.JBColor;
import com.intellij.ui.awt.RelativePoint;
import javax.swing.*;
import java.awt.*;
public class TranslateAction extends AnAction {
String baseUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=Skykai521&key=977124034&type=data&doctype=json&version=1.1&q=";
@Override
public void actionPerformed(AnActionEvent e) {
// TODO: insert action logic here
String inputValue = JOptionPane.showInputDialog("请输入需要翻译的字符串");
String value = HttpUtils.sendGet(baseUrl, inputValue);
ApplicationManager.getApplication().invokeLater(new Runnable() {
public void run() {
JBPopupFactory factory = JBPopupFactory.getInstance();
Gson gson = new Gson();
TranslateBean translateBean = gson.fromJson(value, TranslateBean.class);
String explains = "";
if (translateBean.getBasic() == null) {
explains = translateBean.getTranslation().get(0);
} else {
for (int i = 0; i < translateBean.getBasic().getExplains().size(); i++) {
explains = explains + "\n" + translateBean.getBasic().getExplains().get(i);
}
}
factory.createHtmlTextBalloonBuilder(inputValue +
"\n翻译:" + explains
, null, new JBColor(new Color(186, 238, 186), new Color(73, 117, 73)), null)
.setFadeoutTime(8000)
.createBalloon()
.show(new RelativePoint(new Point(500, 500)), Balloon.Position.below);
}
});
}
}
HttpUtils源码(网上随便找的一个)
package com.rjz.text;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
public class HttpUtils {
/**
* 向指定URL发送GET方法的请求
*
* @param url 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
param = URLEncoder.encode(param, "utf-8");
String urlNameString = url /*+ "?"*/ + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "utf-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
}
封装的bean(用插件自己生成一个就行)
package com.rjz.text;
import java.util.List;
/**
* Created by jiazhuo.ren on 2018/2/25.
*/
public class TranslateBean {
/**
* translation : ["测试"]
* basic : {"us-phonetic":"tɛst","phonetic":"test","uk-phonetic":"test","explains":["n. 试验;检验","vt. 试验;测试","vi. 试验;测试","n. (Test)人名;(英)特斯特"]}
* query : test
* errorCode : 0
* web : [{"value":["测试","测验","检验"],"key":"Test"},{"value":["Test Drive","Test Drive","无限狂飙"],"key":"Test Drive"},{"value":["测试员","测试工程师","软件测试工程师"],"key":"Test Engineer"}]
*/
private BasicBean basic;
private String query;
private int errorCode;
private List<String> translation;
private List<WebBean> web;
public BasicBean getBasic() {
return basic;
}
public void setBasic(BasicBean basic) {
this.basic = basic;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public List<String> getTranslation() {
return translation;
}
public void setTranslation(List<String> translation) {
this.translation = translation;
}
public List<WebBean> getWeb() {
return web;
}
public void setWeb(List<WebBean> web) {
this.web = web;
}
public static class BasicBean {
/**
* us-phonetic : tɛst
* phonetic : test
* uk-phonetic : test
* explains : ["n. 试验;检验","vt. 试验;测试","vi. 试验;测试","n. (Test)人名;(英)特斯特"]
*/
@com.google.gson.annotations.SerializedName("us-phonetic")
private String usphonetic;
private String phonetic;
@com.google.gson.annotations.SerializedName("uk-phonetic")
private String ukphonetic;
private List<String> explains;
public String getUsphonetic() {
return usphonetic;
}
public void setUsphonetic(String usphonetic) {
this.usphonetic = usphonetic;
}
public String getPhonetic() {
return phonetic;
}
public void setPhonetic(String phonetic) {
this.phonetic = phonetic;
}
public String getUkphonetic() {
return ukphonetic;
}
public void setUkphonetic(String ukphonetic) {
this.ukphonetic = ukphonetic;
}
public List<String> getExplains() {
return explains;
}
public void setExplains(List<String> explains) {
this.explains = explains;
}
}
public static class WebBean {
/**
* value : ["测试","测验","检验"]
* key : Test
*/
private String key;
private List<String> value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public List<String> getValue() {
return value;
}
public void setValue(List<String> value) {
this.value = value;
}
}
}
网友评论