Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1240)

Unified Diff: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubPackageManager.java

Issue 24235011: add a view for users to explore pub packages (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubPackageManager.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubPackageManager.java (revision 27769)
+++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/pub/PubPackageManager.java (working copy)
@@ -18,6 +18,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.json.JSONArray;
@@ -34,7 +35,7 @@
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -48,34 +49,28 @@
return INSTANCE;
}
- /**
- * Map containing name and map with pubspec and url for the packages on pub.dartlang.org. Access
- * to this should be synchronized against lock
- */
- // mongo_dart_query={pubspec={author=Vadim Tsushko <vadimtsushko@gmail.com>,
- // dependencies={bson=>=0.1.7 <2.0.0},
- // dev_dependencies={unittest=any, browser=any},
- // description=Query builder for mongo_dart and objectory,
- // name=mongo_dart_query,
- // homepage=https://github.com/vadimtsushko/mongo_dart_query,
- // version=0.1.8},
- // url=http://pub.dartlang.org/api/packages/mongo_dart_query}}
- //
- private HashMap<String, HashMap<String, Object>> webPackages = new HashMap<String, HashMap<String, Object>>();
+ private List<String> packagesList = new ArrayList<String>();
+ private List<PubPackageObject> pubPackages = new ArrayList<PubPackageObject>();
+ private final ListenerList listeners = new ListenerList();
+
/**
* Used to synchronize access to webPackages
*/
private Object lock = new Object();
private Job job;
+ public void addListener(IPubPackageListener listener) {
+ listeners.add(listener);
+ }
+
/**
* Return a list containing the names of the packages on pub
*/
public Collection<String> getPackageList() {
startPackageListFromPubJob();
synchronized (lock) {
- return new ArrayList<String>(webPackages.keySet());
+ return new ArrayList<String>(packagesList);
}
}
@@ -88,12 +83,12 @@
}
/**
- * Return a map of names and information for the packages
+ * Return an array of {@link PubPackageObject}, the packages on pub
*/
- public HashMap<String, HashMap<String, Object>> getPackages() {
+ public List<PubPackageObject> getPubPackages() {
startPackageListFromPubJob();
synchronized (lock) {
- return new HashMap<String, HashMap<String, Object>>(webPackages);
+ return new ArrayList<PubPackageObject>(pubPackages);
}
}
@@ -101,6 +96,16 @@
startPackageListFromPubJob();
}
+ public void notifyListeners(List<PubPackageObject> packages) {
+ for (Object listener : listeners.getListeners()) {
+ ((IPubPackageListener) listener).pubPackagesChanged(packages);
+ }
+ }
+
+ public void removeListener(IPubPackageListener listener) {
+ listeners.remove(listener);
+ }
+
public void stop() {
if (job != null && !job.cancel()) {
try {
@@ -173,20 +178,27 @@
// "url":"http://pub.dartlang.org/api/packages/mongo_dart_query"}
//
private IStatus processData(JSONArray jsonArray, IProgressMonitor monitor) {
- HashMap<String, HashMap<String, Object>> packagesMap = new HashMap<String, HashMap<String, Object>>();
+ List<PubPackageObject> packageObjectList = new ArrayList<PubPackageObject>();
+ List<String> packageNames = new ArrayList<String>();
+
for (int j = 0; j < jsonArray.length(); j++) {
JSONArray packages;
try {
packages = jsonArray.getJSONArray(j);
for (int i = 0; i < packages.length(); i++) {
JSONObject o = new JSONObject(packages.getString(i));
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("url", o.getString("url"));
+ String name = o.getString(PubspecConstants.NAME);
Map<String, Object> pubspec = PubYamlUtils.parsePubspecYamlToMap(o.getJSONObject("latest").getString(
"pubspec"));
- map.put("pubspec", pubspec);
- packagesMap.put(o.getString("name"), map);
+
+ PubPackageObject obj = new PubPackageObject(
+ name,
+ (String) pubspec.get(PubspecConstants.DESCRIPTION),
+ (String) pubspec.get(PubspecConstants.VERSION),
+ o.getString("url"));
+ packageObjectList.add(obj);
+ packageNames.add(name);
}
} catch (JSONException e) {
DartCore.logError(e);
@@ -196,8 +208,10 @@
}
}
synchronized (lock) {
- webPackages = packagesMap;
+ pubPackages = packageObjectList;
+ packagesList = packageNames;
}
+ notifyListeners(getPubPackages());
return Status.OK_STATUS;
}

Powered by Google App Engine
This is Rietveld 408576698