/* * Mojito Distributed Hash Table (Mojito DHT) * Copyright (C) 2006-2007 LimeWire LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.limewire.mojito.db; import java.io.Serializable; import java.util.Collection; import java.util.Map; import java.util.Set; import org.limewire.mojito.KUID; /** * Defines an interface to implement databases. * <p> * Mojito ships with an in-memory database but you may use this * interface to implement a custom <code>Database</code> that is * built on top of BDBJE, for example. */ public interface Database extends Serializable { /** * Sets the <code>DatabaseSecurityConstraint</code>. Use null to reset * the default constraint. * * @param securityConstraint the security constraint */ public void setDatabaseSecurityConstraint( DatabaseSecurityConstraint securityConstraint); /** * Adds or removes the given <code>DHTValue</code> depending on * whether or not it's empty. * * @param entity DHTValue to store (add or remove) * @return whether or not the given DHTValue was added or removed */ public boolean store(DHTValueEntity entity); /** * Adds the given DHTValueEntity to the Database */ //public boolean add(DHTValueEntity entity); /** * Removes the given <code>DHTValue</code> from the Database. * * @param primaryKey key of key-value to remove * @param secondaryKey value of key-value to remove * @return previous value associated with specified key, or null * if there was no mapping for the <code>secondaryKey</code>. */ public DHTValueEntity remove(KUID primaryKey, KUID secondaryKey); /** * Returns whether or not the given <code>DHTValue</code> is stored in our * Database. */ public boolean contains(KUID primaryKey, KUID secondaryKey); /** * Returns a <code>DHTValueBag</code> for the given ValueID, or null if no bag exists. * * @param primaryKey the <code>KUID</code> of the value to lookup in the database */ public Map<KUID, DHTValueEntity> get(KUID primaryKey); /** * Returns the load factor for a <code>KUID</code> Will increment the load value * before returning if <code>incrementLoad</code> is set to <code>true</code>. * * @param primaryKey key of the Node to get the load value * @param incrementLoad whether or not to increase the exponential moving average * (EMA, http://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average) * */ public float getRequestLoad(KUID primaryKey, boolean incrementLoad); /** * Returns all <code>Key</code>s. */ public Set<KUID> keySet(); /** * Returns a collection of <code>DHTValueEntity</code>. */ public Collection<DHTValueEntity> values(); /** * Returns the number of <code>Key</code>s in the Database. */ public int getKeyCount(); /** * Returns the number of Values in the Database * which is greater or equal to key count. */ public int getValueCount(); /** * Clears the Database. */ public void clear(); }