/**
* Created : Mar 23, 2012
*
* @author pquiring
*/
import java.awt.*;
import java.io.*;
import javaforce.*;
import javax.swing.*;
public class OptionsDialog extends javax.swing.JDialog {
/**
* Creates new form OptionsDialog
*/
public OptionsDialog(java.awt.Frame parent, boolean modal, XML xml, XML.XMLTag options) {
super(parent, modal);
initComponents();
setPosition();
this.xml = xml;
this.options = options;
XML.XMLTag tag;
tag = xml.getTag(new String[] {"jfburn", "options", "boot"});
if (tag != null) {
if (tag.content.equals("true")) enableBoot.setSelected(true);
}
tag = xml.getTag(new String[] {"jfburn", "options", "bootType"});
if (tag != null) {
int idx = JF.atoi(tag.content);
if ((idx >= 0) && (idx <= 3)) bootType.setSelectedIndex(idx);
}
tag = xml.getTag(new String[] {"jfburn", "options", "bootFile"});
if (tag != null) {
bootFile.setText(tag.content);
}
listDevices();
}
/**
* 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() {
jPanel1 = new javax.swing.JPanel();
enableBoot = new javax.swing.JCheckBox();
bootType = new javax.swing.JComboBox();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
bootFile = new javax.swing.JTextField();
selectBootFile = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
devs = new javax.swing.JComboBox();
extractFromDrive = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
extractFromImage = new javax.swing.JButton();
accept = new javax.swing.JButton();
cancel = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Options");
setResizable(false);
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Boot"));
enableBoot.setText("Make Disc Bootable");
bootType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Floppy Disk", "Hard Drive", "No Emulation" }));
jLabel1.setText("Image Type");
jLabel2.setText("File");
selectBootFile.setText("Select...");
selectBootFile.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectBootFileActionPerformed(evt);
}
});
jLabel3.setText("Extract From Drive");
extractFromDrive.setText("Extract");
extractFromDrive.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
extractFromDriveActionPerformed(evt);
}
});
jLabel4.setText("Extract From Image");
extractFromImage.setText("Extract");
extractFromImage.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
extractFromImageActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(enableBoot)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bootType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bootFile))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(devs, 0, 196, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(extractFromImage)
.addGap(0, 0, Short.MAX_VALUE)))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(selectBootFile, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(extractFromDrive, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(enableBoot)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bootType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(bootFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(selectBootFile))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(devs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(extractFromDrive))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(extractFromImage))
.addContainerGap(35, Short.MAX_VALUE))
);
accept.setText("Accept");
accept.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
acceptActionPerformed(evt);
}
});
cancel.setText("Cancel");
cancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(cancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(accept)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(accept)
.addComponent(cancel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void acceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_acceptActionPerformed
xml.addSetTag(options, "boot", "", "" + enableBoot.isSelected());
xml.addSetTag(options, "bootType", "", "" + bootType.getSelectedIndex());
xml.addSetTag(options, "bootFile", "", bootFile.getText());
dispose();
}//GEN-LAST:event_acceptActionPerformed
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
dispose();
}//GEN-LAST:event_cancelActionPerformed
private void selectBootFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectBootFileActionPerformed
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
File path = new File(JF.getUserPath() + "/jfburn");
path.mkdirs();
chooser.setCurrentDirectory(path);
if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return;
String filename = chooser.getSelectedFile().getAbsolutePath();
bootFile.setText(filename);
}//GEN-LAST:event_selectBootFileActionPerformed
private void extractFromDriveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extractFromDriveActionPerformed
extractFromDrive();
}//GEN-LAST:event_extractFromDriveActionPerformed
private void extractFromImageActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extractFromImageActionPerformed
extractFromISO();
}//GEN-LAST:event_extractFromImageActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton accept;
private javax.swing.JTextField bootFile;
private javax.swing.JComboBox bootType;
private javax.swing.JButton cancel;
private javax.swing.JComboBox devs;
private javax.swing.JCheckBox enableBoot;
private javax.swing.JButton extractFromDrive;
private javax.swing.JButton extractFromImage;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton selectBootFile;
// End of variables declaration//GEN-END:variables
private XML xml;
private XML.XMLTag options;
private void listDevices() {
devs.removeAllItems();
File file = new File("/dev/");
File files[] = file.listFiles(new FileFilter() {
public boolean accept(File file) {
if (file.getName().startsWith("sr")) return true;
return false;
}
});
for(int a=0;a<files.length;a++) {
devs.addItem(files[a].getAbsolutePath());
}
}
private void extractFromDrive() {
if (devs.getSelectedIndex() == -1) return;
String dev = (String)devs.getSelectedItem();
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
File path = new File(JF.getUserPath());
chooser.setCurrentDirectory(path);
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return;
String filename = chooser.getSelectedFile().getAbsolutePath();
ShellProcess sp = new ShellProcess();
String cmd[] = {"geteltorito", "-o", filename, dev};
String output = sp.run(cmd, false);
if (output==null) {
JF.showError("Error", "Error occured");
} else {
JF.showMessage("Notice", "Boot Image extracted");
}
}
private void extractFromISO() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
File path = new File(JF.getUserPath());
chooser.setCurrentDirectory(path);
chooser.setDialogTitle("Select ISO Image file");
if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return;
String image = chooser.getSelectedFile().getAbsolutePath();
chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setCurrentDirectory(path);
chooser.setDialogTitle("Save to boot image file");
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return;
String filename = chooser.getSelectedFile().getAbsolutePath();
ShellProcess sp = new ShellProcess();
String cmd[] = {"geteltorito", "-o", filename, image};
String output = sp.run(cmd, false);
if (output==null) {
JF.showError("Error", "Error occured");
} else {
JF.showMessage("Notice", "Boot Image extracted");
}
}
private void setPosition() {
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
Dimension d = getPreferredSize();
setLocation(s.width/2 - d.width/2, s.height/2 - (d.height/2));
}
}