Package bufferings.ktr.wjr.client

Source Code of bufferings.ktr.wjr.client.WjrPresenter

/*
* Copyright 2010 bufferings[at]gmail.com
*
* 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 bufferings.ktr.wjr.client;

import static bufferings.ktr.wjr.shared.util.Preconditions.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import bufferings.ktr.wjr.client.runner.SequentialRunner;
import bufferings.ktr.wjr.client.runner.WjrRunner;
import bufferings.ktr.wjr.client.service.KtrWjrServiceAsync;
import bufferings.ktr.wjr.server.util.WjrServerUtils;
import bufferings.ktr.wjr.shared.model.WjrConfig;
import bufferings.ktr.wjr.shared.model.WjrStore;
import bufferings.ktr.wjr.shared.util.WjrParamKey;
import bufferings.ktr.wjr.shared.util.WjrSharedUtils;

import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasWidgets;

/**
* The presenter of Kotori Web JUnit Runner.
*
* @author bufferings[at]gmail.com
*/
public class WjrPresenter implements WjrDisplayHandler {

  /**
   * The KtrWjr rpc service(async).
   */
  protected KtrWjrServiceAsync rpcService;

  /**
   * The loading view.
   */
  protected WjrLoadingDisplay loadingView;

  /**
   * The view.
   */
  protected WjrDisplay view;

  /**
   * The user configuration.
   */
  protected WjrConfig config;

  /**
   * The test store.
   */
  protected WjrStore store;

  /**
   * The GET parameters for user configuration.
   */
  protected Map<String, List<String>> parameterMap;

  /**
   * The method runner.
   */
  protected WjrRunner runner;

  /**
   * Constructs the presenter.
   *
   * @param rpcService
   *          The rpc service.
   * @param view
   *          The view.
   */
  public WjrPresenter(KtrWjrServiceAsync rpcService,
      WjrLoadingDisplay loadingView, WjrDisplay view) {
    this.rpcService = rpcService;
    this.loadingView = loadingView;
    this.view = view;
  }

  /**
   * Starts the application.
   *
   * @param container
   *          The container of the view.
   */
  public void go(final HasWidgets container) {
    loadingView.go(container);
    view.go(WjrPresenter.this, container);

    rpcService.loadConfig(
      getConfigIdFromQueryString(),
      new AsyncCallback<WjrConfig>() {

        public void onFailure(Throwable caught) {
          config = new WjrConfig();
          setParamTzToConfig(config);
          loadingView.notifyLoaded();
          view.notifyLoadingConfigFailed(config, caught);
        }

        public void onSuccess(WjrConfig result) {
          checkNotNull(result, "The configuration is null.");
          config = result;
          setParamTzToConfig(config);
          loadingView.notifyLoaded();
          view.notifyLoadingConfigSucceeded(config);
        }

        private void setParamTzToConfig(WjrConfig config) {
          String tz = getTzFromQueryString();
          if (!WjrSharedUtils.isNullOrEmptyString(tz)) {
            config.setLogHookTimezone(tz);
          }
        }
      });
  }

  /**
   * {@inheritDoc}
   */
  public void onLoadStore() {
    rpcService.loadStore(new AsyncCallback<WjrStore>() {

      public void onFailure(Throwable caught) {
        view.setData(new WjrStore());
        view.notifyLoadingStoreFailed(caught);
      }

      public void onSuccess(WjrStore result) {
        store = result;
        view.setData(store);
        view.notifyLoadingStoreSucceeded();
      }
    });
  }

  /**
   * {@inheritDoc}
   */
  public void onClearButtonClick() {
    store.clearAllResultsAndSummaries();
    view.repaintAllTreeItems(store);
  }

  /**
   * {@inheritDoc}
   */
  public void onRunButtonClick() {
    checkState(!isRunnerRunning(), "Tests are running.");

    runner = createRunner();
    runner.run();
  }

  /**
   * {@inheritDoc}
   */
  public void onCancelButtonClick() {
    if (!isRunnerRunning()) {
      GWT.log("No tests are running.");
      return;
    }
    runner.cancelRunning();
  }

  /**
   * The runner is running or not.
   *
   * @return True if the runner is not null and the runner is running, false if
   *         not.
   */
  protected boolean isRunnerRunning() {
    return runner != null && runner.isRunning();
  }

  /**
   * Gets the test runner.
   *
   * @return The test runner.
   */
  protected WjrRunner createRunner() {
    return new SequentialRunner(rpcService, view, config, store);
  }

  /**
   * Gets the configId parameter form the query string.
   */
  protected String getConfigIdFromQueryString() {
    List<String> items = getParameterMap().get(WjrParamKey.KEY_CONFIG_ID);
    if (items == null || items.size() == 0) {
      return null;
    }
    return items.get(0);
  }

  /**
   * Gets the tz parameter form the query string.
   */
  protected String getTzFromQueryString() {
    List<String> items =
      getParameterMap().get(WjrParamKey.KEY_LOGHOOK_TIMEZONE);
    if (items == null || items.size() == 0) {
      return null;
    }
    return items.get(0);
  }

  /**
   * Gets the parameter map from the query string.
   *
   * If the parameter map is already made, that instance is used.
   *
   * I want to use the method {@link Window.Location#getParameterMap()}, but it
   * returns immutable map and list. The immutable map and list cannot be used
   * in the GWT-RPC. So I create the
   * {@link WjrServerUtils#buildListParamMap(String)}, which is the same logic
   * as {@link Window.Location#buildListParamMap(String)} but returns not
   * immutable map.
   *
   * @return The properties.
   */
  protected Map<String, List<String>> getParameterMap() {
    if (parameterMap != null) {
      return parameterMap;
    }
    parameterMap = buildListParamMap(Window.Location.getQueryString());
    return parameterMap;
  }

  /**
   * Builds the not immutable map from String to List<String> that we'll return
   * in getParameterMap().
   *
   * @return a map from the queryString.
   * @see Window.Location#buildListParamMap(String)
   */
  protected Map<String, List<String>> buildListParamMap(String queryString) {
    Map<String, List<String>> out = new HashMap<String, List<String>>();

    if (queryString != null && queryString.length() > 1) {
      String qs = queryString.substring(1);

      for (String kvPair : qs.split("&")) {
        String[] kv = kvPair.split("=", 2);
        if (kv[0].length() == 0) {
          continue;
        }

        List<String> values = out.get(kv[0]);
        if (values == null) {
          values = new ArrayList<String>();
          out.put(kv[0], values);
        }
        values.add(kv.length > 1 ? URL.decodeQueryString(kv[1]) : "");
      }
    }
    return out;
  }
}
TOP

Related Classes of bufferings.ktr.wjr.client.WjrPresenter

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.