/*
* Copyright 2012 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.rpc;
import java.util.Collection;
import java.util.Map;
import java.util.NavigableMap;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.Number640;
import net.tomp2p.storage.Data;
import net.tomp2p.utils.Utils;
public class DigestResult {
final private SimpleBloomFilter<Number160> contentKeyBloomFilter;
final private SimpleBloomFilter<Number160> versionKeyBloomFilter;
final private SimpleBloomFilter<Number160> contentBloomFilter;
final private NavigableMap<Number640, Collection<Number160>> keyDigest;
final private Map<Number640, Data> dataMap;
public DigestResult(SimpleBloomFilter<Number160> contentKeyBloomFilter, SimpleBloomFilter<Number160> versionKeyBloomFilter,
SimpleBloomFilter<Number160> contentBloomFilter) {
this.contentKeyBloomFilter = contentKeyBloomFilter;
this.versionKeyBloomFilter = versionKeyBloomFilter;
this.contentBloomFilter = contentBloomFilter;
this.keyDigest = null;
this.dataMap = null;
}
public DigestResult(NavigableMap<Number640, Collection<Number160>> keyDigest) {
this.keyDigest = keyDigest;
this.contentKeyBloomFilter = null;
this.versionKeyBloomFilter = null;
this.contentBloomFilter = null;
this.dataMap = null;
}
public DigestResult(Map<Number640, Data> dataMap) {
this.dataMap = dataMap;
this.keyDigest = null;
this.contentKeyBloomFilter = null;
this.versionKeyBloomFilter = null;
this.contentBloomFilter = null;
}
public SimpleBloomFilter<Number160> contentKeyBloomFilter() {
return contentKeyBloomFilter;
}
public SimpleBloomFilter<Number160> versionKeyBloomFilter() {
return versionKeyBloomFilter;
}
public SimpleBloomFilter<Number160> contentBloomFilter() {
return contentBloomFilter;
}
public NavigableMap<Number640, Collection<Number160>> keyDigest() {
return keyDigest;
}
public Map<Number640, Data> dataMap() {
return dataMap;
}
@Override
public int hashCode() {
int hashCode = 0;
if (keyDigest != null) {
hashCode ^= keyDigest.hashCode();
}
if (contentKeyBloomFilter != null) {
hashCode ^= contentKeyBloomFilter.hashCode();
}
if (versionKeyBloomFilter != null) {
hashCode ^= versionKeyBloomFilter.hashCode();
}
if (contentBloomFilter != null) {
hashCode ^= contentBloomFilter.hashCode();
}
if (dataMap!=null) {
hashCode ^= dataMap.hashCode();
}
return hashCode;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof DigestResult)) {
return false;
}
if (this == obj) {
return true;
}
DigestResult o = (DigestResult) obj;
return Utils.equals(keyDigest, o.keyDigest) &&
Utils.equals(contentKeyBloomFilter, o.contentKeyBloomFilter) &&
Utils.equals(versionKeyBloomFilter, o.versionKeyBloomFilter) &&
Utils.equals(contentBloomFilter, o.contentBloomFilter) &&
Utils.equals(dataMap, o.dataMap);
}
}