1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
|
/*
* NAT - An universal Translator
* Copyright (C) 2005 Bruno Mascret
* Contact: bmascret@free.fr
*
* 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.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package ui;
import gestionnaires.GestionnaireOuvrir;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import nat.ConfigNat;
/**
* Onglet de configuration des options avancées
* @author bruno
*
*/
public class ConfAvance extends OngletConf implements ActionListener
{
/** pour la sérialisation (non utilisé)*/
private static final long serialVersionUID = 1L;
/** case à cocher activant ou non Saxon plutôt que Xalan
* <p>Saxon est normallement l'implémentation xsl à utiliser, car xalan ne fait pas de xsl2</p>
*/
private JCheckBox jcbXsltProc = new JCheckBox("Saxon au lieu de Xalan (devrait rester coché dans le cas d'une utilisation normale de NAT)");
/** JSpinner nombre de fichiers de log */
JSpinner jsNbFichLog;
/** JSpinner taille max en Ko du fichier de log */
JSpinner jsTailleLog;
/** case à cocher activant ou non les optimisations; pour l'instant, lance une transcription vide à l'ouverture*/
private JCheckBox jcbOpti = new JCheckBox("Optimiser le temps de traitement (par ex.: lance une transcription vide au lancement de NAT)");
/** JTextField pour l'adresse du fichier source */
private JTextField workingDir = new JTextField("",30);
/** Label associé à workingDir
* @see #workingDir
* */
private JLabel lWorkingDir = new JLabel("Dossier de travail de NAT :");
/** Bouton ouvrant le JFileChooser pour l'adresse du fichier source
* @see GestionnaireOuvrir
* */
private JButton jbWorkingDir = new JButton("Parcourir",new ImageIcon("ui/icon/document-open.png"));
/** Bouton pour effacer les fichiers temporaires */
private JButton jbEraseTemp = new JButton ("Effacer les fichiers temporaires...");
/** jcheckbox vérifier l'existence d'une MAJ"*/
private JCheckBox jcbVerifMAJ = new JCheckBox("Vérifier l'existence de mises à jour sur Internet au lancement de NAT");
/** Constructeur*/
public ConfAvance()
{
super();
getAccessibleContext().setAccessibleDescription("Afficher les options avancées");
getAccessibleContext().setAccessibleName("Onglet contenant les options avancées (experts)");
jcbXsltProc.setSelected(ConfigNat.getCurrentConfig().getSaxonAsXsltProcessor());
jcbXsltProc.getAccessibleContext().setAccessibleName("Utiliser Saxon");
jcbXsltProc.getAccessibleContext().setAccessibleDescription("Pour utiliser saxon");
jcbXsltProc.setToolTipText("Utiliser le processeur xslt Saxon et pas Xalan (usage normal de NAT) (Alt+x)");
jcbXsltProc.setMnemonic('x');
jsNbFichLog = new JSpinner(new SpinnerNumberModel(ConfigNat.getCurrentConfig().getNbLogFiles(), 1, 5, 1));
jsNbFichLog.getAccessibleContext().setAccessibleName("Nombre de fichiers de log à utiliser");
jsNbFichLog.getAccessibleContext().setAccessibleDescription("Sélectionnez avec les flèches le nombre de fichiers de log à utiliser");
jsNbFichLog.setToolTipText("Sélectionnez le nombre de fichiers de log à utiliser (Alt+b)");
JLabel lJsNbFichLog = new JLabel("Nombre de fichiers tournants de log:");
lJsNbFichLog.setLabelFor(jsNbFichLog);
lJsNbFichLog.setDisplayedMnemonic('b');
jsTailleLog = new JSpinner(new SpinnerNumberModel(ConfigNat.getCurrentConfig().getLogFileSize(), 1, 3000, 100));
jsTailleLog.getAccessibleContext().setAccessibleName("Taille minimale en Ko déclenchant la rotation des logs");
jsTailleLog.getAccessibleContext().setAccessibleDescription("Sélectionnez avec les flèches la taille minimale déclenchant la rotation des logs");
jsTailleLog.setToolTipText("Sélectionnez la taille minimale déclenchant la rotation des fichiers de log (Alt+m)");
JLabel lJsTailleLog = new JLabel("Taille minimale pour rotation des logs (en Ko):");
lJsTailleLog.setLabelFor(jsTailleLog);
lJsTailleLog.setDisplayedMnemonic('m');
jcbOpti.setSelected(ConfigNat.getCurrentConfig().getOptimize());
jcbOpti.getAccessibleContext().setAccessibleName("Optimiser");
jcbOpti.getAccessibleContext().setAccessibleDescription("Pour utiliser les optimisations");
jcbOpti.setToolTipText("Utiliser les optimisations du temps de traitement (Alt+o)");
jcbOpti.setMnemonic('o');
lWorkingDir.setLabelFor(workingDir);
jbWorkingDir.addActionListener(this);
jbWorkingDir.getAccessibleContext().setAccessibleName("Parcourir");
jbWorkingDir.setToolTipText("Choisir le dossier de travail de NAT (Alt+r)");
jbWorkingDir.getAccessibleContext().setAccessibleDescription(getToolTipText());
jbWorkingDir.setMnemonic('r');
ConfigNat.getCurrentConfig();
workingDir.setText(ConfigNat.getWorkingDir());
workingDir.setEditable(false);
workingDir.setToolTipText("Dossier de travail de NAT actuel");
workingDir.getAccessibleContext().setAccessibleDescription(getToolTipText());
jcbVerifMAJ.setSelected(ConfigNat.getCurrentConfig().getUpdateCheck());
jcbVerifMAJ.getAccessibleContext().setAccessibleName("Vérifier les maj");
jcbVerifMAJ.getAccessibleContext().setAccessibleDescription("Pour vérifier au démarrage l'existence de mises à jour");
jcbVerifMAJ.setToolTipText("Vérifier au démarrage l'existence de mises à jour sur internet (Alt+j)");
jcbVerifMAJ.setMnemonic('j');
jbEraseTemp.addActionListener(this);
/*********
* Mise en page
*/
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(15,3,3,3);
GridBagLayout gbl = new GridBagLayout();
//setLayout(gbl);
JPanel p = new JPanel();
p.setLayout(gbl);
gbc.gridx=1;
gbc.gridy = 0;
gbc.gridwidth = 3;
p.add(jbEraseTemp,gbc);
gbc.gridx=0;
gbc.gridy++;
//gbc.gridheight = 3;
p.add(jcbXsltProc,gbc);
gbc.gridy++;
gbc.gridwidth = 2;
p.add(lJsNbFichLog,gbc);
gbc.gridwidth = 1;
gbc.gridx+=2;
p.add(jsNbFichLog,gbc);
gbc.insets = new Insets(3,3,3,3);
gbc.gridy++;
gbc.gridx=0;
gbc.gridwidth = 2;
p.add(lJsTailleLog,gbc);
gbc.gridx+=2;
gbc.gridwidth = 1;
p.add(jsTailleLog,gbc);
gbc.insets = new Insets(15,3,3,3);
gbc.gridx=0;
gbc.gridy++;
gbc.gridwidth = 4;
p.add(jcbOpti,gbc);
gbc.gridx=0;
gbc.gridy++;
gbc.gridwidth=1;
p.add(lWorkingDir,gbc);
gbc.gridx++;
gbc.gridwidth=2;
p.add(workingDir,gbc);
gbc.gridx+=2;
p.add(jbWorkingDir,gbc);
gbc.gridx=0;
gbc.gridy++;
gbc.gridwidth = 4;
p.add(jcbVerifMAJ,gbc);
add(p);
}
/**
* enregistre les options
* @see ui.SavableTabbedConfigurationPane#enregistrer(java.lang.String)
*/
public boolean enregistrer(String f)
{
ConfigNat.getCurrentConfig().setFichierConf(f);
return enregistrer();
}
/**
* enregistre les options
* @see ui.SavableTabbedConfigurationPane#enregistrer()
*/
public boolean enregistrer()
{
boolean retour = true;
ConfigNat.getCurrentConfig().setSaxonAsXsltProcessor(jcbXsltProc.isSelected());
ConfigNat.getCurrentConfig().setLogFileSize(((Integer)jsTailleLog.getValue()).intValue());
ConfigNat.getCurrentConfig().setNbLogFiles(((Integer)jsNbFichLog.getValue()).intValue());
ConfigNat.getCurrentConfig().setOptimize(jcbOpti.isSelected());
ConfigNat.getCurrentConfig().setUpdateCheck(jcbVerifMAJ.isSelected());
return retour;
}
/**
* choisit le répertoire de travail avec un JFileChooser
*/
private void chooseWorkingDir()
{
/* paramétrage du file chooser*/
JFileChooser jfc = new JFileChooser();
/*FiltreFichier ff = new FiltreFichier(new String [] {""},"Dossier");
jfc.addChoosableFileFilter(ff);
jfc.setAcceptAllFileFilterUsed(true);
jfc.setFileFilter(ff);*/
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
File f = new File(".");
jfc.setCurrentDirectory(f);
jfc.setApproveButtonText("Choisir ce dossier"); //intitulé du bouton
/* selection du dico */
jfc.setDialogTitle("Sélection du dossier de Travail de NAT");
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
{
workingDir.setText(jfc.getSelectedFile().getAbsolutePath());
ConfigNat.getCurrentConfig().setWorkingDir(workingDir.getText());
}
}
/**
* efface les fichier d'un répertoire et récursivement les fichiers des sous-répertoires.
* SAUF les fichiers de log (nat_log.*)
* pompé (et amélioré) sur :
* http://www.javafr.com/forum/sujet-SUPPRIMER-REPERTOIRE-JAVA_531086.aspx
* @param path dossier à effacer
* @return true si tout s'est bien passé
*/
private boolean deleteDirectory (File path)
{
Boolean resultat = path.exists();
if( resultat )
{
File[] files = path.listFiles();
for(int i=0; i<files.length; i++)
{
if(files[i].isDirectory())
{ resultat &= deleteDirectory(files[i]); }
if (!(files[i].getName().startsWith("nat_log")))
{ resultat &= files[i].delete(); }
}
}
return resultat;
}
/**
* gère les évènements sur {@link #jbWorkingDir}
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent evt) {
// TODO Auto-generated method stub
if (evt.getSource()==jbWorkingDir) { chooseWorkingDir(); }
if (evt.getSource()==jbEraseTemp)
{
File path = new File (ConfigNat.getUserTempFolder());
Boolean resultat = deleteDirectory(path);
if (resultat)
{
JOptionPane.showMessageDialog(null,"Fichiers temporaires effacés.\n" +
"Veuillez redémarrer NAT pour regénérer les bons fichiers.","Information",JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"Impossible de supprimer les fichiers temporaires.\n" +
"Veuillez le faire \"à la main\"","Erreur",JOptionPane.ERROR_MESSAGE);
}
}
}
}
|