package org.deuce.transform.util; import java.util.HashMap; public class IgnoreTree { final private TreeNode root = new TreeNode(); public IgnoreTree( String names) { if( names == null) return; String[] splitNames = names.split(","); for( String name : splitNames){ String[] parts = name.trim().split("\\."); root.add(parts, 0); } } public boolean contains( String name){ // name String[] names = name.split("\\/"); return root.contains(names, 0); } private static class TreeNode{ final private HashMap<String, TreeNode> descendants = new HashMap<String, TreeNode>(); private boolean isEnd = false; public boolean contains( String[] names, int index){ TreeNode treeNode = names.length <= index ? null : descendants.get( names[index]); if( treeNode == null){ return isEnd ? true : false; } return treeNode.contains(names, index + 1); } public void add( String[] names, int index){ if( names.length <= index || names[index].equals("*")){ isEnd = true; return; } TreeNode treeNode = descendants.get( names[index]); if( treeNode == null) { treeNode = new TreeNode(); descendants.put( names[index], treeNode); } treeNode.add(names, index + 1); } } }