text: /*
   *****************************************************************************
   * Copyright (C) 2000-2004, International Business Machines Corporation and  *
   * others. All Rights Reserved.                                              *
   *****************************************************************************
   */
  package com.ibm.rbm;
  
  import java.io.*;
  import javax.swing.*;
  import java.util.*;
  
  /**
   * This class provides a plug-in exporter utility for RBManager that outputs Java
   * standard .properties files in the according to the file structure of Resource
   * Bundles. Most all meta-data is lost in this export.
   * 
   * @author Jared Jackson
   * @see com.ibm.rbm.RBManager
   */
  public class RBPropertiesExporter extends RBExporter {
  	
      public RBPropertiesExporter() {
          super();
  		
          // Initialize the file chooser if necessary
          if (chooser == null) {
              chooser = new JFileChooser();
              chooser.setFileFilter(new javax.swing.filechooser.FileFilter(){
                  public String getDescription() {
                      return "Base Class Properties Files";
                  }
                  public boolean accept(File f) {
                      if (f.isDirectory()) return true;
                      String name = f.getName();
                      if (name.toLowerCase().endsWith(".properties") && f.getName().indexOf("_") < 0) return true;
                      return false;
                  }
              });
          } // end if
      }
  	
      public void export(RBManager rbm) throws IOException {
          if (rbm == null) return;
          // Open the Save Dialog
          int ret_val = chooser.showSaveDialog(null);
          if (ret_val != JFileChooser.APPROVE_OPTION) return;
          // Retrieve basic file information
          File file = chooser.getSelectedFile();                  // The file(s) we will be working with
          File directory = new File(file.getParent());            // The directory we will be writing to
          String base_name = file.getName();                      // The base name of the files we will write
          if (base_name == null || base_name.equals("")) base_name = rbm.getBaseClass();
          if (base_name.toLowerCase().endsWith(".properties")) 
              base_name = base_name.substring(0,base_name.length()-11);
  		
          Vector bundle_v = rbm.getBundles();
          for (int i=0; i < bundle_v.size(); i++) {
              Properties prop = new Properties();
              Bundle bundle = (Bundle)bundle_v.elementAt(i);
              String base_enc = base_name;
              if (bundle.encoding != null && !bundle.encoding.equals("")) base_enc = base_enc + "_" + bundle.encoding;
              String file_name = base_enc + ".properties";
              String header = "Resource Bundle: " + file_name + " - File automatically generated by RBManager at " + (new Date());
  			
              Vector group_v = bundle.getGroupsAsVector();
              for (int j=0; j < group_v.size(); j++) {
                  BundleGroup group = (BundleGroup)group_v.elementAt(j);
                  Vector item_v = group.getItemsAsVector();
                  for (int k=0; k < item_v.size(); k++) {
                      BundleItem item = (BundleItem)item_v.elementAt(k);
                      prop.setProperty(item.getKey(), item.getTranslation());
                  } // end for - k
              } // end for - j
  			
              // Write out the file
              File write_file = new File(directory, file_name);
              FileOutputStream fos = new FileOutputStream(write_file);
              prop.store(fos, header);
          } // end for - i
      }
  }