2003-06-24 03:02:29 +00:00
/ *
The contents of this file are subject to the THDL Open Community License
Version 1 . 0 ( the " License " ) ; you may not use this file except in compliance
with the License . You may obtain a copy of the License on the THDL web site
( http : //www.thdl.org/).
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the
License for the specific terms governing rights and limitations under the
License .
The Initial Developer of this software is the Tibetan and Himalayan Digital
Library ( THDL ) . Portions created by the THDL are Copyright 2003 THDL .
All Rights Reserved .
Contributor ( s ) : ______________________________________ .
* /
package org.thdl.tib.input ;
import java.awt.* ;
import java.awt.event.* ;
import java.io.* ;
import java.util.* ;
import javax.swing.* ;
import javax.swing.event.* ;
import javax.swing.filechooser.* ;
import org.thdl.util.* ;
/ * * A GUI widget used to convert Tibetan documents from one encoding
to another .
@author Nathaniel Garson , Tibetan and Himalayan Digital Library * /
class ConvertDialog extends JDialog
implements FontConverterConstants
{
private static final boolean debug = false ;
// Attributes
FontConversion controller ;
Box fileBox , buttonBox ;
JPanel content , choicePanel ;
JComboBox choices ;
JTextField oldTextField , newTextField ;
2003-06-25 00:49:11 +00:00
JButton browseOld , browseNew , convert , cancel , openDoc , about ;
2003-06-24 03:02:29 +00:00
JLabel type , oldLabel , newLabel ;
String [ ] choiceNames ;
boolean oldFieldChanged , newFieldChanged ;
JFileChooser jfc ;
File oldFile , newFile ;
String default_directory ;
2003-06-29 04:18:36 +00:00
final String BROWSENEW = " Browse... " ;
2003-06-24 03:02:29 +00:00
final String BROWSEOLD = BROWSENEW ;
final String CONVERT = " Convert " ;
2003-06-25 00:49:11 +00:00
final String CANCEL = " Close " ;
final String ABOUT = " About " ;
2003-06-29 04:18:36 +00:00
final String OPEN_WITH = " Open With... " ;
2003-06-24 03:02:29 +00:00
private final ThdlActionListener tal = new ThdlActionListener ( ) {
public void theRealActionPerformed ( ActionEvent e ) {
ConvertDialog . this . theRealActionPerformed ( e ) ;
} } ;
public void init ( )
{
default_directory = controller . getDefaultDirectory ( ) ;
jfc = new JFileChooser ( default_directory ) ;
jfc . setFileFilter ( new RTFFileFilter ( ) ) ;
content = new JPanel ( new GridLayout ( 0 , 1 ) ) ;
JPanel temp = new JPanel ( new FlowLayout ( FlowLayout . CENTER , 5 , 5 ) ) ;
type = new JLabel ( " Type of Conversion: " ) ;
temp . add ( type ) ;
temp . add ( choices ) ;
content . add ( temp ) ;
temp = new JPanel ( new FlowLayout ( FlowLayout . CENTER , 5 , 5 ) ) ;
oldLabel = new JLabel ( " Original File: " ) ;
temp . add ( oldLabel ) ;
oldTextField = new JTextField ( 25 ) ;
oldFieldChanged = false ;
oldTextField . addCaretListener ( new CaretListener ( ) {
public void caretUpdate ( CaretEvent ce ) {
oldFieldChanged = true ;
}
} ) ;
JPanel tfTemp = new JPanel ( ) ;
tfTemp . add ( oldTextField ) ;
temp . add ( tfTemp ) ;
browseOld = new JButton ( BROWSEOLD ) ;
browseOld . addActionListener ( tal ) ;
temp . add ( browseOld ) ;
content . add ( temp ) ;
temp = new JPanel ( new FlowLayout ( FlowLayout . CENTER , 5 , 5 ) ) ;
newLabel = new JLabel ( " Converted File: " ) ;
temp . add ( newLabel ) ;
newTextField = new JTextField ( 25 ) ;
newFieldChanged = false ;
newTextField . addCaretListener ( new CaretListener ( ) {
public void caretUpdate ( CaretEvent ce ) {
newFieldChanged = true ;
}
} ) ;
tfTemp = new JPanel ( ) ;
tfTemp . add ( newTextField ) ;
temp . add ( tfTemp ) ;
2003-06-25 00:49:11 +00:00
if ( true ) {
2003-06-24 03:02:29 +00:00
browseNew = new JButton ( BROWSENEW ) ;
browseNew . addActionListener ( tal ) ;
}
temp . add ( browseNew ) ;
2003-06-29 04:18:36 +00:00
openDoc = new JButton ( OPEN_WITH ) ;
openDoc . addActionListener ( tal ) ;
openDoc . setEnabled ( false ) ;
temp . add ( openDoc ) ;
2003-06-24 03:02:29 +00:00
content . add ( temp ) ;
buttonBox = Box . createHorizontalBox ( ) ;
buttonBox . add ( Box . createHorizontalGlue ( ) ) ;
convert = new JButton ( CONVERT ) ;
convert . addActionListener ( tal ) ;
buttonBox . add ( convert ) ;
buttonBox . add ( Box . createHorizontalGlue ( ) ) ;
cancel = new JButton ( CANCEL ) ;
cancel . addActionListener ( tal ) ;
buttonBox . add ( cancel ) ;
buttonBox . add ( Box . createHorizontalGlue ( ) ) ;
2003-06-25 00:49:11 +00:00
about = new JButton ( ABOUT ) ;
about . addActionListener ( tal ) ;
buttonBox . add ( about ) ;
buttonBox . add ( Box . createHorizontalGlue ( ) ) ;
2003-06-24 03:02:29 +00:00
content . add ( buttonBox ) ;
setContentPane ( content ) ;
pack ( ) ;
2003-06-29 04:18:36 +00:00
setSize ( new Dimension ( 620 , 200 ) ) ;
2003-06-24 03:02:29 +00:00
}
public void setChoices ( String [ ] choices )
{
choiceNames = choices ;
this . choices = new JComboBox ( choiceNames ) ;
this . choices . addActionListener ( tal ) ;
}
// Accessors
public void setController ( FontConversion fc )
{
controller = fc ;
}
public FontConversion getController ( )
{
return controller ;
}
public String getType ( )
{
return ( String ) choices . getSelectedItem ( ) ;
}
public void setCurrentDirectory ( String dir )
{
jfc . setCurrentDirectory ( new File ( dir ) ) ;
}
public void setOldFile ( File f )
{
oldFile = f ;
}
public void setNewFile ( File f )
{
newFile = f ;
}
public File getOldFile ( )
{
if ( debug & & oldFile = = null ) { System . out . println ( " Old file is null! " ) ; }
return oldFile ;
}
public File getNewFile ( )
{
if ( debug & & newFile = = null ) { System . out . println ( " New file is null! " ) ; }
return newFile ;
}
2003-06-29 04:18:36 +00:00
public ConvertDialog ( Frame owner ,
FontConversion controller ,
2003-06-25 00:49:11 +00:00
String [ ] choices ,
boolean modal )
2003-06-24 03:02:29 +00:00
{
2003-06-29 04:18:36 +00:00
super ( owner , PROGRAM_TITLE , modal ) ;
initConvertDialog ( controller , choices , modal ) ;
}
private void initConvertDialog ( FontConversion controller ,
String [ ] choices ,
boolean modal ) {
2003-06-24 03:02:29 +00:00
setController ( controller ) ;
setChoices ( choices ) ;
init ( ) ;
if ( debug )
System . out . println ( " Default close operation: "
+ getDefaultCloseOperation ( ) ) ;
}
2003-06-29 04:18:36 +00:00
public ConvertDialog ( FontConversion controller ,
String [ ] choices ,
boolean modal )
{
super ( new JDialog ( ) , PROGRAM_TITLE , modal ) ;
initConvertDialog ( controller , choices , modal ) ;
}
2003-06-24 03:02:29 +00:00
void theRealActionPerformed ( ActionEvent ae )
{
String cmd = ae . getActionCommand ( ) ;
if ( cmd . equals ( BROWSEOLD )
| | cmd . equals ( BROWSENEW ) )
{
JButton src = ( JButton ) ae . getSource ( ) ;
jfc . showOpenDialog ( this ) ;
File chosenFile = jfc . getSelectedFile ( ) ;
if ( chosenFile = = null ) { return ; }
if ( src . equals ( browseOld ) ) {
String fileName = chosenFile . getPath ( ) ;
oldTextField . setText ( fileName ) ;
updateNewFileGuess ( ) ;
oldFieldChanged = false ;
2003-06-25 00:49:11 +00:00
oldFile = chosenFile ;
ThdlOptions . setUserPreference ( " thdl.Jskad.working.directory " ,
chosenFile . getParentFile ( ) . getAbsolutePath ( ) ) ;
2003-06-24 03:02:29 +00:00
} else if ( src . equals ( browseNew ) ) {
newTextField . setText ( chosenFile . getPath ( ) ) ;
newFieldChanged = false ;
2003-06-25 00:49:11 +00:00
newFile = chosenFile ;
2003-06-29 04:18:36 +00:00
openDoc . setEnabled ( true ) ;
2003-06-24 03:02:29 +00:00
}
} else if ( cmd . equals ( CONVERT ) ) {
if ( oldFieldChanged | | getOldFile ( ) = = null ) {
if ( debug )
2003-06-25 00:49:11 +00:00
System . out . println ( " old field changed " ) ;
2003-06-24 03:02:29 +00:00
setOldFile ( updateFile ( oldFile , oldTextField ) ) ;
}
if ( newFieldChanged | | getNewFile ( ) = = null ) {
if ( debug )
2003-06-25 00:49:11 +00:00
System . out . println ( " new field changed " ) ;
2003-06-24 03:02:29 +00:00
setNewFile ( updateFile ( newFile , newTextField ) ) ;
}
if ( null = = oldFile | | ! oldFile . exists ( ) ) {
JOptionPane . showMessageDialog ( this ,
" The original file does not exist. Choose again. " ,
" No such file " ,
JOptionPane . ERROR_MESSAGE ) ;
return ;
}
if ( null = = newFile ) {
JOptionPane . showMessageDialog ( this ,
" Please name the new file before proceeding. " ,
" No output file named " ,
JOptionPane . ERROR_MESSAGE ) ;
return ;
}
try {
if ( getNewFile ( ) . getCanonicalPath ( ) . equals ( getOldFile ( ) . getCanonicalPath ( ) ) ) {
JOptionPane . showMessageDialog ( this ,
" Please name the new file something different from the old file. " ,
" Input and output are the same " ,
JOptionPane . ERROR_MESSAGE ) ;
return ;
}
} catch ( IOException e ) {
// allow it.
}
2003-06-29 04:18:36 +00:00
if ( newFile . exists ( ) ) {
int overwriteExisingFile
= JOptionPane . showConfirmDialog ( this ,
" Do you want to overwrite "
+ newFile . getName ( ) + " ? " ,
" Please select " ,
JOptionPane . YES_NO_OPTION ) ;
switch ( overwriteExisingFile ) {
case JOptionPane . YES_OPTION : // continue.
break ;
default :
return ;
}
}
2003-06-24 03:02:29 +00:00
controller . doConversion ( this ,
getOldFile ( ) ,
getNewFile ( ) ,
( String ) choices . getSelectedItem ( ) ) ;
oldFieldChanged = false ;
newFieldChanged = false ;
2003-06-29 04:18:36 +00:00
// Success or failure is immaterial; we still want to
// enable the OPEN_WITH button. If the conversion failed,
// the document contains the weird glyphs.
openDoc . setEnabled ( true ) ;
} else if ( cmd . equals ( OPEN_WITH ) ) {
2003-06-24 03:02:29 +00:00
try {
if ( newFile = = null ) { return ; }
boolean done = false ;
File prog = new File ( ThdlOptions . getStringOption ( " thdl.external.rtf.reader " , " C: \\ Program Files \\ Microsoft Office \\ Office \\ WINWORD.EXE " ) ) ;
while ( ! done ) {
String [ ] cmdArray = { prog . getPath ( ) , newFile . getPath ( ) } ;
Runtime rtime = Runtime . getRuntime ( ) ;
try {
Process proc = rtime . exec ( cmdArray ) ;
proc = null ;
done = true ;
} catch ( IOException ioe ) {
JFileChooser jfc = new JFileChooser ( " C: \\ Program Files \\ " ) ;
jfc . setDialogTitle ( " Locate Program to Read RTF " ) ;
int returnValue = jfc . showOpenDialog ( this ) ;
if ( returnValue ! = jfc . CANCEL_OPTION ) {
prog = jfc . getSelectedFile ( ) ;
ThdlOptions . setUserPreference ( " thdl.external.rtf.reader " ,
prog . getAbsolutePath ( ) ) ;
} else {
done = true ;
}
}
}
} catch ( SecurityException se ) {
JOptionPane . showMessageDialog ( this ,
" Cannot proceed because your security policy interfered. " ,
" Access denied " ,
JOptionPane . ERROR_MESSAGE ) ;
}
} else if ( cmd . equals ( CANCEL ) ) {
this . dispose ( ) ;
2003-06-25 00:49:11 +00:00
} else if ( cmd . equals ( ABOUT ) ) {
JOptionPane . showMessageDialog ( this ,
" This Tibetan Converter is Copyright 2003 \ nTibetan and Himalayan Digital Library and \ nis protected by the THDL Open Community \ nLicense Version 1.0. \ n \ nCompiled " + ThdlVersion . getTimeOfCompilation ( ) ,
" About " ,
JOptionPane . PLAIN_MESSAGE ) ;
2003-06-24 03:02:29 +00:00
} else if ( cmd . equals ( " comboBoxChanged " ) ) {
updateNewFileGuess ( ) ;
}
}
private void updateNewFileGuess ( ) {
String oldFileName = oldTextField . getText ( ) ;
if ( oldFileName = = null | | oldFileName . equals ( " " ) )
return ;
String newFileNamePrefix ;
File of = new File ( oldFileName ) ;
String oldFileDirName = of . getParent ( ) ;
if ( oldFileDirName = = null )
oldFileDirName = " " ;
else
oldFileDirName = oldFileDirName + File . separator ;
String oldFileNameSansThingy = of . getName ( ) ;
if ( oldFileNameSansThingy . startsWith ( " TMW_ " ) ) {
oldFileNameSansThingy
= oldFileNameSansThingy . substring ( " TMW_ " . length ( ) ,
oldFileNameSansThingy . length ( ) ) ;
} else if ( oldFileNameSansThingy . startsWith ( " TM_ " ) ) {
oldFileNameSansThingy
= oldFileNameSansThingy . substring ( " TM_ " . length ( ) ,
oldFileNameSansThingy . length ( ) ) ;
} else if ( oldFileNameSansThingy . startsWith ( " TMW " ) ) {
oldFileNameSansThingy
= oldFileNameSansThingy . substring ( " TMW " . length ( ) ,
oldFileNameSansThingy . length ( ) ) ;
} else if ( oldFileNameSansThingy . startsWith ( " TM " ) ) {
oldFileNameSansThingy
= oldFileNameSansThingy . substring ( " TM " . length ( ) ,
oldFileNameSansThingy . length ( ) ) ;
}
String ct = ( String ) choices . getSelectedItem ( ) ;
if ( " Find all non-TMW " = = ct ) {
newFileNamePrefix = " FindAllNonTMW__ " ;
2003-06-25 00:49:11 +00:00
} else if ( FIND_SOME_NON_TMW = = ct ) {
2003-06-24 03:02:29 +00:00
newFileNamePrefix = " FindSomeNonTMW__ " ;
2003-06-25 00:49:11 +00:00
} else if ( FIND_SOME_NON_TM = = ct ) {
2003-06-24 03:02:29 +00:00
newFileNamePrefix = " FindSomeNonTM__ " ;
2003-06-25 00:49:11 +00:00
} else if ( FIND_ALL_NON_TM = = ct ) {
2003-06-24 03:02:29 +00:00
newFileNamePrefix = " FindAllNonTM__ " ;
} else { // conversion {to Wylie or TM} mode
2003-06-25 00:49:11 +00:00
if ( TMW_TO_WYLIE = = ct ) {
newFileNamePrefix = suggested_WYLIE_prefix ;
} else if ( TMW_TO_UNI = = ct ) {
newFileNamePrefix = suggested_TO_UNI_prefix ;
} else if ( TM_TO_TMW = = ct ) {
newFileNamePrefix = suggested_TO_TMW_prefix ;
2003-06-24 03:02:29 +00:00
} else {
2003-06-25 00:49:11 +00:00
ThdlDebug . verify ( TMW_TO_TM = = ct ) ;
newFileNamePrefix = suggested_TO_TM_prefix ;
2003-06-24 03:02:29 +00:00
}
}
newTextField . setText ( oldFileDirName
+ newFileNamePrefix
+ oldFileNameSansThingy ) ;
}
public File updateFile ( File setFile , JTextField textField )
{
2003-06-29 04:18:36 +00:00
if ( textField . equals ( newTextField ) ) { openDoc . setEnabled ( false ) ; }
2003-06-24 03:02:29 +00:00
String txt = textField . getText ( ) ;
if ( txt . equals ( " " ) )
return null ;
if ( txt . indexOf ( " .rtf " ) = = - 1 ) { txt + = " .rtf " ; }
if ( setFile = = null ) { return new File ( txt ) ; }
String fileName = setFile . getPath ( ) ;
String filePath = setFile . getPath ( ) ;
if ( txt . equals ( fileName ) | | txt . equals ( filePath ) ) { return setFile ; }
if ( txt . indexOf ( " \\ " ) > - 1 ) { return new File ( txt ) ; }
return new File ( setFile . getParent ( ) + " \\ " + txt ) ;
}
public class RTFFileFilter extends javax . swing . filechooser . FileFilter
{
public boolean accept ( File f )
{
if ( f . isDirectory ( ) | | f . getName ( ) . indexOf ( " .rtf " ) > - 1 ) { return true ; }
return false ;
}
public String getDescription ( )
{
return " RTF files only " ;
}
}
}