package com.limegroup.gnutella.dht.db; import java.util.Set; import org.limewire.concurrent.AbstractLazySingletonProvider; import org.limewire.io.IpPort; import org.limewire.mojito.db.DHTValueType; import org.limewire.mojito.exceptions.DHTValueException; import org.limewire.mojito.routing.Version; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; import com.limegroup.gnutella.ApplicationServices; import com.limegroup.gnutella.NetworkManager; import com.limegroup.gnutella.PushEndpointFactory; /** * Factory to create {@link PushProxiesValue}s. */ @Singleton public class PushProxiesValueFactoryImpl implements PushProxiesValueFactory { private final NetworkManager networkManager; private final PushEndpointFactory pushEndpointFactory; private final Provider<PushProxiesValue> lazySelf; private final ApplicationServices applicationServices; @Inject public PushProxiesValueFactoryImpl(NetworkManager networkManager, PushEndpointFactory pushEndpointFactory, ApplicationServices applicationServices) { this.networkManager = networkManager; this.pushEndpointFactory = pushEndpointFactory; this.applicationServices = applicationServices; lazySelf = new AbstractLazySingletonProvider<PushProxiesValue>() { @Override protected PushProxiesValue createObject() { return new PushProxiesValueForSelf( PushProxiesValueFactoryImpl.this.networkManager, PushProxiesValueFactoryImpl.this.pushEndpointFactory, PushProxiesValueFactoryImpl.this.applicationServices); } }; } /* (non-Javadoc) * @see com.limegroup.gnutella.dht.db.PushProxiesValueFactory#createDHTValue(org.limewire.mojito.db.DHTValueType, org.limewire.mojito.routing.Version, byte[]) */ public PushProxiesValue createDHTValue(DHTValueType type, Version version, byte[] value) throws DHTValueException { return createFromData(version, value); } public PushProxiesValue createDHTValueForSelf() { return lazySelf.get(); } /** * Factory method for testing purposes */ AbstractPushProxiesValue createPushProxiesValue(Version version, byte[] guid, byte features, int fwtVersion, int port, Set<? extends IpPort> proxies) { return new PushProxiesValueImpl(version, guid, features, fwtVersion, port, proxies); } /** * Factory method to create PushProxiesValues */ PushProxiesValue createFromData(Version version, byte[] data) throws DHTValueException { return new PushProxiesValueImpl(version, data); } }