Dear wiki user,

You have subscribed to a wiki page "Couchdb Wiki" for change notification.

The page "Getting_started_with_LotusScript" has been deleted by JoanTouzet:

https://wiki.apache.org/couchdb/Getting_started_with_LotusScript?action=diff&rev1=3&rev2=4

Comment:
https://cwiki.apache.org/confluence/display/COUCHDB/LotusScript

- <<Include(EditTheWiki)>>
  
- ## page was renamed from Getting Started With LotusScript
- ## page was renamed from GettingStartedLotusScript
- Getting started with !LotusScript and the CouchDB API.
- 
- This is an example of wrapper classes that use LS2J to send requests to a 
CouchDB server from !LotusScript. This could be useful to move data between 
Domino databases and CouchDB databases. The !LotusScript code roughly tracks 
the structure of the Ruby code.
- 
- == Basic API ==
- 
- {{{
- Option Public
- Uselsx "*javacon"
- }}}
- 
- {{{
- Sub Initialize
- %REM
- LotusScript LS2J classes for CouchDb
- Copyright (C) 2006  Alan Bell - Dominux Consulting
- 
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- 
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- 
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
- %ENDREM
-   'right now this just implements the basic database operations
-   'feel free to fix bugs and add functionailty to it in the Wiki
-   'there is a total lack of releasing of objects right now so it will leak 
memory like a sieve
-   'error handling would be nice too.
-   Dim cserver As couchserver
-   Set cserver=New couchserver("http://localhost","5984","";)
-   'create a database
-   Call cserver.put("/ls2couch/","")
-   'create a document
-   Call cserver.put("/ls2couch/document_id", |{"type":"comment","body":"First 
Post!"}|)
-   'retrieve the document
-   Print cserver.cget("/ls2couch/document_id")
-   'delete the database
-   Call cserver.del("/ls2couch/")
- End Sub
- }}}
- 
- {{{
- Class couchserver
-   Private host As String
-   Private port As String
-   Private options As String
-   Private proxyserver As String
-   Private proxyport As String
-   Private jses As JAVASESSION
-   Private jclass As JAVACLASS
-   Private jurl As JAVAOBJECT
-   Private jcon As JAVAOBJECT
-   Sub new(host As String,port As String,options As String)
-     'this corresponds to the initialise method in the Ruby classes
-     Me.host=host
-     Me.port=port
-     Me.options=options
-     Set Me.jses=New JAVASESSION()
-   End Sub
- 
-   Sub setproxy(proxyserver As String,proxyport As String)
-     'this should do something. At the moment it does not.
-     Me.proxyserver=proxyserver
-     Me.proxyport=proxyport
-   End Sub
- 
-   Sub del(uri As String)
-   'this corresponds to the delete method in the Ruby classes
-     Set Me.jclass=jses.GetClass("java/net/URL")
-     Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-     Set jcon=jurl.openConnection()
-     Me.jcon.setRequestMethod("DELETE")
-     Call Me.jcon.connect()
-     Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with 
a URL until you read from it.
-     Call ist.close()
-   End Sub
- 
-   Function cget(uri As String) As String
-     'this corresponds to the get class in Ruby. "get" is a reserved word
-     Set Me.jclass=jses.GetClass("java/net/URL")
-     Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-     Set jcon=jurl.openConnection()
-     Me.jcon.setRequestMethod("GET")
-     Call Me.jcon.connect()
-     Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with 
a URL until you read from it.
-     Set Me.jclass=jses.GetClass("java/io/InputStreamReader")
-     Set ireader=Me.jclass.CreateObject("(Ljava/io/InputStream;)V",ist)
-     Set Me.jclass=jses.GetClass("java/io/BufferedReader")
-     Set bReader=Me.jclass.CreateObject("(Ljava/io/Reader;)V",ireader)
-     cget=bReader.readLine()
-     Call ist.close()
-   End Function
- 
-   Sub put (uri As String,xml As String)
-     Set Me.jclass=jses.GetClass("java/net/URL")
-     Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-     Set jcon=jurl.openConnection()
-     Me.jcon.setRequestMethod("PUT")
-     Me.jcon.setdooutput(True)
-     Call Me.jcon.connect()
-     Set ost=jcon.getOutputStream()
-     Set Me.jclass=jses.GetClass("java/io/OutputStreamWriter")
-     Set owriter=Me.jclass.CreateObject("(Ljava/io/OutputStream;)V",ost)
-     Call owriter.write(xml,0,Len(xml))
-     Call owriter.flush()
-     Call ost.write(32)
-     Call ost.flush()
-     Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with 
a URL until you read from it.
-     Call ist.close()
-   End Sub
- 
-   Sub post(uri As String,xml As String)
-     Set Me.jclass=jses.GetClass("java/net/URL")
-     Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-     Set jcon=jurl.openConnection()
-     Me.jcon.setRequestMethod("PUT")
-     Me.jcon.setdooutput(True)
-     Call Me.jcon.connect()
-     Set ost=jcon.getOutputStream()
-     Call ost.write(32)
-     Call ost.flush()
-     Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with 
a URL until you read from it.
-     Call ist.close()
-   End Sub
- 
- End Class
- }}}
- 
- == Advanced API ==
- 
- This !LotusScript API for couch is designed to be familiar to !LotusScript 
developers. It wraps up all the communication with the CouchDB server, all the 
JSON code and looks quite a lot like dealing with documents in a domino 
database. This is very much a work in progress.
- 
- To copy a Notes database to a CouchDB database you might use the following 
code in an agent:
- 
- {{{
- Sub Initialize
-   Dim doc As couchdoc
-   Dim ses As New NotesSession
-   Dim db As notesdatabase
-   Set db=ses.currentdatabase
-   Dim cserver As couchserver
-   Set cserver=New couchserver("http://localhost","5984","";)   'replace with 
your server location
-   Set cdb=New couchdb(db.name,cserver)
-   If Not cdb.exists Then
-     cdb.create
-   End If
-   Dim ndoc As NotesDocument
-   Dim dbdocs As notesdocumentcollection
-   Set dbdocs=db.alldocuments
-   Set ndoc=dbdocs.GetFirstDocument
-   While Not ndoc Is Nothing
-     Set doc=cdb.createdocument(ndoc.UniversalID)
-     Forall i In ndoc.Items
-       Call doc.additem(i.name,i.text)
-     End Forall
-     doc.save
-     Set ndoc=dbdocs.GetNextDocument(ndoc)
-   Wend
- End Sub
- }}}
- 
- Copy the code below into the declarations section of the agent:
- 
- {{{
-  Class couchserver
-  Private host As String
-  Private port As String
-  Private options As String
-  Private proxyserver As String
-  Private proxyport As String
-  Private jses As JAVASESSION
-  Private jclass As JAVACLASS
-  Private jurl As JAVAOBJECT
-  Private jcon As JAVAOBJECT
-  Sub new(host As String,port As String,options As String)
-       'this corresponds to the initialise method in the Ruby classes
-    'basically creates a new connection to the server
-    Me.host=host
-    Me.port=port
-    Me.options=options
-    Set Me.jses=New JAVASESSION()
-  End Sub
- 
-  Sub setproxy(proxyserver As String,proxyport As String)
-       'this should do something. At the moment it does not.
-    Me.proxyserver=proxyserver
-    Me.proxyport=proxyport
-  End Sub
- 
-  Sub del(uri As String)
-       'this corresponds to the delete method in the Ruby classes
-    Set Me.jclass=jses.GetClass("java/net/URL")
-    Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-    Set jcon=jurl.openConnection()
-    Me.jcon.setRequestMethod("DELETE")
-    Call Me.jcon.connect()
-    Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with a 
URL until you read from it.
-    Call ist.close()
-  End Sub
- 
-  Function cget(uri As String) As String
-       'this corresponds to the get class in Ruby. "get" is a reserved word
-    Set Me.jclass=jses.GetClass("java/net/URL")
-    Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-    Set jcon=jurl.openConnection()
-    Me.jcon.setRequestMethod("GET")
-    Call Me.jcon.connect()
-    On Error Resume Next
-    Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with a 
URL until you read from it.
-    Set Me.jclass=jses.GetClass("java/io/InputStreamReader")
- 
-    Set ireader=Me.jclass.CreateObject("(Ljava/io/InputStream;)V",ist)
-    Set Me.jclass=jses.GetClass("java/io/BufferedReader")
-    Set bReader=Me.jclass.CreateObject("(Ljava/io/Reader;)V",ireader)
-    cget=bReader.readLine()
-    Call ist.close()
-  End Function
- 
-  Sub put (uri As String,xml As String)
-    Set Me.jclass=jses.GetClass("java/net/URL")
-    Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-    Set jcon=jurl.openConnection()
-    Me.jcon.setRequestMethod("PUT")
-    Me.jcon.setdooutput(True)
-    Call Me.jcon.connect()
-    Set ost=jcon.getOutputStream()
-    Set Me.jclass=jses.GetClass("java/io/OutputStreamWriter")
-    'Set owriter=Me.jclass.CreateObject("(Ljava/io/OutputStream;)V",ost)
-    Set 
owriter=Me.jclass.CreateObject("(Ljava/io/OutputStream;Ljava/lang/String;)V",ost,"UTF-8")
-    Call owriter.write(xml,0,Len(xml))
-    Call owriter.flush()
-    Call ost.write(32)
-    Call ost.flush()
-    Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with a 
URL until you read from it.
-    Call ist.close()
-  End Sub
- 
-  Sub post(uri As String,xml As String)
-    Set Me.jclass=jses.GetClass("java/net/URL")
-    Set 
Me.jurl=Me.jclass.CreateObject("(Ljava/lang/String;)V",host+":"+port+uri)
-    Set jcon=jurl.openConnection()
-    Me.jcon.setRequestMet7hod("PUT")
-    Me.jcon.setdooutput(True)
-    Call Me.jcon.connect()
-    Set ost=jcon.getOutputStream()
-    Call ost.write(32)
-    Call ost.flush()
-    Set ist=jcon.getInputStream()'oddly enough java doesn't do anything with a 
URL until you read from it.
-    Call ist.close()
-  End Sub
- 
-  End Class
- }}}
- 
- {{{
-  Class couchdb
-  'this represents a database on the couchdb server
-  Public parentserver As couchserver
-  Public name As String
- 
-  Sub new(dbname As String,server As couchserver)
-    Me.name=dbname
-    Set Me.parentserver=server
-    'well this does not create a new database, just initialises the class and 
connects it to a database
-    'the database might not exist
-  End Sub
- 
-  Function exists As Boolean
-    'tests to see if the parent server already contains a database with this 
name
-    exists= (""<>parentserver.cget("/"+Me.name+"/"))
-  End Function
- 
-  Sub create
-    Call parentserver.put("/"+Me.name+"/","")
-  End Sub
- 
-  Function createdocument(id As String) As couchdoc
-    'this does not create a document on the couchdb server until the document 
is saved
-    'it might check to see if id has already been used and return that document
-    'it might create an ID of some kind if one is not provided
-    Set createdocument=New couchdoc(Me,id)
-  End Function
- 
-  End Class
- }}}
- 
- {{{
-  Class couchitem
-  Public parentdoc As couchdoc
-  'represents one field on a couchdb document
-  Public value As Variant
-  'does an item know it's own name? not sure.
-  Sub new(value As Variant)
-    Me.value=value
-  End Sub
-  Function json As String
-    json=|"|+Replace(Me.value,|"|,|\"|)+|"|'escaping out double quotes
-  End Function
-  End Class
- }}}
- 

Reply via email to