package org.incha.ui.stats; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; import org.eclipse.jdt.core.IMember; import org.incha.core.JavaProject; import org.incha.core.JavaProjectsModel; import org.incha.core.Statistics; import org.incha.core.jswingripples.eig.JSwingRipplesEIG; import org.incha.core.jswingripples.eig.JSwingRipplesEIGEdge; import org.incha.core.jswingripples.eig.JSwingRipplesEIGNode; public class StatsDialog extends JFrame { private static final long serialVersionUID = 4328259959960759078L; private static final String EMPTY_PROJECT = " "; private final JComboBox<String> projectNames = new JComboBox<String>(); private final JLabel mainClass = new JLabel(); private final JLabel numberOfNodes = new JLabel(); private final JLabel numberOfTopNodes = new JLabel(); private final JLabel numberOfMembers = new JLabel(); private final JLabel numberOfSubclasses = new JLabel(); private final JLabel numberOfMethods = new JLabel(); private final JLabel numberOfVariables = new JLabel(); private final JLabel numberOfEdges = new JLabel(); private final JLabel numberOfCustomEdges = new JLabel(); /** * @param project java project. */ public StatsDialog(final JavaProject[] projects) { super(); initComponents(projects); } /** * @param projects */ protected void initComponents(final JavaProject[] projects) { setTitle("JRipples stats"); setDefaultCloseOperation(DISPOSE_ON_CLOSE); //set content pane. final JPanel contentPane = new JPanel(new BorderLayout(0, 5)); setContentPane(contentPane); //create projects combobox this.projectNames.setEditable(false); final String[] projectNames = new String[projects.length + 1]; projectNames[0] = EMPTY_PROJECT; for (int i = 0; i < projects.length; i++) { projectNames[i + 1] = projects[i].getName(); } final DefaultComboBoxModel<String> cbModel = new DefaultComboBoxModel<String>(projectNames); this.projectNames.setModel(cbModel); this.projectNames.setSelectedIndex(0); final JPanel title = new JPanel(new BorderLayout(5, 0)); title.setBorder(new EmptyBorder(2, 2, 2, 2)); title.add(new JLabel("Project:"), BorderLayout.WEST); title.add(this.projectNames, BorderLayout.CENTER); contentPane.add(title, BorderLayout.NORTH); //create statistics view: final JPanel centerWrapper = new JPanel(new FlowLayout(FlowLayout.LEADING)); centerWrapper.setBorder(new EtchedBorder(EtchedBorder.RAISED)); contentPane.add(centerWrapper, BorderLayout.CENTER); final JPanel center = new JPanel(new GridLayout(9, 2, 5, 5)); center.setBorder(new EmptyBorder(3, 3, 3, 3)); centerWrapper.add(center); // Main class: center.add(new JLabel("Main class:")); center.add(mainClass); // All nodes: 289 center.add(new JLabel("All nodes:")); center.add(numberOfNodes); // Top nodes (classes): 31 center.add(new JLabel("Top nodes (classes):")); center.add(numberOfTopNodes); // Member nodes: 267 center.add(new JLabel("Member nodes:")); center.add(numberOfMembers); // Subclasses: 10 center.add(new JLabel(" Subclasses:")); center.add(numberOfSubclasses); // Methods: 177 center.add(new JLabel(" Methods:")); center.add(numberOfMethods); // Variables: 80 center.add(new JLabel(" Variables:")); center.add(numberOfVariables); // Edges: 438 center.add(new JLabel("Edges:")); center.add(numberOfEdges); // Custom edges: center.add(new JLabel(" Custom edges:")); center.add(numberOfCustomEdges); //add listeners this.projectNames.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { projectSelected(); } }); } /** * */ protected void projectSelected() { JSwingRipplesEIG eig = null; final String projectName = (String) projectNames.getSelectedItem(); if (!EMPTY_PROJECT.equals(projectName)) { final JavaProject project = JavaProjectsModel.getInstance().getProject(projectName); final Statistics stats = project.getCurrentStatistics(); eig = stats == null ? null : stats.getEIG(); } if (eig == null) { mainClass.setText(""); numberOfNodes.setText(""); numberOfTopNodes.setText(""); numberOfMembers.setText(""); numberOfSubclasses.setText(""); numberOfMethods.setText(""); numberOfVariables.setText(""); numberOfEdges.setText(""); numberOfCustomEdges.setText(""); } else { if (eig.getMainClass() != null) { mainClass.setText(eig.getMainClass()); } final JSwingRipplesEIGNode[] nodes= eig.getAllNodes(); int methods=0; int classes=0; int variables=0; for (int i=0;i<nodes.length;i++) { if (nodes[i].isTop()) continue; switch (nodes[i].getNodeIMember().getElementType()) { case IMember.FIELD: variables++; break; case IMember.METHOD: methods++; break; case IMember.TYPE: classes++; break; } } final JSwingRipplesEIGEdge edges[]= eig.getAllEdges(); int edge=0; for (int i=0;i<edges.length;i++) { if (edges[i].getMark()!=null) if (edges[i].getMark().compareTo("Custom")==0) edge++; } numberOfNodes.setText("" + nodes.length); numberOfTopNodes.setText("" + eig.getTopNodes().length); numberOfSubclasses.setText("" + classes); numberOfMethods.setText("" + methods); numberOfVariables.setText("" + variables); numberOfEdges.setText("" + edges.length); numberOfCustomEdges.setText("" + edge); } } }