| 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;
|
| }
|
|
|
|
|