1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
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  /**
32   * <a href="LocalPluginPackageRepository.java.html"><b><i>View Source</i></b>
33   * </a>
34   *
35   * @author Jorge Ferrer
36   */
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 }