⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namelist.java

📁 OBPM是一个开源
💻 JAVA
字号:
	/*
	 * Created on 2005-3-31
	 *
	 * TODO To change the template for this generated file go to
	 * Window - Preferences - Java - Code Style - Code Templates
	 */
	package cn.myapps.core.dynaform.dts.excelimport.utility;
	
	import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Stack;
import java.util.Vector;

import cn.myapps.core.user.action.WebUser;
	
	/**
	 * @author ZhouTY
	 *
	 * TODO To change the template for this generated type comment go to
	 * Window - Preferences - Java - Code Style - Code Templates
	 */
	public class NameList {
		public final static int OPTION_OR = 1;
		public final static int OPTION_AND = 2;
	
		private Collection data = new Vector();
		private int option;
		
		public NameList() {
		}
	
		public NameList(int option) {
			setOption(option);
		}
	
		/**
		 * @return Returns the option.
		 */
		public int getOption() {
			return option;
		}
		/**
		 * @param option The option to set.
		 */
		public void setOption(int option) {
			this.option = option;
		}
		public void add(NameList nl){
			if (nl != null) {
				data.add(nl);
			}
		}
		public void add(NameNode name){
			if (name != null) {
				data.add(name);
			}
		}
		
	
		
		public boolean remove(NameNode node) {
	
			if (data.contains(node)) {
			    if (option==NameList.OPTION_OR) {
			        data.clear();
			    }
			    else {
			    	data.remove(node);		        
			    }
				return true;
			}
	
			boolean flag = false;
			Iterator iter = data.iterator();
			while (iter.hasNext()) {
				Object element = iter.next();
				if (element instanceof NameList) {
					NameList subNameList = (NameList) element;
					flag = subNameList.remove(node);
					if (flag) {
						if ( subNameList.option==NameList.OPTION_OR) {
							data.remove(subNameList);
							break;
						}
						else if (subNameList.data.size()==0) {
							data.remove(subNameList);
							break;
						}
						else {
							flag = false;
						}
					}
				}
			}
			return flag;
		}
		
		public void replaceFirst(NameNode source, NameNode target){
		}
	
		public void replaceAll(NameNode source, NameNode target){
		}
		
		public String toString() {
		    return toString(false);
		}
		
		public String toString(boolean onlyId) {
			if (data==null || data.isEmpty()) {
				return "";
			}
			StringBuffer sb = new StringBuffer();
			if (option==OPTION_AND) {
				sb.append("{");	
			}
			else if (option==OPTION_OR) {
				sb.append("(");
			}
			
			
			Iterator iter = data.iterator();
			while(iter.hasNext()) {
				Object em = iter.next();
				if (em instanceof NameList) {
				    NameList nl = (NameList)em;
				    sb.append(nl.toString(onlyId));
				}
				else if (em instanceof NameNode) {
				    NameNode nn = (NameNode)em;
				    sb.append(nn.toString(onlyId));
				}
				
			}
	
			if (option==OPTION_OR) {
				sb.append(")");	
			}
			else if (option==OPTION_AND) {
				sb.append("}");
			}
	
			return sb.toString();
		}
		
		public Collection toCollection() {
				if (data==null || data.isEmpty()) {
					return null;
				}

				Collection colls = new ArrayList();
				Iterator iter = data.iterator();
				while(iter.hasNext()) {
					Object em = iter.next();
					if (em instanceof NameList) {
					    NameList nl = (NameList)em;
					    colls.addAll(nl.toCollection());
					}
					else if (em instanceof NameNode) {
					    NameNode nn = (NameNode)em;
					    String[] names = new String[2];
					    names[0] = nn.getId();
					    names[1] = nn.getShortName();
					    colls.add(names);
					}
					
				}
				return colls;
			}
		
		
		
		public static NameList parser(String nameListStr) {
			//"[]"代表或关系,"{}"代表与关系
			NameList nameList = new NameList();
			if (nameListStr==null || nameListStr.trim().length()<=0) {
				return nameList;
			}
	
			Stack stack = new Stack();
			
			nameListStr = nameListStr.trim();
			char[] charlist =nameListStr.toCharArray();
			StringBuffer tmp = new StringBuffer();
			NameList rootNameList = null;
			
			NameList pushNameList = null;
			NameList popNameList = null;
			NameList peekNameList = null;
	
			for (int i = 0; i < charlist.length; i++) {
				
				char c = charlist[i];
	 
				switch (c) {
				case '{':
					pushNameList = new NameList(NameList.OPTION_AND);
					if (!stack.isEmpty()) {
						rootNameList = (NameList)stack.peek();
						rootNameList.add(pushNameList);
					}
					else {
				    rootNameList = pushNameList;  
					}
					stack.push(pushNameList);
					break;
				case '(':
					pushNameList = new NameList(NameList.OPTION_OR);
					if (!stack.isEmpty()) {
						rootNameList = (NameList)stack.peek();
						rootNameList.add(pushNameList);
					}
					else {
					    rootNameList = pushNameList;
					}
					stack.push(pushNameList);
					break;
				case ')':
				case '}':
					if (tmp!=null && tmp.length()>0) {
						peekNameList = (NameList)stack.peek();
						NameNode node = new NameNode(tmp.toString());
						peekNameList.add(node);
						tmp = new StringBuffer();
					}
					stack.pop();
					break;
				case ';':
					if (tmp!=null && tmp.length()>0) {
						peekNameList = (NameList)stack.peek();
						NameNode node = new NameNode(tmp.toString());
						peekNameList.add(node);
						tmp = new StringBuffer();
					}
					break;
	
				default:
					tmp.append(c);
					break;
				}
				
			}
			
			if (stack!=null && stack.isEmpty()) {
				return rootNameList;
			}
			else {
				return null;
			}
		}
		
		public boolean isContains(NameNode node) {
	        if (data.contains(node)) {
	            return true;
	        }
	
	        boolean flag = false;
	        Iterator iter = data.iterator();
	        while (iter.hasNext()) {
	            Object element = iter.next();
	            if (element instanceof NameList) {
	                NameList subNameList = (NameList) element;
	                flag = subNameList.isContains(node);
	                if(flag){
	                    return true;
	                }
	            }
	        }
	        return flag;
	    }
			
//		public boolean isPerm(WebUser webUser, boolean canAgency){
//		    System.out.println("************************");
//		    String[] allId = webUser.getAllUserId(canAgency);
//		    String[] allGroupid = webUser.getAllUserGroupId(canAgency);
//		    String[] allDeptid = webUser.getAllUserDeptId(canAgency);
//		    for(int i=0; i<allId.length; i++){
//		        NameNode node = new NameNode(allId[i]);
//		        if(this.isContains(node)){
//		            return true;
//		        }
//		    }
//		    for(int i=0; i<allGroupid.length; i++){
//		        NameNode node = new NameNode(allGroupid[i]);
//		        if(this.isContains(node)){
//		            return true;
//		        }
//		    }
//		    for(int i=0; i<allDeptid.length; i++){
//		        NameNode node = new NameNode(allDeptid[i]);
//		        if(this.isContains(node)){
//		            return true;
//		        }
//		    }
//		    return false;
//		}
//		
//		public void remove(WebUser webUser, boolean canAgency){
//		    String[] allId = webUser.getAllUserId(canAgency);
//		    String[] allGroupid = webUser.getAllUserGroupId(canAgency);
//		    String[] allDeptid = webUser.getAllUserDeptId(canAgency);
//		    for(int i=0; i<allId.length; i++){
//		  	    NameNode nuser = new NameNode(allId[i]);
//		  	    this.remove(nuser);
//		    }
//		    for(int i=0; i<allGroupid.length; i++){
//		        NameNode ngroup = new NameNode(allGroupid[i]);
//		        this.remove(ngroup);
//		    }
//		    for(int i=0; i<allDeptid.length; i++){
//		        NameNode ndept = new NameNode(allDeptid[i]);
//		        this.remove(ndept);
//		    }
//		}
		
		public boolean isEmpty(){
		    if(data == null || data.isEmpty()){
		        return true;
		    }else{
		        return false;
		    }
		}
	
	
		public static void main(String[] args) {
	//		String nlStr = "(U|admin;D-05-02|副总师;)";
	//		System.out.println("nlStr->"+nlStr);
	//		NameList nl = NameList.parser(nlStr);
	//		System.out.println("NameList->"+nl);
	//		NameList nl2 = NameList.parser(nl.toString());
	//		System.out.println("NameList2->"+nl2);
	//		
		    if (false)
		    {
		    String nlStr = "{A001|a;B001|b;({C001|c;D001|d};{E001|e;F001|f});(G001|g;H001|h);I001|i}";
		    System.out.println("NameList->"+nlStr);
			NameList nl = NameList.parser(nlStr);
			System.out.println("NameList->"+nl);
			NameList nl2 = NameList.parser(nl+"");
			System.out.println("NameList->"+nl2);
			
			NameNode nn = new NameNode("C001");
			nl.remove(nn);
			System.out.println("NameList->"+nl);
	
			NameNode nn2 = new NameNode("D001");
			nl.remove(nn2);
			System.out.println("NameList->"+nl);
	
			NameNode nn3 = new NameNode("E001");
			nl.remove(nn3);
			System.out.println("NameList->"+nl);
			
			NameNode nn4 = new NameNode("A001");
			nl.remove(nn4);
			System.out.println("NameList->"+nl);
			
			NameNode nn5 = new NameNode("G001");
			nl.remove(nn5);
			System.out.println("NameList->"+nl);
	
			NameNode nn6 = new NameNode("B001");
			nl.remove(nn6);
			System.out.println("NameList->"+nl);
		    }
		    if(false)
			{
			String nlStr = "{U|amdin;D-05-02|副总师;}";
			NameList nl = NameList.parser(nlStr);
			System.out.println("NameList***->"+nl);
	
			NameNode nn = new NameNode("D-05-02");
			nl.remove(nn);
			System.out.println("NameList****->"+nl);
			}
			if (false)
			{
			    NameList nl = new NameList();
			    nl.setOption(NameList.OPTION_AND);
			    
			    nl.add(new NameNode("U|admin"));
			    nl.add(new NameNode("D-05-03|总部"));
			    System.out.println(nl.toString());
			    
			  	NameNode nn = new NameNode("U");
					nl.remove(nn);
					System.out.println("NameList->"+nl);
			    
			}
			if(false)
			{
//			    String nlStr = "{A001|a;(U|u;D-05-02|d;U|u;)(U|u;U-01-02|u2;)}";
////				String nlStr = "{(a;b);(c;d)}";
//			    System.out.println(nlStr);
//			    
//			    NameList nl = new NameList();
//			    nl.setOption(NameList.OPTION_OR);
//			    
//			    nl.add(NameList.parser(nlStr));
//			    nl.add(NameList.parser("({U;D-05-02;}U;{U;})"));
//					System.out.println("NameList--->"+NameList.parser(nlStr));
//					System.out.println("NameList2--->"+NameList.parser(nl.toString()));
					
			    NameList nl = NameList.parser("{U;}");
			    System.out.print("->"+nl);
					NameNode nn = new NameNode("U");
					System.out.println("isPerm->"+nl.isContains(nn));
			}
			if(false)
			{
			    NameList nl = NameList.parser("(U-05-03-002|陈红霞;U-05-03-003|熊光辉;)");
					System.out.println("NameList--->"+nl);
					System.out.println("NameList2--->"+NameList.parser(nl.toString()));
					Collection colls = nl.toCollection();
					Iterator iters = colls.iterator();
					while(iters.hasNext()){
					    String[] names = (String[])iters.next();
					    System.out.println("id-->"+names[0]);
					    System.out.println("name-->"+names[1]);
					}
			}
			
//			if(true){
//			    try{
//				    UserProxy userProxy = new UserProxy();
//				    UserVO userVO = userProxy.doView("U-06-004");
//				    WebUser user = new WebUser(userVO);
//				    NameList nl = NameList.parser("({U-05-08-007|甘洪霖;U-05-08-006|江海;}(U-05-03-002|陈红霞;U-05-03-003|熊光辉;)(D-06|测试部;))");
//				    NameNode nn = new NameNode("U-06-004");
//				    System.out.println("isPerm->"+ nl.isContains(nn));
//				    System.out.println("isPerm->"+ nl.isPerm(user, true));
//				    System.out.println("NameList2***--->"+nl.toString());
//			    }catch(Exception ex){
//			        ex.printStackTrace();
//			    }
//			}
			
			if(true){
			    NameList nl = NameList.parser(null);
			    System.out.println("NameList***--->"+nl);
					System.out.println("NameList2***--->"+NameList.parser(nl.toString()));
					NameNode nn = new NameNode("U");
					System.out.println("isPerm->"+nl.isContains(nn));
			}
			
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -