/*
* Copyright 2009 Thomas Bocek
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package net.tomp2p.message;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.Map;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.PeerAddress;
import net.tomp2p.storage.Data;
public class TrackerData {
public final static Data EMTPY_DATA = new Data(0, 0);
private final Map<PeerAddress, Data> peerAddresses;
final private PeerAddress referrer;
final private boolean couldProvideMoreData;
public TrackerData(Map<PeerAddress, Data> peerAddresses, PeerAddress referrer) {
this(peerAddresses, referrer, false);
}
public TrackerData(Map<PeerAddress, Data> peerAddresses, PeerAddress referrer,
boolean couldProvideMoreData) {
this.peerAddresses = peerAddresses;
this.referrer = referrer;
this.couldProvideMoreData = couldProvideMoreData;
}
public Map<PeerAddress, Data> getPeerAddresses() {
return peerAddresses;
}
public PeerAddress getReferrer() {
return referrer;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("p:").append(peerAddresses).append(",l:");
return sb.toString();
}
public boolean couldProvideMoreData() {
return couldProvideMoreData;
}
public int size() {
return peerAddresses.size();
}
public Map<PeerAddress, Data> map() {
return peerAddresses;
}
public void put(PeerAddress remotePeer, Data attachement) {
peerAddresses.put(remotePeer, attachement == null ? EMTPY_DATA : attachement);
}
public Map.Entry<PeerAddress, Data> remove(Number160 remotePeerId) {
for (Iterator<Map.Entry<PeerAddress, Data>> iterator = peerAddresses.entrySet().iterator(); iterator
.hasNext();) {
Map.Entry<PeerAddress, Data> entry = iterator.next();
if (entry.getKey().getPeerId().equals(remotePeerId)) {
iterator.remove();
return entry;
}
}
return null;
}
public boolean containsKey(Number160 tmpKey) {
for (Iterator<Map.Entry<PeerAddress, Data>> iterator = peerAddresses.entrySet().iterator(); iterator
.hasNext();) {
Map.Entry<PeerAddress, Data> entry = iterator.next();
if (entry.getKey().getPeerId().equals(tmpKey)) {
return true;
}
}
return false;
}
}