package org.limewire.core.impl; import org.limewire.bittorrent.Torrent; import org.limewire.bittorrent.TorrentManager; import org.limewire.io.InvalidDataException; import org.limewire.logging.Log; import org.limewire.logging.LogFactory; import com.google.inject.Inject; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLNames; class TorrentFactoryImpl implements TorrentFactory { private static final Log LOG = LogFactory.getLog(TorrentFactoryImpl.class); private final TorrentManager torrentManager; @Inject public TorrentFactoryImpl(TorrentManager torrentManager) { this.torrentManager = torrentManager; } @Override public Torrent createTorrentFromXML(LimeXMLDocument xmlDocument) { // if this isn't a torrent xml file then return null if(xmlDocument == null || !xmlDocument.getSchemaURI().equals(LimeXMLNames.TORRENT_SCHEMA)) { return null; } try { XMLTorrent xmlTorrent = new XMLTorrent(xmlDocument); Torrent torrent = torrentManager.getTorrent(xmlTorrent.getSha1()); return torrent != null ? torrent : xmlTorrent; } catch (InvalidDataException ive) { LOG.infof(ive, "error parsing torrent xml: {0}", xmlDocument); return null; } } }