上一篇:ProjectViewPopupMenu的創(chuàng)建
下一篇:插件的打包、發(fā)布
插件已發(fā)布
1,在Plugins中搜索CCLines,進(jìn)行下載安裝;
2,源碼在Github中開源下載;
3,搜索不到的朋友,可以升級一下idea后再嘗試,因?yàn)椴寮懈鷌dea的版本關(guān)聯(lián);
上一篇其實(shí)我們就已經(jīng)把整個(gè)插件開發(fā)基本講解完了,今天我要講的內(nèi)容也比較簡單,就是數(shù)據(jù)的讀寫。
如果喜歡的話,記得支持一下~~~
PropertiesComponent讀寫類
首先我們先來直接看下我其中一個(gè)數(shù)據(jù)存儲類(SuffixMapping)的代碼,該類的作用就是根據(jù)統(tǒng)計(jì)文件類型的后綴名來讀寫統(tǒng)計(jì)規(guī)范,代碼如下:
PS
發(fā)布出去后,在Android Studio中使用【org.codehaus.jettison.json】解析庫出錯(cuò),所以我后面使用了【net.sf.json】解析庫。
package compute;
import com.intellij.ide.util.PropertiesComponent;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 后綴名映射 2017/3/20 10:31
*/
public class SuffixMapping {
private static final String SUFFIX_DATA_KEY = "suffix_data_key";
public static final String SUFFIX = "suffix"; // 后綴名
public static final String START_MORE_COMMENT = "start_more_comment"; // 多行注釋開頭
public static final String END_MORE_COMMENT = "end_more_comment"; // 多行注釋結(jié)尾
public static final String SINGLE_COMMENT = "single_comment"; // 單行注釋
public static Map<String, Map<String, String>> mapData = new HashMap<>(); // 存放數(shù)據(jù) 2017/3/20 10:56
/**
* 初始化后綴名映射 2017/3/20 10:39
*/
public static void initMapping() {
try {
mapData.clear(); // 清空數(shù)據(jù) 2017/3/20 10:56
// 獲取數(shù)據(jù) 2017/4/1 19:56
String[] data = _getData();
String json = "[";
for (int i = 0; i < data.length; i++) {
json += data[i] + ",";
}
json += "]";
// 解析json數(shù)據(jù) 2017/3/20 10:57
JSONArray jsonArray = new JSONArray(json);
JSONObject jsonObject;
Map<String, String> mapData;
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.optJSONObject(i);
if (jsonObject != null) {
mapData = new HashMap<>();
mapData.put(START_MORE_COMMENT, jsonObject.optString(START_MORE_COMMENT).toUpperCase().trim());
mapData.put(END_MORE_COMMENT, jsonObject.optString(END_MORE_COMMENT).toUpperCase().trim());
mapData.put(SINGLE_COMMENT, jsonObject.optString(SINGLE_COMMENT).toUpperCase().trim());
SuffixMapping.mapData.put(jsonObject.optString(SUFFIX).toUpperCase().trim(), mapData);
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Suffix mapping Exception is " + e.getMessage());
}
}
/**
* 獲取數(shù)據(jù)列表 2017/4/1 20:09
* @return
*/
private static String[] _getData() {
if (PropertiesComponent.getInstance().isValueSet(SUFFIX_DATA_KEY)) {
return PropertiesComponent.getInstance().getValues(SUFFIX_DATA_KEY);
} else {
return new String[] {"{\"suffix\": \"JAVA\", \"start_more_comment\": \"/*\", \"end_more_comment\": \"*/\", \"single_comment\": \"http://\"}",
"{\"suffix\": \"XML\", \"start_more_comment\": \"<!--\", \"end_more_comment\": \"-->\", \"single_comment\": \"\"}",
"{\"suffix\": \"PY\", \"start_more_comment\": \"''',\\\"\\\"\\\"\", \"end_more_comment\": \"''',\\\"\\\"\\\"\", \"single_comment\": \"#\"}"};
}
}
/**
* 保存數(shù)據(jù) 2017/4/1 20:20
* @param array
*/
private static void _saveData(String[] array) {
PropertiesComponent.getInstance().setValues(SUFFIX_DATA_KEY, array);
}
/**
* 添加統(tǒng)計(jì)類型 2017/3/27 15:08
* @param data 數(shù)據(jù)
*/
public static void addMapping(Map<String, String> data) {
try {
// 初始化 2017/3/27 16:00
if (mapData.size() == 0)
initMapping();
if (data != null)
mapData.put(data.get(SUFFIX), data);
JSONObject jsonObject;
Map<String, String> mapTemp;
String[] datas = new String[mapData.size()];
int idx = 0;
for (String suffix:mapData.keySet()) {
mapTemp = mapData.get(suffix);
jsonObject = new JSONObject();
jsonObject.put(SUFFIX, suffix);
jsonObject.put(START_MORE_COMMENT, mapTemp.get(START_MORE_COMMENT));
jsonObject.put(END_MORE_COMMENT, mapTemp.get(END_MORE_COMMENT));
jsonObject.put(SINGLE_COMMENT, mapTemp.get(SINGLE_COMMENT));
datas[idx++] = jsonObject.toString();
}
_saveData(datas);
} catch (Exception e) {
System.out.println("Types Exception is " + e.getMessage());
}
}
/**
* 添加統(tǒng)計(jì)類型 2017/3/27 15:08
* @param suffix key值
*/
public static void removeMapping(String suffix) {
// 初始化 2017/3/27 16:00
if (mapData.size() == 0)
initMapping();
if (mapData.containsKey(suffix))
mapData.remove(suffix);
addMapping(null);
}
/**
* 添加統(tǒng)計(jì)類型 2017/3/27 15:08
* @param lstSuffix key值
*/
public static void removeMappings(List<String> lstSuffix) {
if (lstSuffix == null || lstSuffix.size() == 0)
return;
// 初始化 2017/3/27 16:00
if (mapData.size() == 0)
initMapping();
for (String suffix:lstSuffix)
if (mapData.containsKey(suffix))
mapData.remove(suffix);
addMapping(null);
}
}
上面一堆邏輯,我們大都粗略看看方法的注釋頭就好了,其中我們只要著重關(guān)注兩個(gè)方法:_getData()、_saveData()。
我們可以很直觀的看到兩個(gè)方法中是使用PropertiesComponent類進(jìn)行數(shù)據(jù)的存儲,其實(shí)寫過Android的人應(yīng)該有所聯(lián)想的,該類跟我們經(jīng)常使用的【SharedPreferences】其實(shí)是類似的,那么理解起來應(yīng)該就非常容易了,我也不多講了。
好了,今天就到這里了,今天的內(nèi)容比較簡單,為什么要開一篇出來寫?因?yàn)槲蚁矚g按細(xì)分的講,每篇都講一個(gè)核心的功能,方便以后自己能更快的查看。
下一篇講怎么發(fā)布插件了。
謝謝支持~~~