1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.util;
35
36 import info.magnolia.cms.core.Path;
37 import org.jdom.Attribute;
38 import org.jdom.Document;
39 import org.jdom.JDOMException;
40 import org.jdom.input.SAXBuilder;
41 import org.jdom.xpath.XPath;
42
43 import java.io.File;
44 import java.io.IOException;
45 import java.util.ArrayList;
46 import java.util.List;
47
48
49
50
51
52
53
54
55 public class WorkspaceXmlUtil {
56 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(WorkspaceXmlUtil.class);
57
58 public static List<String> getWorkspaceNamesWithIndexer() {
59 final List<String> names = new ArrayList<String>();
60 final File sourceDir = new File(Path.getAppRootDir() + "/repositories/magnolia/workspaces/");
61 final SAXBuilder builder = new SAXBuilder();
62 File[] files = sourceDir.listFiles();
63 if (files == null) {
64
65 return names;
66 }
67 for (File f : files) {
68 if (!f.isDirectory()) {
69 continue;
70 }
71 final File wks = new File(f, "workspace.xml");
72 if (!wks.exists() || !wks.canRead()) {
73 continue;
74 }
75 log.debug("Checking {} for old indexer.", f.getName());
76 try {
77
78 final List list = getElementsFromXPath(builder.build(wks), "/Workspace/SearchIndex/param[@name='textFilterClasses']/@value");
79 if (list.size() > 0 && ((Attribute) list.get(0)).getValue().matches(".*\\.core\\.query\\..*")) {
80 names.add(wks.getAbsolutePath());
81 }
82 } catch (JDOMException e) {
83 throw new RuntimeException(e);
84 } catch (IOException e) {
85 throw new RuntimeException(e);
86 }
87
88 }
89 return names;
90 }
91
92 private static List getElementsFromXPath(Document doc, String xpathExpr) {
93 try {
94 final XPath xpath = XPath.newInstance(xpathExpr);
95
96 xpath.addNamespace("ws", "file://workspace.xml");
97 return xpath.selectNodes(doc);
98 } catch (JDOMException e) {
99 throw new RuntimeException(e);
100 }
101 }
102 }