001: package com.jofti.core;
002:
003: import java.util.Properties;
004:
005: import com.jofti.btree.EntrySplitWrapper;
006: import com.jofti.btree.IPage;
007: import com.jofti.exception.JoftiException;
008: import com.jofti.store.StoreWrapper;
009:
010: /**
011: * <p>The store manager is responsible for mediating between the store implementations and
012: * the the index.
013: * </p>
014: * <p>
015: * After retrieving a page the caller SHOULD ensure they call either store, remove or release after finishing with a page. Failure to do so may well
016: * have an impact on the performance of the store in being able to recycle pages.
017: * </p>
018: *
019: * @author xenephon
020: * @since Jofti 1.2
021: */
022: public interface IStoreManager {
023:
024: /**
025: * Initialises the store manager.
026: *
027: * @param properties
028: * @throws JoftiException
029: */
030: public abstract void init(Properties properties)
031: throws JoftiException;
032:
033: public abstract String getName();
034:
035: public abstract void setName(String name);
036:
037: /**
038: * <p>
039: * Stores the page in the store. Any changes to the storekey are made in the return key object.
040: * </p>
041: * <p>
042: * </p>
043: * @param key - containing the locations to store the page under (possibly more than one)
044: * @param obj - the page to store.
045: * @return
046: * @throws JoftiException - thrown if the key cannot be stored.
047: */
048: public IStoreKey store(IStoreKey key, IPage obj)
049: throws JoftiException;
050:
051: /**
052: * Called by the client to notify the manager that they have finished with the page.
053: *
054: * @param key
055: * @param obj
056: */
057: public void releasePage(IStoreKey key, IPage obj);
058:
059: /**
060: * Returns the next available storeKey to the caller.
061: *
062: * @return
063: * @throws JoftiException
064: */
065: public IStoreKey getNextKey() throws JoftiException;
066:
067: /**
068: * Returns a StoreWrapper object which containes the StoreKey and the IPage the
069: * key refers to.
070: *
071: * @param key
072: * @return
073: * @throws JoftiException
074: */
075: public StoreWrapper retrieve(IStoreKey key) throws JoftiException;
076:
077: /**
078: * Removes all entries from the store.
079: * @throws JoftiException
080: */
081: public void removeAll() throws JoftiException;
082:
083: /**
084: * Removes the page from the store and frees up the positions specified in the storeKey.
085: * @param key
086: * @param page
087: * @throws JoftiException
088: */
089: public void remove(IStoreKey key, IPage page) throws JoftiException;
090:
091: /**
092: * Splits an IPage into two IPage objects with a fair distribution of entries. The EntrySplitWrapper
093: * contains both the page and the number of entries in the page.
094: *
095: * @param page
096: * @param entryNumber
097: * @return
098: */
099: public EntrySplitWrapper[] split(IPage page, int entryNumber);
100:
101: }
|