/* * Copyright 2008-2017 by Emeric Vernat * * This file is part of Java Melody. * * 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 net.bull.javamelody; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.io.Serializable; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Map; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.TableColumn; import net.bull.javamelody.swing.MButton; import net.bull.javamelody.swing.Utilities; import net.bull.javamelody.swing.table.MDefaultTableCellRenderer; import net.bull.javamelody.swing.table.MTable; import net.bull.javamelody.swing.table.MTableScrollPane; /** * Panel de la liste des dépendances. * @author Emeric Vernat */ class DependenciesPanel extends MelodyPanel { private static final long serialVersionUID = 1L; @SuppressWarnings("all") private Map<String, MavenArtifact> dependencies; private MTable<String> table; class NameTableCellRenderer extends MDefaultTableCellRenderer { private static final long serialVersionUID = 1L; NameTableCellRenderer() { super(); } @Override public Component getTableCellRendererComponent(JTable jtable, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final MavenArtifact mavenArtifact = getDependencyByViewRow(row); Object myValue; if (mavenArtifact != null) { try { myValue = mavenArtifact.getName(); } catch (final IOException e) { myValue = e.toString(); } } else { myValue = null; } return super.getTableCellRendererComponent(jtable, myValue, isSelected, hasFocus, row, column); } } class MavenIdTableCellRenderer extends MDefaultTableCellRenderer { private static final long serialVersionUID = 1L; MavenIdTableCellRenderer() { super(); } @Override public Component getTableCellRendererComponent(JTable jtable, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final MavenArtifact mavenArtifact = getDependencyByViewRow(row); final Object myValue; if (mavenArtifact != null) { myValue = mavenArtifact.getGroupId() + ':' + mavenArtifact.getArtifactId() + ':' + mavenArtifact.getVersion(); } else { myValue = null; } return super.getTableCellRendererComponent(jtable, myValue, isSelected, hasFocus, row, column); } } class LicenseTableCellRenderer extends MDefaultTableCellRenderer { private static final long serialVersionUID = 1L; LicenseTableCellRenderer() { super(); } @Override public Component getTableCellRendererComponent(JTable jtable, Object value, boolean isSelected, boolean hasFocus, int row, int column) { final MavenArtifact mavenArtifact = getDependencyByViewRow(row); Object myValue; if (mavenArtifact != null) { try { final StringBuilder sb = new StringBuilder(); for (final String license : mavenArtifact.getLicenseUrlsByName().keySet()) { if (sb.length() > 0) { sb.append(", "); } sb.append(license); } myValue = sb.toString(); } catch (final IOException e) { myValue = e.toString(); } } else { myValue = null; } return super.getTableCellRendererComponent(jtable, myValue, isSelected, hasFocus, row, column); } } DependenciesPanel(RemoteCollector remoteCollector) throws IOException { super(remoteCollector); refresh(); } MavenArtifact getDependencyByViewRow(int viewRow) { final String artifact = getTable().getList() .get(getTable().convertRowIndexToModel(viewRow)); return dependencies.get(artifact); } final void refresh() throws IOException { removeAll(); this.dependencies = getRemoteCollector().collectWebappDependencies(); setName(getString("Dependencies")); final JLabel titleLabel = Utilities.createParagraphTitle(getName(), "beans.png"); add(titleLabel, BorderLayout.NORTH); final MTableScrollPane<String> scrollPane = createScrollPane(); this.table = scrollPane.getTable(); table.setList(new ArrayList<>(dependencies.keySet())); add(scrollPane, BorderLayout.CENTER); final JLabel summaryLabel = new JLabel( getFormattedString("nb_dependencies", dependencies.size())); summaryLabel.setHorizontalAlignment(SwingConstants.RIGHT); final JPanel southPanel = new JPanel(new BorderLayout()); southPanel.setOpaque(false); southPanel.add(createButtonsPanel(), BorderLayout.NORTH); southPanel.add(summaryLabel, BorderLayout.CENTER); add(southPanel, BorderLayout.SOUTH); } private MTableScrollPane<String> createScrollPane() { final MTableScrollPane<String> tableScrollPane = new MTableScrollPane<>(); final MTable<String> myTable = tableScrollPane.getTable(); final TableColumn artifactTableColumn = new TableColumn(myTable.getColumnCount()); artifactTableColumn.setIdentifier(myTable.getColumnCount()); artifactTableColumn.setHeaderValue("Artifact"); artifactTableColumn.setCellRenderer(new MDefaultTableCellRenderer()); myTable.addColumn(artifactTableColumn); final TableColumn nameTableColumn = new TableColumn(myTable.getColumnCount()); nameTableColumn.setIdentifier(myTable.getColumnCount()); nameTableColumn.setHeaderValue(getString("Nom")); nameTableColumn.setCellRenderer(new NameTableCellRenderer()); myTable.addColumn(nameTableColumn); final TableColumn mavenIdTableColumn = new TableColumn(myTable.getColumnCount()); mavenIdTableColumn.setIdentifier(myTable.getColumnCount()); mavenIdTableColumn.setHeaderValue("Maven Id"); mavenIdTableColumn.setCellRenderer(new MavenIdTableCellRenderer()); myTable.addColumn(mavenIdTableColumn); final TableColumn licenseTableColumn = new TableColumn(myTable.getColumnCount()); licenseTableColumn.setIdentifier(myTable.getColumnCount()); licenseTableColumn.setHeaderValue(getString("Licence")); licenseTableColumn.setCellRenderer(new LicenseTableCellRenderer()); myTable.addColumn(licenseTableColumn); myTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { actionOpenUrl(); } } }); return tableScrollPane; } private JPanel createButtonsPanel() { final MButton refreshButton = createRefreshButton(); refreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { refresh(); } catch (final IOException ex) { showException(ex); } } }); final MButton xmlJsonButton = createXmlJsonButton((Serializable) dependencies); return Utilities.createButtonsPanel(refreshButton, xmlJsonButton); } MTable<String> getTable() { return table; } void actionOpenUrl() { final String artifact = getTable().getSelectedObject(); final MavenArtifact dependency = dependencies.get(artifact); try { if (dependency != null && dependency.getUrl() != null) { Desktop.getDesktop().browse(new URI(dependency.getUrl())); } } catch (final IOException | URISyntaxException ex) { showException(ex); } } }