|
From: <caw...@us...> - 2007-05-21 14:48:34
|
Revision: 2502
http://svn.sourceforge.net/rubyeclipse/?rev=2502&view=rev
Author: cawilliams
Date: 2007-05-21 07:48:27 -0700 (Mon, 21 May 2007)
Log Message:
-----------
move some of the new gems stuff to an externally visible package. extract out an interface for GEmManager, use bundle context to register IGemManager instance as a service (allows us to stop relying on singletons across plugins)
Modified Paths:
--------------
trunk/com.aptana.rdt/META-INF/MANIFEST.MF
trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java
trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java
Added Paths:
-----------
trunk/com.aptana.rdt/src/com/aptana/rdt/core/
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/GemListener.java
trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java
Removed Paths:
-------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
Modified: trunk/com.aptana.rdt/META-INF/MANIFEST.MF
===================================================================
--- trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-05-21 14:48:27 UTC (rev 2502)
@@ -10,7 +10,8 @@
Export-Package: com.aptana.rdt,
com.aptana.rdt.internal.parser.warnings,
com.aptana.rdt.internal.ui.preferences,
- com.aptana.rdt.internal.ui.text.ruby.hover
+ com.aptana.rdt.internal.ui.text.ruby.hover,
+ com.aptana.rdt.core.gems
Require-Bundle: org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.jface.text,
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/AptanaRDTPlugin.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -17,9 +17,10 @@
import org.rubypeople.rdt.internal.launching.LaunchingPlugin;
import org.rubypeople.rdt.internal.ui.IRubyStatusConstants;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
+import com.aptana.rdt.core.gems.GemListener;
+import com.aptana.rdt.core.gems.IGemManager;
import com.aptana.rdt.internal.gems.GemManager;
-import com.aptana.rdt.internal.gems.GemManager.GemListener;
import com.aptana.rdt.internal.ui.RubyRedMessages;
/**
@@ -215,6 +216,8 @@
*/
public void start(BundleContext context) throws Exception {
super.start(context);
+ context.registerService(IGemManager.class.getName(), GemManager.getInstance(), null);
+
Set<Gem> gems = GemManager.getInstance().getGems(); // FIXME What if user has explicity disabled using ruby-debug?!
if (gems.isEmpty()) {
GemManager.getInstance().addGemListener(new GemListener() {
Copied: trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java (from rev 2468, trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java)
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/Gem.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -0,0 +1,66 @@
+package com.aptana.rdt.core.gems;
+
+public class Gem implements Comparable {
+
+ private String name;
+ private String version;
+ private String description;
+ private String platform;
+ public static final String RUBY_PLATFORM = "ruby";
+ public static final String MSWIN32_PLATFORM = "mswin32";
+
+ public Gem(String name, String version, String description) {
+ this(name, version, description, "ruby");
+ }
+
+ public Gem(String name, String version, String description, String platform) {
+ if (name == null) throw new IllegalArgumentException("A Gem's name must not be null");
+ if (version == null) throw new IllegalArgumentException("A Gem's version must not be null");
+ if (platform == null) throw new IllegalArgumentException("A Gem's platform must not be null");
+ this.name = name;
+ this.version = version;
+ this.description = description;
+ this.platform = platform;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getPlatform() {
+ return platform;
+ }
+
+ @Override
+ public boolean equals(Object arg0) {
+ if (!(arg0 instanceof Gem)) return false;
+ Gem other = (Gem) arg0;
+ return getName().equals(other.getName()) && getVersion().equals(other.getVersion()) && getPlatform().equals(other.getPlatform());
+ }
+
+ @Override
+ public int hashCode() {
+ return (getName().hashCode() * 100) + getVersion().hashCode();
+ }
+
+ public int compareTo(Object arg0) {
+ if (!(arg0 instanceof Gem)) return -1;
+ Gem other = (Gem) arg0;
+ return toString().compareTo(other.toString());
+ }
+
+ @Override
+ public String toString() {
+ return getName().toLowerCase() + " " + getVersion() + " " + getPlatform();
+ }
+
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/GemListener.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/GemListener.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/GemListener.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -0,0 +1,7 @@
+package com.aptana.rdt.core.gems;
+
+public interface GemListener {
+ public void gemsRefreshed();
+ public void gemAdded(Gem gem);
+ public void gemRemoved(Gem gem);
+}
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/core/gems/IGemManager.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -0,0 +1,27 @@
+package com.aptana.rdt.core.gems;
+
+import java.util.Set;
+
+public interface IGemManager {
+
+ public abstract boolean update(Gem gem);
+
+ public abstract boolean installGem(Gem gem);
+
+ public abstract boolean removeGem(Gem gem);
+
+ public abstract Set<Gem> getGems();
+
+ public abstract boolean refresh();
+
+ public abstract void addGemListener(GemListener listener);
+
+ public abstract Set<Gem> getRemoteGems();
+
+ public abstract boolean gemInstalled(String gemName);
+
+ public abstract void removeGemListener(GemListener listener);
+
+ public abstract String getGemInstallPath();
+
+}
\ No newline at end of file
Deleted: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -1,66 +0,0 @@
-package com.aptana.rdt.internal.gems;
-
-public class Gem implements Comparable {
-
- private String name;
- private String version;
- private String description;
- private String platform;
- static final String RUBY_PLATFORM = "ruby";
- static final String MSWIN32_PLATFORM = "mswin32";
-
- public Gem(String name, String version, String description) {
- this(name, version, description, "ruby");
- }
-
- public Gem(String name, String version, String description, String platform) {
- if (name == null) throw new IllegalArgumentException("A Gem's name must not be null");
- if (version == null) throw new IllegalArgumentException("A Gem's version must not be null");
- if (platform == null) throw new IllegalArgumentException("A Gem's platform must not be null");
- this.name = name;
- this.version = version;
- this.description = description;
- this.platform = platform;
- }
-
-
- public String getName() {
- return name;
- }
-
- public String getVersion() {
- return version;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getPlatform() {
- return platform;
- }
-
- @Override
- public boolean equals(Object arg0) {
- if (!(arg0 instanceof Gem)) return false;
- Gem other = (Gem) arg0;
- return getName().equals(other.getName()) && getVersion().equals(other.getVersion()) && getPlatform().equals(other.getPlatform());
- }
-
- @Override
- public int hashCode() {
- return (getName().hashCode() * 100) + getVersion().hashCode();
- }
-
- public int compareTo(Object arg0) {
- if (!(arg0 instanceof Gem)) return -1;
- Gem other = (Gem) arg0;
- return toString().compareTo(other.toString());
- }
-
- @Override
- public String toString() {
- return getName().toLowerCase() + " " + getVersion() + " " + getPlatform();
- }
-
-}
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -55,9 +55,12 @@
import org.xml.sax.XMLReader;
import com.aptana.rdt.AptanaRDTPlugin;
+import com.aptana.rdt.core.gems.Gem;
+import com.aptana.rdt.core.gems.GemListener;
+import com.aptana.rdt.core.gems.IGemManager;
import com.aptana.rdt.ui.gems.GemsMessages;
-public class GemManager {
+public class GemManager implements IGemManager {
private static final String LOCAL_SWITCH = "-l";
private static final String LIST_COMMAND = "list";
@@ -75,12 +78,12 @@
private static final String LOCAL_GEMS_CACHE_FILE = "local_gems.xml";
private static final String GEM_INDEX_URL = "http://gems.rubyforge.org/yaml.Z";
- private static GemManager fgInstance;
+ private static IGemManager fgInstance;
private Set<Gem> gems;
private Set<Gem> remoteGems;
private Set<GemListener> listeners;
-
+
private GemManager() {
gems = new HashSet<Gem>();
// FIXME Somehow allow user to refresh remote gem list
@@ -381,6 +384,9 @@
return gems;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#update(com.aptana.rdt.internal.gems.Gem)
+ */
public boolean update(Gem gem) {
try {
String command = UPDATE_COMMAND + " " + gem.getName();
@@ -449,6 +455,9 @@
return path + File.separator + "bin" + File.separator + "gem";
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#installGem(com.aptana.rdt.internal.gems.Gem)
+ */
public boolean installGem(Gem gem) {
try {
String command = INSTALL_COMMAND + " " + gem.getName();
@@ -534,6 +543,9 @@
return true;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#removeGem(com.aptana.rdt.internal.gems.Gem)
+ */
public boolean removeGem(Gem gem) {
try {
String command = UNINSTALL_COMMAND + " " + gem.getName();
@@ -552,16 +564,22 @@
return true;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#getGems()
+ */
public Set<Gem> getGems() {
return Collections.unmodifiableSortedSet(new TreeSet<Gem>(gems));
}
- public static GemManager getInstance() {
+ public static IGemManager getInstance() {
if (fgInstance == null)
fgInstance = new GemManager();
return fgInstance;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#refresh()
+ */
public boolean refresh() {
Set<Gem> newGems = loadLocalGems();
if (!newGems.isEmpty()) {
@@ -575,16 +593,16 @@
return false;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#addGemListener(com.aptana.rdt.internal.gems.GemManager.GemListener)
+ */
public synchronized void addGemListener(GemListener listener) {
listeners.add(listener);
}
- public interface GemListener {
- public void gemsRefreshed();
- public void gemAdded(Gem gem);
- public void gemRemoved(Gem gem);
- }
-
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#getRemoteGems()
+ */
public Set<Gem> getRemoteGems() {
SortedSet<Gem> sorted = new TreeSet<Gem>(remoteGems);
SortedSet<Gem> logical = new TreeSet<Gem>();
@@ -601,6 +619,9 @@
return Collections.unmodifiableSortedSet(logical);
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#gemInstalled(java.lang.String)
+ */
public boolean gemInstalled(String gemName) {
Set<Gem> gems = getGems();
for (Gem gem : gems) {
@@ -609,7 +630,40 @@
return false;
}
+ /* (non-Javadoc)
+ * @see com.aptana.rdt.internal.gems.IGemManager#removeGemListener(com.aptana.rdt.internal.gems.GemManager.GemListener)
+ */
public synchronized void removeGemListener(GemListener listener) {
listeners.remove(listener);
}
+
+ public String getGemInstallPath() {
+ try {
+ ILaunchConfiguration config = createGemLaunchConfiguration("environment");
+ ILaunch launch = config.launch(ILaunchManager.RUN_MODE, null);
+ IProcess[] processes = launch.getProcesses();
+ IProcess p = processes[0];
+ IStreamMonitor monitor = p.getStreamsProxy()
+ .getOutputStreamMonitor();
+ final StringBuffer buffer = new StringBuffer();
+ monitor.addListener(new IStreamListener() {
+
+ public void streamAppended(String text, IStreamMonitor monitor) {
+ buffer.append(text);
+ }
+
+ });
+ while (!p.isTerminated()) {
+ Thread.yield();
+ }
+ String contents = buffer.toString();
+ int index = contents.indexOf("INSTALLATION DIRECTORY:");
+ int endIndex = contents.indexOf("\n", index);
+ String path = contents.substring(index + 23, endIndex);
+ return path.trim();
+ } catch(CoreException e) {
+ AptanaRDTPlugin.log(e);
+ }
+ return null;
+ }
}
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManagerContentHandler.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -9,6 +9,8 @@
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
+import com.aptana.rdt.core.gems.Gem;
+
public class GemManagerContentHandler implements ContentHandler {
private HashSet<Gem> gems;
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/LogicalGem.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -5,6 +5,8 @@
import java.util.StringTokenizer;
import java.util.TreeSet;
+import com.aptana.rdt.core.gems.Gem;
+
public class LogicalGem extends Gem {
private LogicalGem(String name, String version, String description) {
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/InstallGemActionDelegate.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -17,7 +17,7 @@
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
import com.aptana.rdt.ui.gems.InstallGemDialog;
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/RemoveGemActionDelegate.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -18,7 +18,7 @@
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
import com.aptana.rdt.ui.gems.GemsMessages;
import com.aptana.rdt.ui.gems.GemsView;
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/ui/actions/UpdateGemActionDelegate.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -17,7 +17,7 @@
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
import com.aptana.rdt.ui.gems.GemsView;
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemLabelProvider.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -4,7 +4,7 @@
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
public class GemLabelProvider extends LabelProvider implements ITableLabelProvider {
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-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/GemsView.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -19,9 +19,9 @@
import org.eclipse.ui.part.ViewPart;
import org.rubypeople.rdt.ui.TableViewerSorter;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
+import com.aptana.rdt.core.gems.GemListener;
import com.aptana.rdt.internal.gems.GemManager;
-import com.aptana.rdt.internal.gems.GemManager.GemListener;
public class GemsView extends ViewPart implements GemListener {
Modified: trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java 2007-05-17 18:15:06 UTC (rev 2501)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/ui/gems/InstallGemDialog.java 2007-05-21 14:48:27 UTC (rev 2502)
@@ -26,7 +26,7 @@
import org.eclipse.swt.widgets.Text;
import org.rubypeople.rdt.ui.TableViewerSorter;
-import com.aptana.rdt.internal.gems.Gem;
+import com.aptana.rdt.core.gems.Gem;
import com.aptana.rdt.internal.gems.GemManager;
import com.aptana.rdt.internal.gems.LogicalGem;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|