~ubuntuone-client-engineering/droidcouch/trunk

« back to all changes in this revision

Viewing changes to src/se/msc/android/droidcouch/CouchDatabase.java

  • Committer: Igor Stasenko
  • Date: 2010-02-15 17:21:28 UTC
  • Revision ID: git-v1:38104a9792ac3a5e4994c68cb5e2e889fc93d125
- added tests
- cleaned up some extensive exceptions

Show diffs side-by-side

added added

removed removed

Lines of Context:
73
73
    /// And we also do not remove design documents in the database that
74
74
    /// we no longer have in code.
75
75
    /// </summary>
76
 
    public void SynchDesignDocuments() throws Exception
 
76
    public void SynchDesignDocuments()
77
77
    {
78
78
        for (CouchDesignDocument doc: DesignDocuments)
79
79
        {
80
 
            doc.Synch();
 
80
            try {
 
81
                                doc.Synch();
 
82
                        } catch (CouchException e) {
 
83
                        }
81
84
        }
82
85
    }
83
86
 
196
199
    /// <returns>Couch Document with new Rev set.</returns>
197
200
    /// <remarks>This relies on the document to already have an id.</remarks>
198
201
    public ICouchDocument
199
 
        WriteDocument(ICouchDocument document) throws CouchException, JSONException
 
202
        WriteDocument(ICouchDocument document) throws CouchException
200
203
    {
201
204
        return WriteDocument(document, false);
202
205
    }
208
211
    /// </summary>
209
212
    /// <param name="document">Couch document</param>
210
213
    /// <returns>Couch Document with new Rev set and possibly an Id set.</returns>
211
 
    public ICouchDocument SaveDocument(ICouchDocument document) throws CouchException, JSONException
 
214
    public ICouchDocument SaveDocument(ICouchDocument document) throws CouchException
212
215
    {
213
216
        if (document.Id() == null)
214
217
        {
224
227
    /// <param name="batch">True if we don't want to wait for flush (commit).</param>
225
228
    /// <returns>Couch Document with new Rev set.</returns>
226
229
    /// <remarks>This relies on the document to already have an id.</remarks>
227
 
    public ICouchDocument WriteDocument(ICouchDocument document, boolean batch) throws CouchException, JSONException
 
230
    public ICouchDocument WriteDocument(ICouchDocument document, boolean batch) throws CouchException
228
231
    {
229
232
        if (document.Id() == null)
230
233
        {
233
236
        }
234
237
        JSONObject result =
235
238
            Request(document.Id()).Query(batch ? "?batch=ok" : null).Data(CouchDocument.WriteJson(document)).Put().Check("Failed to write document").Result();
236
 
        document.Id(result.getString("id")); // Not really neeed
237
 
        document.Rev(result.getString("rev"));
 
239
        document.Id(result.optString("id")); // Not really neeed
 
240
        document.Rev(result.optString("rev"));
238
241
 
239
242
        return document;
240
243
    }
247
250
    /// <param name="mimeType">The MIME type for the attachment.</param>
248
251
    /// <returns>The document.</returns>
249
252
    /// <remarks>This relies on the document to already have an id.</remarks>
250
 
    public ICouchDocument WriteAttachment(ICouchDocument document, String attachment, String mimeType) throws CouchException, JSONException
 
253
    public ICouchDocument WriteAttachment(ICouchDocument document, String attachment, String mimeType) throws CouchException
251
254
    {
252
255
        if (document.Id() == null)
253
256
        {
257
260
        JSONObject result =
258
261
            Request(document.Id() + "/attachment").Query("?rev=" + document.Rev()).Data(attachment).MimeType(mimeType).Put().Check("Failed to write attachment")
259
262
                .Result();
260
 
        document.Id(result.getString("id")); // Not really neeed
261
 
        document.Rev(result.getString("rev"));
 
263
        document.Id(result.optString("id")); // Not really neeed
 
264
        document.Rev(result.optString("rev"));
262
265
 
263
266
        return document;
264
267
    }
267
270
    /// Read a ICouchDocument with an id even if it has not changed revision.
268
271
    /// </summary>
269
272
    /// <param name="document">Document to fill.</param>
270
 
    public void ReadDocument(ICouchDocument document) throws Exception
 
273
    public void ReadDocument(ICouchDocument document) 
271
274
    {
272
 
        document.ReadJson(ReadDocument(document.Id()));
 
275
        try {
 
276
                document.ReadJson(ReadDocument(document.Id()));
 
277
        } catch (Exception e) {
 
278
        
 
279
        }
273
280
    }
274
281
 
275
282
    /// <summary>
348
355
    /// <param name="json">Json data to store.</param>
349
356
    /// <returns>Couch document with data, id and rev set.</returns>
350
357
    /// <remarks>POST which may be problematic in some environments.</remarks>
351
 
    public CouchJsonDocument CreateDocument(String json) throws CouchException, JSONException
 
358
    public CouchJsonDocument CreateDocument(String json) throws CouchException
352
359
    {
353
360
        return (CouchJsonDocument) CreateDocument(new CouchJsonDocument(json));
354
361
    }
470
477
    /// Get multiple documents.
471
478
    /// </summary>
472
479
    /// <param name="documentIds">List of documents to get.</param>
473
 
    public <T extends ICouchDocument> List<T> GetDocuments(Class<T> c, List<String> documentIds) throws JSONException, CouchException
 
480
    public <T extends ICouchDocument> List<T> GetDocuments(Class<T> c, List<String> documentIds)
474
481
    {
475
482
        return GetDocuments(c, (String[])documentIds.toArray());
476
483
    }
477
484
 
478
 
    public List<CouchJsonDocument> GetDocuments(List<String> documentIds) throws JSONException, CouchException
479
 
    {
480
 
        return GetDocuments(CouchJsonDocument.class,documentIds);
481
 
    }
482
 
 
483
 
    public List<CouchJsonDocument> GetDocuments(String[] documentIds) throws JSONException, CouchException
484
 
    {
485
 
        return GetDocuments(CouchJsonDocument.class,documentIds);
486
 
    }
487
 
 
488
 
    public <T extends ICouchDocument> List<T> GetDocuments(Class<T> c, String[] documentIds) throws JSONException, CouchException
 
485
    public List<CouchJsonDocument> GetDocuments(List<String> documentIds)
 
486
    {
 
487
        return GetDocuments(CouchJsonDocument.class,documentIds);
 
488
    }
 
489
 
 
490
    public List<CouchJsonDocument> GetDocuments(String[] documentIds) 
 
491
    {
 
492
        return GetDocuments(CouchJsonDocument.class,documentIds);
 
493
    }
 
494
 
 
495
    public <T extends ICouchDocument> List<T> GetDocuments(Class<T> c, String[] documentIds) 
489
496
    {
490
497
        CouchBulkKeys bulk = new CouchBulkKeys(documentIds);
491
 
        return QueryAllDocuments().Data(CouchDocument.WriteJson(bulk)).IncludeDocuments().GetResult().Documents(c);
 
498
        try {
 
499
                        return QueryAllDocuments().Data(CouchDocument.WriteJson(bulk)).IncludeDocuments().GetResult().Documents(c);
 
500
                } catch (CouchException e) {
 
501
                        return new ArrayList<T>();
 
502
                }
492
503
    }
493
504
 
494
 
    public <T extends ICouchDocument> T GetDocument(Class<T> c, String documentId) throws Exception
 
505
    public <T extends ICouchDocument> T GetDocument(Class<T> c, String documentId)
495
506
    {
496
 
        ICouchDocument doc = c.newInstance();
 
507
        ICouchDocument doc;
 
508
                try {
 
509
                        doc = c.newInstance();
 
510
                } catch (Exception e1) {
 
511
                        return null;
 
512
                }
497
513
        doc.Id(documentId);
498
 
        try
499
 
        {
500
 
            ReadDocument(doc);
501
 
        }
502
 
        catch (CouchNotFoundException e)
503
 
        {
504
 
            return null;
505
 
        }
 
514
        ReadDocument(doc);
506
515
        return (T)doc;
507
516
    }
508
517
 
591
600
    /// revisions and then use them to post a bulk delete. Couch can not
592
601
    /// delete documents without being told about their revisions.
593
602
    /// </summary>
594
 
    public void DeleteDocuments(String startKey, String endKey) throws CouchException, Exception
 
603
    public void DeleteDocuments(String startKey, String endKey) throws CouchException
595
604
    {
596
605
        List<CouchQueryDocument> docs = QueryAllDocuments().StartKey(startKey).EndKey(endKey).GetResult().RowDocuments();
597
606
        DeleteDocuments((ICouchDocument[] )docs.toArray());