/* ***************************************************************************** * Copyright (C) 2000-2002, International Business Machines Corporation and * * others. All Rights Reserved. * ***************************************************************************** * * $Source: /xsrl/Nsvn/icu/unicodetools/com/ibm/rbm/RBJavaExporter.java,v $ * $Date: 2004/06/29 20:39:59 $ * $Revision: 1.3 $ * ***************************************************************************** */ package com.ibm.rbm; import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.*; /** * An exporter plug-in class for RBManager. The resources exported here conform to * the Java standard for Resource Bundles as specified in java.util.ListResourceBundle. * The output files are compilable java files that are not associated with any * package. * * @author Jared Jackson - Email: jjared@almaden.ibm.com * @see com.ibm.rbm.RBManager */ public class RBJavaExporter extends RBExporter { private String packageName = null; private boolean publicClass = true; private boolean publicMethods = true; public RBJavaExporter() { super(); // Initialize the file chooser if necessary if (chooser == null) { chooser = new JFileChooser(); chooser.setFileFilter(new javax.swing.filechooser.FileFilter(){ public String getDescription() { return "Java Source Files"; } public boolean accept(File f) { if (f.isDirectory()) return true; if (f.getName().endsWith(".java") && f.getName().indexOf("_") < 0) return true; return false; } }); } // end if } public void export(RBManager rbm) throws IOException { if (rbm == null) return; // Open the additional Dialog RBJavaExporterDialog parametersDialog = new RBJavaExporterDialog(); packageName = parametersDialog.getPackageName(); publicClass = parametersDialog.isClassPublic(); publicMethods = parametersDialog.isMethodsPublic(); // 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.endsWith(".java")) base_name = base_name.substring(0,base_name.length()-5); Vector bundle_v = rbm.getBundles(); for (int i=0; i < bundle_v.size(); i++) { 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 + ".java"; StringBuffer buffer = new StringBuffer(); buffer.append("/* File: " + file_name + "\n"); buffer.append(" * Date: " + (new Date()) + "\n"); buffer.append(" * Comment: This file was generated automatically by RBManager" + "\n"); buffer.append(" */\n\n"); if (packageName != null) { buffer.append("package " + packageName + ";\n\n"); } buffer.append("import java.util.ListResourceBundle;\n\n"); buffer.append((publicClass ? "public " : "protected ")); buffer.append("class " + base_enc + " extends ListResourceBundle {\n"); buffer.append("\t" + (publicMethods ? "public" : "protected") + " Object[][] getContents() {\n"); buffer.append("\t\treturn contents;\n"); buffer.append("\t}\n"); buffer.append("\tprivate static final Object[][] contents = {\n"); buffer.append("\t// LOCALIZE THIS\n"); 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); buffer.append("\t\t{\"" + item.getKey() + "\", \"" + item.getTranslation() + "\"},\t// " + item.getComment() + "\n"); } // end for - k } // end for - j buffer.append("\t// END OF MATERIAL TO LOCALIZE\n"); buffer.append("\t};\n"); buffer.append("}"); // Write out the file File write_file = new File(directory, file_name); FileWriter writer = new FileWriter(write_file); writer.write(buffer.toString()); writer.flush(); writer.close(); } // end for - i } } class RBJavaExporterDialog extends JDialog { JCheckBox packageCheck; JRadioButton classPublicRadio; JRadioButton classProtectedRadio; JRadioButton methodsPublicRadio; JRadioButton methodsProtectedRadio; JTextField packageField; public RBJavaExporterDialog() { super(new JFrame(), Resources.getTranslation("dialog_title_export_java_options"), true); initComponents(); } public String getPackageName() { if (!(packageCheck.isSelected())) return null; String retVal = packageField.getText(); if (retVal == null || retVal.trim().equals("")) return null; return retVal.trim(); } public boolean isClassPublic() { return classPublicRadio.isSelected(); } public boolean isMethodsPublic() { return methodsPublicRadio.isSelected(); } private void handleClose() { setVisible(false); dispose(); } private void initComponents() { getContentPane().setLayout(new BorderLayout()); getContentPane().removeAll(); packageCheck = new JCheckBox(Resources.getTranslation("export_java_package"), false); classPublicRadio = new JRadioButton(Resources.getTranslation("export_java_class_public"), true); classProtectedRadio = new JRadioButton(Resources.getTranslation("export_java_class_protected"), false); methodsPublicRadio = new JRadioButton(Resources.getTranslation("export_java_class_public"), true); methodsProtectedRadio = new JRadioButton(Resources.getTranslation("export_java_class_protected"), false); packageField = new JTextField(); packageField.setColumns(30); JButton okButton = new JButton(Resources.getTranslation("OK")); JLabel titleLabel = new JLabel(Resources.getTranslation("export_java_title"), SwingConstants.LEFT); JPanel okPanel = new JPanel(); okPanel.add(okButton); JPanel centerPanel = new JPanel(new GridLayout(1,1)); centerPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); Box centerBox = Box.createVerticalBox(); Box packageBox = Box.createHorizontalBox(); packageBox.add(packageCheck); packageBox.add(packageField); centerBox.add(packageBox); centerBox.add(new JSeparator()); centerBox.add(classPublicRadio); centerBox.add(classProtectedRadio); centerBox.add(new JSeparator()); centerBox.add(methodsPublicRadio); centerBox.add(methodsProtectedRadio); centerPanel.add(centerBox); getContentPane().add(titleLabel, BorderLayout.NORTH); getContentPane().add(okPanel, BorderLayout.SOUTH); getContentPane().add(centerPanel, BorderLayout.CENTER); okButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ev) { handleClose(); } }); ButtonGroup classGroup = new ButtonGroup(); ButtonGroup methodsGroup = new ButtonGroup(); classGroup.add(classPublicRadio); classGroup.add(classProtectedRadio); methodsGroup.add(methodsPublicRadio); methodsGroup.add(methodsProtectedRadio); //validateTree(); pack(); //setLocation(new Point(25,25)); setVisible(true); } }