Java tutorial
/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.search.sample.hellosearch.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.JsArray; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.search.client.BookSearch; import com.google.gwt.search.client.ExpandMode; import com.google.gwt.search.client.ImageSearch; import com.google.gwt.search.client.KeepHandler; import com.google.gwt.search.client.KeepLabel; import com.google.gwt.search.client.LinkTarget; import com.google.gwt.search.client.NewsResult; import com.google.gwt.search.client.NewsSearch; import com.google.gwt.search.client.Result; import com.google.gwt.search.client.ResultSetSize; import com.google.gwt.search.client.SearchControl; import com.google.gwt.search.client.SearchControlOptions; import com.google.gwt.search.client.SearchResultsHandler; import com.google.gwt.search.client.SearchStartingHandler; import com.google.gwt.search.client.SearchUtils; import com.google.gwt.search.client.VideoResult; import com.google.gwt.search.client.VideoSearch; import com.google.gwt.search.client.WebResult; import com.google.gwt.search.client.WebSearch; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /** * HelloSearch application. */ public class HelloSearch implements EntryPoint, KeepHandler, SearchResultsHandler, SearchStartingHandler { private class GoogleCodeWebSearch extends WebSearch { public GoogleCodeWebSearch() { setSiteRestriction("code.google.com"); setUserDefinedLabel("Google Code"); setResultSetSize(ResultSetSize.LARGE); } } private VerticalPanel clips = new VerticalPanel(); private HorizontalPanel hp = new HorizontalPanel(); private static final int CLIP_WIDTH = 200; public void onKeep(KeepEvent event) { final Result result = event.getResult(); String title; if (result instanceof WebResult) { WebResult web = (WebResult) result; title = web.getTitle(); } else if (result instanceof NewsResult) { NewsResult web = (NewsResult) result; title = web.getTitle(); } else if (result instanceof VideoResult) { VideoResult video = (VideoResult) result; title = video.getTitle(); // Metadata is also available System.out.println( video.getTbHeight() + "x" + video.getTbWidth() + " " + video.getDuration() + "seconds"); } else { // Ads don't have an official interface title = "Advertisement"; } HTML h = new HTML(title); h.addStyleName("clipLink"); h.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { PopupPanel p = new PopupPanel(true); p.addStyleName("keepPopup"); p.setWidget(result.getHtml()); Widget w = (Widget) event.getSource(); p.setPopupPosition(w.getAbsoluteLeft() + 5, w.getAbsoluteTop() + w.getOffsetHeight() + 5); p.show(); } }); clips.add(h); } public void onModuleLoad() { clips.setWidth("100%"); clips.addStyleName("clips"); clips.add(new Label("Saved Clippings:")); clips.setWidth(CLIP_WIDTH + "px"); hp.add(clips); final Label loadingLabel = new Label("Loading..."); hp.add(loadingLabel); hp.setWidth("100%"); hp.getElement().getStyle().setPropertyPx("margin", 15); RootPanel.get().add(hp); // Use the AjaxLoader to load the Search API before running the rest of // the startup. SearchUtils.loadSearchApi(new Runnable() { public void run() { hp.remove(loadingLabel); onApiLoad(); } }); } public void onApiLoad() { SearchControlOptions options = new SearchControlOptions(); // We can use custom subclasses options.add(new GoogleCodeWebSearch(), ExpandMode.OPEN); // Or configure inline WebSearch ws = new WebSearch(); ws.setSiteRestriction("ajaxian.com"); ws.setUserDefinedLabel("Ajaxian"); ws.setResultSetSize(ResultSetSize.SMALL); options.add(ws); options.add(new BookSearch()); options.add(new NewsSearch()); options.add(new VideoSearch(), ExpandMode.CLOSED); options.add(new ImageSearch()); options.setKeepLabel(KeepLabel.SAVE); options.setLinkTarget(LinkTarget.BLANK); SearchControl searchControl = new SearchControl(options); searchControl.addKeepHandler(this); searchControl.addSearchResultsHandler(this); searchControl.addSearchStartingHandler(this); searchControl.execute("Google Web Toolkit"); hp.add(searchControl); } public void onSearchStarting(SearchStartingEvent event) { System.out.println("Searching for query: " + event.getQuery() + " : " + event.getSearch().toString()); } /** * This is just to show that the concrete returned types are those defined in * the API. */ public void onSearchResults(SearchResultsEvent event) { JsArray<? extends Result> results = event.getResults(); for (int i = 0; i < results.length(); i++) { System.out.println("The result is a " + results.get(i).getResultClass().name()); System.out.println(results.get(i).getString()); } } }