KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > pentaho > core > solution > SolutionReposUtil


1 /*
2  * Copyright 2006 Pentaho Corporation. All rights reserved.
3  * This software was developed by Pentaho Corporation and is provided under the terms
4  * of the Mozilla Public License, Version 1.1, or any later version. You may not use
5  * this file except in compliance with the license. If you need a copy of the license,
6  * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
7  * BI Platform. The Initial Developer is Pentaho Corporation.
8  *
9  * Software distributed under the Mozilla Public License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
11  * the license for the specific language governing your rights and limitations.
12 */

13 package org.pentaho.core.solution;
14
15 import java.util.ArrayList JavaDoc;
16 import java.util.List JavaDoc;
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 JavaDoc TREE_NODE_NAME = "tree"; //$NON-NLS-1$
25

26     private static final String JavaDoc ENTRY_NODE_NAME = "entry"; //$NON-NLS-1$
27

28     private static final String JavaDoc TYPE_ATTR_NAME = "type"; //$NON-NLS-1$
29

30     private static final String JavaDoc NAME_ATTR_NAME = "name"; //$NON-NLS-1$
31

32     private static final String JavaDoc DIRECTORY_ATTR = "directory"; //$NON-NLS-1$
33

34     private static final String JavaDoc FILE_ATTR = "file"; //$NON-NLS-1$
35

36     private static final String JavaDoc BRANCH_NODE_NAME = "branch"; //$NON-NLS-1$
37

38     private static final String JavaDoc BRANCH_TEXT_NODE_NAME = "branchText"; //$NON-NLS-1$
39

40     private static final String JavaDoc ID_ATTR_NAME = "id"; //$NON-NLS-1$
41

42     private static final String JavaDoc IS_DIR_ATTR_NAME = "isDir"; //$NON-NLS-1$
43

44     private static final String JavaDoc LEAF_NODE_NAME = "leaf"; //$NON-NLS-1$
45

46     private static final String JavaDoc LEAF_TEXT_NODE_NAME = "leafText"; //$NON-NLS-1$
47

48     private static final String JavaDoc LINK_NODE_NAME = "link"; //$NON-NLS-1$
49

50     private static final String JavaDoc PATH_TEXT_NODE_NAME = "path"; //$NON-NLS-1$
51

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 JavaDoc ignoreDirectories = new ArrayList JavaDoc();
65
66     static List JavaDoc ignoreFiles = new ArrayList JavaDoc();
67
68     static {
69         ignoreDirectories.add("CVS"); //$NON-NLS-1$
70
ignoreDirectories.add("system"); //$NON-NLS-1$
71
ignoreDirectories.add(".svn"); //$NON-NLS-1$
72

73         ignoreFiles.add(".cvsignore"); //$NON-NLS-1$
74
}
75
76     private SolutionReposUtil() {
77     }
78
79     public static boolean ignoreFile(String JavaDoc fileName) {
80         /*
81          * Iterator iter = ignoreFiles.iterator(); while (iter.hasNext()) { if
82          * (fileName.toLowerCase().endsWith(iter.next().toString())) { return
83          * true; } } return false;
84          */

85         return (ignoreFiles.contains(fileName));
86     }
87
88     public static boolean ignoreDirectory(String JavaDoc dirName) {
89         return (ignoreDirectories.contains(dirName));
90     }
91
92     public static boolean isActionSequence(ISolutionFile solutionFile) {
93         String JavaDoc fileName = solutionFile.getFileName();
94         return ((fileName != null) ? fileName.toLowerCase().endsWith(".xaction") : false); //$NON-NLS-1$
95
}
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"); //$NON-NLS-1$
135
contributor.contributeAttributes(targetFile, childNode);
136                 if (targetFile.isRoot()) {
137                     childNode.addElement(BRANCH_TEXT_NODE_NAME).setText("/"); //$NON-NLS-1$
138
} 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"); //$NON-NLS-1$
150
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("#"); //$NON-NLS-1$
154
}
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