zoukankan      html  css  js  c++  java
  • 授权文件比较工具完整版

    package com.runqianapp;
    
    import java.util.ArrayList;
    import java.util.List;
    import org.jdom.Element;
    import com.runqianapp.license.FunctionInfo;
    import com.runqianapp.utils.XMLUtil;
    
    /**
     * 获取version.xml信息类
     * @author LXY
     *
     */
    public class ParseVersionXML {
    	/**function节点存储列表*/
    	List<FunctionInfo> funcList = new ArrayList();
    	/**
    	 * 解析version.xml,并将得到的function节点以FunctionInfo的形式存储到funcList中
    	 */
    	public void parse(){
    		Element root = XMLUtil.getXMLRoot();
    		// 读取功能点定义,并保存
    		List funcs = root.getChild("functions").getChildren("function");
    		for(int j=0; j<funcs.size(); j++) {
    			// 读取功能点信息
    			Element func = (Element)funcs.get(j);
    			short funcID = Short.parseShort(func.getAttributeValue("id"));
    			String funcName = func.getAttributeValue("name");
    			// 保存功能信息
    			FunctionInfo fi = new FunctionInfo(funcID, funcName);
    			funcList.add(fi);
    		}
    	}
    }
    
    package com.runqianapp;
    
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 将功能ID转化为功能名称类
     * @author LXY
     *
     */
    public class ConvertID {
    	/**仅存在源授权文件中的功能点名称列表*/
    	private  List <String> srcOnlyNameList = new ArrayList();
    	/**仅存在目标授权文件中的功能点名称列表*/
    	private  List <String> newOnlyNameList = new ArrayList();
    	/**两授权文件共同存在的功能点名称列表*/
    	private  List <String> commonNameList = new ArrayList();
    	/**
    	 * 将功能ID转化为功能名称方法
    	 * @param lc
    	 * @param pv
    	 */
    	public void Convert(LicenseCompare lc,ParseVersionXML pv){
    		for(int i = 0;i<lc.srcOnlyList.size();i++){
    			for(int j = 0;j<pv.funcList.size();j++){
    				if(lc.srcOnlyList.get(i).equals(pv.funcList.get(j).getID())){
    					srcOnlyNameList.add(pv.funcList.get(j).getName());
    				}
    			}
    		}
    		for(int i = 0;i<lc.newOnlyList.size();i++){
    			for(int j = 0;j<pv.funcList.size();j++){
    				if(lc.newOnlyList.get(i).equals(pv.funcList.get(j).getID())){
    					newOnlyNameList.add(pv.funcList.get(j).getName());
    				}
    			}
    		}
    		for(int i = 0;i<lc.commonList.size();i++){
    			for(int j = 0;j<pv.funcList.size();j++){
    				if(lc.commonList.get(i).equals(pv.funcList.get(j).getID())){
    					commonNameList.add(pv.funcList.get(j).getName());
    				}
    			}
    		}
    	}
    	public List<String> getSrcOnlyNameList(){
    		return this.srcOnlyNameList;
    	}
    	public List<String> getNewOnlyNameList(){
    		return this.newOnlyNameList;
    	}
    	public List<String> getCommonNameList(){
    		return this.commonNameList;
    	}
    	
    
    }
    
     
    package com.runqianapp;
    import java.util.ArrayList;
    import java.util.List;
    import com.runqianapp.license.LicenseUtils;
    /**
     * 授权文件功能点比较实现类
     * @author LXY
     *
     */
    public class LicenseCompare {
    	/**源授权文件中的功能ID列表*/
    	List srcList = new ArrayList();
    	/**目标授权文件中的功能ID列表*/
    	List newList = new ArrayList();
    	/**仅存在于源授权文件中的功能ID列表*/
    	List srcOnlyList = new ArrayList();
    	/**仅存在与目标授权文件中的功能ID列表*/
    	List newOnlyList = new ArrayList();
    	/**两授权文件共同存在的功能ID列表*/
    	List commonList = new ArrayList();
    	/**
    	 * 构造方法,在获得LicenseCompare对象时可以直接拿到源授权文件功能列表ID
    	 * @param srcLicenseFilePath 源授权文件路径
    	 */
    	public LicenseCompare(String srcLicenseFilePath) {
    		srcList = LicenseUtils.getLicenseFunctions(srcLicenseFilePath);
    		for(int i = 0;i<srcList.size();i++){
    			commonList.add(srcList.get(i));
    		}
    	}
    	
    	/**
    	 * 授权文件功能点比较方法
    	 * @param newLicenseFilePath 目标授权文件路径
    	 */
    	public void Compare(String newLicenseFilePath) {
    	    newList = LicenseUtils.getLicenseFunctions(newLicenseFilePath);	  
    	    commonList.retainAll(newList);
    //	    System.out.println(commonList);
    		for(int i = 0;i<srcList.size();i++){
    			boolean flag = false;
    			for(int j = 0;j<newList.size();j++){
    				if(srcList.get(i).equals(newList.get(j))){
    					flag = true;
    					break;
    				}
    			}
    			if(flag == false){
    				srcOnlyList.add(srcList.get(i));
    			}
    		}
    		for(int i = 0;i<newList.size();i++){
    			boolean flag = false;
    			for(int j = 0;j<srcList.size();j++){
    				if(newList.get(i).equals(srcList.get(j))){
    					flag = true;
    					break;
    				}
    			}
    			if(flag == false){
    				newOnlyList.add(newList.get(i));
    			}
    		}
    
    	}
    
    }
    
     
     
    
    
    package com.runqianapp;
    
    import com.runqianapp.utils.FileUtil;
    
    public class Main {
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    	    String srcFile = "D:\集深数据\1206\GEEZNV5.0\tomcat\webapps\reportmis\WEB-INF\test.lic";
    	    String newFile = "F:\test.lic";
    	    /**结果输出对象*/
    	    StringBuffer result = new StringBuffer();  
    	    
    	    
    	    /**解析version.xml文件*/
    	    ParseVersionXML pv = new ParseVersionXML();
    	    pv.parse();
    	    /**获得授权文件差异功能点的ID列表*/
    		LicenseCompare lc = new LicenseCompare(srcFile);
    		lc.Compare(srcFile);
    		/**转化功能点ID为功能点名称*/
    		ConvertID ct = new ConvertID();
    		ct.Convert(lc,pv);
    		
    		
    		/**以下是结果输出*/
    //		System.out.println("仅源授权文件中存在的功能ID:"+lc.srcOnlyList);
    //		System.out.println("仅目标授权文件中存在的功能ID:"+lc.newList);		
    		result.append("**********************************").append("
    ")
    		  	  .append("两授权文件共同存在的功能点:"+"(共计"+ct.getCommonNameList().size()+"个)").append("
    ")
    		  	  .append("**********************************").append("
    ");
    		System.out.println("**********************************");
    		System.out.println("两授权文件共同存在的功能点:"+"(共计"+ct.getCommonNameList().size()+"个)");
    		System.out.println("**********************************");
    		for(int i = 0;i<ct.getCommonNameList().size();i++){
    			System.out.println(ct.getCommonNameList().get(i));
    			result.append(ct.getCommonNameList().get(i)).append("
    ");
    		}		
    		result.append("**********************************").append("
    ")
    			  .append("仅源授权文件中存在的功能点:"+"(共计"+ct.getSrcOnlyNameList().size()+"个)").append("
    ")
    			  .append("**********************************").append("
    ");
    		System.out.println("**********************************");
    		System.out.println("仅源授权文件中存在的功能点:"+"(共计"+ct.getSrcOnlyNameList().size()+"个)");
    		System.out.println("**********************************");
    		for(int i = 0;i<ct.getSrcOnlyNameList().size();i++){
    			System.out.println(ct.getSrcOnlyNameList().get(i));
    			result.append(ct.getSrcOnlyNameList().get(i)).append("
    ");
    		}
    		result.append("**********************************").append("
    ")
    		  	  .append("仅目标授权文件中存在的功能点:"+"(共计"+ct.getNewOnlyNameList().size()+"个)").append("
    ")
    		  	  .append("**********************************").append("
    ");
    		System.out.println("**********************************");
    		System.out.println("仅目标授权文件中存在的功能点:"+"(共计"+ct.getNewOnlyNameList().size()+"个)");
    		System.out.println("**********************************");
    		for(int i = 0;i<ct.getNewOnlyNameList().size();i++){
    			System.out.println(ct.getNewOnlyNameList().get(i));
    			result.append(ct.getNewOnlyNameList().get(i)).append("
    ");
    		}
    		FileUtil.writeFile(result.toString());
    	}
    
    }
    
    package com.runqianapp.utils;
    
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    /**
     * 文件工具类
     * @author LXY
     *
     */
    public class FileUtil{
    	private static String outFilePath = System.getProperty("user.dir")+"\result.txt";
    	/**
    	 * 将结果输出到文件方法
    	 * @param st   要输出的字符串
    	 * @param outFilePath   输出路径
    	 */
    	public static void writeFile(String st){
    		//outFilePath = outFilePath.substring(0,outFilePath.lastIndexOf("\"))+"\result.txt"; //将结果输出到当前jar包目录上一级的resutl.txt文档中
    		FileOutputStream fos=null; 
    		  try {   
    			  fos=new FileOutputStream(outFilePath);  
    			  PrintWriter pw=new PrintWriter(fos);   			   				 
    			  pw.write(st);   			
    			  pw.flush(); 
    			  }catch(Exception e){   
    				  e.printStackTrace(); 
    				  System.out.println("输出结果文件出错,程序退出:");
    				  System.exit(0);
    			  }finally{   
    				  try {    
    					  fos.close();   
    				      }catch(Exception e){    
    				    	  e.printStackTrace();   
    				      } 
    			  }	
    		
    	}
    }
    
    
    
    
    package com.runqianapp.utils;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    /**
     * XML工具类
     * @author LXY
     *
     */
    public class XMLUtil {
    	private static String versionPath = System.getProperty("user.dir")+"/version.xml";
    	/**
    	 * 根据xml路径得到rootElement 
    	 * @param xmlPath
    	 * @return
    	 * @throws IOException 
    	 */
    	public static Element getXMLRoot()  {
    		SAXBuilder builder = new SAXBuilder();
    		Document doc = null;
    		Element root = null;
    		try {
    			File file = new File(versionPath);
    			doc = builder.build(file);
    			root = doc.getRootElement();
    		} catch (JDOMException e) {
    			e.printStackTrace();
    			System.out.println("解析配置文件出错,程序退出:");
    			System.exit(0);
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.out.println(versionPath+"文件路径错误,程序退出:");
    			System.exit(0);
    		}
    		return root;
    	}
    }
    
    
    
    
    


  • 相关阅读:
    介绍Asta4D
    Mac下terminal的常用命令
    Mac下的终端(Terminal)简介
    SCA简介及配置示例
    抽象
    自助式微软BI工具PowerPivot简介!
    C编译: 使用gdb调试
    operamasksui2.0 +MVC4.0+EF5.0实战 当EntityFramework遇上Json,引爆 循环引用 这颗雷
    ASP.NET MVC分部类的使用
    GWT入门教程
  • 原文地址:https://www.cnblogs.com/riasky/p/3507243.html
Copyright © 2011-2022 走看看