/*
* ParametersPanel.java
*
* Copyright (c) 2005-2007 Andrew Krizhanovsky /aka at mail.iias.spb.su/
* Distributed under GNU Public License.
*/
package com.touchgraph.wikibrowser.panel;
import wikipedia.util.StringUtil;
import com.touchgraph.wikibrowser.*;
import com.touchgraph.wikibrowser.parameter.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/** Parameters GUI fields for Synonym search algorithm:
* root_set_size
* inc
* n_synonyms
* eps_error
* categories_max_steps
* See comments in {@link com.touchgraph.wikibrowser.parameter.ArticleParameters}
*/
public class ParametersPanel extends JPanel {
private TGWikiBrowser wb;
private static SynonymSearcher syn_searcher;
public final JFormattedTextField root_size_tf;
public final JFormattedTextField inc_tf;
public final JFormattedTextField nsyn_tf;
public final JFormattedTextField eps_tf;
public final JFormattedTextField max_steps_tf;
public final JTextArea categories_field;
public final JTextField iwiki_lang;
public ParametersPanel(SynonymSearcher ss, TGWikiBrowser wb_new)
{
syn_searcher = ss;
wb = wb_new;
PropertyChangeListener pcl = new PropertyChangeListener() {
/** Called when a field's "value" property changes. */
public void propertyChange(PropertyChangeEvent e) {
int i;
float f;
Object s = e.getSource();
if (s == root_size_tf) {
i = ((Number)root_size_tf.getValue()).intValue();
syn_searcher.setRootSetSize(i);
} else if (s == inc_tf) {
i = ((Number)inc_tf.getValue()).intValue();
syn_searcher.setIncrement(i);
} else if (s == nsyn_tf) {
i = ((Number)nsyn_tf.getValue()).intValue();
syn_searcher.setNSynonyms(i);
} else if (s == eps_tf) {
f = ((Number)eps_tf.getValue()).floatValue();
syn_searcher.setEpsError(f);
} else if (s == max_steps_tf) {
i = ((Number)max_steps_tf.getValue()).intValue();
syn_searcher.setCategoriesMaxSteps(i);
}
}
};
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(Box.createRigidArea(new Dimension(0,5)));
// subgraph_jp - parameters to create focused subgraph
JPanel subgraph_jp = new JPanel();
subgraph_jp.setLayout(new BoxLayout(subgraph_jp, BoxLayout.X_AXIS));
// *) root set size
JLabel root_size_label = new JLabel(wb.tr.getString("Root_set_size"));
root_size_tf = new JFormattedTextField(NumberFormat.getNumberInstance());
root_size_tf.addPropertyChangeListener("value", pcl);
root_size_tf.setToolTipText(wb.tr.getString("Number_of_articles_in_the_root_set._Parameters_will_be_stored_to_./Your_log/article.params_after_search"));
root_size_label.setDisplayedMnemonic('R');
root_size_tf.setFocusAccelerator('R');
subgraph_jp.add(root_size_label);
subgraph_jp.add(Box.createRigidArea(new Dimension(5,0)));
subgraph_jp.add(root_size_tf);
subgraph_jp.add(Box.createRigidArea(new Dimension(5,0)));
// *) increment
JLabel inc_label = new JLabel(wb.tr.getString("Increment"));
inc_tf = new JFormattedTextField(NumberFormat.getNumberInstance());
inc_tf.addPropertyChangeListener("value", pcl);
inc_tf.setToolTipText(wb.tr.getString("Number_of_articles_which_will_be_added_to_the_base_set_(they_refer_to_one_of_the_pages_in_the_root_base)"));
subgraph_jp.add(inc_label);
subgraph_jp.add(Box.createRigidArea(new Dimension(5,0)));
subgraph_jp.add(inc_tf);
subgraph_jp.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(wb.tr.getString("Root_Set_and_Base_Set_of_links")),
BorderFactory.createEmptyBorder(5,5,5,5)),
subgraph_jp.getBorder()));
add(subgraph_jp);
// nsyn_eps_jp - parameters for search synonyms iterations
JPanel nsyn_eps_jp = new JPanel();
nsyn_eps_jp.setLayout(new BoxLayout(nsyn_eps_jp, BoxLayout.X_AXIS));
// *) n_synonyms
JLabel nsyn_label = new JLabel(wb.tr.getString("N_synonyms"));
nsyn_tf = new JFormattedTextField(NumberFormat.getNumberInstance());
nsyn_tf.addPropertyChangeListener("value", pcl);
nsyn_tf.setToolTipText(wb.tr.getString("Number_of_synonyms_to_search"));
nsyn_eps_jp.add(nsyn_label);
nsyn_eps_jp.add(Box.createRigidArea(new Dimension(5,0)));
nsyn_eps_jp.add(nsyn_tf);
nsyn_eps_jp.add(Box.createRigidArea(new Dimension(5,0)));
// *) eps_error
JLabel eps_label = new JLabel(wb.tr.getString("Eps_error"));
eps_tf = new JFormattedTextField(NumberFormat.getNumberInstance());
eps_tf.addPropertyChangeListener("value", pcl);
eps_tf.setToolTipText(wb.tr.getString("The_iterative_calculations_will_be_stopped_if_the_change_of_value_is_less_than_epsilon_error"));
nsyn_eps_jp.add(eps_label);
nsyn_eps_jp.add(Box.createRigidArea(new Dimension(5,0)));
nsyn_eps_jp.add(eps_tf);
nsyn_eps_jp.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(wb.tr.getString("Iterative_calculation_of_authority_and_hub_pages")),
BorderFactory.createEmptyBorder(5,5,5,5)),
nsyn_eps_jp.getBorder()));
add(nsyn_eps_jp);
// jp_cboxes: "Skip spaces" and "Random"
JPanel jp_cboxes = new JPanel();
jp_cboxes.setLayout(new BoxLayout(jp_cboxes, BoxLayout.X_AXIS));
// st - skip titles (with spaces) panel
// [Check Box] "Skip titles with spaces"
JCheckBox check_skip_spaces = new JCheckBox(wb.tr.getString("Titles_without_spaces"));
check_skip_spaces.setMnemonic(KeyEvent.VK_T);
check_skip_spaces.setSelected(true);
check_skip_spaces.setToolTipText(wb.tr.getString("Skip_titles_with_spaces"));
wb.syn_searcher.session.skipTitlesWithSpaces(true);
check_skip_spaces.addItemListener(
new ItemListener() {
// enable/disable
// - skipt titles with spaces
public void itemStateChanged(ItemEvent e) {
boolean b = (e.getStateChange() == ItemEvent.SELECTED) ? true : false;
wb.syn_searcher.session.skipTitlesWithSpaces(b);
}
});
jp_cboxes.add(check_skip_spaces);
// rand - random pages (base set forming) panel
// [Check Box] "Random pages (base set forming)"
JCheckBox check_rand = new JCheckBox(wb.tr.getString("Random_pages"));
check_rand.setMnemonic(KeyEvent.VK_M);
check_rand.setSelected(true);
check_rand.setToolTipText(wb.tr.getString("Base_set_forming"));
wb.syn_searcher.session.skipTitlesWithSpaces(true);
check_rand.addItemListener(
new ItemListener() {
// enable/disable
// - skipt titles with spaces
public void itemStateChanged(ItemEvent e) {
boolean b = (e.getStateChange() == ItemEvent.SELECTED) ? true : false;
wb.syn_searcher.session.randomPages(b);
}
});
jp_cboxes.add(check_rand);
add(jp_cboxes);
add(Box.createRigidArea(new Dimension(0,5)));
// jp_iwiki: checkbox "iwiki" and text field "Lang"
JPanel jp_iwiki = new JPanel();
jp_iwiki.setLayout(new BoxLayout(jp_iwiki, BoxLayout.X_AXIS));
JCheckBox check_iwiki = new JCheckBox(wb.tr.getString("Show_InterWiki"));
check_iwiki.setMnemonic(KeyEvent.VK_I);
boolean _b = wb.syn_searcher.session.getIWiki();
check_iwiki.setSelected(_b);
check_iwiki.addItemListener(
new ItemListener() {
// enable/disable
// - skipt titles with spaces
public void itemStateChanged(ItemEvent e) {
boolean b = (e.getStateChange() == ItemEvent.SELECTED) ? true : false;
wb.syn_searcher.session.setIWiki(b);
iwiki_lang.setEnabled(b);
}
});
jp_iwiki.add(check_iwiki);
iwiki_lang = new JTextField(2);
//iwiki_lang.setFocusAccelerator('K'); //iwiki_lang.setFocusAccelerator('W');
iwiki_lang.setToolTipText(wb.tr.getString("Interwiki_language_to_be_added_to_labels_of_nodes,_e.g._en,_ru"));
iwiki_lang.setText(wb.syn_searcher.session.getIWikiLang());
class IWikiLangVerifier extends InputVerifier
implements ActionListener {
public boolean run() {
String lang = iwiki_lang.getText();
boolean b = wb.syn_searcher.session.setIWikiLang(lang);
if(b)
iwiki_lang.setText(wb.syn_searcher.session.getIWikiLang()); // e.g. transformation "eN" to "En"
return b;
}
// loose focus
public boolean verify(JComponent input) {
return run(); }
// "Enter"
public void actionPerformed(ActionEvent e) {
run(); }
};
IWikiLangVerifier iwiki_lang_verifier = new IWikiLangVerifier();
iwiki_lang.setInputVerifier(iwiki_lang_verifier);
//iwiki_lang.addActionListener(get_params);
iwiki_lang.setEnabled(_b);
jp_iwiki.add(iwiki_lang);
add(jp_iwiki);
add(Box.createRigidArea(new Dimension(0,5)));
// category_jp - parameters for category treating (removing)
// category_jp = category1_jp and category2_jp (two horizontal panels)
JPanel category_jp = new JPanel();
category_jp.setLayout(new BoxLayout(category_jp, BoxLayout.Y_AXIS));
JPanel category1_jp = new JPanel();
category1_jp.setLayout(new BoxLayout(category1_jp, BoxLayout.X_AXIS));
// *) categories_max_steps (depth)
JLabel max_steps_label = new JLabel(wb.tr.getString("Search_depth"));
max_steps_tf = new JFormattedTextField(NumberFormat.getNumberInstance());
max_steps_label.setDisplayedMnemonic('H');
max_steps_tf.setFocusAccelerator('H');
max_steps_tf.addPropertyChangeListener("value", pcl);
max_steps_tf.setToolTipText(wb.tr.getString("The_max_depth_the_category's_ansectors_will_be_checked_(recursively)_for_belonging_to_the_blacklist"));
category1_jp.add(max_steps_label);
category1_jp.add(Box.createRigidArea(new Dimension(5,0)));
category1_jp.add(max_steps_tf);
// *) black list category edit field and button "Set"
JPanel category2_jp = new JPanel();
category2_jp.setLayout(new BoxLayout(category2_jp, BoxLayout.X_AXIS));
/*
final JTextField categories_field = new JTextField();
String[] categories = wb.parameters.getBlackListCategory( syn_searcher.getCurrentLanguage() );
categories_field.setText( StringUtil.join("|", categories));
*/
//Create a text area
categories_field = new JTextArea();
categories_field.setFont(new Font("Serif", Font.PLAIN, 12));
categories_field.setLineWrap(true);
categories_field.setWrapStyleWord(true);
categories_field.setRows(300);
categories_field.setToolTipText(wb.tr.getString("Blacklist_of_categories_joined_by_vertical_line_|"));
JScrollPane categories_scroll = new JScrollPane(categories_field);
categories_scroll.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JButton category_btn;
// browse log file button
category_btn = new JButton(wb.tr.getString("Set"));
category_btn.setToolTipText(wb.tr.getString("Set_category_blacklist"));
category_btn.setMnemonic(KeyEvent.VK_E);
category_btn.setBackground(Color.decode("#D8C0C0"));
category_btn.setAlignmentX(Component.CENTER_ALIGNMENT);
category_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] categories = StringUtil.split("|", categories_field.getText());
syn_searcher.setBlackListCategory(categories);
syn_searcher.setArticleParameters();
}
});
category2_jp.add(categories_scroll); //categories_field);
category_jp.add(category1_jp);
category_jp.add(Box.createRigidArea(new Dimension(0,5)));
category_jp.add(category2_jp);
category_jp.add(Box.createRigidArea(new Dimension(0,5)));
category_jp.add(category_btn);
category_jp.setBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(wb.tr.getString("Category_blacklist_parameters")),
BorderFactory.createEmptyBorder(5,5,5,5)),
category_jp.getBorder()));
add(category_jp);
// compress all GUI controls to the top: use big JTextArea.setRows
//add(Box.createRigidArea(new Dimension(0,700)));
//add(Box.createVerticalGlue()); //extra space
//add(Box.createVerticalStrut(1700));
//Tell accessibility tools about label/textfield pairs.
root_size_label.setLabelFor(root_size_tf);
inc_label. setLabelFor(inc_tf);
nsyn_label. setLabelFor(nsyn_tf);
eps_label. setLabelFor(eps_tf);
max_steps_label.setLabelFor(max_steps_tf);
}
}