Java tutorial
/* * Copyright 2009 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.speedtracer.client.visualizations.view; import com.google.gwt.coreext.client.JSOArray; import com.google.gwt.graphics.client.Color; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.resources.client.CssResource; import com.google.gwt.topspin.ui.client.Container; import com.google.gwt.topspin.ui.client.Div; import com.google.speedtracer.client.MonitorResources; import com.google.speedtracer.client.model.HintRecord; /** * An indicator for a table row that indicates there are hints on this entity. * Represented by a colored bubble with a number inside indicating the number of * hint records. * */ public class HintletIndicator extends Div { /** * CSS. */ public interface Css extends CssResource { String hintletIndicator(); String hintletIndicatorCritical(); String hintletIndicatorInfo(); String hintletIndicatorValidation(); String hintletIndicatorWarning(); String hintletSeverityColorCritical(); String hintletSeverityColorInfo(); String hintletSeverityColorValidation(); String hintletSeverityColorWarning(); } /** * Externalized Resource interface. */ public interface Resources extends ClientBundle { @Source("resources/HintletIndicator.css") Css hintletIndicatorCss(); } public static String getSeverityColor(int severity) { Css css = MonitorResources.getResources().hintletIndicatorCss(); switch (severity) { case HintRecord.SEVERITY_VALIDATION: return css.hintletSeverityColorValidation(); case HintRecord.SEVERITY_CRITICAL: return css.hintletSeverityColorCritical(); case HintRecord.SEVERITY_WARNING: return css.hintletSeverityColorWarning(); case HintRecord.SEVERITY_INFO: return css.hintletSeverityColorInfo(); } return Color.BLACK.toString(); } private final HintletIndicator.Resources resources; private String tooltipText; public HintletIndicator(Container container, int severity, int numHints, String tooltip, HintletIndicator.Resources resources) { super(container); this.resources = resources; setIndicator(severity, numHints, tooltip); } public HintletIndicator(Container container, JSOArray<HintRecord> hintRecords, HintletIndicator.Resources resources) { super(container); this.resources = resources; update(hintRecords); } public String getTooltipText() { return tooltipText; } /** * Updates the indicator in place. * * @param hintRecords The HintRecords associated with this indicator. */ public void update(JSOArray<HintRecord> hintRecords) { // Look through hint records and tally severity. int criticalCount = 0; int warningCount = 0; int infoCount = 0; int validationCount = 0; int numHints = hintRecords.size(); for (int i = 0; i < numHints; i++) { HintRecord rec = hintRecords.get(i); switch (rec.getSeverity()) { case HintRecord.SEVERITY_VALIDATION: validationCount++; break; case HintRecord.SEVERITY_CRITICAL: criticalCount++; break; case HintRecord.SEVERITY_WARNING: warningCount++; break; case HintRecord.SEVERITY_INFO: infoCount++; break; } } // Create the tooltip text and figure out the max severity. String tooltip = ""; int maxSeverity = HintRecord.SEVERITY_INFO; if (infoCount > 0) { tooltip += infoCount + " Info"; numHints = infoCount; maxSeverity = HintRecord.SEVERITY_INFO; } if (warningCount > 0) { if (!tooltip.equals("")) { tooltip = ", " + tooltip; } tooltip = warningCount + " Warning" + tooltip; numHints = warningCount; maxSeverity = HintRecord.SEVERITY_WARNING; } if (criticalCount > 0) { if (!tooltip.equals("")) { tooltip = ", " + tooltip; } tooltip = criticalCount + " Critical" + tooltip; numHints = criticalCount; maxSeverity = HintRecord.SEVERITY_CRITICAL; } if (validationCount > 0) { if (!tooltip.equals("")) { tooltip = ", " + tooltip; } tooltip = validationCount + " Validation" + tooltip; numHints = validationCount; maxSeverity = HintRecord.SEVERITY_VALIDATION; } setIndicator(maxSeverity, numHints, tooltip); } private void setIndicator(int severity, int numHints, String tooltip) { String className = ""; Css css = resources.hintletIndicatorCss(); switch (severity) { case HintRecord.SEVERITY_VALIDATION: className = css.hintletIndicatorValidation(); break; case HintRecord.SEVERITY_CRITICAL: className = css.hintletIndicatorCritical(); break; case HintRecord.SEVERITY_WARNING: className = css.hintletIndicatorWarning(); break; case HintRecord.SEVERITY_INFO: className = css.hintletIndicatorInfo(); break; } getElement().setClassName(className + " " + css.hintletIndicator()); getElement().setInnerText("" + numHints); this.tooltipText = tooltip; getElement().setAttribute("title", tooltipText); } }