• Java 调用svnkit实现svn功能



    ·         显示版本树

     

     

     导入jar包

    svnkit.jar添加到项目中,用于实现svn功能。 把jackson-all-1.6.2.jar添加到项目中,用于显示树列表。把javaee.ar添加到项目中。

     

    新建一个类(SVNUtil.class)实现svn功能

             private String svnRoot;

        private String userName;

        private String password;

        private SVNRepository repository;

       

        /***

         * 构造方法

         * @param svnRoot

         *             svn根目录

         */

        public SVNUtil(String svnRoot) {

           this.svnRoot=svnRoot;

        }

        /***

         * 构造方法

         * @param svnRoot

         *             svn根目录

         * @param userName

         *             登录用户名

         * @param password

         *             登录密码

         */

        public SVNUtil(String svnRoot, String userName, String password) {

           this.svnRoot=svnRoot;

           this.userName=userName;

           this.password=password;

        }

    /***

         * 通过不同的协议初始化版本库

         */

        private static void setupLibrary() {

           // 对于使用http://https//

           DAVRepositoryFactory.setup();

           //对于使用svn/ /svn+xxx/ /

           SVNRepositoryFactoryImpl.setup();

           //对于使用file://

           FSRepositoryFactory.setup();

    }

    每次连接库都进行登陆验证

        /***

         * 登录验证

         * @return

         */

        public boolean login(){

           setupLibrary();

           try{

               //创建库连接

              repository=SVNRepositoryFactory.create(SVNURL.parseURIEncoded(this.svnRoot));

               //身份验证

               ISVNAuthenticationManager authManager = SVNWCUtil

               .createDefaultAuthenticationManager(this.userName,

                      this.password);

               //创建身份验证管理器

               repository.setAuthenticationManager(authManager);

               return true;

           } catch(SVNException svne){

               svne.printStackTrace();

               return false;

           }

        }

    下面的方法实现查询给定路径下的条目列表功能

    /***

         *

         * @param path

         * @return 查询给定路径下的条目列表

         * @throws SVNException

         */

        @SuppressWarnings("rawtypes")

        public List<SVN> listEntries(String path)

               throws SVNException {

           Collection entries = repository.getDir(path, -1, null,

                  (Collection) null);

           Iterator iterator = entries.iterator();

           List<SVN> svns = new ArrayList<SVN>();

           while (iterator.hasNext()) {

               SVNDirEntry entry = (SVNDirEntry) iterator.next();

               SVN svn = new SVN();

               svn.setCommitMessage(entry.getCommitMessage());

               svn.setDate(entry.getDate());

               svn.setKind(entry.getKind().toString());

               svn.setName(entry.getName());

               svn.setRepositoryRoot(entry.getRepositoryRoot().toString());

               svn.setRevision(entry.getRevision());

               svn.setSize(entry.getSize()/1024);

               svn.setUrl(path.equals("") ? "/"+entry.getName() : path +"/"+entry.getName());

               svn.setAuthor(entry.getAuthor());

               svn.setState(svn.getKind() == "file"?null:"closed");

               svns.add(svn);

           }

    新建一个SVNServlet

    添加一个方法用于把java对象转换为json字符串

    /**

         * java对象转换为json字符串

         *

         * @param obj

         *            :可以为map,list,javaBean

         * @return json字符串

         * @createTime 2010-11-23 下午07:42:58

         */

        public static String object2Json(Object obj) {

           try {

               StringWriter sw = new StringWriter();

               JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);

               mapper.writeValue(gen, obj);

               gen.close();

               return sw.toString();

           } catch (Exception e) {

               e.printStackTrace();

           }

           return null;

        }

     

        protected void doGet(HttpServletRequest request,

               HttpServletResponse response) throws ServletException, IOException {

           // TODO Auto-generated method stub

           this.doPost(request, response);

        }

     

       

        protected void doPost(HttpServletRequest request,

               HttpServletResponse response) throws ServletException, IOException {

           // TODO Auto-generated method stub

           Object svns = null;

           request.setCharacterEncoding("UTF-8");

           response.setCharacterEncoding("UTF-8");

           String path = request.getParameter("pid");

           String url = "svn://localhost/svndemo1";

           String usrName = "usrName";

           String password = "password";

           if (path == null) {

               path = "";

           }

           path = new String(path.getBytes("ISO-8859-1"),"UTF-8");

           String type = request.getParameter("type");

           PrintWriter out = response.getWriter();

           try {

               SVNUtil svnUtil = new SVNUtil(url, usrName, password);

               if (svnUtil.login()) {

                  /*用于查询历史记录

    if ("history".equals(type)) {

                      List<SVN> svnl = svnUtil.getHistory(path);

                      HashMap<String, Object> sv = new HashMap<String, Object>();

                      sv.put("total", svnl.size());

                      sv.put("rows", svnl);

                      svns = sv;

                  } else {*/

                      svns = svnUtil.listEntries(path);

                  //}

                  //java对象转换成json字符串

                  String json = SVNServlet.object2Json(svns);

                  out.print(json);

               } else {

                  System.out.println("验证失败");

               }

           } catch (SVNException ex) {

               ex.printStackTrace();

           }

           out.flush();

           out.close();

        }

    新建一个index.jsp用户显示版本数列表,页面显示我使用了jquery-easyui模板

    <%@ page language="java" contentType="text/html; charset=utf-8"

        pageEncoding="utf-8"%>

        <%

        String path = request.getContextPath();

        String basePath = request.getScheme() + "://"

               + request.getServerName() + ":" + request.getServerPort()

               + path + "/";

        %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

    <base href="<%=basePath%>">

    <title>SVN</title>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <link rel="stylesheet" type="text/css"

        href="plugs/themes/default/easyui.css">

    <link rel="stylesheet" type="text/css" href="plugs/themes/icon.css">

    <script type="text/javascript" src="plugs/jquery-1.4.2.min.js"></script>

    <script type="text/javascript" src="plugs/jquery.easyui.min.js"></script>

    <script type="text/javascript">

        $(function() {

           $('#test').treegrid({

               title : 'SVN列表',

               nowrap : false,

               rownumbers : true,

               collapsible : false,

               url : 'svn?pid=',

               idField : 'url',

               treeField : 'url',

               frozenColumns : [ [ {

                  title : '路径',

                  field : 'url',

                  width : 350,

                  formatter : function(value) {

                      return '<span style="color:red">' + decodeURI(value.substr(value.lastIndexOf("/"))) + '</span>';

                  }

               } ] ],

               columns : [ [ {

                  field : 'name',

                  title : '名称',

                  width : 120

               }, {

                  field : 'size',

                  title : '文件大小(KB)',

                  width : 80,

                  rowspan : 2

               }, {

                  field : 'revision',

                  title : '版本号',

                  width : 80,

                  rowspan : 2

               }, {

                  field : 'author',

                  title : '作者',

                  width : 100,

                  rowspan : 2

               }, {

                  field : 'date',

                  title : '修改日期',

                  width : 130,

                  rowspan : 2

               }, {

                  field : 'commitMessage',

                  title : '注释',

                  width : 150,

                  rowspan : 2

               }, {

                  field : 'kind',

                  title : '操作',

                  width : 120,

                  align : 'center',

                  rowspan : 2,

                  formatter : function(value) {

                      return value=='file' ? '<a onclick="download()" style="cursor: pointer;color:red">下载</a><a onclick="viewHistory()" style="margin-left:5px; cursor: pointer;color:red">历史版本</a>' : '';

                  }

               }] ],

               onBeforeExpand : function(row, param) {

                  $(this).treegrid('options').url = 'svn?pid='+encodeURI(decodeURI(row.url));

               }

           });

        });

       

        function download(){

           setTimeout(function(){

               var node = $('#test').treegrid('getSelected');

               if(node !=null)

                  window.open("download?url="+encodeURI(decodeURI(node.url))+"&size="+node.size+"&name="+encodeURI(decodeURI(node.name))+"&revision="+node.revision);

           },200);

          

        }

       

        function viewHistory(){

           setTimeout(function(){

               var node = $('#test').treegrid('getSelected');

               if(node != null) {

                  window.open("history.jsp?uri="+encodeURI(decodeURI(node.url)),"_blank","height=400,width=700,status=yes,toolbar=no,menubar=no,location=no");

               }

           }, 200);

        }

    </script>

     

    </head>

    <body>

     

    <table id="test"></table>

     

    </body>

    </html>

     

     

    显示效果如下

    版本树列表

     

    历史版本


  • 相关阅读:
    httpClient模拟浏览器发请求
    中文字符所占字节
    eclipse代码左虚线对齐设置
    git 几款好用的客户端工具
    github快速入门(一)
    eclipse插件开发(一)
    SpringMVC解决跨域的两种方案
    SpringMVC SessionAttributes 简述
    关于Spring的HibernateTemplate的findByExample方法使用时的一点注意。
    Windows10 Ubuntu bash 配置 LAMP+JDK+Tomcat
  • 原文地址:https://www.cnblogs.com/pocter/p/3684510.html
Copyright © 2020-2023  润新知