package com.limegroup.gnutella.downloader.serial.conversion;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.limewire.util.GenericsUtils;
class SerialManagedDownloaderImpl extends SerialRoot implements SerialManagedDownloader {
private static final long serialVersionUID = 2772570805975885257L;
private transient SerialRemoteFileDesc defaultRFD;
private transient Set<SerialRemoteFileDesc> remoteFileDescs;
private transient SerialIncompleteFileManager incompleteFileManager;
private transient Map<String, Serializable> properties;
protected SerialManagedDownloaderImpl() {
}
private void writeObject(ObjectOutputStream output) throws IOException {}
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
Object next = stream.readObject();
if (next instanceof SerialRemoteFileDesc[]) {
SerialRemoteFileDesc[] rfds = (SerialRemoteFileDesc[]) next;
if (rfds.length > 0)
defaultRFD = rfds[0];
remoteFileDescs = new HashSet<SerialRemoteFileDesc>(Arrays.asList(rfds));
} else if (next instanceof Set) { // new format
remoteFileDescs = GenericsUtils.scanForSet(next, SerialRemoteFileDesc.class,
GenericsUtils.ScanMode.REMOVE);
if (remoteFileDescs.size() > 0) {
defaultRFD = remoteFileDescs.iterator().next();
}
}
incompleteFileManager = (SerialIncompleteFileManager) stream.readObject();
Object map = stream.readObject();
if (map instanceof Map) {
properties = GenericsUtils.scanForMap(map, String.class, Serializable.class,
GenericsUtils.ScanMode.REMOVE);
} else {
properties = new HashMap<String, Serializable>();
}
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.downloader.serial.conversion.SerialManagedDownloader#getDefaultRFD()
*/
public SerialRemoteFileDesc getDefaultRFD() {
return defaultRFD;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.downloader.serial.conversion.SerialManagedDownloader#getRemoteFileDescs()
*/
public Set<SerialRemoteFileDesc> getRemoteFileDescs() {
return remoteFileDescs;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.downloader.serial.conversion.SerialManagedDownloader#getIncompleteFileManager()
*/
public SerialIncompleteFileManager getIncompleteFileManager() {
return incompleteFileManager;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.downloader.serial.conversion.SerialManagedDownloader#getProperties()
*/
public Map<String, Serializable> getProperties() {
return properties;
}
}