All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gerrit.client.ui.RemoteSuggestOracle Maven / Gradle / Ivy

// Copyright (C) 2010 The Android Open Source Project
//
// 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.gerrit.client.ui;

import com.google.gwt.user.client.ui.SuggestOracle;

/**
 * Delegates to a slow SuggestOracle, such as a remote server API.
 * 

* A response is only supplied to the UI if no requests were made after the * oracle begin that request. *

* When a request is made while the delegate is still processing a prior request * all intermediate requests are discarded and the most recent request is * queued. The pending request's response is discarded and the most recent * request is started. */ public class RemoteSuggestOracle extends SuggestOracle { private final SuggestOracle oracle; private Query query; private String last; public RemoteSuggestOracle(SuggestOracle src) { oracle = src; } public String getLast() { return last; } @Override public void requestSuggestions(Request req, Callback cb) { Query q = new Query(req, cb); if (query == null) { query = q; q.start(); } else { query = q; } } @Override public boolean isDisplayStringHTML() { return oracle.isDisplayStringHTML(); } private class Query implements Callback { final Request request; final Callback callback; Query(Request req, Callback cb) { request = req; callback = cb; } void start() { oracle.requestSuggestions(request, this); } @Override public void onSuggestionsReady(Request req, Response res) { if (query == this) { // No new request was started while this query was running. // Propose this request's response as the suggestions. query = null; last = request.getQuery(); callback.onSuggestionsReady(req, res); } else { // Another query came in while this one was running. Skip // this response and start the most recent query. query.start(); } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy