001
014
015 package com.liferay.portal.util;
016
017 import com.liferay.portal.kernel.xml.Document;
018 import com.liferay.portal.kernel.xml.Element;
019 import com.liferay.portal.kernel.xml.SAXReaderUtil;
020
021 import java.util.Collections;
022 import java.util.HashMap;
023 import java.util.Iterator;
024 import java.util.List;
025 import java.util.Map;
026 import java.util.Set;
027 import java.util.TreeSet;
028
029 import javax.servlet.ServletContext;
030
031
034 public class ExtRegistry {
035
036 public static Map<String, Set<String>> getConflicts(
037 ServletContext servletContext)
038 throws Exception {
039
040 String servletContextName = servletContext.getServletContextName();
041
042 Set<String> files = _readExtFiles(
043 servletContext, "/WEB-INF/ext-" + servletContextName + ".xml");
044
045 Iterator<Map.Entry<String, Set<String>>> itr =
046 _extMap.entrySet().iterator();
047
048 Map<String, Set<String>> conflicts = new HashMap<String, Set<String>>();
049
050 while (itr.hasNext()) {
051 Map.Entry<String, Set<String>> entry = itr.next();
052
053 String curServletContextName = entry.getKey();
054 Set<String> curFiles = entry.getValue();
055
056 for (String file : files) {
057 if (!curFiles.contains(file)) {
058 continue;
059 }
060
061 Set<String> conflictFiles = conflicts.get(
062 curServletContextName);
063
064 if (conflictFiles == null) {
065 conflictFiles = new TreeSet<String>();
066
067 conflicts.put(curServletContextName, conflictFiles);
068 }
069
070 conflictFiles.add(file);
071 }
072 }
073
074 return conflicts;
075 }
076
077 public static Set<String> getServletContextNames() {
078 return Collections.unmodifiableSet(_extMap.keySet());
079 }
080
081 public static boolean isRegistered(String servletContextName) {
082 if (_extMap.containsKey(servletContextName)) {
083 return true;
084 }
085 else {
086 return false;
087 }
088 }
089
090 public static void registerExt(ServletContext servletContext)
091 throws Exception {
092
093 String servletContextName = servletContext.getServletContextName();
094
095 Set<String> files = _readExtFiles(
096 servletContext, "/WEB-INF/ext-" + servletContextName + ".xml");
097
098 _extMap.put(servletContextName, files);
099 }
100
101 public static void registerPortal(ServletContext servletContext)
102 throws Exception {
103
104 Set<String> resourcePaths = servletContext.getResourcePaths("/WEB-INF");
105
106 for (String resourcePath : resourcePaths) {
107 if (resourcePath.startsWith("/WEB-INF/ext-") &&
108 resourcePath.endsWith("-ext.xml")) {
109
110 String servletContextName = resourcePath.substring(
111 13, resourcePath.length() - 4);
112
113 Set<String> files = _readExtFiles(servletContext, resourcePath);
114
115 _extMap.put(servletContextName, files);
116 }
117 }
118 }
119
120 private static Set<String> _readExtFiles(
121 ServletContext servletContext, String resourcePath)
122 throws Exception {
123
124 Set<String> files = new TreeSet<String>();
125
126 Document document = SAXReaderUtil.read(
127 servletContext.getResourceAsStream(resourcePath));
128
129 Element rootElement = document.getRootElement();
130
131 Element filesElement = rootElement.element("files");
132
133 List<Element> fileElements = filesElement.elements("file");
134
135 for (Element fileElement : fileElements) {
136 files.add(fileElement.getText());
137 }
138
139 return files;
140 }
141
142 private static Map<String, Set<String>> _extMap =
143 new HashMap<String, Set<String>>();
144
145 }