| java.lang.Object com.ecyrd.jspwiki.filters.BasicPageFilter com.ecyrd.jspwiki.ReferenceManager
ReferenceManager | public class ReferenceManager extends BasicPageFilter implements InternalModule,WikiEventListener(Code) | | Keeps track of wikipage references:
- What pages a given page refers to
- What pages refer to a given page
This is a quick'n'dirty approach without any finesse in storage and
searching algorithms; we trust java.util.*.
This class contains two HashMaps, m_refersTo and m_referredBy. The
first is indexed by WikiPage names and contains a Collection of all
WikiPages the page refers to. (Multiple references are not counted,
naturally.) The second is indexed by WikiPage names and contains
a Set of all pages that refer to the indexing page. (Notice -
the keys of both Maps should be kept in sync.)
When a page is added or edited, its references are parsed, a Collection
is received, and we crudely replace anything previous with this new
Collection. We then check each referenced page name and make sure they
know they are referred to by the new page.
Based on this information, we can perform non-optimal searches for
e.g. unreferenced pages, top ten lists, etc.
The owning class must take responsibility of filling in any pre-existing
information, probably by loading each and every WikiPage and calling this
class to update the references when created.
author: ebu@memecry.net since: 1.6.1 |
Method Summary | |
public void | actionPerformed(WikiEvent event) | public synchronized void | clearPageEntries(String pagename) Clears the references to a certain page so it's no longer in the map. | public int | deepHashCode() This 'deepHashCode' can be used to determine if there were any
modifications made to the underlying to and by maps of the
ReferenceManager. | public Set | findCreated() Returns a list of all pages that the ReferenceManager knows about.
This should be roughly equivalent to PageManager.getAllPages(), but without
the potential disk access overhead. | public Set | findReferredBy(String pageName) Returns all pages that refer to this page. | public synchronized Collection | findReferrers(String pagename) Find all pages that refer to this page. | public Collection | findRefersTo(String pageName) Returns all pages that this page refers to. | public synchronized Collection | findUncreated() Finds all references to non-existant pages. | public synchronized Collection | findUnreferenced() Finds all unreferenced pages. | protected Map | getReferredBy() Returns the referred-by list. | protected Map | getRefersTo() Returns the refers-to list. | public void | initialize(Collection pages) Initializes the entire reference manager with the initial set of pages
from the collection. | public synchronized void | pageRemoved(WikiPage page) Updates the m_referedTo and m_referredBy hashmaps when a page has been
deleted.
Within the m_refersTo map the pagename is a key. | public void | postSave(WikiContext context, String content) After the page has been saved, updates the reference lists. | public synchronized void | updateReferences(String page, Collection references) Updates the referred pages of a new or edited WikiPage. |
ReferenceManager | public ReferenceManager(WikiEngine engine)(Code) | | Builds a new ReferenceManager.
Parameters: engine - The WikiEngine to which this is managing references to. |
clearPageEntries | public synchronized void clearPageEntries(String pagename)(Code) | | Clears the references to a certain page so it's no longer in the map.
Parameters: pagename - Name of the page to clear references for. |
deepHashCode | public int deepHashCode()(Code) | | This 'deepHashCode' can be used to determine if there were any
modifications made to the underlying to and by maps of the
ReferenceManager. The maps of the ReferenceManager are not
synchronized, so someone could add/remove entries in them while the
hashCode is being computed.
Sum of the hashCodes for the to and by maps of theReferenceManager since: 2.3.24 |
findCreated | public Set findCreated()(Code) | | Returns a list of all pages that the ReferenceManager knows about.
This should be roughly equivalent to PageManager.getAllPages(), but without
the potential disk access overhead. Note that this method is not guaranteed
to return a Set of really all pages (especially during startup), but it is
very fast.
A Set of all defined page names that ReferenceManager knows about. since: 2.3.24 |
findReferredBy | public Set findReferredBy(String pageName)(Code) | | Returns all pages that refer to this page. Note that this method
returns an unmodifiable Map, which may be abruptly changed. So any
access to any iterator may result in a ConcurrentModificationException.
The advantages of using this method over findReferrers() is that
it is very fast, as it does not create a new object. The disadvantages
are that it does not do any mapping between plural names, and you
may end up getting a ConcurrentModificationException.
Parameters: pageName - Page name to query. A Set of Strings containing the names of all the pages that referto this page. May return null, if the page does not exist orhas not been indexed yet. since: 2.2.33 |
findReferrers | public synchronized Collection findReferrers(String pagename)(Code) | | Find all pages that refer to this page. Returns null if the page
does not exist or is not referenced at all, otherwise returns a
collection containing page names (String) that refer to this one.
Parameters: pagename - The page to find referrers for. A Collection of Strings. (This is, in fact, a Set, and is likelyto change at some point to a Set). May return null, if the pagedoes not exist, or if it has no references. |
findRefersTo | public Collection findRefersTo(String pageName)(Code) | | Returns all pages that this page refers to. You can use this as a quick
way of getting the links from a page, but note that it does not link any
InterWiki, image, or external links. It does contain attachments, though.
The Collection returned is unmutable, so you cannot change it. It does reflect
the current status and thus is a live object. So, if you are using any
kind of an iterator on it, be prepared for ConcurrentModificationExceptions.
The returned value is a Collection, because a page may refer to another page
multiple times.
Parameters: pageName - Page name to query A Collection of Strings containing the names of the pages that this pagerefers to. May return null, if the page does not exist or has notbeen indexed yet. since: 2.2.33 |
findUncreated | public synchronized Collection findUncreated()(Code) | | Finds all references to non-existant pages. This requires a linear
scan through m_refersTo values; each value must have a corresponding
key entry in the reference Maps, otherwise such a page has never
been created.
Returns a Collection containing Strings of unreferenced page names.
Each non-existant page name is shown only once - we don't return information
on who referred to it.
|
findUnreferenced | public synchronized Collection findUnreferenced()(Code) | | Finds all unreferenced pages. This requires a linear scan through
m_referredBy to locate keys with null or empty values.
|
getReferredBy | protected Map getReferredBy()(Code) | | Returns the referred-by list. For debugging.
|
getRefersTo | protected Map getRefersTo()(Code) | | Returns the refers-to list. For debugging.
|
initialize | public void initialize(Collection pages) throws ProviderException(Code) | | Initializes the entire reference manager with the initial set of pages
from the collection.
Parameters: pages - A collection of all pages you want to be included in the referencecount. since: 2.2 |
pageRemoved | public synchronized void pageRemoved(WikiPage page)(Code) | | Updates the m_referedTo and m_referredBy hashmaps when a page has been
deleted.
Within the m_refersTo map the pagename is a key. The whole key-value-set
has to be removed to keep the map clean.
Within the m_referredBy map the name is stored as a value. Since a key
can have more than one value we have to delete just the key-value-pair
referring page:deleted page.
Parameters: page - Name of the page to remove from the maps. |
postSave | public void postSave(WikiContext context, String content)(Code) | | After the page has been saved, updates the reference lists.
|
updateReferences | public synchronized void updateReferences(String page, Collection references)(Code) | | Updates the referred pages of a new or edited WikiPage. If a refersTo
entry for this page already exists, it is removed and a new one is built
from scratch. Also calls updateReferredBy() for each referenced page.
This is the method to call when a new page has been created and we
want to a) set up its references and b) notify the referred pages
of the references. Use this method during run-time.
Parameters: page - Name of the page to update. Parameters: references - A Collection of Strings, each one pointing to a page this page references. |
|
|