Package com.google.gwt.search.sample.hellosearch.client

Source Code of com.google.gwt.search.sample.hellosearch.client.HelloSearch$GoogleCodeWebSearch

/*
* 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());
    }
  }
}
TOP

Related Classes of com.google.gwt.search.sample.hellosearch.client.HelloSearch$GoogleCodeWebSearch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.