Chromium Code Reviews| Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubCacheManager.java |
| =================================================================== |
| --- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubCacheManager.java (revision 27769) |
| +++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubCacheManager.java (working copy) |
| @@ -48,23 +48,14 @@ |
| this.packages = packages; |
| } |
| - @SuppressWarnings("unchecked") |
| @Override |
| public IStatus run(IProgressMonitor monitor) { |
| - String message = getPubCacheList(); |
| - // no errors |
| - if (message.startsWith("{\"packages")) { |
| - Map<String, Object> object = null; |
| - try { |
| - object = PubYamlUtils.parsePubspecYamlToMap(message); |
| - synchronized (pubUsedPackages) { |
| - pubCachePackages = (HashMap<String, Object>) object.get(PubspecConstants.PACKAGES); |
| - } |
| - } catch (Exception e) { |
| - DartCore.logError("Error while parsing pub cache list", e); |
| + Map<String, Object> object = readPackageInfo(); |
| + if (object != null) { |
| + synchronized (pubUsedPackages) { |
| + pubCachePackages = (HashMap<String, Object>) object; |
|
danrubel
2013/09/23 18:44:02
Change type of object from Map to HashMap so no ca
keertip
2013/09/24 15:54:14
Done.
|
| } |
| - |
| if (packages == null) { |
| initializeList(); |
| if (!pubUsedPackages.isEmpty()) { |
| @@ -76,9 +67,8 @@ |
| PubManager.getInstance().notifyListeners(added); |
| } |
| } |
| - } else { |
| - DartCore.logError(message); |
| } |
| + |
| return Status.OK_STATUS; |
| } |
| @@ -88,6 +78,10 @@ |
| * A map to store the list of the installed packages and their locations, synchronize on |
| * pubUsedPackages |
| */ |
| + // {action_consolidator= |
| + // {0.1.3= |
| + // {location=/Users/keertip/.pub-cache/hosted/pub.dartlang.org/action_consolidator-0.1.3}},.. |
| + // } |
| protected HashMap<String, Object> pubCachePackages = new HashMap<String, Object>(); |
| /** |
| @@ -105,6 +99,38 @@ |
| // keeps track of packages last updated |
| private Map<String, String> currentPackages; |
| + /** |
| + * Return information about all the cached packages |
| + */ |
| + public HashMap<String, Object> getAllCachePackages() { |
| + synchronized (pubUsedPackages) { |
| + HashMap<String, Object> copy = new HashMap<String, Object>(pubCachePackages); |
| + return copy; |
| + } |
| + } |
| + |
| + /** |
| + * Look in the pub cache list and return the location of package-version or {@code null} if not |
| + * found |
| + * |
| + * @param packageName |
| + * @param version |
| + */ |
| + @SuppressWarnings("unchecked") |
| + public String getCacheLocation(String packageName, String version) { |
| + HashMap<String, Object> map; |
| + synchronized (pubUsedPackages) { |
| + map = (HashMap<String, Object>) pubCachePackages.get(packageName); |
| + } |
| + if (map != null && map.keySet().contains(version)) { |
| + return ((Map<String, String>) map.get(version)).get(PubspecConstants.LOCATION); |
| + } |
| + return null; |
| + } |
| + |
| + /** |
| + * Return information about all the packages currently being used in all open folders |
| + */ |
| public HashMap<String, Object> getLocalPackages() { |
| synchronized (pubUsedPackages) { |
| HashMap<String, Object> copy = new HashMap<String, Object>(pubUsedPackages); |
| @@ -112,6 +138,19 @@ |
| } |
| } |
| + /** |
| + * Run pub cache list and get the latest information about all cached packages. |
| + */ |
| + public HashMap<String, Object> updateAndGetAllCachePackages() { |
| + HashMap<String, Object> map = readPackageInfo(); |
| + if (map != null) { |
| + synchronized (pubUsedPackages) { |
| + pubCachePackages = map; |
| + } |
| + } |
| + return getAllCachePackages(); |
| + } |
| + |
| public void updatePackagesList(int delay) { |
| updatePackagesList(delay, null); |
| } |
| @@ -179,7 +218,10 @@ |
| */ |
| @SuppressWarnings("unchecked") |
| private Map<String, String> getVersionInfo(String packageName, String version) { |
| - Map<String, Map<String, String>> object = (Map<String, Map<String, String>>) pubCachePackages.get(packageName); |
| + Map<String, Map<String, String>> object; |
| + synchronized (pubUsedPackages) { |
| + object = (Map<String, Map<String, String>>) pubCachePackages.get(packageName); |
| + } |
| if (object != null) { |
| Map<String, String> versionInfo = object.get(version); |
| return versionInfo; |
| @@ -211,4 +253,22 @@ |
| } |
| } |
| + |
| + @SuppressWarnings("unchecked") |
| + private HashMap<String, Object> readPackageInfo() { |
| + String message = getPubCacheList(); |
| + // no errors |
| + if (message.startsWith("{\"packages")) { |
| + Map<String, Object> object = null; |
| + try { |
| + object = PubYamlUtils.parsePubspecYamlToMap(message); |
| + } catch (Exception e) { |
| + DartCore.logError("Error while parsing pub cache list", e); |
| + } |
| + return (HashMap<String, Object>) object.get(PubspecConstants.PACKAGES); |
| + } else { |
| + DartCore.logError(message); |
| + } |
| + return null; |
| + } |
| } |