Package com.google.gwt.museum.client.common

Source Code of com.google.gwt.museum.client.common.AbstractIssue

/*
* 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.museum.client.common;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.LinkElement;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

/**
* An abstract issue that can be used in the code museum. Each
* {@link AbstractIssue} should address a single issue. If at all possible, that
* issue should be obvious from the initial ui state.
*/
public abstract class AbstractIssue implements EntryPoint {
  /**
   * Headline for this issue.
   */
  private String headline;

  /**
   * Creates the css associated with this issue.
   *
   * @return link with css
   */
  public LinkElement createCSS() {
    String cssName;
    if (hasCSS()) {
      // Fetch the associated style sheet using an HTTP request
      cssName = getClass().getName();
      cssName = cssName.substring(cssName.lastIndexOf(".") + 1);
    } else {
      cssName = "Default";
    }

    String baseUrl = GWT.getModuleBaseURL();
    LinkElement issueLinkElement = Document.get().createLinkElement();
    issueLinkElement.setRel("stylesheet");
    issueLinkElement.setType("text/css");
    issueLinkElement.setHref(baseUrl + "issues/" + cssName + ".css");
    return issueLinkElement;
  }

  /**
   * <p>
   * Create a widget that illustrates the issue. Each issue should include a
   * detailed description of the expected results and the observed results
   * before the issue was fixed.
   * </p>
   * <p>
   * Note that createIssue will may be called multiple times if the user
   * refreshes the issue. If you save state within the instance, you must clear
   * it out and reset the issue when createIssue is called again.
   * </p>
   *
   * @return a widget that can reproduce the issue
   */
  public abstract Widget createIssue();

  /**
   * Returns the "<i>classname</i>: summary".
   *
   * @return a short summary of the issue, including the class name
   */
  public final String getHeadline() {
    if (headline == null) {
      String className = getClass().getName();
      headline = className.substring(className.lastIndexOf(".") + 1) + ": "
          + getSummary();
    }
    return headline;
  }

  /**
   * Return a detailed description of what the user should expect to see. The
   * description will be added above the example. You can also include
   * instructions to reproduce the issue.
   *
   * @return instructions explaining what the user should see
   */
  public abstract String getInstructions();

  /**
   * Gets the summary for this test. All tests should include a summary so users
   * can scan through them quickly.
   */
  public abstract String getSummary();

  /**
   * Does the test have css?
   *
   * @return true to load a CSS file of the same name, placed in the issues
   *         directory
   */
  public abstract boolean hasCSS();

  /**
   * Called immediately after the widget is attached.
   */
  public void onAttached() {
    // By default do nothing.
  }

  public void onModuleLoad() {
    Utility.getHeadElement().appendChild(createCSS());
    Window.setTitle(getHeadline());
    RootPanel.get().add(new HTML(getInstructions()));
    RootPanel.get().add(createIssue());
    onAttached();
  }

}
TOP

Related Classes of com.google.gwt.museum.client.common.AbstractIssue

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.