1 13 package org.pentaho.core.solution; 14 15 import java.util.ArrayList ; 16 import java.util.List ; 17 18 import org.dom4j.Document; 19 import org.dom4j.DocumentHelper; 20 import org.dom4j.Element; 21 22 public class SolutionReposUtil { 23 24 private static final String TREE_NODE_NAME = "tree"; 26 private static final String ENTRY_NODE_NAME = "entry"; 28 private static final String TYPE_ATTR_NAME = "type"; 30 private static final String NAME_ATTR_NAME = "name"; 32 private static final String DIRECTORY_ATTR = "directory"; 34 private static final String FILE_ATTR = "file"; 36 private static final String BRANCH_NODE_NAME = "branch"; 38 private static final String BRANCH_TEXT_NODE_NAME = "branchText"; 40 private static final String ID_ATTR_NAME = "id"; 42 private static final String IS_DIR_ATTR_NAME = "isDir"; 44 private static final String LEAF_NODE_NAME = "leaf"; 46 private static final String LEAF_TEXT_NODE_NAME = "leafText"; 48 private static final String LINK_NODE_NAME = "link"; 50 private static final String PATH_TEXT_NODE_NAME = "path"; 52 private static ISolutionFilter KEEP_ALL_FILTER = new ISolutionFilter() { 53 public boolean keepFile(ISolutionFile solutionFile, int actionOperation) { 54 return true; 55 } 56 }; 57 58 public static ISolutionAttributeContributor ADD_NOTHING_CONTRIBUTOR = new ISolutionAttributeContributor() { 59 public void contributeAttributes(ISolutionFile solutionFile, Element childNode) { 60 61 } 62 }; 63 64 static List ignoreDirectories = new ArrayList (); 65 66 static List ignoreFiles = new ArrayList (); 67 68 static { 69 ignoreDirectories.add("CVS"); ignoreDirectories.add("system"); ignoreDirectories.add(".svn"); 73 ignoreFiles.add(".cvsignore"); } 75 76 private SolutionReposUtil() { 77 } 78 79 public static boolean ignoreFile(String fileName) { 80 85 return (ignoreFiles.contains(fileName)); 86 } 87 88 public static boolean ignoreDirectory(String dirName) { 89 return (ignoreDirectories.contains(dirName)); 90 } 91 92 public static boolean isActionSequence(ISolutionFile solutionFile) { 93 String fileName = solutionFile.getFileName(); 94 return ((fileName != null) ? fileName.toLowerCase().endsWith(".xaction") : false); } 96 97 public static Document getActionSequences(ISolutionFile targetFile, int actionOperation) { 98 return getActionSequences(targetFile, ADD_NOTHING_CONTRIBUTOR, actionOperation); 99 } 100 101 public static Document getActionSequences(ISolutionFile targetFile, ISolutionAttributeContributor contributor, int actionOperation) { 102 Document document = DocumentHelper.createDocument(); 103 Element root = document.addElement(TREE_NODE_NAME); 104 processSolutionTree(root, targetFile, new ISolutionFilter() { 105 public boolean keepFile(ISolutionFile solutionFile, int actOperation) { 106 return (solutionFile.isDirectory() || isActionSequence(solutionFile)); 107 } 108 }, contributor, actionOperation); 109 return (document); 110 } 111 112 public static Document processSolutionTree(ISolutionFile targetFile, int actionOperation) { 113 Document document = DocumentHelper.createDocument(); 114 Element root = document.addElement(TREE_NODE_NAME); 115 processSolutionTree(root, targetFile, KEEP_ALL_FILTER, actionOperation); 116 return (document); 117 } 118 119 public static void processSolutionTree(Element parentNode, ISolutionFile targetFile, int actionOperation) { 120 processSolutionTree(parentNode, targetFile, KEEP_ALL_FILTER, actionOperation); 121 } 122 123 public static void processSolutionStructure(Element parentNode, ISolutionFile targetFile, int actionOperation) { 124 processSolutionStructure(parentNode, targetFile, KEEP_ALL_FILTER, actionOperation); 125 } 126 127 public static void processSolutionTree(Element parentNode, ISolutionFile targetFile, ISolutionFilter solutionFilter, int actionOperation) { 128 processSolutionTree(parentNode, targetFile, solutionFilter, ADD_NOTHING_CONTRIBUTOR, actionOperation); 129 } 130 131 public static void processSolutionTree(Element parentNode, ISolutionFile targetFile, ISolutionFilter solutionFilter, ISolutionAttributeContributor contributor, int actionOperation) { 132 if (targetFile.isDirectory()) { 133 if (!ignoreDirectories.contains(targetFile.getFileName()) && solutionFilter.keepFile(targetFile, actionOperation)) { 134 Element childNode = parentNode.addElement(BRANCH_NODE_NAME).addAttribute(ID_ATTR_NAME, targetFile.getFullPath()).addAttribute(IS_DIR_ATTR_NAME, "true"); contributor.contributeAttributes(targetFile, childNode); 136 if (targetFile.isRoot()) { 137 childNode.addElement(BRANCH_TEXT_NODE_NAME).setText("/"); } else { 139 childNode.addElement(BRANCH_TEXT_NODE_NAME).setText(targetFile.getFileName()); 140 } 141 ISolutionFile files[] = targetFile.listFiles(); 142 for (int i = 0; i < files.length; i++) { 143 ISolutionFile file = files[i]; 144 processSolutionTree(childNode, file, solutionFilter, actionOperation); 145 } 146 } 147 } else { 148 if (!ignoreFiles.contains(targetFile.getFileName()) && solutionFilter.keepFile(targetFile, actionOperation)) { 149 Element childNode = parentNode.addElement(LEAF_NODE_NAME).addAttribute(IS_DIR_ATTR_NAME, "false"); contributor.contributeAttributes(targetFile, childNode); 151 childNode.addElement(LEAF_TEXT_NODE_NAME).setText(targetFile.getFileName()); 152 childNode.addElement(PATH_TEXT_NODE_NAME).setText(targetFile.getFullPath()); 153 childNode.addElement(LINK_NODE_NAME).setText("#"); } 155 } 156 } 157 158 public static void processSolutionStructure(Element parentNode, ISolutionFile targetFile, ISolutionFilter solutionFilter, int actionOperation) { 159 processSolutionStructure(parentNode, targetFile, solutionFilter, ADD_NOTHING_CONTRIBUTOR, actionOperation); 160 } 161 162 public static void processSolutionStructure(Element parentNode, ISolutionFile targetFile, ISolutionFilter solutionFilter, ISolutionAttributeContributor contributor, int actionOperation) { 163 if (targetFile.isDirectory()) { 164 if (!ignoreDirectories.contains(targetFile.getFileName()) && solutionFilter.keepFile(targetFile, actionOperation)) { 165 Element childNode = parentNode.addElement(ENTRY_NODE_NAME).addAttribute(TYPE_ATTR_NAME, DIRECTORY_ATTR).addAttribute(NAME_ATTR_NAME, targetFile.getFileName()); 166 contributor.contributeAttributes(targetFile, childNode); 167 ISolutionFile files[] = targetFile.listFiles(); 168 for (int i = 0; i < files.length; i++) { 169 ISolutionFile file = files[i]; 170 processSolutionStructure(childNode, file, actionOperation); 171 } 172 } 173 } else { 174 if (!ignoreFiles.contains(targetFile.getFileName()) && solutionFilter.keepFile(targetFile, actionOperation)) { 175 Element childNode = parentNode.addElement(ENTRY_NODE_NAME).addAttribute(TYPE_ATTR_NAME, FILE_ATTR).addAttribute(NAME_ATTR_NAME, targetFile.getFileName()); 176 contributor.contributeAttributes(targetFile, childNode); 177 } 178 } 179 } 180 181 public interface ISolutionFilter { 182 boolean keepFile(ISolutionFile solutionFile, int actionOperation); 183 } 184 185 public interface ISolutionAttributeContributor { 186 void contributeAttributes(ISolutionFile solutionFile, Element childNode); 187 } 188 189 } 190 | Popular Tags |