blob: 0c6cd294152333b33ec542e8653bfc820b878592 [file] [log] [blame]
/*
*****************************************************************************
* Copyright (C) 2000-2007, International Business Machines Corporation and *
* others. All Rights Reserved. *
*****************************************************************************
*/
package com.ibm.rbm;
import java.io.*;
import com.ibm.rbm.gui.RBManagerGUI;
import java.util.*;
/**
* This is the super class for all importer plug-in classes. As of yet, there
* is little contained in this class.
*
* @author Jared Jackson
* @see com.ibm.rbm.RBManager
*/
public class RBPropertiesImporter extends RBImporter {
boolean isRBMFile = true;
/**
* Constructs the importer given the parent data classes and a Dialog title.
*/
public RBPropertiesImporter(String title, RBManager rbm, RBManagerGUI gui) {
super(title, rbm, gui);
}
protected void setupFileChooser() {
chooser.setFileFilter(new javax.swing.filechooser.FileFilter(){
public boolean accept(File f) {
if (f.isDirectory()) return true;
if (f.getName().toLowerCase().endsWith(".properties") && f.getName().indexOf("_") < 0) return true;
return false;
}
public String getDescription() {
return Resources.getTranslation("import_properties_file_description");
}
});
}
protected void beginImport() throws IOException {
super.beginImport();
File baseFile = getChosenFile();
FileReader fr = new FileReader(baseFile);
BufferedReader br = new BufferedReader(fr);
// Test if this is an RBManager generated file or not
int count = 0;
String line = null;
isRBMFile = true;
while ((line = br.readLine()) != null) {
if (!line.trim().equals("")) count++;
if (count == 1 && !line.startsWith("# @file")) {
// Not generated by RBManager
isRBMFile = false;
}
} // end while
if (isRBMFile) {
// Treat the file as generated by RBManager
// Parse the resource bundle through RBManager
RBManager import_rbm = new RBManager(baseFile);
// Merge the two resource bundles
Vector bundles = import_rbm.getBundles();
Vector encodings = new Vector();
for (int i=0; i < bundles.size(); i++) {
Bundle b = (Bundle)bundles.elementAt(i);
encodings.addElement(b.encoding);
}
resolveEncodings(encodings);
for (int i=0; i < bundles.size(); i++) {
Bundle b = (Bundle)bundles.elementAt(i);
Enumeration keys = b.allItems.keys();
while (keys.hasMoreElements()) {
String key = (String)keys.nextElement();
BundleItem item = (BundleItem)b.allItems.get(key);
importResource(item, b.encoding, (item.getParentGroup() == null ? getDefaultGroup(): item.getParentGroup().getName()));
}
}
} else {
// Just treat it as a regular properties file
// Check if there are any missing target locale files
String baseName = baseFile.getName().substring(0,baseFile.getName().length()-11); // |'.properties'| == 11
File baseDir = new File(baseFile.getParent());
String allChildren[] = baseDir.list();
Vector children_v = new Vector();
for (int i=0; i < allChildren.length; i++) {
if (allChildren[i].startsWith(baseName) && allChildren[i].toLowerCase().endsWith(".properties")) {
if (allChildren[i].length() == (baseName + ".properties").length()) children_v.addElement("");
else children_v.addElement(allChildren[i].substring(baseName.length()+1, allChildren[i].indexOf(".properties")));
}
}
showProgressBar(children_v.size());
resolveEncodings(children_v);
// Run through each source locale file importing as necessary
for (int i=0; i < children_v.size(); i++) {
Properties p = new Properties();
FileInputStream fis = new FileInputStream(new File(baseDir, baseName +
(children_v.elementAt(i).toString().equals("") ? "" : "_" + children_v.elementAt(i).toString()) +
".properties"));
p.load(fis);
Enumeration keys = p.keys();
while (keys.hasMoreElements()) {
String key = (String)keys.nextElement();
BundleItem item = new BundleItem(null, key, p.getProperty(key));
item.setTranslated(this.getDefaultTranslated());
importResource(item, children_v.elementAt(i).toString(), getDefaultGroup());
}
incrementProgressBar();
}
hideProgressBar();
}
}
}