001 /* 002 * Sonar, open source software quality management tool. 003 * Copyright (C) 2008-2011 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * Sonar is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * Sonar is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public 017 * License along with Sonar; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 019 */ 020 package org.sonar.plugins.design.ui.dependencies.client; 021 022 import com.google.gwt.event.dom.client.ClickEvent; 023 import com.google.gwt.event.dom.client.ClickHandler; 024 import com.google.gwt.i18n.client.Dictionary; 025 import com.google.gwt.user.client.ui.*; 026 import org.sonar.gwt.Links; 027 import org.sonar.gwt.ui.Icons; 028 import org.sonar.wsclient.services.Dependency; 029 030 public class DependenciesTable extends Composite { 031 032 private HorizontalPanel panel; 033 034 public DependenciesTable() { 035 panel = new HorizontalPanel(); 036 panel.setStylePrimaryName("dependencies"); 037 initWidget(panel); 038 } 039 040 041 public void display(final Data data) { 042 panel.clear(); 043 if (data.canDisplay()) { 044 panel.add(createIncomingColumn(data)); 045 panel.add(createOutgoingColumn(data)); 046 } else { 047 panel.add(new Label(Dictionary.getDictionary("l10n").get("noData"))); 048 } 049 } 050 051 052 private Panel createIncomingColumn(Data data) { 053 FlexTable grid = new FlexTable(); 054 grid.setStyleName("col"); 055 grid.setWidget(0, 1, new HTML("<b>" + Dictionary.getDictionary("l10n").get("depsTab.afferentCouplings") + "</b>: " + data.getResource().getMeasureIntValue("ca"))); 056 grid.getRowFormatter().setStyleName(0, "coltitle"); 057 058 int row = 1; 059 for (Dependency dependency : data.getDependencies()) { 060 if (data.getResourceId()==dependency.getToId()) { 061 addDependencyRow(grid, row, dependency.getFromId(), dependency.getFromName() + " (" + dependency.getWeight() + ")"); 062 grid.setWidget(row, 0, Icons.forQualifier(dependency.getFromQualifier()).createImage()); 063 row++; 064 } 065 } 066 067 return grid; 068 } 069 070 private Panel createOutgoingColumn(Data data) { 071 FlexTable grid = new FlexTable(); 072 grid.setStyleName("col"); 073 grid.setWidget(0, 1, new HTML("<b>" + Dictionary.getDictionary("l10n").get("depsTab.efferentCouplings") + "</b>: " + data.getResource().getMeasureIntValue("ce"))); 074 grid.getRowFormatter().setStyleName(0, "coltitle"); 075 076 int row = 1; 077 for (Dependency dependency : data.getDependencies()) { 078 if (data.getResourceId()==dependency.getFromId()) { 079 addDependencyRow(grid, row, dependency.getToId(), dependency.getToName() + " (" + dependency.getWeight() + ")"); 080 grid.setWidget(row, 0, Icons.forQualifier(dependency.getToQualifier()).createImage()); 081 row++; 082 } 083 } 084 085 return grid; 086 } 087 088 private void addDependencyRow(final FlexTable grid, final int row, final long resourceId, final String name) { 089 Label link = new Label(name); 090 link.setStyleName("link"); 091 link.addClickHandler(new ClickHandler() { 092 public void onClick(ClickEvent clickEvent) { 093 Links.openResourcePopup(String.valueOf(resourceId)); 094 } 095 }); 096 grid.setWidget(row, 1, link); 097 } 098 }