定制eclipse的SVN插件subclipse

需求背景:项目进行到AT阶段,Source的移管已经不是轻易的Submit能解决的了。专门人员负责开发版Source和AT服务器端Source的更新操作,而作为一个Bug Fixer那只能将你的Source建立Tags,让负责人员把你的Source慎重的移送到AT环境中去。而这一个过程中建立Tag也是有一定规则的,不能乱建。例如:http://www.uugu.org/uugu/trunk/tags/RES_SIR_(BugID)_(YYYYMMDD)/src/***/UserAction.java
而针对这样一个Tag,每次我们都需要去修改它的BugID,日期,还有单个文件时需要在URL最后面手动添加文件名。这样的操作势必在我这个懒人眼里是那么的浪费时间!!!因此,我想到修改eclipse的SVN插件subclipse。

需求:每次建立Tag时,只要选择文件右键Team->Branch/Tag…,在打开的窗口中需要自动生成上面格式的URL,而其中的BugID,日期以及文件名也都需要动态改变。当然,建立第一个Tag时其中的BugID还是需要自己去填写的,仅仅是以后同一个BugID的Tag不需要修改了。只需要一路下一步即可。

开始:
1. 思考我需要改哪些地方?UI!好,那就是org.tigris.subversion.subclipse.ui这个jar包了。
2. 去官网把最新的Source Download下来。SVN URL: http://subclipse.tigris.org/svn/subclipse  USERNAME: guest PASSWORD: 空 即可。
3. 打开Eclipse建立Java工程,将下载好的ui工程导入进来。
4. 修改哪些地方呢?这是我最费时间的地方,不过经过我千方百计的实验,你们可以拿成果物了!就是org.tigris.subversion.subclipse.ui.wizards这个包里面。这里面是所有功能向导的UI代码。而我需要修改就是BranchTagWizardRepositoryPage这个文件了。
5. 我需要每次打开向导界面的时候就自动生成URL,填充到URL框体中。这块是修改toUrlCombo的setText的内容,定义个方法getTagsUrl(getCommonRoot(),multipleSelections())。目的就是读取配置文件,自动组合URL。



private String getTagsUrl(String Url,boolean multipleSelect){
String tagsUrl = "";
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(filePath));
Properties p = new Properties();
p.load(in);
String type = p.getProperty("TYPE");
String num = p.getProperty("NUM");
String ProjectName = p.getProperty("PROJECT");
in.close();
DateFormat df = new SimpleDateFormat("yyyyMMdd");
tagsUrl = "eBuilder/tags/RES_"+type+"_"+ num + "_" + df.format(new Date());
Url = Url.replace(ProjectName, tagsUrl);
//针对选择多个文件的情况,不需要在URL后面添加文件名
if(!multipleSelect){
String name = null;
if (branchResources[0].getResource() == null) name = branchResources[0].getRemoteResource

().getName();
else name = branchResources[0].getResource().getName();
Url = Url + "/" + name;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return Url;
}



toUrlCombo.getCombo().addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if(toUrlCombo.getText().length()>=77){
String[] strs = toUrlCombo.getText().split("_");
String TYPE = strs[2];
String num = strs[3];

Properties prop = new Properties();
InputStream fis;
try {
fis = new FileInputStream(filePath);
prop.load(fis);
fis.close();
OutputStream fos = new FileOutputStream(filePath);
prop.setProperty("TYPE", TYPE);
prop.setProperty("NUM", num);
prop.store(fos,"Updated");
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
viewer.refresh();
}
});



7. 讲编译好的class替换原先jar包对应的class,然后将jar包替换eclipse里plugins文件夹内同名jar包就可以了。


laiyuan:http://chenzhiguo.cn/archives/modify_subclipse

你可能感兴趣的:(eclipse)