1
14
15 package com.liferay.portal.plugin;
16
17 import com.liferay.portal.kernel.log.Log;
18 import com.liferay.portal.kernel.log.LogFactoryUtil;
19 import com.liferay.portal.kernel.plugin.PluginPackage;
20 import com.liferay.portal.kernel.plugin.PluginPackageNameAndContextComparator;
21 import com.liferay.portal.kernel.plugin.Version;
22 import com.liferay.portal.kernel.search.SearchException;
23 import com.liferay.portal.kernel.util.ListUtil;
24 import com.liferay.portal.kernel.util.StringPool;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31
37 public class LocalPluginPackageRepository {
38
39 public LocalPluginPackageRepository() {
40 }
41
42 public void addPluginPackage(PluginPackage pluginPackage) {
43 if (pluginPackage.getContext() == null) {
44 if (_log.isDebugEnabled()) {
45 _log.debug(
46 "Plugin package cannot be registered because it does not " +
47 "have an installation context");
48 }
49
50 return;
51 }
52
53 _pendingPackages.remove(pluginPackage.getContext());
54 _pendingPackages.remove(pluginPackage.getModuleId());
55
56 _pluginPackages.remove(pluginPackage.getContext());
57 _pluginPackages.put(pluginPackage.getContext(), pluginPackage);
58 }
59
60 public PluginPackage getInstallingPluginPackage(String context) {
61 return _pendingPackages.get(context);
62 }
63
64 public PluginPackage getLatestPluginPackage(
65 String groupId, String artifactId) {
66
67 PluginPackage latestPluginPackage = null;
68
69 for (PluginPackage pluginPackage : _pluginPackages.values()) {
70 if ((pluginPackage.getGroupId().equals(groupId)) &&
71 (pluginPackage.getArtifactId().equals(artifactId)) &&
72 ((latestPluginPackage == null) ||
73 pluginPackage.isLaterVersionThan(latestPluginPackage))) {
74
75 latestPluginPackage = pluginPackage;
76 }
77 }
78
79 return latestPluginPackage;
80 }
81
82 public PluginPackage getPluginPackage(String context) {
83 return _pluginPackages.get(context);
84 }
85
86 public List<PluginPackage> getPluginPackages() {
87 return new ArrayList<PluginPackage>(_pluginPackages.values());
88 }
89
90 public List<PluginPackage> getPluginPackages(
91 String groupId, String artifactId) {
92
93 List<PluginPackage> pluginPackages = new ArrayList<PluginPackage>();
94
95 for (PluginPackage pluginPackage : _pluginPackages.values()) {
96 if (pluginPackage.getGroupId().equals(groupId) &&
97 pluginPackage.getArtifactId().equals(artifactId)) {
98
99 pluginPackages.add(pluginPackage);
100 }
101 }
102
103 return pluginPackages;
104 }
105
106 public List<PluginPackage> getSortedPluginPackages() {
107 List<PluginPackage> pluginPackages = new ArrayList<PluginPackage>();
108
109 pluginPackages.addAll(_pluginPackages.values());
110
111 return ListUtil.sort(
112 pluginPackages, new PluginPackageNameAndContextComparator());
113 }
114
115 public void removePluginPackage(PluginPackage pluginPackage) {
116 _pluginPackages.remove(pluginPackage.getContext());
117
118 try {
119 PluginPackageIndexer.removePluginPackage(
120 pluginPackage.getModuleId());
121 }
122 catch (SearchException se) {
123 _log.error("Deleting index " + pluginPackage.getModuleId(), se);
124 }
125 }
126
127 public void removePluginPackage(String context) {
128 _pluginPackages.remove(context);
129 }
130
131 public void registerPluginPackageInstallation(PluginPackage pluginPackage) {
132 if (pluginPackage.getContext() != null) {
133 PluginPackage previousPluginPackage = _pluginPackages.get(
134 pluginPackage.getContext());
135
136 if (previousPluginPackage == null) {
137 addPluginPackage(pluginPackage);
138 }
139 }
140
141 String key = pluginPackage.getContext();
142
143 if (key == null) {
144 key = pluginPackage.getModuleId();
145 }
146
147 _pendingPackages.put(key, pluginPackage);
148 }
149
150 public void registerPluginPackageInstallation(String deploymentContext) {
151 PluginPackage pluginPackage = getPluginPackage(deploymentContext);
152
153 if (pluginPackage == null) {
154 String moduleId =
155 deploymentContext + StringPool.SLASH + deploymentContext +
156 StringPool.SLASH + Version.UNKNOWN + StringPool.SLASH +
157 "war";
158
159 pluginPackage = new PluginPackageImpl(moduleId);
160
161 pluginPackage.setName(deploymentContext);
162 pluginPackage.setContext(deploymentContext);
163 }
164
165 registerPluginPackageInstallation(pluginPackage);
166 }
167
168 public void unregisterPluginPackageInstallation(String context) {
169 _pluginPackages.remove(context);
170 _pendingPackages.remove(context);
171 }
172
173 private static Log _log = LogFactoryUtil.getLog(
174 LocalPluginPackageRepository.class);
175
176 private Map<String, PluginPackage> _pluginPackages =
177 new HashMap<String, PluginPackage>();
178 private Map<String, PluginPackage> _pendingPackages =
179 new HashMap<String, PluginPackage>();
180
181 }