|
From: <bh...@us...> - 2014-07-29 09:30:36
|
Revision: 3208
http://sourceforge.net/p/cinnamon/code/3208
Author: bhorner
Date: 2014-07-29 09:30:33 +0000 (Tue, 29 Jul 2014)
Log Message:
-----------
Search now (internally) supports limited number of results and paged view
Modified Paths:
--------------
Client/trunk/Ginger/Repository/CmnFolder.vb
Client/trunk/Ginger/Repository/CmnMetadata.vb
Client/trunk/Ginger/Repository/CmnObject.vb
Client/trunk/Ginger/Repository/CmnSession.vb
Modified: Client/trunk/Ginger/Repository/CmnFolder.vb
===================================================================
--- Client/trunk/Ginger/Repository/CmnFolder.vb 2014-07-23 13:20:23 UTC (rev 3207)
+++ Client/trunk/Ginger/Repository/CmnFolder.vb 2014-07-29 09:30:33 UTC (rev 3208)
@@ -194,7 +194,7 @@
Public Property Metadata() As CmnMetadata Implements IOwnable.Metadata
Get
If metadata_ Is Nothing Then
- metadata_ = New CmnMetadata(GetMeta(), s_)
+ metadata_ = New CmnMetadata(GetMeta(), s_, False)
End If
Return metadata_
End Get
Modified: Client/trunk/Ginger/Repository/CmnMetadata.vb
===================================================================
--- Client/trunk/Ginger/Repository/CmnMetadata.vb 2014-07-23 13:20:23 UTC (rev 3207)
+++ Client/trunk/Ginger/Repository/CmnMetadata.vb 2014-07-29 09:30:33 UTC (rev 3208)
@@ -23,13 +23,16 @@
Namespace Repository
<DataContract()> _
Public Class CmnMetadata
+ Private Const INTERNAL_MS As String = "internal"
+
Private m_ As XmlDocument
Private s_ As CmnSession
Private metasets_ As IDictionary(Of CmnMetasetType, CmnMetaset)
- Public Sub New(m As XmlDocument, s As CmnSession)
+ Public Sub New(m As XmlDocument, s As CmnSession, Optional dirty As Boolean = True)
If m Is Nothing Then Throw New ApplicationException("Metadata XML document must not be nothing.")
m_ = m
+ SetDirtyFlag(dirty)
s_ = s
metasets_ = New Dictionary(Of CmnMetasetType, CmnMetaset)
InitMetasets()
@@ -55,5 +58,27 @@
metasets_.Add(ms.GetMetasetType, ms)
Next
End Sub
+ Private Sub SetDirtyFlag(value As Boolean)
+ Dim internalMs As XmlElement = DirectCast(m_.SelectSingleNode("/meta/metaset[@type='" + INTERNAL_MS + "']"), XmlElement)
+ If internalMs Is Nothing Then
+ If value Then
+ internalMs = DirectCast(m_.DocumentElement.AppendChild(m_.CreateElement("metaset")), XmlElement)
+ internalMs.SetAttribute("type", INTERNAL_MS)
+ Else
+ Return
+ End If
+ End If
+
+ Dim dirtyEl As XmlElement = DirectCast(internalMs.SelectSingleNode("dirty"), XmlElement)
+ If dirtyEl Is Nothing Then
+ If value Then
+ internalMs.AppendChild(m_.CreateElement("dirty")).InnerText = "true"
+ Else
+ Return
+ End If
+ Else
+ dirtyEl.InnerText = If(value, "true", "false")
+ End If
+ End Sub
End Class
End Namespace
Modified: Client/trunk/Ginger/Repository/CmnObject.vb
===================================================================
--- Client/trunk/Ginger/Repository/CmnObject.vb 2014-07-23 13:20:23 UTC (rev 3207)
+++ Client/trunk/Ginger/Repository/CmnObject.vb 2014-07-29 09:30:33 UTC (rev 3208)
@@ -1125,7 +1125,7 @@
ci.AddStringParameter("ticket", s_.Ticket)
Dim doc As Xml.XmlDocument = New XmlDocument
doc.Load(New System.IO.StringReader(ci.ResponseToString(ci.PostCmd())))
- metadata_ = New CmnMetadata(doc, s_)
+ metadata_ = New CmnMetadata(doc, s_, False)
End If
Return metadata_
Catch ex As XmlException
Modified: Client/trunk/Ginger/Repository/CmnSession.vb
===================================================================
--- Client/trunk/Ginger/Repository/CmnSession.vb 2014-07-23 13:20:23 UTC (rev 3207)
+++ Client/trunk/Ginger/Repository/CmnSession.vb 2014-07-29 09:30:33 UTC (rev 3208)
@@ -275,7 +275,7 @@
''' <returns>a single object</returns>
''' <remarks>throws an ApplicationException if nothing has been found or if more than one object has been found</remarks>
Public Function SearchSingleObject(ByVal query As String, throwException As Boolean) As CmnObject
- Dim dict As IDictionary(Of CmnId, CmnObject) = SearchObjects(query)
+ Dim dict As IDictionary(Of CmnId, CmnObject) = SearchObjects(query, 1, 0)
If dict.Count = 1 Then
Return dict.Values.First
Else
@@ -293,7 +293,7 @@
''' <param name="query">a string containing the lucene query</param>
''' <returns></returns>
''' <remarks>a list of objects</remarks>
- Public Function SearchObjects(ByVal query As String) As IDictionary(Of CmnId, CmnObject)
+ Public Function SearchObjects(ByVal query As String, Optional pageSize As Integer = -1, Optional page As Integer = -1) As IDictionary(Of CmnId, CmnObject)
Dim ci As CmdInterface
Dim result As Collection
result = New Collection
@@ -301,6 +301,8 @@
ci.AddStringParameter("command", "searchobjects")
ci.AddStringParameter("query", query)
ci.AddStringParameter("ticket", ticket_)
+ If Not pageSize = -1 Then ci.AddStringParameter("page_size", CStr(pageSize))
+ If Not page = -1 Then ci.AddStringParameter("page", CStr(page))
Dim respDoc As XmlDocument = ci.PostCmdXml(10 * 60 * 60 * 1000) ' timeout 10 hours
Return DeserializationHelper.ParseObjectResponse(Me, respDoc)
@@ -327,8 +329,8 @@
''' <param name="query">an <see cref="System.Xml.XmlDocument">XmlDocument</see> containing the lucene query</param>
''' <returns></returns>
''' <remarks>a list of folders</remarks>
- Public Function SearchFolders(ByVal query As XmlDocument) As IDictionary(Of CmnId, CmnFolder)
- Return SearchFolders(query.InnerXml)
+ Public Function SearchFolders(ByVal query As XmlDocument, Optional pageSize As Integer = -1, Optional page As Integer = -1) As IDictionary(Of CmnId, CmnFolder)
+ Return SearchFolders(query.InnerXml, pageSize, page)
End Function
''' <summary>
@@ -337,8 +339,8 @@
''' <param name="query">an <see cref="System.Xml.XmlDocument">XmlDocument</see> containing the lucene query</param>
''' <returns></returns>
''' <remarks>a list of objects</remarks>
- Public Function SearchObjects(ByVal query As XmlDocument) As IDictionary(Of CmnId, CmnObject)
- Return SearchObjects(query.InnerXml)
+ Public Function SearchObjects(ByVal query As XmlDocument, Optional pageSize As Integer = -1, Optional page As Integer = -1) As IDictionary(Of CmnId, CmnObject)
+ Return SearchObjects(query.InnerXml, pageSize, page)
End Function
''' <summary>
''' Searches for folders with a lucene query.
@@ -346,7 +348,7 @@
''' <param name="query">a string containing the lucene query</param>
''' <returns></returns>
''' <remarks>a list of folders</remarks>
- Public Function SearchFolders(ByVal query As String) As IDictionary(Of CmnId, CmnFolder)
+ Public Function SearchFolders(ByVal query As String, Optional pageSize As Integer = -1, Optional page As Integer = -1) As IDictionary(Of CmnId, CmnFolder)
Dim ci As CmdInterface
Dim result As Collection
result = New Collection
@@ -354,6 +356,8 @@
ci.AddStringParameter("command", "searchfolders")
ci.AddStringParameter("query", query)
ci.AddStringParameter("ticket", ticket_)
+ If Not pageSize = -1 Then ci.AddStringParameter("page_size", CStr(pageSize))
+ If Not page = -1 Then ci.AddStringParameter("page", CStr(page))
Return DeserializationHelper.ParseFolderResponse(Me, ci.PostCmdXml(60 * 60 * (1000 \ 4)))
End Function
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|