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

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/pub/AddPackageAction.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.ui/src/com/google/dart/tools/ui/internal/pub/AddPackageAction.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/pub/AddPackageAction.java (revision 0)
+++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/pub/AddPackageAction.java (revision 0)
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2013, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.dart.tools.ui.internal.pub;
+
+import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.core.pub.PubCacheManager;
+import com.google.dart.tools.ui.actions.InstrumentedSelectionDispatchAction;
+import com.google.dart.tools.ui.instrumentation.UIInstrumentationBuilder;
+import com.google.dart.tools.ui.internal.projects.NewApplicationCreationPage.ProjectType;
+import com.google.dart.tools.ui.internal.projects.ProjectUtils;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+
+/**
+ * Installs the package from pub.dartlang to pub cache and opens the package as a new folder
+ */
+public class AddPackageAction extends InstrumentedSelectionDispatchAction {
+
+ private static String PUBSPEC = "name: sample\n" + "dependencies:\n ";
+
+ private String packageName;
+ private String version;
+ private IWorkbenchWindow window;
+
+ public AddPackageAction(IWorkbenchPartSite site, String packageName, String version) {
+ super(site);
+ this.packageName = packageName;
+ this.version = version;
+ window = site.getWorkbenchWindow();
+ }
+
+ @Override
+ protected void doRun(Event event, UIInstrumentationBuilder instrumentation) {
+
+ // create project
+ String dirName = packageName + "-" + version;
+ File potentialDir = new File(DartCore.getUserDefaultDartFolder(), dirName);
+ final File newProjectDir = ProjectUtils.generateUniqueSampleDirFrom(
+ dirName + "_copy",
+ potentialDir);
+
+ Control focusControl = Display.getCurrent().getFocusControl();
+ try {
+ IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
+ progressService.busyCursorWhile(new IRunnableWithProgress() {
+
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException,
+ InterruptedException {
+ installAndCopyPackage(newProjectDir, monitor);
+ }
+ });
+
+ } catch (Throwable ie) {
+
+ } finally {
+ if (focusControl != null) {
+ focusControl.setFocus();
+ }
+ }
+
+ }
+
+ private void installAndCopyPackage(final File newProjectDir, IProgressMonitor monitor) {
+
+ if (!isPackageInstalled()) {
+ // run pub install
+ String pubspec = PUBSPEC + packageName + ": " + version.trim();
+ if (PubPackageUtils.createPubspec(newProjectDir, pubspec, monitor)) {
+ if (PubPackageUtils.runPubInstall(newProjectDir, monitor)) {
+ // copy contents
+ String location = PubPackageUtils.getPackageCacheDir(monitor, packageName, version);
+ if (location != null && !location.isEmpty()) {
+ PubPackageUtils.copyPackageContents(newProjectDir, location, monitor);
+ openProject(newProjectDir);
+ }
+ } else {
+
+ }
+ }
+ } else {
+ String location = PubCacheManager.getInstance().getCacheLocation(packageName, version);
+ if (location != null) {
+ PubPackageUtils.copyPackageContents(newProjectDir, location, monitor);
+ openProject(newProjectDir);
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private boolean isPackageInstalled() {
+ HashMap<String, Object> allPackages = PubCacheManager.getInstance().getAllCachePackages();
+ HashMap<String, Object> map = (HashMap<String, Object>) allPackages.get(packageName);
+ if (map != null && map.keySet().contains(version)) {
+ return true;
+ }
+ return false;
+ }
+
+ private void openProject(final File newProjectDir) {
+ final String newProjectName = newProjectDir.getName();
+ final IProject newProjectHandle = ResourcesPlugin.getWorkspace().getRoot().getProject(
+ newProjectName);
+
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ ProjectUtils.createNewProject(
+ newProjectName,
+ newProjectHandle,
+ ProjectType.NONE,
+ newProjectDir.toURI(),
+ window,
+ window.getShell());
+
+ }
+ });
+ }
+
+}

Powered by Google App Engine
This is Rietveld 408576698