1
22
23 package com.liferay.portal.util;
24
25 import com.liferay.portal.kernel.xml.Document;
26 import com.liferay.portal.kernel.xml.Element;
27 import com.liferay.portal.kernel.xml.SAXReaderUtil;
28
29 import java.util.Collections;
30 import java.util.HashMap;
31 import java.util.Iterator;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.Set;
35 import java.util.TreeSet;
36
37 import javax.servlet.ServletContext;
38
39
44 public class ExtRegistry {
45
46 public static Map<String, Set<String>> getConflicts(
47 ServletContext servletContext)
48 throws Exception {
49
50 String servletContextName = servletContext.getServletContextName();
51
52 Set<String> files = _readExtFiles(
53 servletContext, "/WEB-INF/ext-" + servletContextName + ".xml");
54
55 Iterator<Map.Entry<String, Set<String>>> itr =
56 _extMap.entrySet().iterator();
57
58 Map<String, Set<String>> conflicts = new HashMap<String, Set<String>>();
59
60 while (itr.hasNext()) {
61 Map.Entry<String, Set<String>> entry = itr.next();
62
63 String curServletContextName = entry.getKey();
64 Set<String> curFiles = entry.getValue();
65
66 for (String file : files) {
67 if (!curFiles.contains(file)) {
68 continue;
69 }
70
71 Set<String> conflictFiles = conflicts.get(
72 curServletContextName);
73
74 if (conflictFiles == null) {
75 conflictFiles = new TreeSet<String>();
76
77 conflicts.put(curServletContextName, conflictFiles);
78 }
79
80 conflictFiles.add(file);
81 }
82 }
83
84 return conflicts;
85 }
86
87 public static Set<String> getServletContextNames() {
88 return Collections.unmodifiableSet(_extMap.keySet());
89 }
90
91 public static boolean isRegistered(String servletContextName) {
92 if (_extMap.containsKey(servletContextName)) {
93 return true;
94 }
95 else {
96 return false;
97 }
98 }
99
100 public static void registerExt(ServletContext servletContext)
101 throws Exception {
102
103 String servletContextName = servletContext.getServletContextName();
104
105 Set<String> files = _readExtFiles(
106 servletContext, "/WEB-INF/ext-" + servletContextName + ".xml");
107
108 _extMap.put(servletContextName, files);
109 }
110
111 public static void registerPortal(ServletContext servletContext)
112 throws Exception {
113
114 Set<String> resourcePaths = servletContext.getResourcePaths(
115 "/WEB-INF");
116
117 for (String resourcePath : resourcePaths) {
118 if (resourcePath.startsWith("/WEB-INF/ext-") &&
119 resourcePath.endsWith("-ext.xml")) {
120
121 String servletContextName = resourcePath.substring(
122 13, resourcePath.length() - 4);
123
124 Set<String> files = _readExtFiles(
125 servletContext, resourcePath);
126
127 _extMap.put(servletContextName, files);
128 }
129 }
130 }
131
132 private static Set<String> _readExtFiles(
133 ServletContext servletContext, String resourcePath)
134 throws Exception {
135
136 Set<String> files = new TreeSet<String>();
137
138 Document document = SAXReaderUtil.read(
139 servletContext.getResourceAsStream(resourcePath));
140
141 Element rootElement = document.getRootElement();
142
143 Element filesElement = rootElement.element("files");
144
145 List<Element> fileElements = filesElement.elements("file");
146
147 for (Element fileElement : fileElements) {
148 files.add(fileElement.getText());
149 }
150
151 return files;
152 }
153
154 private static Map<String, Set<String>> _extMap =
155 new HashMap<String, Set<String>>();
156
157 }