public void flash() {
   final Element elem = getElement();
   elem.getStyle().setProperty("opacity", "0");
   CssTransitionFloat.get()
       .setCallBack(
           new CallBack() {
             public void onTransitionEnd() {
               elem.getStyle().setProperty("opacity", "1.0");
             }
           });
   shouldFlash = true;
 }
  /**
   * Display all resources that fall in the given window.
   *
   * @param left the left boundary
   * @param right the right boundary
   */
  protected void displayResourcesInWindow(double left, double right) {
    NetworkVisualizationModel model = getModel();
    // We dont need to update if we
    // have not shifted bounds.
    if ((displayed.size() > 0) && (left == oldLeft) && (right == oldRight)) {
      return;
    } else {
      oldLeft = left;
      oldRight = right;
    }

    // clean up Event Hookups
    for (int i = 0; i < displayed.size(); i++) {
      ResourceRow row = displayed.get(i);
      row.cleanUp();
    }

    // blank the resource Panel
    displayed.clear();
    getContentElement().setInnerHTML("");

    // We do a naive linear search until the kinks can be ironed
    // out of more sophisticated search.
    List<NetworkResource> networkResources = model.getSortedResources();
    for (int i = 0; i < networkResources.size(); i++) {
      NetworkResource resource = networkResources.get(i);
      if (isResourceInWindow(resource, left, right)) {
        displayResource(left, right, resource);
      }

      // Bail once we've hit the right edge
      if (resource.getStartTime() >= right) {
        break;
      }
    }

    if (shouldFlash) {
      CssTransitionFloat.get().transition(getElement(), "opacity", 0, 1, 200);
      shouldFlash = false;
    }
  }