'Copyright (c) 2004, Plumtree Software 'All rights reserved. 'Redistribution and use in source and binary forms, with or without modification, 'are permitted provided that the following conditions are met: '1. Neither the name of Plumtree Software nor the names of its contributors may 'be used to endorse or promote products derived from this software without 'specific prior written permission; '2. Licensee acknowledges that no license or other permission is granted herein 'with respect to any third party software and that Licensee may not use the code 'in any way that would infringe any third party right. 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 'CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 'INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE, 'NONINFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 'PURPOSE ARE DISCLAIMED. REGARDLESS OF THE BASIS OF RECOVERY 'CLAIMED, WHETHER UNDER ANY CONTRACT, WARRANTY, TORT (INCLUDING 'NEGLIGENCE AND STRICT LIABILITY), BREACH OF STATUTORY DUTY, 'PRINCIPLES OF CONTRIBUTION OR ANY OTHER THEORY OF LIABILITY, IN NO 'EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 'DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 'DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 'GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 'INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 'WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 'OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 'EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE; AND IN NO EVENT 'WILL THE COPYRIGHT OWNER'S OR CONTRIBUTORS' EXCEED $10,000. Imports System Imports Plumtree.Remote.Util Imports Plumtree.Remote.Search Imports System.IO Namespace Plumtree.Remote.SWS.Google Public Class Search Implements IRemoteSearch 'Runs a search and returns search results. 'simple basic search function 'ISearchUser and ISearchContext are ignored Public Function BasicSearch(ByVal searchQuery As ISearchQuery, ByVal searchUser As ISearchUser, ByVal searchContext As ISearchContext) As ISearchResult Implements IRemoteSearch.BasicSearch 'get the SearchInfo, which includes the key 'SearchInfo was populated from values set in the Web Service SCI Pages. 'If not using SCI pages, hard-code the value below. Dim searchInfo As NamedValueMap = searchQuery.GetSearchInfo 'if the key has not been set, throw the appropriate exception If searchInfo Is Nothing Then Throw New SearchException(TypeSearchError.TYPE_ADMIN_PREFS_NOT_SET, "Admin Prefs not set") End If Dim key As String key = searchInfo.Get("KEY") If key Is Nothing Then Throw New SearchException(TypeSearchError.TYPE_ADMIN_PREFS_NOT_SET, "Admin Prefs not set") End If 'get the ISearchResult from the searchQuery- this will set NumberSkipped Dim result As ISearchResult = searchQuery.GetSearchResult Dim start As Integer = searchQuery.NumberToSkip Dim query As String = searchQuery.SearchString Try 'see the GoogleAPI docs Dim searchService As New com.google.api.GoogleSearchService Dim googleResult As com.google.api.GoogleSearchResult googleResult = searchService.doGoogleSearch(key, query, start, 10, False, "", False, "", "", "") Dim totalHits = googleResult.estimatedTotalResultsCount Dim startIndex As Integer = googleResult.startIndex Dim endIndex As Integer = googleResult.endIndex Dim count As Integer = (endIndex - startIndex) + 1 'set total hits result.TotalNumberOfHits = totalHits 'turn their array of search records into our search records Dim googleElements() As com.google.api.ResultElement ReDim googleElements(count) googleElements = googleResult.resultElements Dim len As Integer = googleElements.GetUpperBound(0) Dim records(len) As ISearchRecord Dim i As Integer Dim record As RemoteSearchRecord Dim element As com.google.api.ResultElement For i = 0 To len record = New RemoteSearchRecord element = googleElements(i) record.Title = element.title record.Description = element.summary record.OpenDocumentURL = element.URL 'include four different colors for the search results 'subsitute your logic here, e.g. set the image in an sci page Select Case i Mod 4 Case 0 record.ImageURL = "http://labs.google.com/images/green.gif" Case 1 record.ImageURL = "http://labs.google.com/images/yellow.gif" Case 2 record.ImageURL = "http://labs.google.com/images/red.gif" Case Else record.ImageURL = "http://labs.google.com/images/blue.gif" End Select records(i) = record Next result.SetSearchResultList(records) 'if there is an exception, return the message to the user Catch ex As Exception Throw New SearchException(TypeSearchError.TYPE_OTHER_ERROR, ex.Message) End Try Return result End Function End Class End Namespace