logger.log(Level.FINEST, "Got %d bytes back.", fetchResult.size());
Sone parsedSone = parseSone(sone, fetchResult, requestUri);
if (parsedSone != null) {
- core.addSone(parsedSone);
+ core.updateSone(parsedSone);
}
} finally {
core.setSoneStatus(sone, (sone.getTime() == 0) ? SoneStatus.unknown : SoneStatus.idle);
}
/**
- * Parses a Sone from the given input stream.
- *
- * @param soneInputStream
- * The input stream to parse the Sone from
- * @return The parsed Sone
- */
- public Sone parseSone(InputStream soneInputStream) {
- return parseSone(null, soneInputStream);
- }
-
- /**
* Parses a Sone from the given input stream and updates the given Sone, or
* creates a new Sone.
*
- * @param originalSone
- * The Sone to update (may be {@code null})
+ * @param sone
+ * The Sone to update
* @param soneInputStream
* The input stream to parse the Sone from
* @return The parsed Sone
*/
- public Sone parseSone(Sone originalSone, InputStream soneInputStream) {
+ public Sone parseSone(Sone sone, InputStream soneInputStream) {
/* TODO - impose a size limit? */
- Sone sone;
Document document;
/* XML parsing is not thread-safe. */
}
if (document == null) {
/* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Could not parse XML for Sone %s!", new Object[] { originalSone });
+ logger.log(Level.WARNING, "Could not parse XML for Sone %s!", new Object[] { sone });
return null;
}
SimpleXML soneXml;
soneXml = SimpleXML.fromDocument(document);
} catch (NullPointerException npe1) {
/* for some reason, invalid XML can cause NPEs. */
- logger.log(Level.WARNING, "XML for Sone " + originalSone + " can not be parsed!", npe1);
- return null;
- }
-
- /* check ID. */
- String soneId = soneXml.getValue("id", null);
- if ((originalSone != null) && !originalSone.getId().equals(soneId)) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded ID for Sone %s (%s) does not match known ID (%s)!", new Object[] { originalSone, originalSone.getId(), soneId });
+ logger.log(Level.WARNING, "XML for Sone " + sone + " can not be parsed!", npe1);
return null;
}
- /* load Sone from core. */
- sone = originalSone;
- if (sone == null) {
- sone = core.getSone(soneId);
- }
-
- String soneName = soneXml.getValue("name", null);
- if (soneName == null) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded name for Sone %s was null!", new Object[] { sone });
- return null;
- }
- sone.setName(soneName);
-
String soneTime = soneXml.getValue("time", null);
if (soneTime == null) {
/* TODO - mark Sone as bad. */
if ((soneInsertUri != null) && (sone.getInsertUri() == null)) {
try {
sone.setInsertUri(new FreenetURI(soneInsertUri));
- sone.updateUris(Math.max(sone.getRequestUri().getSuggestedEdition(), sone.getInsertUri().getSuggestedEdition()));
+ sone.setLatestEdition(Math.max(sone.getRequestUri().getSuggestedEdition(), sone.getInsertUri().getSuggestedEdition()));
} catch (MalformedURLException mue1) {
/* TODO - mark Sone as bad. */
logger.log(Level.WARNING, "Downloaded Sone " + sone + " has invalid insert URI: " + soneInsertUri, mue1);
}
}
- /* parse known Sones. */
- SimpleXML knownSonesXml = soneXml.getNode("known-sones");
- Set<Sone> knownSones = new HashSet<Sone>();
- if (knownSonesXml == null) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded Sone %s has no known Sones!", new Object[] { sone });
- } else {
- for (SimpleXML knownSoneXml : knownSonesXml.getNodes("known-sone")) {
- String knownSoneId = knownSoneXml.getValue("sone-id", null);
- String knownSoneKey = knownSoneXml.getValue("sone-key", null);
- String knownSoneName = knownSoneXml.getValue("sone-name", null);
- if ((knownSoneId == null) || (knownSoneKey == null) || (knownSoneName == null)) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded known Sone for Sone %s with missing data! ID: %s, Key: %s, Name: %s", new Object[] { sone, knownSoneId, knownSoneKey, knownSoneName });
- return null;
- }
- try {
- knownSones.add(core.getSone(knownSoneId).setRequestUri(new FreenetURI(knownSoneKey)).setName(knownSoneName));
- } catch (MalformedURLException mue1) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded known Sone for Sone %s with invalid key: %s", new Object[] { sone, knownSoneKey });
- return null;
- }
- }
- }
-
/* okay, apparently everything was parsed correctly. Now import. */
/* atomic setter operation on the Sone. */
synchronized (sone) {
sone.setModificationCounter(0);
}
- /* add all known Sones to core for downloading. */
- for (Sone knownSone : knownSones) {
- core.addSone(knownSone);
- }
return sone;
}