|
From: <caw...@us...> - 2007-05-11 18:26:50
|
Revision: 2468
http://svn.sourceforge.net/rubyeclipse/?rev=2468&view=rev
Author: cawilliams
Date: 2007-05-11 11:26:48 -0700 (Fri, 11 May 2007)
Log Message:
-----------
enforce non-null platform on a Gem. Also fix the way we write our gems in XML so we escape bad characters, by using XMLWriter (which makes prettier XML anyways). Save platform in the xml. Save local caches of both remote and local gems.
Modified Paths:
--------------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java
Modified: 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-11 17:37:00 UTC (rev 2467)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/Gem.java 2007-05-11 18:26:48 UTC (rev 2468)
@@ -16,6 +16,7 @@
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;
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-11 17:37:00 UTC (rev 2467)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/gems/GemManager.java 2007-05-11 18:26:48 UTC (rev 2468)
@@ -3,12 +3,11 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.FileReader;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.io.PrintWriter;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
@@ -28,6 +27,7 @@
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
+import org.eclipse.core.internal.resources.XMLWriter;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -70,7 +70,8 @@
private static final int TIMEOUT = 30000;
private static final String TIMEOUT_MSG = "Installing gem took more than 30 seconds, intentionally broke out to avoid infinite loop";
- private static final String LOCAL_CACHE_FILE = "remote_gems.xml";
+ private static final String REMOTE_GEMS_CACHE_FILE = "remote_gems.xml";
+ private static final String LOCAL_GEMS_CACHE_FILE = "local_gems.xml";
private static final String GEM_INDEX_URL = "http://gems.rubyforge.org/yaml";
private static GemManager fgInstance;
@@ -89,10 +90,10 @@
@Override
protected IStatus run(IProgressMonitor monitor) {
- remoteGems = loadLocalCache();
+ remoteGems = loadLocalCache(getConfigFile(REMOTE_GEMS_CACHE_FILE));
if (remoteGems.isEmpty()) {
remoteGems = loadRemoteGems();
- storeGemCache();
+ storeGemCache(remoteGems, getConfigFile(REMOTE_GEMS_CACHE_FILE));
}
return Status.OK_STATUS;
}
@@ -103,7 +104,11 @@
@Override
protected IStatus run(IProgressMonitor monitor) {
- gems = loadLocalGems();
+ gems = loadLocalCache(getConfigFile(LOCAL_GEMS_CACHE_FILE));
+ if (gems.isEmpty()) {
+ gems = loadLocalGems();
+ storeGemCache(gems, getConfigFile(LOCAL_GEMS_CACHE_FILE));
+ }
for (GemListener listener : listeners) {
listener.gemsRefreshed();
}
@@ -114,10 +119,10 @@
job2.schedule();
}
- protected Set<Gem> loadLocalCache() {
+ protected Set<Gem> loadLocalCache(File file) {
FileReader fileReader = null;
try {
- fileReader = new FileReader(getConfigFile());
+ fileReader = new FileReader(file);
XMLReader reader = SAXParserFactory.newInstance().newSAXParser()
.getXMLReader();
GemManagerContentHandler handler = new GemManagerContentHandler();
@@ -146,11 +151,11 @@
return new HashSet<Gem>();
}
- protected void storeGemCache() {
- PrintWriter out = null;
+ protected void storeGemCache(Set<Gem> gems, File file) {
+ XMLWriter out = null;
try {
- out = new PrintWriter(new FileWriter(getConfigFile()));
- writeXML(out);
+ out = new XMLWriter(new FileOutputStream(file));
+ writeXML(gems, out);
} catch (FileNotFoundException e) {
AptanaRDTPlugin.log(e);
} catch (IOException e) {
@@ -161,36 +166,29 @@
}
}
- /**
- * Returns the configuration file to use for the servers. The file is
- * located in the plugin state directory and called
- * <code>remote_gems.xml</code>.
- *
- * @return the config file
- */
- private File getConfigFile() {
+ private File getConfigFile(String fileName) {
return AptanaRDTPlugin.getDefault().getStateLocation().append(
- LOCAL_CACHE_FILE).toFile();
+ fileName).toFile();
}
/**
* Writes each server configuration to file in XML format.
+ * @param gems
*
* @param out
* the writer to use
*/
- private void writeXML(PrintWriter out) {
- out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- out.println("<gems>");
- for (Gem gem : remoteGems) {
- out.println("<gem>");
- out.println("<name>" + gem.getName() + "</name>");
- out.println("<version>" + gem.getVersion() + "</version>");
- out.println("<description>" + gem.getDescription()
- + "</description>");
- out.println("</gem>");
+ private void writeXML(Set<Gem> gems, XMLWriter out) {
+ out.startTag("gems", null);
+ for (Gem gem : gems) {
+ out.startTag("gem", null);
+ out.printSimpleTag("name", gem.getName());
+ out.printSimpleTag("version", gem.getVersion());
+ out.printSimpleTag("description", gem.getDescription());
+ out.printSimpleTag("platform", gem.getPlatform());
+ out.endTag("gem");
}
- out.println("</gems>");
+ out.endTag("gems");
out.flush();
}
@@ -228,7 +226,11 @@
name = line.trim().substring(6);
}
if (line.trim().startsWith("platform:")) {
- platform = line.trim().substring(10);
+ if (line.trim().length() == 9) {
+ platform = Gem.RUBY_PLATFORM;
+ } else {
+ platform = line.trim().substring(10);
+ }
}
if (line.trim().startsWith("summary:")) {
description = line.trim().substring(9);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|