|
From: <caw...@us...> - 2007-06-22 16:12:10
|
Revision: 2666
http://svn.sourceforge.net/rubyeclipse/?rev=2666&view=rev
Author: cawilliams
Date: 2007-06-22 09:12:05 -0700 (Fri, 22 Jun 2007)
Log Message:
-----------
when gem has multiple versions, ask user which they'd like to uninstall. Listen to end of uninstall, and then refresh the gem listing and notify listeners
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/core/gems/GemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
Added Paths:
-----------
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/RemoveGemDialog.java
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -1,5 +1,9 @@
package com.aptana.rdt.core.gems;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
public class Gem implements Comparable {
private String name;
@@ -63,4 +67,18 @@
return getName().toLowerCase() + " " + getVersion() + " " + getPlatform();
}
+ public boolean hasMultipleVersions() {
+ return version != null && version.indexOf(",") != -1;
+ }
+
+ public List<String> versions() {
+ List<String> versions = new ArrayList<String>();
+ if (version == null) return versions;
+ StringTokenizer tokenizer = new StringTokenizer(version, ",");
+ while (tokenizer.hasMoreTokens()) {
+ versions.add(tokenizer.nextToken().trim());
+ }
+ return versions;
+ }
+
}
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -31,5 +31,7 @@
public abstract IPath getGemPath(String gemName, String version);
public abstract boolean updateAll();
+
+ public abstract boolean isInitialized();
}
\ No newline at end of file
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/core/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/core/gems/GemManager.java 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/core/gems/GemManager.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -44,6 +44,8 @@
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.widgets.Display;
import org.rubypeople.rdt.launching.IRubyLaunchConfigurationConstants;
import org.rubypeople.rdt.launching.IVMInstall;
import org.rubypeople.rdt.launching.RubyRuntime;
@@ -56,6 +58,7 @@
import com.aptana.rdt.core.gems.GemListener;
import com.aptana.rdt.core.gems.IGemManager;
import com.aptana.rdt.ui.gems.GemsMessages;
+import com.aptana.rdt.ui.gems.RemoveGemDialog;
public class GemManager implements IGemManager {
@@ -80,6 +83,8 @@
private Set<Gem> remoteGems;
private Set<GemListener> listeners;
private IPath fGemInstallPath;
+
+ protected boolean isInitialized;
private GemManager() {
gems = new HashSet<Gem>();
@@ -111,6 +116,7 @@
gems = loadLocalGems();
storeGemCache(gems, getConfigFile(LOCAL_GEMS_CACHE_FILE));
}
+ isInitialized = true;
synchronized (listeners) {
for (GemListener listener : listeners) {
listener.gemsRefreshed();
@@ -122,6 +128,10 @@
};
job2.schedule();
}
+
+ public boolean isInitialized() {
+ return isInitialized;
+ }
protected Set<Gem> loadLocalCache(File file) {
FileReader fileReader = null;
@@ -417,6 +427,7 @@
}
ILaunchConfiguration config = createGemLaunchConfiguration(command, true);
config.launch(ILaunchManager.RUN_MODE, null);
+ // FIXME Listen for end of launch and then notify listeners
} catch (CoreException e) {
AptanaRDTPlugin.log(e);
return false;
@@ -432,22 +443,45 @@
*
* @see com.aptana.rdt.internal.gems.IGemManager#removeGem(com.aptana.rdt.internal.gems.Gem)
*/
- public boolean removeGem(Gem gem) {
+ public boolean removeGem(final Gem gem) {
+ if (gem.hasMultipleVersions()) {
+ RemoveGemDialog dialog = new RemoveGemDialog(Display.getDefault().getActiveShell(), gem.versions());
+ if (dialog.open() == Dialog.OK) {
+ return removeGem(new Gem(gem.getName(), dialog.getVersion(), null));
+ } else {
+ return false;
+ }
+ }
try {
- String command = UNINSTALL_COMMAND + " " + gem.getName();
+ String command = UNINSTALL_COMMAND + " " + gem.getName();
if (gem.getVersion() != null
&& gem.getVersion().trim().length() > 0) {
command += " " + VERSION_SWITCH + " " + gem.getVersion();
}
ILaunchConfiguration config = createGemLaunchConfiguration(command, true);
- config.launch(ILaunchManager.RUN_MODE, null);
+ final ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
+ Job job = new Job("Notify gem listeners of uninstalled gem") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ while (!launch.isTerminated()) {
+ Thread.yield();
+ }
+ refresh();
+ // Need to wait until uninstall is finished
+ for (GemListener listener : listeners) {
+ listener.gemRemoved(gem);
+ }
+ return Status.OK_STATUS;
+ }
+
+ };
+ job.schedule();
} catch (CoreException e) {
AptanaRDTPlugin.log(e);
return false;
}
- for (GemListener listener : listeners) {
- listener.gemRemoved(gem);
- } // FIXME Need to wait until uninstall is finished!
+
return true;
}
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -15,6 +15,8 @@
public static String GemManager_loading_local_gems;
public static String GemManager_loading_remote_gems;
public static String RemoveGemDialog_msg;
+ public static String RemoveGemDialog_dialog_title;
+ public static String RemoveGemDialog_version_label;
static {
NLS.initializeMessages(BUNDLE_NAME, GemsMessages.class);
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsMessages.properties 2007-06-22 16:12:05 UTC (rev 2666)
@@ -9,4 +9,7 @@
GemManager_loading_local_gems=Loading local gem information
GemManager_loading_remote_gems=Loading remote gem information
-RemoveGemDialog_msg=Are you sure you want to remove the gem {0}?
\ No newline at end of file
+RemoveGemDialog_msg=Are you sure you want to remove the gem {0}?
+
+RemoveGemDialog_version_label=Version:
+RemoveGemDialog_dialog_title=Which Version?
\ No newline at end of file
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-06-22 15:54:13 UTC (rev 2665)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -112,7 +112,7 @@
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- gemViewer.add(gem);
+ gemViewer.setInput(GemManager.getInstance().getGems());
}
});
@@ -122,7 +122,7 @@
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- gemViewer.remove(gem);
+ gemViewer.setInput(GemManager.getInstance().getGems());
}
});
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/RemoveGemDialog.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/RemoveGemDialog.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/RemoveGemDialog.java 2007-06-22 16:12:05 UTC (rev 2666)
@@ -0,0 +1,70 @@
+package com.aptana.rdt.ui.gems;
+
+import java.util.List;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+public class RemoveGemDialog extends Dialog {
+
+ private Combo versionCombo;
+ private String version;
+ private List<String> versions;
+
+ public RemoveGemDialog(Shell parentShell, List<String> versions) {
+ super(parentShell);
+ this.versions = versions;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText(GemsMessages.RemoveGemDialog_dialog_title);
+
+ Composite control = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ control.setLayout(layout);
+
+ Label versionLabel = new Label(control, SWT.LEFT);
+ versionLabel.setText(GemsMessages.RemoveGemDialog_version_label);
+
+ versionCombo = new Combo(control, SWT.DROP_DOWN);
+ GridData versionComboData = new GridData();
+ versionComboData.widthHint = 100;
+ versionCombo.setLayoutData(versionComboData);
+
+ for (String version : versions) {
+ versionCombo.add(version);
+ }
+ // Set the oldest version as default option
+ if (versions != null && !versions.isEmpty()) {
+ versionCombo.select(versions.size() - 1);
+ }
+ return control;
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ */
+ public void buttonPressed(int buttonId) {
+ if (buttonId == IDialogConstants.OK_ID) {
+ version = versionCombo.getText();
+ okPressed();
+ } else if (buttonId == IDialogConstants.CANCEL_ID) {
+ cancelPressed();
+ }
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|