// Copyright 2010 Google Inc. All Rights Reseved. // // 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.testing.testify.risk.frontend.client.view.impl; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.InlineLabel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.google.testing.testify.risk.frontend.client.util.LinkUtil; import com.google.testing.testify.risk.frontend.client.view.widgets.PageSectionVerticalPanel; import com.google.testing.testify.risk.frontend.model.UploadedDatum; import java.util.List; /** * Page for displaying data uploaded into a project. * * @author chrsmith@google.com (Chris Smith) */ public class ProjectDataViewImpl extends Composite { interface ProjectDataViewImplUiBinder extends UiBinder<Widget, ProjectDataViewImpl> {} private static final ProjectDataViewImplUiBinder uiBinder = GWT.create(ProjectDataViewImplUiBinder.class); @UiField public PageSectionVerticalPanel pageSection; @UiField public InlineLabel introText; @UiField public Grid dataGrid; @UiField public Label dataSummary; private static final String GRID_CELL_CSS_STYLE = "tty-DataGridCell"; private static final String GRID_IMAGE_CELL_CSS_STYLE = "tty-DataGridImageCell"; private static final String GRID_HEADER_CSS_STYLE = "tty-DataGridHeaderCell"; public ProjectDataViewImpl() { initWidget(uiBinder.createAndBindUi(this)); dataSummary.setText("No data provided yet."); } /** Sets the page header and intro text. */ public void setPageText(String headerText, String introText) { pageSection.setHeaderText(headerText); this.introText.setText(introText); } public void displayData(List<UploadedDatum> data) { if (data.size() == 0) { dataSummary.setText("No items have been uploaded."); return; } UploadedDatum firstItem = data.get(0); dataSummary.setText( "Showing " + Integer.toString(data.size()) + " " + firstItem.getDatumType().getPlural()); dataGrid.clear(); // Header row + one for each bug x datum, Attribute, Component, Capability dataGrid.resize(data.size() + 1, 4); // Set grid headers. dataGrid.setWidget(0, 0, new Label(firstItem.getDatumType().getPlural())); dataGrid.setWidget(0, 1, new Label("Attribute")); dataGrid.setWidget(0, 2, new Label("Component")); dataGrid.setWidget(0, 3, new Label("Capability")); dataGrid.getWidget(0, 0).addStyleName(GRID_HEADER_CSS_STYLE); dataGrid.getWidget(0, 1).addStyleName(GRID_HEADER_CSS_STYLE); dataGrid.getWidget(0, 2).addStyleName(GRID_HEADER_CSS_STYLE); dataGrid.getWidget(0, 3).addStyleName(GRID_HEADER_CSS_STYLE); // Fill with data. for (int i = 0; i < data.size(); i++) { UploadedDatum datum = data.get(i); String host = LinkUtil.getLinkHost(datum.getLinkUrl()); Widget description; if (host != null) { HorizontalPanel panel = new HorizontalPanel(); Anchor anchor = new Anchor(datum.getLinkText(), datum.getLinkUrl()); anchor.setTarget("_blank"); Label hostLabel = new Label(host); panel.add(anchor); panel.add(hostLabel); description = panel; } else { description = new Label(datum.getLinkText() + " [" + datum.getLinkUrl() + "]"); } description.addStyleName(GRID_CELL_CSS_STYLE); description.setTitle(datum.getToolTip()); dataGrid.setWidget(i + 1, 0, description); // Display images indicating whether or not the datum is associated with project artifacts. // For example, a Bug may be associated with a Component or a Testcase might validate scenarios // for a given Attribute. The user can associate data with project artifacts using SuperLabels. dataGrid.setWidget(i + 1, 1, (datum.isAttachedToAttribute()) ? getX() : getCheckmark()); dataGrid.setWidget(i + 1, 2, (datum.isAttachedToComponent()) ? getX() : getCheckmark()); dataGrid.setWidget(i + 1, 3, (datum.isAttachedToCapability()) ? getX() : getCheckmark()); } } /** Returns an X image for the dataGrid. */ private Image getX() { Image redXImage = new Image("/images/redx_12.png"); redXImage.addStyleName(GRID_IMAGE_CELL_CSS_STYLE); return redXImage; } /** Returns a checkmark image for the dataGrid. */ private Image getCheckmark() { Image checkImage = new Image("/images/checkmark_12.png"); checkImage.addStyleName(GRID_IMAGE_CELL_CSS_STYLE); return checkImage; } }