Author: dr
Date: Thu Feb 21 16:27:06 2008
New Revision: 7423

Log:
- Added simple indexing.

Added:
    trunk/Search/tests/session_test.php   (with props)
    trunk/Search/tests/testfiles/
    trunk/Search/tests/testfiles/article.php   (with props)
    trunk/Search/tests/testfiles/article.xml
Modified:
    trunk/Search/design/class_diagram.png
    trunk/Search/src/handlers/solr.php
    trunk/Search/src/interfaces/index_handler.php
    trunk/Search/src/search_autoload.php
    trunk/Search/src/search_session.php
    trunk/Search/tests/handlers/solr_test.php
    trunk/Search/tests/suite.php

Modified: trunk/Search/design/class_diagram.png
==============================================================================
Binary files - no diff available.

Modified: trunk/Search/src/handlers/solr.php
==============================================================================
--- trunk/Search/src/handlers/solr.php [iso-8859-1] (original)
+++ trunk/Search/src/handlers/solr.php [iso-8859-1] Thu Feb 21 16:27:06 2008
@@ -179,8 +179,67 @@
     {
     }
 
-    public function index( $document )
-    {
+    private function mapFieldType( $name, $type )
+    {
+        $map = array(
+            ezcSearchDocumentDefinition::STRING => '_s',
+            ezcSearchDocumentDefinition::TEXT => '_t',
+            ezcSearchDocumentDefinition::HTML => '_h',
+            ezcSearchDocumentDefinition::DATE => '_dt',
+        );
+        return $name . $map[$type];
+    }
+
+    private function mapFieldValue( $type, $value )
+    {
+        switch( $type )
+        {
+            case ezcSearchDocumentDefinition::DATE:
+                if ( is_numeric( $value ) )
+                {
+                    $d = new DateTime( "@$value" );
+                    return $d->format( 'Y-m-d\TH:i:s\Z' );
+                }
+                else
+                {
+                    try
+                    {
+                        $d = new DateTime( $value );
+                    }
+                    catch ( Exception $e )
+                    {
+                        throw new ezcSearchInvalidValueException( $type, 
$value );
+                    }
+                    return $d->format( 'Y-m-d\TH:i:s\Z' );
+                }
+            default:
+                return $value;
+        }
+    }
+
+    public function index( ezcSearchDocumentDefinition $definition, $document )
+    {
+        $xml = new XmlWriter();
+        $xml->openMemory();
+        $xml->startElement( 'add' );
+        $xml->startElement( 'doc' );
+        $xml->startElement( 'field' );
+        $xml->writeAttribute( 'name', 'id' );
+        $xml->text( $document[$definition->idProperty] );
+        $xml->endElement();
+        foreach ( $definition->fields as $field )
+        {
+            $xml->startElement( 'field' );
+            $xml->writeAttribute( 'name', $this->mapFieldType( $field->field, 
$field->type ) );
+            $xml->text( $this->mapFieldValue( $field->type, 
$document[$field->field] ) );
+            $xml->endElement();
+        }
+        $xml->endElement();
+        $xml->endElement();
+        $doc = $xml->outputMemory( true );
+
+        $r = $this->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
$doc );
+//        $r = $this->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
'<commit/>' );
     }
 
     public function createDeleteQuery()

Modified: trunk/Search/src/interfaces/index_handler.php
==============================================================================
--- trunk/Search/src/interfaces/index_handler.php [iso-8859-1] (original)
+++ trunk/Search/src/interfaces/index_handler.php [iso-8859-1] Thu Feb 21 
16:27:06 2008
@@ -16,7 +16,7 @@
  */
 interface ezcSearchIndexHandler
 {
-    public function index( $document );
+    public function index( ezcSearchDocumentDefinition $definition, $document 
);
     public function createDeleteQuery();
     public function delete( ezcSearchDeleteQuery $query );
 }

Modified: trunk/Search/src/search_autoload.php
==============================================================================
--- trunk/Search/src/search_autoload.php [iso-8859-1] (original)
+++ trunk/Search/src/search_autoload.php [iso-8859-1] Thu Feb 21 16:27:06 2008
@@ -21,7 +21,9 @@
     'ezcSearchQuery'                                => 
'Search/abstraction/query.php',
     'ezcSearchCodeManager'                          => 
'Search/managers/code_manager.php',
     'ezcSearchDefinitionDocumentField'              => 
'Search/structs/document_field_definition.php',
+    'ezcSearchDeleteHandler'                        => 
'Search/handlers/delete_handler.php',
     'ezcSearchDocumentDefinition'                   => 
'Search/structs/document_definition.php',
+    'ezcSearchFindHandler'                          => 
'Search/handlers/find_handler.php',
     'ezcSearchFindQuery'                            => 
'Search/abstraction/query_find.php',
     'ezcSearchQueryInsert'                          => 
'Search/abstraction/query_index.php',
     'ezcSearchResult'                               => 
'Search/search_result.php',

Modified: trunk/Search/src/search_session.php
==============================================================================
--- trunk/Search/src/search_session.php [iso-8859-1] (original)
+++ trunk/Search/src/search_session.php [iso-8859-1] Thu Feb 21 16:27:06 2008
@@ -42,9 +42,6 @@
     {
         $this->properties['handler']           = $handler;
         $this->properties['definitionManager'] = $manager;
-        $this->properties['findHandler']       = new ezcPersistentFindHandler( 
$this );
-        $this->properties['indexHandler']      = new 
ezcPersistentIndexHandler( $this );
-        $this->properties['deleteHandler']     = new 
ezcPersistentDeleteHandler( $this );
     }
 
     /**
@@ -152,7 +149,14 @@
      */
     public function index( $document )
     {
-        return $this->indexHandler->index( $document );
+        $class = get_class( $document );
+        $def   = $this->definitionManager->fetchDefinition( $class );
+        $state = $document->getState();
+        if ( $state[$def->idProperty] == null )
+        {
+            $document->setState( array( $def->idProperty => uniqid() ) );
+        }
+        $this->handler->index( $def, $document->getState() );
     }
 
     /**
@@ -165,8 +169,8 @@
      */
     public function update( $document )
     {
-               $this->indexHandler->delete( $document );
-        return $this->indexHandler->index( $document );
+               $this->delete( $document );
+        return $this->index( $document );
     }
 
     /**

Modified: trunk/Search/tests/handlers/solr_test.php
==============================================================================
--- trunk/Search/tests/handlers/solr_test.php [iso-8859-1] (original)
+++ trunk/Search/tests/handlers/solr_test.php [iso-8859-1] Thu Feb 21 16:27:06 
2008
@@ -31,6 +31,10 @@
         {
             self::markTestSkipped( 'Solr is not running.' );
         }
+        $this->solr->sendRawPostCommand( 'update', array( 'wt' => 'json' ),
+                '<delete><query>timestamp:[* TO *]</query></delete>' );
+        $this->solr->sendRawPostCommand( 'update', array( 'wt' => 'json' ),
+                '<commit/>' );
     }
 
     function testUnableToConnect()

Added: trunk/Search/tests/session_test.php
==============================================================================
--- trunk/Search/tests/session_test.php (added)
+++ trunk/Search/tests/session_test.php [iso-8859-1] Thu Feb 21 16:27:06 2008
@@ -1,0 +1,82 @@
+<?php
+/**
+ * @copyright Copyright (C) 2005-2008 eZ systems as. All rights reserved.
+ * @license http://ez.no/licenses/new_bsd New BSD License
+ * @version //autogentag//
+ * @filesource
+ * @package Search
+ * @subpackage Tests
+ */
+
+require 'testfiles/article.php';
+
+/**
+ * Test the handler classes.
+ *
+ * @package Search
+ * @subpackage Tests
+ */
+class ezcSearchSessionTest extends ezcTestCase
+{
+    public static function suite()
+    {
+         return new PHPUnit_Framework_TestSuite( "ezcSearchSessionTest" );
+    }
+
+    public function setUp()
+    {
+        $this->backend = new ezcSearchSolrHandler();
+        $this->testFilesDir = dirname( __FILE__ ) . '/testfiles/';
+        $this->backend->sendRawPostCommand( 'update', array( 'wt' => 'json' ),
+                '<delete><query>timestamp:[* TO *]</query></delete>' );
+        $this->backend->sendRawPostCommand( 'update', array( 'wt' => 'json' ),
+                '<commit/>' );
+    }
+
+    public function testCreateSession()
+    {
+        $session = new ezcSearchSession( $this->backend, new 
ezcSearchXmlManager( $this->testFilesDir ) );
+    }
+
+    public function testIndexDocument1()
+    {
+        $a = new Article( null, 'Test Article', 'This is an article to test', 
'the body of the article', time() );
+
+        $session = new ezcSearchSession( $this->backend, new 
ezcSearchXmlManager( $this->testFilesDir ) );
+        $session->index( $a );
+        $this->backend->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
'<commit/>' );
+
+        $r = $this->backend->search( 'Article', 'title_t' );
+        self::assertEquals( 1, $r->resultCount );
+    }
+
+    public function testIndexDocument2()
+    {
+        $a = new Article( null, 'Test Article', 'This is an article to test', 
'the body of the article', time() );
+
+        $session = new ezcSearchSession( $this->backend, new 
ezcSearchXmlManager( $this->testFilesDir ) );
+        for ( $i = 0; $i < 100; $i++ )
+        {
+            $session->index( $a );
+        }
+        $this->backend->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
'<commit/>' );
+
+        $r = $this->backend->search( 'Article', 'title_t' );
+        self::assertEquals( 1, $r->resultCount );
+    }
+
+    public function testIndexDocument3()
+    {
+        $d = file_get_contents( 
'/tmp/ezcomponents-2007.2.1/WorkflowEventLogTiein/ezcWorkflowEventLogListener.html'
 );
+        $a = new Article( null, 'Test Article', 'This is an article to test', 
$d, time() );
+
+        $session = new ezcSearchSession( $this->backend, new 
ezcSearchXmlManager( $this->testFilesDir ) );
+        $session->index( $a );
+        $this->backend->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
'<commit/>' );
+
+        $r = $this->backend->search( 'Article', 'title_t' );
+        self::assertEquals( 1, $r->resultCount );
+    }
+}
+
+?>

Propchange: trunk/Search/tests/session_test.php
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/Search/tests/suite.php
==============================================================================
--- trunk/Search/tests/suite.php [iso-8859-1] (original)
+++ trunk/Search/tests/suite.php [iso-8859-1] Thu Feb 21 16:27:06 2008
@@ -11,8 +11,9 @@
 /**
  * Including the tests
  */
-require_once 'handlers/solr_test.php';
-require_once 'managers/xml_test.php';
+require 'handlers/solr_test.php';
+require 'managers/xml_test.php';
+require 'session_test.php';
 
 /**
  * @package Search
@@ -27,6 +28,7 @@
 
         $this->addTest( ezcSearchXmlDefinitionManager::suite() );
         $this->addTest( ezcSearchHandlerSolrTest::suite() );
+        $this->addTest( ezcSearchSessionTest::suite() );
     }
 
     public static function suite()

Added: trunk/Search/tests/testfiles/article.php
==============================================================================
--- trunk/Search/tests/testfiles/article.php (added)
+++ trunk/Search/tests/testfiles/article.php [iso-8859-1] Thu Feb 21 16:27:06 
2008
@@ -1,0 +1,38 @@
+<?php
+class Article
+{
+    public  $id;
+    private $title;
+    private $summary;
+    private $body;
+    private $published;
+
+
+    function __construct( $id, $title, $summary, $body, $published )
+    {
+        $this->id = $id;
+        $this->title = $title;
+        $this->summary = $summary;
+        $this->body = $body;
+        $this->published = $published;
+    }
+
+    function getState()
+    {
+        return array(
+            'id' => $this->id,
+            'title' => $this->title,
+            'summary' => $this->summary,
+            'body' => $this->body,
+            'published' => $this->published,
+        );
+    }
+
+    function setState( $state )
+    {
+        foreach ( $state as $key => $value )
+        {
+            $this->$key = $value;
+        }
+    }
+}

Propchange: trunk/Search/tests/testfiles/article.php
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/Search/tests/testfiles/article.xml
==============================================================================
--- trunk/Search/tests/testfiles/article.xml (added)
+++ trunk/Search/tests/testfiles/article.xml [iso-8859-1] Thu Feb 21 16:27:06 
2008
@@ -1,0 +1,8 @@
+<?xml version="1.0"?>
+<document>
+    <field type="id">id</field>
+    <field type="text" boost="2">title</field>
+    <field type="text">summary</field>
+    <field type="html">body</field>
+    <field type="date">published</field>
+</document>


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to