You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

300 lines
12 KiB
Java

/*
* Copyright (C) 2009-2017 Alistair Neil <info@dazzleships.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package client;
import java.awt.event.MouseEvent;
import javax.swing.event.TableModelEvent;
import lib.GTKFixes;
import lib.Localisation;
import lib.Utilities;
/**
*
* @author Alistair Neil <info@dazzleships.net>
*/
public class GuardNodeDialog extends javax.swing.JDialog {
public static final int CANCEL = 0;
public static final int APPLY = 1;
public static final int RESET = 2;
private static final String ATLAS = "https://atlas.torproject.org/";
private static final Localisation LOCAL = new Localisation("resources/MessagesBundle");
private int intRowSelected = -1;
private int returnStatus = CANCEL;
private final GuardNodeTableModel gntm;
private NodeList nl;
/**
* Creates new form GuardNodeDialog
*
* @param parent
* @param modal
*/
public GuardNodeDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
GTKFixes.fixTextAreaColor(jTextArea1);
jTableGuards.setComponentPopupMenu(popupTable);
gntm = new GuardNodeTableModel();
gntm.setColumnName(LOCAL.getString("guardtable_col1"), 0);
gntm.setColumnName(LOCAL.getString("guardtable_col2"), 1);
gntm.setColumnName(LOCAL.getString("guardtable_col3"), 2);
gntm.setColumnName(LOCAL.getString("guardtable_col4"), 3);
gntm.addTableModelListener(new javax.swing.event.TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
if (gntm.getEnabledCount() >= 3 || gntm.getEnabledCount() == 0) {
jButtonApply.setEnabled(true);
} else {
jButtonApply.setEnabled(false);
}
}
});
jTableGuards.setModel(gntm);
adjustGuardTableColumns();
}
/**
* Set the nodelist
*
* @param nl
*/
public void setNodeList(NodeList nl) {
this.nl = nl;
this.nl.setGuardNodeTableModel(gntm);
this.nl.refreshGuardTableModel();
adjustGuardTableColumns();
}
/**
* Adjust guard table column widths
*/
private void adjustGuardTableColumns() {
// Adjust table column widths
Utilities.adjustTableColumnWidth(jTableGuards,
"XXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXX",
"XXXXXXXXXXXXXXX");
}
private void clearSelections() {
for (int row = 0; row < jTableGuards.getRowCount(); row++) {
jTableGuards.setValueAt(false, row, 3);
}
}
private void doClose(int retStatus) {
returnStatus = retStatus;
setVisible(false);
dispose();
}
/**
* @return the return status of this dialog - one of RET_OK or RET_CANCEL
*/
public int getReturnStatus() {
return returnStatus;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
popupTable = new javax.swing.JPopupMenu();
jMenuNodeDetails = new javax.swing.JMenuItem();
jMenuWhois = new javax.swing.JMenuItem();
jScrollPane1 = new javax.swing.JScrollPane();
jTableGuards = new javax.swing.JTable();
jButtonClear = new javax.swing.JButton();
jButtonApply = new javax.swing.JButton();
jButtonClose = new javax.swing.JButton();
jTextArea1 = new javax.swing.JTextArea();
popupTable.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
popupTablePopupMenuWillBecomeVisible(evt);
}
public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
}
public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) {
}
});
jMenuNodeDetails.setText(LOCAL.getString("table_popup_details")); // NOI18N
jMenuNodeDetails.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuNodeDetailsActionPerformed(evt);
}
});
popupTable.add(jMenuNodeDetails);
jMenuWhois.setText(LOCAL.getString("table_popup_whois")); // NOI18N
jMenuWhois.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuWhoisActionPerformed(evt);
}
});
popupTable.add(jMenuWhois);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(LOCAL.getString("wintitle_guardnodes")); // NOI18N
setResizable(false);
jTableGuards.setAutoCreateRowSorter(true);
jTableGuards.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTableGuards.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jTableGuardsMouseClicked(evt);
}
});
jScrollPane1.setViewportView(jTableGuards);
jButtonClear.setText(LOCAL.getString("button_clearguards")); // NOI18N
jButtonClear.setToolTipText(LOCAL.getString("ttip_clearguards")); // NOI18N
jButtonClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonClearActionPerformed(evt);
}
});
jButtonApply.setText(LOCAL.getString("button_apply")); // NOI18N
jButtonApply.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonApplyActionPerformed(evt);
}
});
jButtonClose.setText(LOCAL.getString("button_close")); // NOI18N
jButtonClose.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCloseActionPerformed(evt);
}
});
jTextArea1.setEditable(false);
jTextArea1.setColumns(40);
jTextArea1.setFont(new javax.swing.JLabel().getFont());
jTextArea1.setLineWrap(true);
jTextArea1.setRows(2);
jTextArea1.setText(LOCAL.getString("label_guard_minimum")); // NOI18N
jTextArea1.setWrapStyleWord(true);
jTextArea1.setDisabledTextColor(jTextArea1.getForeground());
jTextArea1.setEnabled(false);
jTextArea1.setMinimumSize(new java.awt.Dimension(0, 0));
jTextArea1.setOpaque(false);
jTextArea1.setRequestFocusEnabled(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jButtonClear)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonClose)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonApply))
.addComponent(jTextArea1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextArea1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonClear)
.addComponent(jButtonApply)
.addComponent(jButtonClose))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButtonCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCloseActionPerformed
doClose(CANCEL);
}//GEN-LAST:event_jButtonCloseActionPerformed
private void jButtonApplyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonApplyActionPerformed
nl.saveGuardWhitelist();
doClose(APPLY);
}//GEN-LAST:event_jButtonApplyActionPerformed
private void jButtonClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonClearActionPerformed
clearSelections();
}//GEN-LAST:event_jButtonClearActionPerformed
private void jMenuNodeDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuNodeDetailsActionPerformed
String finger = (String) gntm.getValueAt(intRowSelected, 4);
finger = finger.replace("$", "");
Utilities.openFileExternally(ATLAS + "#details/" + finger);
}//GEN-LAST:event_jMenuNodeDetailsActionPerformed
private void jMenuWhoisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuWhoisActionPerformed
String finger = (String) gntm.getValueAt(intRowSelected, 4);
NodeItem ni = nl.getNode(finger);
if (ni != null) {
Utilities.openFileExternally("https://www.networksolutions.com/whois/results.jsp?ip=" + ni.getIPAddress());
}
}//GEN-LAST:event_jMenuWhoisActionPerformed
private void popupTablePopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {//GEN-FIRST:event_popupTablePopupMenuWillBecomeVisible
jMenuWhois.setEnabled(intRowSelected > -1);
jMenuNodeDetails.setEnabled(intRowSelected > -1);
}//GEN-LAST:event_popupTablePopupMenuWillBecomeVisible
private void jTableGuardsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableGuardsMouseClicked
if (evt.getButton() != MouseEvent.BUTTON1) {
return;
}
intRowSelected = jTableGuards.getSelectedRow();
if (intRowSelected > 0) {
intRowSelected = jTableGuards.convertRowIndexToModel(intRowSelected);
}
}//GEN-LAST:event_jTableGuardsMouseClicked
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButtonApply;
private javax.swing.JButton jButtonClear;
private javax.swing.JButton jButtonClose;
private javax.swing.JMenuItem jMenuNodeDetails;
private javax.swing.JMenuItem jMenuWhois;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTableGuards;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JPopupMenu popupTable;
// End of variables declaration//GEN-END:variables
}