home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 4427 / aisp_memo-20090510.7z / hed_dat3_src / src / MainFrame3.java < prev    next >
Encoding:
Java Source  |  2009-04-21  |  31.5 KB  |  798 lines

  1. import java.io.*;
  2. import java.util.regex.*;
  3.  
  4. import javax.swing.*;
  5. import javax.swing.event.ListSelectionEvent;
  6. import javax.swing.event.ListSelectionListener;
  7.  
  8. class HedFile2 extends HedFile {
  9.     private JTextArea mTextArea;
  10.  
  11.     public HedFile2(File dataDir, File decodedDir) {
  12.     super(dataDir, decodedDir);
  13.     mTextArea = null;
  14.     }
  15.  
  16.     public HedFile2(File dataDir, File decodedDir, File hedFile) throws IOException {
  17.     super(dataDir, decodedDir, hedFile);
  18.     }
  19.  
  20.     public void setTextArea(JTextArea text) {
  21.     mTextArea = text;
  22.     }
  23.  
  24.     public String getStatus(HedMember member) {
  25.     File decoded = new File(mDecodedDir, member.mFile.getPath());
  26.     if(!decoded.isFile())
  27.         return "not extracted";
  28.     if(member.mMemberSize == decoded.length()
  29.        && member.mUpdatedTime == decoded.lastModified() / 1000)
  30.         return "not modified";
  31.     return "modified";
  32.     }
  33.  
  34.     @Override
  35.     public String toString() {
  36.     return mFile.getPath();
  37.     }
  38.  
  39.     protected void extractedMember(HedMember member) {
  40.     if(mTextArea != null) {
  41.         mTextArea.append("\t\t┼╕│½: " + member.getPath() + "\n");
  42.         mTextArea.setCaretPosition(mTextArea.getDocument().getLength());
  43.     }
  44.     }
  45.  
  46.     protected void storedMember(HedMember member) {
  47.     if(mTextArea != null) {
  48.         mTextArea.append("\t\t│╩╟╝: " + member.getPath() + "\n");
  49.         mTextArea.setCaretPosition(mTextArea.getDocument().getLength());
  50.     }
  51.     }
  52.  
  53.     protected void replaced(File src, File dst) {
  54.     if(mTextArea != null) {
  55.         mTextArea.append("\t├╓┤╣: "
  56.                  + src.getPath() + "ó¬" + dst.getPath() + "\n");
  57.         mTextArea.setCaretPosition(mTextArea.getDocument().getLength());
  58.     }
  59.     }
  60. }
  61.  
  62. public class MainFrame3 extends javax.swing.JFrame {
  63.  
  64.     private HedEnviron mEnv;
  65.  
  66.     static private Pattern HED_FILE_PATTERN = Pattern.compile(".*\\.hed$");
  67.     static private RegexFileFinder HED_FILE_FINDER =
  68.     new RegexFileFinder(HED_FILE_PATTERN);
  69.     private static final String BACKUP_EXT = FileUtils.BACKUP_EXT;
  70.  
  71.     /** Creates new form MainFrame3 */
  72.     public MainFrame3(HedEnviron env) {
  73.     mEnv = env;
  74.  
  75.     initComponents();
  76.  
  77.     // hedÑ╒ÑíÑñÑδñ╬ÑΩÑ╣Ñ╚ñ≥└▀─Ω
  78.     hedList.setModel(new DefaultListModel());
  79.     createHedFileList();
  80.  
  81.     // hedÑ╒ÑíÑñÑδñ╬JListñ╬┴¬┬≥╛⌡┬╓ñ¼╩╤ñ∩ñ├ñ┐╗■íó
  82.     // ÑßÑ≤Ñ╨╔╜╝¿Ñ╞í╝Ñ╓Ñδñ≥╣╣┐╖ñ╣ñδñΦñªñ╦ÑΩÑ╣Ñ╩ñ≥┼╨╧┐
  83.     hedList.addListSelectionListener(new ListSelectionListener() {
  84.         public void valueChanged(ListSelectionEvent e) {
  85.         if(e.getSource() != hedList) return;
  86.         DefaultListModel model = (DefaultListModel)hedList.getModel();
  87.         int index = hedList.getSelectedIndex();
  88.         if(index < 0 || index >= model.size())
  89.             return; // ┴¬┬≥╣╘ñ¼║∩╜ⁿñ╡ñ∞ñ┐╛∞╣τ
  90.         HedFile2 hedfile = (HedFile2)model.get(index);
  91.         hedMemberTable1.displayHedFile(hedfile);
  92.         }
  93.     });
  94.  
  95.     jList1.setModel(new DefaultListModel());
  96.     jList2.setModel(new DefaultListModel());
  97.     }
  98.  
  99.     private void createHedFileList() {
  100.     File[] files = HED_FILE_FINDER.find(new File(mEnv.dataDir)).getArray();
  101.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  102.     model.clear();
  103.     for(int i = 0; i < files.length; i++) {
  104.         try {
  105.         HedFile2 hed = new HedFile2(new File(mEnv.dataDir),
  106.                         new File(mEnv.decodedDir),
  107.                         files[i]);
  108.         hed.setTextArea(jTextArea1);
  109.         model.add(i, hed);
  110.         } catch(IOException e) {
  111.         }
  112.     }
  113.     }
  114.  
  115.     private void updateHedFileList(int index) {
  116.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  117.     HedFile2 orig = (HedFile2)model.get(index);
  118.     try {
  119.         HedFile2 hed = new HedFile2(orig.mDataDir, orig.mDecodedDir,
  120.                     orig.mFile);
  121.         hed.setTextArea(jTextArea1);
  122.         model.set(index, hed);
  123.     } catch(IOException e) {
  124.     }
  125.     }
  126.  
  127.     private void output(String s) {
  128.     jTextArea1.append(s);
  129.     jTextArea1.setCaretPosition(jTextArea1.getDocument().getLength());
  130.     }
  131.  
  132.     /** This method is called from within the constructor to
  133.      * initialize the form.
  134.      * WARNING: Do NOT modify this code. The content of this method is
  135.      * always regenerated by the Form Editor.
  136.      */
  137.     @SuppressWarnings("unchecked")
  138.     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  139.     private void initComponents() {
  140.  
  141.         buttonGroup1 = new javax.swing.ButtonGroup();
  142.         jSplitPane3 = new javax.swing.JSplitPane();
  143.         textAreaScrollPane = new javax.swing.JScrollPane();
  144.         jTextArea1 = new javax.swing.JTextArea();
  145.         jTabbedPane2 = new javax.swing.JTabbedPane();
  146.         jPanel3 = new javax.swing.JPanel();
  147.         jSplitPane1 = new javax.swing.JSplitPane();
  148.         jPanel1 = new javax.swing.JPanel();
  149.         extractMemberButton = new javax.swing.JButton();
  150.         forcedExtractChkBtn = new javax.swing.JCheckBox();
  151.         forcedRebuildChkBtn = new javax.swing.JCheckBox();
  152.         rebuildDatButton = new javax.swing.JButton();
  153.         purgeDatButton = new javax.swing.JButton();
  154.         restoreDatButton = new javax.swing.JButton();
  155.         jButton7 = new javax.swing.JButton();
  156.         jButton8 = new javax.swing.JButton();
  157.         restoreMemberButton = new javax.swing.JButton();
  158.         purgeMemberButton = new javax.swing.JButton();
  159.         jLabel1 = new javax.swing.JLabel();
  160.         jLabel2 = new javax.swing.JLabel();
  161.         jLabel3 = new javax.swing.JLabel();
  162.         jSplitPane2 = new javax.swing.JSplitPane();
  163.         hedListScrollPane = new javax.swing.JScrollPane();
  164.         hedList = new javax.swing.JList();
  165.         hedMemberTable1 = new MemberInfoPanel();
  166.         jPanel2 = new javax.swing.JPanel();
  167.         jRadioButton1 = new javax.swing.JRadioButton();
  168.         jRadioButton2 = new javax.swing.JRadioButton();
  169.         jRadioButton3 = new javax.swing.JRadioButton();
  170.         jScrollPane1 = new javax.swing.JScrollPane();
  171.         jList1 = new javax.swing.JList();
  172.         jScrollPane2 = new javax.swing.JScrollPane();
  173.         jList2 = new javax.swing.JList();
  174.         replaceButton = new javax.swing.JButton();
  175.         jLabel4 = new javax.swing.JLabel();
  176.         jLabel5 = new javax.swing.JLabel();
  177.         jMenuBar1 = new javax.swing.JMenuBar();
  178.         jMenu1 = new javax.swing.JMenu();
  179.         jMenuItem1 = new javax.swing.JMenuItem();
  180.  
  181.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  182.         setMinimumSize(new java.awt.Dimension(1000, 600));
  183.  
  184.         jSplitPane3.setDividerLocation(450);
  185.         jSplitPane3.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
  186.  
  187.         jTextArea1.setColumns(80);
  188.         jTextArea1.setTabSize(2);
  189.         textAreaScrollPane.setViewportView(jTextArea1);
  190.  
  191.         jSplitPane3.setRightComponent(textAreaScrollPane);
  192.  
  193.         jSplitPane1.setDividerLocation(300);
  194.         jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
  195.  
  196.         extractMemberButton.setText("ÑßÑ≤Ñ╨Ñ╒ÑíÑñÑδñ≥┼╕│½");
  197.         extractMemberButton.addActionListener(new java.awt.event.ActionListener() {
  198.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  199.                 extractMemberButtonActionPerformed(evt);
  200.             }
  201.         });
  202.  
  203.         forcedExtractChkBtn.setText("╢»└⌐");
  204.  
  205.         forcedRebuildChkBtn.setText("╢»└⌐");
  206.  
  207.         rebuildDatButton.setText("datÑ╒ÑíÑñÑδñ≥║╞╣╜├█");
  208.         rebuildDatButton.addActionListener(new java.awt.event.ActionListener() {
  209.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  210.                 rebuildDatButtonActionPerformed(evt);
  211.             }
  212.         });
  213.  
  214.         purgeDatButton.setText("║∩╜ⁿ");
  215.         purgeDatButton.addActionListener(new java.awt.event.ActionListener() {
  216.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  217.                 purgeDatButtonActionPerformed(evt);
  218.             }
  219.         });
  220.  
  221.         restoreDatButton.setText("╔ⁿ╕╡");
  222.         restoreDatButton.addActionListener(new java.awt.event.ActionListener() {
  223.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  224.                 restoreDatButtonActionPerformed(evt);
  225.             }
  226.         });
  227.  
  228.         jButton7.setText("╜ⁿ│░");
  229.         jButton7.setEnabled(false);
  230.  
  231.         jButton8.setText("─╔▓├");
  232.         jButton8.setEnabled(false);
  233.  
  234.         restoreMemberButton.setText("╔ⁿ╕╡");
  235.         restoreMemberButton.addActionListener(new java.awt.event.ActionListener() {
  236.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  237.                 restoreMemberButtonActionPerformed(evt);
  238.             }
  239.         });
  240.  
  241.         purgeMemberButton.setText("║∩╜ⁿ");
  242.         purgeMemberButton.addActionListener(new java.awt.event.ActionListener() {
  243.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  244.                 purgeMemberButtonActionPerformed(evt);
  245.             }
  246.         });
  247.  
  248.         jLabel1.setText("ÑßÑ≤Ñ╨Ñ╒ÑíÑñÑδñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫");
  249.  
  250.         jLabel2.setText("datÑ╒ÑíÑñÑδñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫");
  251.  
  252.         jLabel3.setText("ÑßÑ≤Ñ╨Ñ╒ÑíÑñÑδ");
  253.         jLabel3.setEnabled(false);
  254.  
  255.         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
  256.         jPanel1.setLayout(jPanel1Layout);
  257.         jPanel1Layout.setHorizontalGroup(
  258.             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  259.             .addGroup(jPanel1Layout.createSequentialGroup()
  260.                 .addContainerGap()
  261.                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  262.                     .addComponent(extractMemberButton, javax.swing.GroupLayout.Alignment.LEADING)
  263.                     .addComponent(rebuildDatButton, javax.swing.GroupLayout.Alignment.LEADING))
  264.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  265.                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  266.                     .addComponent(forcedRebuildChkBtn)
  267.                     .addComponent(forcedExtractChkBtn))
  268.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  269.                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  270.                     .addComponent(jLabel3)
  271.                     .addComponent(jLabel1)
  272.                     .addComponent(jLabel2))
  273.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  274.                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
  275.                     .addGroup(jPanel1Layout.createSequentialGroup()
  276.                         .addComponent(jButton8)
  277.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  278.                         .addComponent(jButton7))
  279.                     .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
  280.                         .addComponent(restoreDatButton)
  281.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  282.                         .addComponent(purgeDatButton))
  283.                     .addGroup(jPanel1Layout.createSequentialGroup()
  284.                         .addComponent(restoreMemberButton)
  285.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  286.                         .addComponent(purgeMemberButton)))
  287.                 .addContainerGap(142, Short.MAX_VALUE))
  288.         );
  289.         jPanel1Layout.setVerticalGroup(
  290.             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  291.             .addGroup(jPanel1Layout.createSequentialGroup()
  292.                 .addContainerGap()
  293.                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  294.                     .addGroup(jPanel1Layout.createSequentialGroup()
  295.                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  296.                             .addComponent(extractMemberButton)
  297.                             .addComponent(forcedExtractChkBtn)
  298.                             .addComponent(jLabel1))
  299.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  300.                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  301.                             .addComponent(rebuildDatButton)
  302.                             .addComponent(forcedRebuildChkBtn)
  303.                             .addComponent(jLabel2)))
  304.                     .addGroup(jPanel1Layout.createSequentialGroup()
  305.                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  306.                             .addComponent(purgeMemberButton)
  307.                             .addComponent(restoreMemberButton))
  308.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  309.                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  310.                             .addComponent(purgeDatButton)
  311.                             .addComponent(restoreDatButton))
  312.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  313.                         .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  314.                             .addComponent(jButton7)
  315.                             .addComponent(jButton8)
  316.                             .addComponent(jLabel3))))
  317.                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  318.         );
  319.  
  320.         jSplitPane1.setRightComponent(jPanel1);
  321.  
  322.         jSplitPane2.setDividerLocation(200);
  323.  
  324.         hedList.setFont(hedList.getFont().deriveFont(hedList.getFont().getStyle() & ~java.awt.Font.BOLD));
  325.         hedListScrollPane.setViewportView(hedList);
  326.  
  327.         jSplitPane2.setLeftComponent(hedListScrollPane);
  328.         jSplitPane2.setRightComponent(hedMemberTable1);
  329.  
  330.         jSplitPane1.setTopComponent(jSplitPane2);
  331.  
  332.         javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
  333.         jPanel3.setLayout(jPanel3Layout);
  334.         jPanel3Layout.setHorizontalGroup(
  335.             jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  336.             .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 707, Short.MAX_VALUE)
  337.         );
  338.         jPanel3Layout.setVerticalGroup(
  339.             jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  340.             .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 421, Short.MAX_VALUE)
  341.         );
  342.  
  343.         jTabbedPane2.addTab("┼╕│½íª╣╜├█", jPanel3);
  344.  
  345.         buttonGroup1.add(jRadioButton1);
  346.         jRadioButton1.setText("ÑóÑñÑ╞Ñα");
  347.         jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
  348.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  349.                 jRadioButton1ActionPerformed(evt);
  350.             }
  351.         });
  352.  
  353.         buttonGroup1.add(jRadioButton2);
  354.         jRadioButton2.setText("Ñ¡ÑπÑΘÑ»Ñ┐");
  355.         jRadioButton2.addActionListener(new java.awt.event.ActionListener() {
  356.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  357.                 jRadioButton2ActionPerformed(evt);
  358.             }
  359.         });
  360.  
  361.         buttonGroup1.add(jRadioButton3);
  362.         jRadioButton3.setText("Ñ╒Ñúí╝ÑδÑ╔");
  363.         jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
  364.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  365.                 jRadioButton3ActionPerformed(evt);
  366.             }
  367.         });
  368.  
  369.         jList1.setFont(jList1.getFont().deriveFont(jList1.getFont().getStyle() & ~java.awt.Font.BOLD));
  370.         jList1.setModel(new DefaultListModel());
  371.         jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
  372.         jScrollPane1.setViewportView(jList1);
  373.  
  374.         jList2.setFont(jList2.getFont().deriveFont(jList2.getFont().getStyle() & ~java.awt.Font.BOLD));
  375.         jList2.setModel(new DefaultListModel());
  376.         jList2.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
  377.         jScrollPane2.setViewportView(jList2);
  378.  
  379.         replaceButton.setText("├╓┤╣");
  380.         replaceButton.addActionListener(new java.awt.event.ActionListener() {
  381.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  382.                 replaceButtonActionPerformed(evt);
  383.             }
  384.         });
  385.  
  386.         jLabel4.setText("├╓┤╣ñ╡ñ∞ñδID");
  387.  
  388.         jLabel5.setText("╗▓╛╚ñ╡ñ∞ñδID");
  389.  
  390.         javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
  391.         jPanel2.setLayout(jPanel2Layout);
  392.         jPanel2Layout.setHorizontalGroup(
  393.             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  394.             .addGroup(jPanel2Layout.createSequentialGroup()
  395.                 .addContainerGap()
  396.                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  397.                     .addGroup(jPanel2Layout.createSequentialGroup()
  398.                         .addComponent(jRadioButton1)
  399.                         .addGap(18, 18, 18)
  400.                         .addComponent(jRadioButton2)
  401.                         .addGap(18, 18, 18)
  402.                         .addComponent(jRadioButton3)
  403.                         .addGap(65, 65, 65)
  404.                         .addComponent(replaceButton))
  405.                     .addGroup(jPanel2Layout.createSequentialGroup()
  406.                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  407.                             .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE)
  408.                             .addComponent(jLabel4))
  409.                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  410.                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  411.                             .addComponent(jLabel5)
  412.                             .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE))))
  413.                 .addGap(153, 153, 153))
  414.         );
  415.         jPanel2Layout.setVerticalGroup(
  416.             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  417.             .addGroup(jPanel2Layout.createSequentialGroup()
  418.                 .addContainerGap()
  419.                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  420.                     .addComponent(jRadioButton1)
  421.                     .addComponent(jRadioButton2)
  422.                     .addComponent(jRadioButton3)
  423.                     .addComponent(replaceButton))
  424.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  425.                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  426.                     .addComponent(jLabel4)
  427.                     .addComponent(jLabel5))
  428.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  429.                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
  430.                     .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE)
  431.                     .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE))
  432.                 .addContainerGap())
  433.         );
  434.  
  435.         jTabbedPane2.addTab("├╓┤╣", jPanel2);
  436.  
  437.         jSplitPane3.setLeftComponent(jTabbedPane2);
  438.  
  439.         jMenu1.setText("Ñ╒ÑíÑñÑδ");
  440.  
  441.         jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
  442.         jMenuItem1.setText("╜¬╬╗");
  443.         jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
  444.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  445.                 jMenuItem1ActionPerformed(evt);
  446.             }
  447.         });
  448.         jMenu1.add(jMenuItem1);
  449.  
  450.         jMenuBar1.add(jMenu1);
  451.  
  452.         setJMenuBar(jMenuBar1);
  453.  
  454.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  455.         getContentPane().setLayout(layout);
  456.         layout.setHorizontalGroup(
  457.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  458.             .addComponent(jSplitPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 714, Short.MAX_VALUE)
  459.         );
  460.         layout.setVerticalGroup(
  461.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  462.             .addComponent(jSplitPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 551, Short.MAX_VALUE)
  463.         );
  464.  
  465.         pack();
  466.     }// </editor-fold>//GEN-END:initComponents
  467.  
  468.     private void extractMemberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extractMemberButtonActionPerformed
  469.     final DefaultListModel model = (DefaultListModel)hedList.getModel();
  470.     final boolean forced = forcedExtractChkBtn.isSelected();
  471.  
  472.     output("┼╕│½╜Φ═²ñ╬│½╗╧\n");
  473.     (new SwingWorker<Object, String>() {
  474.  
  475.         public Object doInBackground() {
  476.         for(int i = 0; i < model.size(); i++) {
  477.             if(!hedList.isSelectedIndex(i))
  478.             continue;
  479.  
  480.             HedFile2 hed = (HedFile2)model.get(i);
  481.             output("\t┼╕│½│½╗╧: " + hed + "\n");
  482.             try {
  483.             hed.extractAll(forced);
  484.             output("\t┼╕│½└«╕∙: " + hed + "\n");
  485.             } catch (Exception e) {
  486.             output("\t┼╕│½╝║╟╘: " + hed + "\n");
  487.             output(getDesc(e));
  488.             }
  489.         }
  490.         return null;
  491.         }
  492.  
  493.         protected void done() {
  494.         output("┼╕│½╜Φ═²ñ╬╜¬╬╗\n");
  495.         for(int i = 0; i < model.size(); i++)
  496.             if(hedList.isSelectedIndex(i))
  497.             updateHedFileList(i);
  498.         }
  499.     }).execute();
  500.     }//GEN-LAST:event_extractMemberButtonActionPerformed
  501.  
  502.     private void restoreMemberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreMemberButtonActionPerformed
  503.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  504.     for(int i = 0; i < model.size(); i++) {
  505.         if(!hedList.isSelectedIndex(i))
  506.         continue;
  507.         restoreMembers((HedFile2)model.get(i));
  508.     }
  509.     }//GEN-LAST:event_restoreMemberButtonActionPerformed
  510.  
  511.     private void restoreMembers(HedFile2 hed) {
  512.     output("ÑßÑ≤Ñ╨ñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥╔ⁿ╕╡: " + hed + "\n");
  513.     for(int m = 0; m < hed.mMembers.size(); m++) {
  514.         HedMember member = hed.mMembers.get(m);
  515.         File orig = new File(mEnv.decodedDir, member.mFile.getPath());
  516.         File backup = new File(mEnv.decodedDir,
  517.                    member.mFile.getPath() + BACKUP_EXT);
  518.         if(backup.isFile()) {
  519.         orig.delete();
  520.         backup.renameTo(orig);
  521.         output("\t" + orig.getPath() + "\n");
  522.         }
  523.     }
  524.     }
  525.  
  526.     private void purgeMemberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_purgeMemberButtonActionPerformed
  527.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  528.     for(int i = 0; i < model.size(); i++) {
  529.         if(!hedList.isSelectedIndex(i))
  530.         continue;
  531.         purgeMembers((HedFile2)model.get(i));
  532.     }
  533.     }//GEN-LAST:event_purgeMemberButtonActionPerformed
  534.  
  535.     private void purgeMembers(HedFile2 hed) {
  536.     output("ÑßÑ≤Ñ╨ñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥║∩╜ⁿ: " + hed + "\n");
  537.     for(int m = 0; m < hed.mMembers.size(); m++) {
  538.         HedMember member = hed.mMembers.get(m);
  539.         File backup = new File(mEnv.decodedDir,
  540.                    member.mFile.getPath() + BACKUP_EXT);
  541.         if(backup.isFile()) {
  542.         backup.delete();
  543.         output("\t" + backup.getPath() + "\n");
  544.         }
  545.     }
  546.     }
  547.  
  548.     private void rebuildDatButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rebuildDatButtonActionPerformed
  549.     final DefaultListModel model = (DefaultListModel)hedList.getModel();
  550.     final boolean forced = forcedRebuildChkBtn.isSelected();
  551.  
  552.     output("║╞╣╜├█╜Φ═²ñ╬│½╗╧\n");
  553.     (new SwingWorker<Object, String>() {
  554.  
  555.         public Object doInBackground() {
  556.         for(int i = 0; i < model.size(); i++) {
  557.             if(!hedList.isSelectedIndex(i))
  558.             continue;
  559.  
  560.             HedFile2 hed = (HedFile2)model.get(i);
  561.             output("\t║╞╣╜├█│½╗╧: " + hed + "\n");
  562.             try {
  563.             hed.storeAll(forced);
  564.             output("\t║╞╣╜├█└«╕∙: " + hed + "\n");
  565.             } catch(Exception e) {
  566.             output("\t║╞╣╜├█╝║╟╘: " + hed + "\n");
  567.             output(getDesc(e));
  568.             }
  569.         }
  570.         return null;
  571.         }
  572.  
  573.         protected void done() {
  574.         output("║╞╣╜├█╜Φ═²ñ╬╜¬╬╗\n");
  575.         for(int i = 0; i < model.size(); i++)
  576.             if(hedList.isSelectedIndex(i))
  577.             updateHedFileList(i);
  578.         }
  579.     }).execute();
  580.     }//GEN-LAST:event_rebuildDatButtonActionPerformed
  581.  
  582.     private void restoreDatButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreDatButtonActionPerformed
  583.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  584.     for(int i = 0; i < model.size(); i++) {
  585.         if(!hedList.isSelectedIndex(i))
  586.         continue;
  587.         restoreHedDat((HedFile2)model.get(i));
  588.     }
  589.     }//GEN-LAST:event_restoreDatButtonActionPerformed
  590.  
  591.     private void restoreHedDat(HedFile2 hed) {
  592.     output("hed/datñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥╔ⁿ╕╡: " + hed + "\n");
  593.     File backup = new File(hed.mFile.getPath() + BACKUP_EXT);
  594.     if(backup.isFile()) {
  595.         hed.mFile.delete();
  596.         backup.renameTo(hed.mFile);
  597.         output("\t" + hed.mFile.getPath() + "\n");
  598.     }
  599.  
  600.     // datÑ╒ÑíÑñÑδñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥╔ⁿ╕╡
  601.     for(int m = 0; m <= hed.mMaxDatIndex; m++) {
  602.         File dat = new File(hed.mDataDir, String.format(hed.mTemplate, m));
  603.         backup = new File(dat.getPath() + BACKUP_EXT);
  604.         if(backup.isFile()) {
  605.         dat.delete();
  606.         backup.renameTo(dat);
  607.         output("\t" + dat.getPath() + "\n");
  608.         }
  609.     }
  610.     }
  611.  
  612.     private void purgeDatButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_purgeDatButtonActionPerformed
  613.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  614.     for(int i = 0; i < model.size(); i++) {
  615.         if(!hedList.isSelectedIndex(i))
  616.         continue;
  617.         purgeHedDat((HedFile2)model.get(i));
  618.     }
  619.     }//GEN-LAST:event_purgeDatButtonActionPerformed
  620.  
  621.     private void purgeHedDat(HedFile2 hed) {
  622.     output("hedÑ╒ÑíÑñÑδñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥║∩╜ⁿ: " + hed + "\n");
  623.     File backup = new File(hed.mFile.getPath() + BACKUP_EXT);
  624.     if(backup.isFile()) {
  625.         backup.delete();
  626.         output("\t" + backup.getPath() + "\n");
  627.     }
  628.  
  629.     // datÑ╒ÑíÑñÑδñ╬Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫ñ≥║∩╜ⁿ
  630.     for(int m = 0; m <= hed.mMaxDatIndex; m++) {
  631.         File dat = new File(hed.mDataDir, String.format(hed.mTemplate, m));
  632.         backup = new File(dat.getPath() + BACKUP_EXT);
  633.         if(backup.isFile()) {
  634.         backup.delete();
  635.         output("Ñ╨Ñ├Ñ»ÑóÑ├Ñ╫║∩╜ⁿ: " + dat.getPath() + "\n");
  636.         }
  637.     }
  638.     }
  639.  
  640.     private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
  641.     System.exit(0);
  642.     }//GEN-LAST:event_jMenuItem1ActionPerformed
  643.  
  644.     private void replaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceButtonActionPerformed
  645.     if(jRadioButton1.isSelected()) {
  646.         HedFile2 hed = findHedFileByName("data/item.hed");
  647.         if(hed == null)
  648.         throw new RuntimeException("cannot find item.hed");
  649.         String virtId = ItemList.array[jList1.getSelectedIndex()][0];
  650.         String realId = ItemList.array[jList2.getSelectedIndex()][0];
  651.         output("ÑóÑñÑ╞Ñα├╓┤╣: " + virtId + " ó½ " + realId + "\n");
  652.         try {
  653.         hed.replaceItem(virtId, realId);
  654.         } catch(IOException e) {
  655.         output("ÑóÑñÑ╞Ñα├╓┤╣╝║╟╘\n");
  656.         }
  657.     } else if(jRadioButton2.isSelected()) {
  658.         HedFile2 hed = findHedFileByName("data/chara/1.hed");
  659.         if(hed == null)
  660.         throw new RuntimeException("cannot find chara/1.hed");
  661.         String virtId = CharaList.array[jList1.getSelectedIndex()][0];
  662.         String realId = CharaList.array[jList2.getSelectedIndex()][0];
  663.         output("Ñ¡ÑπÑΘÑ»Ñ┐├╓┤╣: " + virtId + " ó½ " + realId + "\n");
  664.         try {
  665.         hed.replaceChara(virtId, realId);
  666.         } catch(IOException e) {
  667.         output("ÑóÑñÑ╞Ñα├╓┤╣╝║╟╘\n");
  668.         }
  669.     } else if(jRadioButton3.isSelected()) {
  670.         HedFile2 hed = findHedFileByName("data/world/field.hed");
  671.         if(hed == null)
  672.         throw new RuntimeException("cannot find world/field.hed");
  673.         String virtId = "R01";
  674.         String realId = FieldList.array[jList2.getSelectedIndex()][0];
  675.         output("Ñ╒Ñúí╝ÑδÑ╔├╓┤╣: " + virtId + " ó½ " + realId + "\n");
  676.         try {
  677.         hed.replaceField(virtId, realId);
  678.         } catch(IOException e) {
  679.         output("Ñ╒Ñúí╝ÑδÑ╔├╓┤╣╝║╟╘\n");
  680.         }
  681.     }
  682.     }//GEN-LAST:event_replaceButtonActionPerformed
  683.  
  684.     private HedFile2 findHedFileByName(String path) {
  685.     DefaultListModel model = (DefaultListModel)hedList.getModel();
  686.     File file = new File(path);
  687.     for(int i = 0; i < model.size(); i++) {
  688.         HedFile2 hed = (HedFile2)model.get(i);
  689.         if(hed.mFile.equals(file))
  690.         return hed;
  691.     }
  692.     return null;
  693.     }
  694.  
  695.     private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton1ActionPerformed
  696.     setReplaceList(ItemList.array);
  697.     }//GEN-LAST:event_jRadioButton1ActionPerformed
  698.  
  699.     private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton2ActionPerformed
  700.     setReplaceList(CharaList.array);
  701.     }//GEN-LAST:event_jRadioButton2ActionPerformed
  702.  
  703.     private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton3ActionPerformed
  704.     DefaultListModel model1 = (DefaultListModel)jList1.getModel();
  705.     DefaultListModel model2 = (DefaultListModel)jList2.getModel();
  706.     model1.clear();
  707.     model2.clear();
  708.     model1.addElement("R01: Ñ▐ÑñÑδí╝Ñα");
  709.     String[][] array = FieldList.array;
  710.     for(int i = 0; i < array.length; i++)
  711.         model2.addElement(array[i][0] + ": " + array[i][1]);
  712.     }//GEN-LAST:event_jRadioButton3ActionPerformed
  713.  
  714.     private void setReplaceList(String[][] array) {
  715.     DefaultListModel model1 = (DefaultListModel)jList1.getModel();
  716.     DefaultListModel model2 = (DefaultListModel)jList2.getModel();
  717.     model1.clear();
  718.     model2.clear();
  719.     for(int i = 0; i < array.length; i++) {
  720.         model1.addElement(array[i][0] + ": " + array[i][1]);
  721.         model2.addElement(array[i][0] + ": " + array[i][1]);
  722.     }
  723.     }
  724.  
  725.     /** ╚»└╕ñ╖ñ┐╬π│░ñ╬╛≡╩≤ñ≥╩╕╗·╬≤▓╜ñ╣ñδ */
  726.     private static String getDesc(Throwable e) {
  727.     Throwable th = e;
  728.     StringBuffer sb = new StringBuffer();
  729.  
  730.     while(th != null) {
  731.         if(th != e)
  732.         sb.append("\nCaused by: "); // 2╚╓╠▄░╩╣▀
  733.         sb.append(th.getClass().getName());
  734.  
  735.         String s = th.getMessage();
  736.         if(s != null)
  737.         sb.append(": " + s);
  738.  
  739.         StackTraceElement[] ste = th.getStackTrace();
  740.         for(int i = 0; i < ste.length; i++) {
  741.         s = ste[i].toString();
  742.         sb.append("\n         at ");
  743.         sb.append(s);
  744.         if(i > 10 || s.indexOf("javax.swing") >= 0) {
  745.             sb.append(" and more...");
  746.             break;
  747.         }
  748.         }
  749.         th = th.getCause();
  750.     }
  751.     sb.append("\n");
  752.         return sb.toString();
  753.     }
  754.  
  755.     // Variables declaration - do not modify//GEN-BEGIN:variables
  756.     private javax.swing.ButtonGroup buttonGroup1;
  757.     private javax.swing.JButton extractMemberButton;
  758.     private javax.swing.JCheckBox forcedExtractChkBtn;
  759.     private javax.swing.JCheckBox forcedRebuildChkBtn;
  760.     private javax.swing.JList hedList;
  761.     private javax.swing.JScrollPane hedListScrollPane;
  762.     private MemberInfoPanel hedMemberTable1;
  763.     private javax.swing.JButton jButton7;
  764.     private javax.swing.JButton jButton8;
  765.     private javax.swing.JLabel jLabel1;
  766.     private javax.swing.JLabel jLabel2;
  767.     private javax.swing.JLabel jLabel3;
  768.     private javax.swing.JLabel jLabel4;
  769.     private javax.swing.JLabel jLabel5;
  770.     private javax.swing.JList jList1;
  771.     private javax.swing.JList jList2;
  772.     private javax.swing.JMenu jMenu1;
  773.     private javax.swing.JMenuBar jMenuBar1;
  774.     private javax.swing.JMenuItem jMenuItem1;
  775.     private javax.swing.JPanel jPanel1;
  776.     private javax.swing.JPanel jPanel2;
  777.     private javax.swing.JPanel jPanel3;
  778.     private javax.swing.JRadioButton jRadioButton1;
  779.     private javax.swing.JRadioButton jRadioButton2;
  780.     private javax.swing.JRadioButton jRadioButton3;
  781.     private javax.swing.JScrollPane jScrollPane1;
  782.     private javax.swing.JScrollPane jScrollPane2;
  783.     private javax.swing.JSplitPane jSplitPane1;
  784.     private javax.swing.JSplitPane jSplitPane2;
  785.     private javax.swing.JSplitPane jSplitPane3;
  786.     private javax.swing.JTabbedPane jTabbedPane2;
  787.     private javax.swing.JTextArea jTextArea1;
  788.     private javax.swing.JButton purgeDatButton;
  789.     private javax.swing.JButton purgeMemberButton;
  790.     private javax.swing.JButton rebuildDatButton;
  791.     private javax.swing.JButton replaceButton;
  792.     private javax.swing.JButton restoreDatButton;
  793.     private javax.swing.JButton restoreMemberButton;
  794.     private javax.swing.JScrollPane textAreaScrollPane;
  795.     // End of variables declaration//GEN-END:variables
  796.  
  797. }
  798.