- public Sone parseSone(Sone sone, FetchResult fetchResult) {
- logger.log(Level.FINEST, "Persing FetchResult (%d bytes, %s) for %s…", new Object[] { fetchResult.size(), fetchResult.getMimeType(), sone });
- /* TODO - impose a size limit? */
- InputStream xmlInputStream = null;
- Bucket xmlBucket = null;
- try {
- xmlBucket = fetchResult.asBucket();
- xmlInputStream = xmlBucket.getInputStream();
- Document document = XML.transformToDocument(xmlInputStream);
- SimpleXML soneXml;
- try {
- soneXml = SimpleXML.fromDocument(document);
- } catch (NullPointerException npe1) {
- /* for some reason, invalid XML can cause NPEs. */
- logger.log(Level.WARNING, "XML for Sone " + sone + " can not be parsed!", npe1);
- return null;
- }
-
- /* check ID. */
- String soneId = soneXml.getValue("id", null);
- if ((sone != null) && !sone.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[] { sone, sone.getId(), soneId });
- return null;
- }
-
- /* load Sone from core. */
- 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;
- }
-
- SimpleXML profileXml = soneXml.getNode("profile");
- if (profileXml == null) {
- /* TODO - mark Sone as bad. */
- logger.log(Level.WARNING, "Downloaded Sone %s has no profile!", new Object[] { sone });
- return null;
- }
-
- /* parse profile. */
- String profileFirstName = profileXml.getValue("first-name", null);
- String profileMiddleName = profileXml.getValue("middle-name", null);
- String profileLastName = profileXml.getValue("last-name", null);
- Profile profile = new Profile().setFirstName(profileFirstName).setMiddleName(profileMiddleName).setLastName(profileLastName);