Initial SVN commit of search indexing tool

In current state metadata records with OGC protocol links can be requested and
matching records are harvested as queued_document records. These can then be
traversed by an indexing service that uses each queued_document record to send
a WFS request to a geoserver and index the geometry of the feature type.
Deleting SpikeController

SpikeController was used to test direct Lucene searching, now considered not
the correct way to query geonetwork
Searching works in a very basic form
    
Search will take a term and bounding box params, query geonetwork and use the
uuids returned to then query the local spatial index for features matching a
uuid and intersecting the bounding box
Refactored QueuedDocument to GeonetworkMetadata

Refactored QueuedDocument to GeonetworkMetadata
#692 #773

Refactoring of QueuedDocument domain class to GeonetworkMetadata

Removed index action on SearchController

Incorrect field name in FeatureType.toString() method

Refactored method names to follow Python naming scheme. As all methods are essentially public in Groovy I decided to follow the Python naming scheme where _ indicates that a method is intended to be private.

Added ability to create MultiPolygon geometry to helper

Added more tests for FeatureTypes and GeometryHelper. Tests added related to multipolygon creation and searching near the anti-meridian.
#692 #773

Renamed methods in FeatureTypeRequestService, pretty sure I left a foo in there
Added a second protocol for geonetwork metadata
#692 #773

Introduced GeoNetworkResponse class to handle indexing and search responses from geonetwork.
#692 #773

Added modification to geonetwork statistics based on spatial search results.
#692 #773

More integration testing, now ready for actual integration into portal
#692 #773

Changed search service from imos.xml.search to xml.search

Portal response handler currently expects something that appears in xml.search
that doesn't appear in imos.xml.search so causes breakage.
#692 #773

Changed controller action from search to index

As the controller only has one action and the controller is already
called search I decided it might be neater if the only action was
the grails expected default.
#692 #773

Added extra check to determine if a search is truly spatial

Protocol submitted by default so we need to check if a search
includes a bounding box as well to determine if it really is meant
to be a spatial search
#692 #773

Added extra check to determine if a search is truly spatial

Protocol submitted by default so we need to check if a search
includes a bounding box as well to determine if it really is meant
to be a spatial search
#692 #773

Fix code changed to use numeric rather than string comparison when
creating bounding box geometry

Code that determined whether to create a Polygon or MultiPolygon
for the bounding box was performing string comparison on east and
west when it should be a numeric comparison.
#692 #773

Commented out app.version for war creation.
#692 #773

XML handling fixes

The XML piped out as a result string was being pretty printed causing
aspects of the portal to break where they weren't trimming whitespace
from element data, have changed the way the XML is generated to prevent
pretty printing.  There was also an error with the adjustment of the
keyword counts where the node was being printed rather than the nodes values.
#692 #773

Adding assert condition to tests for previous XML handling fixes

Have added an assert condition to a unit test so if this issue
reappears we know.
#692 #773

Insignificant config changes

Changed some settings to use variables and changed the server URL for geonetwork
to be able to continue development testing as obsidian went walkabout for a while
#692 #773

Added ability to force metadata document queueing

There might be occasions where it is desirable to queue metadata docs
to force re-indexing even if there have been no updates on geonetwork
this can now be achieved with the parameter force=true

Added and updated tests accordingly and changed the memoising in
SpatialSearchTest to use static members as it seems the testing framework
creates a new Test object instance for each test as the memoising was until
now not working.
#692 #773

Refactored map syntax

Where applicable changed map usage to use the groovy dot notation sugar
so code went changed from params['foo'] to params.foo