org.activemath.abstractcontent
Class CascadingMBaseRef

java.lang.Object
  extended by org.activemath.abstractcontent.CascadingMBaseRef
All Implemented Interfaces:
MBaseRef

public class CascadingMBaseRef
extends Object
implements MBaseRef

A class to wrap several MBaseRef within a cascaded order, each shadowing the next.

This class is based on the ability for an MBaseRef to say when it contains an ID, currently, this is based on the use of MBaseRef.getCanonicalID(org.activemath.abstractcontent.MBaseID): before each request, this object goes along the list of MBaseRefs and asks it wether it contains the given ID, if yes, the indicated request is sent to this MBaseRef.

For the search facilities which involve returning all relations, all the MBaseRefs are used. This means that some of these requests may actually return double values.

This allows an author, for example, to have its own OmdocJdomMBase, for example, with a small content in it, the content it is editing, and relay the rest of the request to a larger container. It also allows authors to shadow an existing content by returning, from its own MBase, the content of IDs it wishes to overwrite.

FUTURE: this class will, in the future, be an extension of MultiMBase so as to target better the identification of the appropriate MBaseRef using collection names.

Version:

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.activemath.abstractcontent.MBaseRef
MBaseRef.Dependency, MBaseRef.Relation
 
Constructor Summary
CascadingMBaseRef(List mbases)
           
CascadingMBaseRef(Subconfiguration config)
          Uses the mbases.xxx children to create each MBases, which are sorted in alphabetical order.
 
Method Summary
 void assertItsUp()
          Asserts that the database connection is up and running.
protected  boolean containsID(MBaseRef ref, MBaseID id)
          Invokes MBaseRef.getCanonicalID(org.activemath.abstractcontent.MBaseID) on the indicated MBaseRef returning true if no exception was thrown or false if one was.
 String getAttribute(MBaseID id, String attributeName)
          Returns the MBaseRef.getAttribute(org.activemath.abstractcontent.MBaseID, java.lang.String) of the first MBaseRef that contains the ID.
 MBaseID getCanonicalID(MBaseID id)
          Returns a fully-qualified unique ID that enables collections of IDs to behave properly.
 OJElement getChildren(MBaseID id, String xPathReducedExpression)
          Returns the content of the named descendant of the element of given ID.
 Collection getCollectionsProvided()
          returns a Collection (object) with the collections (content blocks) provided by this MBaseRef
 Map getCommonName(MBaseID id)
          Returns the names of this element which is fetched either from the <metadata><dc:Title> descendant or from the <commonname> elements.
 OJElement getCompleteDCMetadata(MBaseID id)
          Returns a metadata element with only Dublin-Core children including inherited ones from their parents.
 Iterator getDefinitions(MBaseID id, Collection collections)
          For a symbol, this method returns the IDs of all definitions.
 Iterator getDependencies(MBaseID id)
          Gets an Iterator of MBaseRef.Dependency relations with all relations that stem from this element.
 OJElement getFormalContent(MBaseID id)
          From any ID this method returns the content of the FMP element.
 MBaseID[] getForWhat(MBaseID id)
          Returns the ID contained in the attribute for
 Iterator getIncomingRelations(MBaseID id, Collection collections)
          Returns an iterator of MBaseRef.Relations objects describing the relations that point to this item.
 Iterator getItemsModifiedSince(Date date)
           
 Date getLastModified(Collection ids)
          Returns the latest modification dates of the elements whose IDs are given.
 MBaseRef getMBaseContaining(MBaseID id)
          Goes through the list of MBaseRefs invoking, on each, containsID(MBaseRef,MBaseID) and returning the first that responds true.
 MBaseRef getMBaseContaining(String collName)
           
protected  MBaseRef getMBaseContainingOrThrow(MBaseID id)
          The same as getMBaseContaining(org.activemath.abstractcontent.MBaseID) but throws MBaseItemNotFoundException instead of returning null.
 List getMBaseList()
           
 OJElement getMetadata(MBaseID id)
          Returns the contents of the <metdata> child of this element.
 Iterator getOutgoingRelations(MBaseID id)
          Returns an iterator of MBaseRef.Relations objects describing the relations that point from this item.
 Iterator getProofs(MBaseID id, Collection collections)
          For an assertion, this method returns the IDs of all of its proofs.
 Iterator getRelated(MBaseID id, Collection collections)
          Goes through all MBaseRefs amalgamating all the Iterators provided.
 OJDocument getStructuredListOfConcepts(Collection collections)
          This expensive operation walks the complete XML structure of one single collection stored in the server and creates a theory element for each theory then a concept element for each of the concepts (symbol, definition, assertion, proof, methods).
 Map getTagFreeCommonName(MBaseID id)
          Returns the titles without any tags, just extracting the text or partially rendering it.
 List getTextualContent(MBaseID id)
          From any ID this method returns the row of CMP elements' contents.
 MBaseID getTheory(MBaseID id)
          Returns the ID of the closest parent (including the element itself) that either has a theory attribute or is a theory element or null if there is no such parent.
 String getTypeString(MBaseID id)
          Returns the name of the element whose ID is given.
 Iterator iterateOverIterators(Iterator itsOfIt)
           
 Iterator listItems(Collection collections, String type)
          Lists all the items being children of the element of the indicated ID.
 Iterator listItems(MBaseID id)
          Lists all the items being children of the element of the indicated ID.
 Iterator listTheories(Collection collections)
          Lists all the IDs of the theory elements contained in the indicated collections .
 Iterator searchText(String textToSearch, Collection collections)
          Searches the union of all text elements, but not the attributes, for the given substring in a case-sensistive manner.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CascadingMBaseRef

public CascadingMBaseRef(List mbases)
Parameters:
mbases - a List of MBaseRefs to be used.

CascadingMBaseRef

public CascadingMBaseRef(Subconfiguration config)
                  throws Exception
Uses the mbases.xxx children to create each MBases, which are sorted in alphabetical order. The MBaseRefs are created using ConfiguredObjectMaker which is expected to be provided by the sub-configuration.

Parameters:
config - The subconfiguration to extract the mbases. from
Throws:
Exception - if anything happens
Method Detail

getMBaseList

public List getMBaseList()
Returns:
the list of MBaseRef that is being queried.

getMBaseContaining

public MBaseRef getMBaseContaining(MBaseID id)
                            throws MBaseException
Goes through the list of MBaseRefs invoking, on each, containsID(MBaseRef,MBaseID) and returning the first that responds true.

Parameters:
id - The ID to search for
Returns:
the first MBaseRef in the list that responds positively to containsID(MBaseRef,MBaseID).
Throws:
MBaseException - if any of the MBaseRefs throw it
MBaseItemNotFoundException - never, returns null instead

getMBaseContaining

public MBaseRef getMBaseContaining(String collName)
                            throws MBaseException
Throws:
MBaseException

getDependencies

public Iterator getDependencies(MBaseID id)
                         throws MBaseException
Description copied from interface: MBaseRef
Gets an Iterator of MBaseRef.Dependency relations with all relations that stem from this element. Relations are considered the same as dependencies in this class. They are of many types as described in the MBaseRef.Dependency class. Use MBaseRef.getDependencies(org.activemath.abstractcontent.MBaseID) to read the list of relations that stem from another element but target this element.

Note that the server implementation is not required to return all these types only the content of the <depends-on> elements are required to be returned.

Specified by:
getDependencies in interface MBaseRef
Parameters:
id - The ID of the element whose dependencies are wished
Returns:
the result MBaseRef.getDependencies(org.activemath.abstractcontent.MBaseID) on the first MBaseRef that contains the indicated ID.
Throws:
MBaseException - If any of the mbases throws an exception different than MBaseItemNotFoundException

getRelated

public Iterator getRelated(MBaseID id,
                           Collection collections)
                    throws MBaseException
Goes through all MBaseRefs amalgamating all the Iterators provided. TODO: This method should be enhanced to avoid providing double entries which ican happen when in the scenario of an overwriting (i.e. when an item is present in two MBases.

Specified by:
getRelated in interface MBaseRef
Parameters:
id - Missing description of Parameter
collections - Missing description of Parameter
Returns:
the amalgamation of the Iterator objects returned by each of the members of the list.
Throws:
MBaseException - Missing description of Exception

getChildren

public OJElement getChildren(MBaseID id,
                             String xPathReducedExpression)
                      throws MBaseException
Description copied from interface: MBaseRef
Returns the content of the named descendant of the element of given ID. The descendant are found using the xPathReducedExpression parameter which aims at imitating an XPath expression except it only accepts the ., / and named elements.

This walks the tree of descendants, taking children everytime a /elementName is found in the xPathReducedExpression and returns the content of the end child.

Such a method might be a warmer future for all requests, including getDependencies, getMetaData and getCommonName.

Specified by:
getChildren in interface MBaseRef
Parameters:
id - the MBaseID to get the children of
xPathReducedExpression - as described above
Returns:
the OJElement thus crafted
Throws:
MBaseException - if something fails

getAttribute

public String getAttribute(MBaseID id,
                           String attributeName)
                    throws MBaseException
Returns the MBaseRef.getAttribute(org.activemath.abstractcontent.MBaseID, java.lang.String) of the first MBaseRef that contains the ID.

Specified by:
getAttribute in interface MBaseRef
Parameters:
id - Missing description of Parameter
attributeName - Missing description of Parameter
Returns:
Missing description of return The attribute value
Throws:
MBaseException - Missing description of Exception

getDefinitions

public Iterator getDefinitions(MBaseID id,
                               Collection collections)
                        throws MBaseException
Description copied from interface: MBaseRef
For a symbol, this method returns the IDs of all definitions.

Specified by:
getDefinitions in interface MBaseRef
Parameters:
id - id the id of the symbol whose definitions are looked at
collections - collections the name of the collections to be searched
Returns:
null for non-symbol elements or if no definition is found.
Throws:
MBaseException - if something's wrong.

getProofs

public Iterator getProofs(MBaseID id,
                          Collection collections)
                   throws MBaseException
Description copied from interface: MBaseRef
For an assertion, this method returns the IDs of all of its proofs.

Specified by:
getProofs in interface MBaseRef
Parameters:
id - MBaseID denoting the assertion whose proofs are to be searched
collections - Collection of (content) collections to search in
Returns:
an Iterator with the proofs, that is empty for non-assertion elements or if no proof is found.
Throws:
MBaseException - if something's wrong.

getTextualContent

public List getTextualContent(MBaseID id)
                       throws MBaseException
Description copied from interface: MBaseRef
From any ID this method returns the row of CMP elements' contents. The server is supposed to "resolve" the occurrences of <OMS> who are "referenced" by means of the xref attribute.

Specified by:
getTextualContent in interface MBaseRef
Parameters:
id - The ID of the item whose CMPs are to be returned
Returns:
A list of OJElements being the CMP nodes
Throws:
MBaseException - if something fails

getFormalContent

public OJElement getFormalContent(MBaseID id)
                           throws MBaseException
Description copied from interface: MBaseRef
From any ID this method returns the content of the FMP element. The server is supposed to "resolve" the occurrences of <OMS> who are "referenced" by means of the xref attribute.

Specified by:
getFormalContent in interface MBaseRef
Parameters:
id - The ID whose FMP child is to be fetched
Returns:
a the OJElement representing the <FMP> or null if there is no <FMP> content behind the ID
Throws:
MBaseException - if something fails

getMetadata

public OJElement getMetadata(MBaseID id)
                      throws MBaseException
Description copied from interface: MBaseRef
Returns the contents of the <metdata> child of this element. This does not apply the inheritance principles of Dublin-Core metadata (as described in OMDoc 1.1 specifications), please use MBaseRef.getCompleteDCMetadata(org.activemath.abstractcontent.MBaseID) for this task.

Specified by:
getMetadata in interface MBaseRef
Parameters:
id - The ID of the item whose metadata element is to be fetched.
Returns:
The metadata OJElement
Throws:
MBaseException - if something fails

getCompleteDCMetadata

public OJElement getCompleteDCMetadata(MBaseID id)
                                throws MBaseException
Description copied from interface: MBaseRef
Returns a metadata element with only Dublin-Core children including inherited ones from their parents. The inheritance is described in OMDoc 1.1 specifications (i.e. added values with children taking precedence when a triple (language, element-name, role) also exists.

This allows most of the copyright informations to be stored in the metadata element of the OMDoc while additions can override or enrich these values.

Specified by:
getCompleteDCMetadata in interface MBaseRef
Parameters:
id - the ID of the item whose metadata is to be fetched
Returns:
the completed OJElement metadata node
Throws:
MBaseException - If anything happens

getTheory

public MBaseID getTheory(MBaseID id)
                  throws MBaseException
Description copied from interface: MBaseRef
Returns the ID of the closest parent (including the element itself) that either has a theory attribute or is a theory element or null if there is no such parent.

Specified by:
getTheory in interface MBaseRef
Parameters:
id - The item whose theory is to be found
Returns:
The MBaseID of the related theory element
Throws:
MBaseException - if something's wrong.

getCommonName

public Map getCommonName(MBaseID id)
                  throws MBaseException
Description copied from interface: MBaseRef
Returns the names of this element which is fetched either from the <metadata><dc:Title> descendant or from the <commonname> elements.

The table returned has, as keys, the language and as values the text of this common-name.

Specified by:
getCommonName in interface MBaseRef
Parameters:
id - The ID of the item whose titles are to be looked at.
Returns:
A Map of titles (keys String language}, values the String titles
Throws:
MBaseException - if something's wrong.

getTypeString

public String getTypeString(MBaseID id)
                     throws MBaseException
Description copied from interface: MBaseRef
Returns the name of the element whose ID is given.

Specified by:
getTypeString in interface MBaseRef
Parameters:
id - The ID of the element
Returns:
The (XML) element-name of this node
Throws:
MBaseException - if something's wrong.

getForWhat

public MBaseID[] getForWhat(MBaseID id)
                     throws MBaseException
Description copied from interface: MBaseRef
Returns the ID contained in the attribute for

Specified by:
getForWhat in interface MBaseRef
Parameters:
id - The ID of the item whose for attribute is to be looked at.
Returns:
The list of pointers interpreted from the pointer values in the for attribute of the element
Throws:
MBaseException - if something's wrong.

getStructuredListOfConcepts

public OJDocument getStructuredListOfConcepts(Collection collections)
                                       throws MBaseException
Description copied from interface: MBaseRef
This expensive operation walks the complete XML structure of one single collection stored in the server and creates a theory element for each theory then a concept element for each of the concepts (symbol, definition, assertion, proof, methods).

Specified by:
getStructuredListOfConcepts in interface MBaseRef
Parameters:
collections - strings with the name of the collection to search in
Returns:
an XML document structured by theory/element, or null, if there are no contents found
Throws:
MBaseException - if something fails

getCollectionsProvided

public Collection getCollectionsProvided()
                                  throws MBaseException
Description copied from interface: MBaseRef
returns a Collection (object) with the collections (content blocks) provided by this MBaseRef

Specified by:
getCollectionsProvided in interface MBaseRef
Returns:
Collection of Strings with the names of the provided collections
Throws:
MBaseException - If anything goes wrong (normally nothing is expected to go wrong here)

getCanonicalID

public MBaseID getCanonicalID(MBaseID id)
                       throws MBaseException
Description copied from interface: MBaseRef
Returns a fully-qualified unique ID that enables collections of IDs to behave properly. MBase engines may allow heuristics to interpret IDs, among others, to identify an item with an ID not containing a theory although the item is in a theory.

MBase engines should be consistent and never return more than one ID for a given item.

Specified by:
getCanonicalID in interface MBaseRef
Parameters:
id - the id that may be missing a theory or collection.
Returns:
a fully-qualified absolute ID pointing to the same element, or null if no such element was found.
Throws:
MBaseException - If anything goes wrong

searchText

public Iterator searchText(String textToSearch,
                           Collection collections)
                    throws MBaseException
Description copied from interface: MBaseRef
Searches the union of all text elements, but not the attributes, for the given substring in a case-sensistive manner. This operation is expected to be rather expensive.

Specified by:
searchText in interface MBaseRef
Parameters:
textToSearch - String containing the text to be searched
collections - Collection of collections (as Strings) to search in
Returns:
an Iterator of MBaseIDs that contain the string
Throws:
MBaseException - if something's wrong.

listItems

public Iterator listItems(MBaseID id)
                   throws MBaseException
Description copied from interface: MBaseRef
Lists all the items being children of the element of the indicated ID. Implementations are required to support this operation on omgroup and theory elements only.

Specified by:
listItems in interface MBaseRef
Parameters:
id - the ID of the omgroup, theory or other element
Returns:
An iterator of MBaseID objects
Throws:
MBaseException - If anything goes wrong

listTheories

public Iterator listTheories(Collection collections)
                      throws MBaseException
Description copied from interface: MBaseRef
Lists all the IDs of the theory elements contained in the indicated collections .

Specified by:
listTheories in interface MBaseRef
Parameters:
collections - the set of collection-names to be walked through for theories.
Returns:
an iterator over the list of IDs that are children
Throws:
MBaseException - If anything goes wrong

listItems

public Iterator listItems(Collection collections,
                          String type)
Description copied from interface: MBaseRef
Lists all the items being children of the element of the indicated ID. Implementations are required to support this operation on omgroup and theory elements only.

Specified by:
listItems in interface MBaseRef
Parameters:
collections - the possible collections where to search for the items of this type
type - the element name wished to be returne
Returns:
An iterator of MBaseID objects to the given elements

assertItsUp

public void assertItsUp()
                 throws MBaseException
Description copied from interface: MBaseRef
Asserts that the database connection is up and running. This may include a self test, so use only in code for test purposes (such as in an appropriate checker) or in non-looped code (once at startup or something).

Specified by:
assertItsUp in interface MBaseRef
Throws:
MBaseException - if something's wrong.

iterateOverIterators

public Iterator iterateOverIterators(Iterator itsOfIt)

getMBaseContainingOrThrow

protected MBaseRef getMBaseContainingOrThrow(MBaseID id)
                                      throws MBaseException
The same as getMBaseContaining(org.activemath.abstractcontent.MBaseID) but throws MBaseItemNotFoundException instead of returning null.

Parameters:
id - Missing description of Parameter
Returns:
Missing description of return The mBaseContainingOrThrow value
Throws:
MBaseException - Missing description of Exception

containsID

protected boolean containsID(MBaseRef ref,
                             MBaseID id)
                      throws MBaseException
Invokes MBaseRef.getCanonicalID(org.activemath.abstractcontent.MBaseID) on the indicated MBaseRef returning true if no exception was thrown or false if one was.

Note that if the provided MBaseRef is down this method simply returns false which may be a non-desired effect. To remedy this we should either have a method containsID in MBaseRef or have a better exception treatment with a qualified one being NoSuchIDException .

Parameters:
ref - the MBaseRef to call
id - the ID to request
Returns:
true if the MBaseRef contains the ID.
Throws:
MBaseException - if the MBaseRef had a trouble
MBaseItemNotFoundException - never (returns false instead

getLastModified

public Date getLastModified(Collection ids)
                     throws MBaseException
Description copied from interface: MBaseRef
Returns the latest modification dates of the elements whose IDs are given.

Specified by:
getLastModified in interface MBaseRef
Parameters:
ids - a list of MBaseIDs of items, theories, or Strings of collection name
Returns:
the latest modification date or, if unknown, the current date.
Throws:
MBaseException

getItemsModifiedSince

public Iterator getItemsModifiedSince(Date date)
                               throws MBaseException
Specified by:
getItemsModifiedSince in interface MBaseRef
Throws:
MBaseException

getTagFreeCommonName

public Map getTagFreeCommonName(MBaseID id)
                         throws MBaseException
Description copied from interface: MBaseRef
Returns the titles without any tags, just extracting the text or partially rendering it. Useful for string-only processors.

Specified by:
getTagFreeCommonName in interface MBaseRef
Parameters:
id - the item id.
Returns:
the map, associating a language string to a title-string.
Throws:
MBaseException

getIncomingRelations

public Iterator getIncomingRelations(MBaseID id,
                                     Collection collections)
                              throws MBaseException
Description copied from interface: MBaseRef
Returns an iterator of MBaseRef.Relations objects describing the relations that point to this item. If the item is a theory, the relations are the imports statements.

Specified by:
getIncomingRelations in interface MBaseRef
Parameters:
id - the id from which to see the relations
collections - from where should these relations be incoming
Returns:
an iterator of MBaseRef.Relations objects
Throws:
MBaseException - if anything

getOutgoingRelations

public Iterator getOutgoingRelations(MBaseID id)
                              throws MBaseException
Description copied from interface: MBaseRef
Returns an iterator of MBaseRef.Relations objects describing the relations that point from this item. If the item is a theory, the relations are the imports statements.

Specified by:
getOutgoingRelations in interface MBaseRef
Parameters:
id - the id from which to see the relations
Returns:
an iterator of MBaseRef.Relations objects
Throws:
MBaseException - if anything