Author: jens
Date: Sun Feb 10 20:36:56 2013
New Revision: 1444605

URL: http://svn.apache.org/r1444605
Log:
QueryParser sample: add a read me text file.

Added:
    
chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt

Added: 
chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt?rev=1444605&view=auto
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt
 (added)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-samples/chemistry-opencmis-queryparser/readme.txt
 Sun Feb 10 20:36:56 2013
@@ -0,0 +1,49 @@
+Readme.txt chemistry-opencmis-queryparser-example
+=================================================
+
+This project is an example how to build a query parser using the OpenCMIS 
query framework.
+
+The example is standalone program that makes use of the AntLR based query 
parser. It 
+parses a CMIS query string and creates after traversing the syntax tree a new 
statement in
+CMIS query language. While this sounds pretty useless this sample still has 
value:
+ - it is not dependent on any query language of a backend (like a database) or 
a 
+   specific database scheme.
+ - it can be easily adapted to generate output in different format (SQL, XML, 
JSON)
+ - it separates classes that can be reused from those that are specific to the 
output
+   language
+ - it provides unit tests that can be adapted to other target languages.
+
+The sample provides code for the full cycle to parse and process a query. The 
entry point
+is a static main() method so that it runs standalone without any server. 
Usually this code
+will be called from the CMIS Discovery service in a real CMIS server.
+
+The code consists of the following classes:
+
+ExampleQueryProcessor.java:
+This is the main class. It takes a query and parses it. It traverses the 
generated tree
+and finally builds the output.
+
+ExampleQueryWalker.java:
+A walker that traverses the syntax tree and generates the CMISQL output. For 
each node in
+the tree callback functions are provided processing a specific token.
+
+ExampleTypeManager.java:
+An OpenCMIS parser processes the query and does certain checks for validity. 
To do this
+it needs information about the available types and properties in the backend. 
This 
+information is provided by the interface TypeManager. This class implements a 
minimal 
+type system to get a running sample. It has only one type implemented: 
cmis:document
+(note that this is not allowed for a real server according to the CMIS spec).
+
+ExtendedAbstractPredicateWalker.java
+This class extends the predefined walker from the server support package. It 
provides
+more fine grained control and more hooks to plugin while traversing the tree. 
This part
+is independent of the generated output and therefore separated in its own 
class. It may
+be reused for other projects.
+
+ExampleQueryProcessorTest.java
+A Junit test that feeds the parser with CMISQL queries and compares the 
generated output
+against an expected result. While the tests are specific to the output 
language the basic
+principles and design of the unit test can be done in the same way for other 
parsers.
+
+
+


Reply via email to