package jdepend.server.ui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.rmi.Naming; import java.util.Collections; import java.util.List; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jdepend.framework.exception.JDependException; import jdepend.framework.util.BundleUtil; import jdepend.framework.util.MetricsFormat; import jdepend.server.service.RemoteServiceFactory; import jdepend.server.service.score.ScoreListRepository; import jdepend.server.service.score.ScoreDTO; import jdepend.server.service.score.ScoreRemoteService; public final class ScoreMgrPanel extends JPanel { private JDependServer server; private DefaultTableModel model; private String current; private ScoreRemoteService scoreRemoteService; public ScoreMgrPanel(final JDependServer server) { this.server = server; this.setLayout(new BorderLayout()); model = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { return false; } }; final JPopupMenu popupMenu = new JPopupMenu(); JMenuItem deleteItem = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Delete)); deleteItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (JOptionPane.showConfirmDialog(ScoreMgrPanel.this, "您是否确认删除?", "提示", JOptionPane.YES_NO_OPTION) == 0) { try { delete(); refresh(); } catch (Exception ex) { JOptionPane.showMessageDialog(ScoreMgrPanel.this, ex.getMessage(), "alert", JOptionPane.ERROR_MESSAGE); } } } }); popupMenu.add(deleteItem); JTable table = new JTable(model); table.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { JTable table = (JTable) e.getSource(); int currentRow = table.rowAtPoint(e.getPoint()); if (currentRow >= 0) { table.setRowSelectionInterval(currentRow, currentRow); current = (String) table.getValueAt(currentRow, 0); } } @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == 3) { JTable table = (JTable) e.getSource(); popupMenu.show(table, e.getX(), e.getY()); } } }); model.addColumn("ID"); model.addColumn("IP"); model.addColumn("用户"); model.addColumn("命令组名称"); model.addColumn("命令名称"); model.addColumn("抽象程度合理性"); model.addColumn("内聚性指数"); model.addColumn("封装性"); model.addColumn("关系合理性"); model.addColumn("总分"); model.addColumn("创建时间"); model.addColumn("上传时间"); table.getColumn("ID").setMaxWidth(0); table.getColumn("ID").setMinWidth(0); final JScrollPane pane = new JScrollPane(table); this.add(BorderLayout.CENTER, pane); JPanel buttonBar = new JPanel(); buttonBar.setLayout(new FlowLayout()); JButton refreshButton = new JButton(BundleUtil.getString(BundleUtil.Command_Refresh)); refreshButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { refresh(); } catch (JDependException e1) { e1.printStackTrace(); JOptionPane.showMessageDialog(ScoreMgrPanel.this.server, e1.getMessage(), "alert", JOptionPane.ERROR_MESSAGE); } } }); buttonBar.add(refreshButton); this.add(BorderLayout.SOUTH, buttonBar); } private void delete() throws JDependException { ScoreListRepository.delete(this.current); } private void refresh() throws JDependException { model.setRowCount(0); Object[] row; List<ScoreDTO> scoreList = ScoreListRepository.getList(); Collections.sort(scoreList); for (ScoreDTO scoreDTO : scoreList) { row = new Object[11]; row[0] = scoreDTO.id; row[1] = scoreDTO.ip; row[2] = scoreDTO.user; row[3] = scoreDTO.group; row[4] = scoreDTO.command; row[5] = MetricsFormat.toFormattedMetrics(scoreDTO.d); row[6] = MetricsFormat.toFormattedMetrics(scoreDTO.balance); row[7] = MetricsFormat.toFormattedMetrics(scoreDTO.encapsulation); row[8] = MetricsFormat.toFormattedMetrics(scoreDTO.relation); row[9] = MetricsFormat.toFormattedMetrics(scoreDTO.score); row[10] = scoreDTO.getCreateDate(); row[11] = scoreDTO.getUploadDate(); model.addRow(row); } } public void bindService() throws JDependException { try { this.scoreRemoteService = RemoteServiceFactory.createScoreRemoteService(); Naming.rebind("rmi://localhost:1099/ScoreRemoteService", scoreRemoteService); } catch (Exception e) { throw new JDependException("绑定分数服务错误!", e); } } public void unbindService() throws JDependException { try { Naming.unbind("rmi://localhost:1099/ScoreRemoteService"); } catch (Exception e) { throw new JDependException("解除积分服务绑定错误!", e); } } }