9fad2a52a8
X-SVN-Rev: 15953
182 lines
7.1 KiB
Java
182 lines
7.1 KiB
Java
/*
|
|
*****************************************************************************
|
|
* Copyright (C) 2000-2004, International Business Machines Corporation and *
|
|
* others. All Rights Reserved. *
|
|
*****************************************************************************
|
|
*/
|
|
package com.ibm.rbm;
|
|
|
|
import java.util.*;
|
|
import java.io.*;
|
|
|
|
/**
|
|
* This class defines the methods used by RBManager to access, set, and store
|
|
* individual user preferences for the application. All of the public methods defined
|
|
* in this class are static, and so the class need not be instantiated.
|
|
*
|
|
* @author Jared Jackson
|
|
* @see com.ibm.rbm.RBManager
|
|
*/
|
|
public class Preferences {
|
|
// Default values
|
|
private static final int NUM_RECENT_FILES = 4;
|
|
private static final String EMPTY_STRING = "";
|
|
private static Properties prop;
|
|
|
|
/**
|
|
* Retrieve a preference by its key name
|
|
* @param name The name of the key associated with one preference
|
|
* @return The value of the preference sought
|
|
*/
|
|
|
|
public static String getPreference(String name) {
|
|
if (prop == null) init();
|
|
Object o = prop.get(name);
|
|
if (o == null || !(o instanceof String)) return EMPTY_STRING;
|
|
return (String)o;
|
|
}
|
|
|
|
/**
|
|
* Sets a preference by key name and value. If the key name all ready exists, that
|
|
* preference is overwritten without warning.
|
|
* @param name The name of the key associated with the preference
|
|
* @param value The value of the preference to be set and later retrieved. If this value is null, the property of this name is erased.
|
|
*/
|
|
|
|
public static void setPreference(String name, String value) {
|
|
if (prop == null) init();
|
|
if (value == null) {
|
|
// In this case, we will remove the property
|
|
prop.remove(name);
|
|
}
|
|
prop.put(name, value);
|
|
}
|
|
|
|
/**
|
|
* Writes the results of the buffered preferences to file. There is no option for
|
|
* where this file is saved on the file system.
|
|
*/
|
|
|
|
public static void savePreferences() throws IOException {
|
|
if (prop == null) init();
|
|
FileOutputStream fos = new FileOutputStream("preferences.properties");
|
|
prop.store(fos, "RBManager Preferences");
|
|
fos.flush();
|
|
fos.close();
|
|
}
|
|
|
|
/**
|
|
* Given the name of a resource bundle and the file path location of the base
|
|
* document for that resource bundle, this method will insert that file into
|
|
* a list of recent files. Currently the past 4 resource bundles visited will
|
|
* be displayed. This method also sorts the prefences so that the most recently
|
|
* added will be the first returned, even if that file had all ready existed
|
|
* in the preferences when it was added.
|
|
* @param name The name of this file as it will be displayed to the user
|
|
* @param location The file path to this file (should be absolute).
|
|
*/
|
|
|
|
public static void addRecentFilePreference(String name, String location) {
|
|
Vector existingNames = new Vector();
|
|
Vector existingLocations = new Vector();
|
|
for (int i=0; i < NUM_RECENT_FILES; i++) {
|
|
String oldName = getPreference("recentfileid" + String.valueOf(i));
|
|
String oldLocation = getPreference("recentfileloc" + String.valueOf(i));
|
|
if (oldName.equals(EMPTY_STRING) || oldLocation.equals(EMPTY_STRING)) break;
|
|
existingNames.addElement(oldName);
|
|
existingLocations.addElement(oldLocation);
|
|
}
|
|
// Check to see if the file is all ready in there
|
|
int swap_start = 0;
|
|
int old_size = existingLocations.size();
|
|
for (int i=0; i <= old_size; i++) {
|
|
if (i == existingLocations.size()) {
|
|
// No match was found, pull all the elements down one
|
|
swap_start = i;
|
|
if (swap_start >= NUM_RECENT_FILES) swap_start = NUM_RECENT_FILES-1;
|
|
else {
|
|
// Extend the length of the vectors
|
|
existingNames.addElement(EMPTY_STRING);
|
|
existingLocations.addElement(EMPTY_STRING);
|
|
}
|
|
} else {
|
|
String oldLocation = (String)existingLocations.elementAt(i);
|
|
if (oldLocation.equals(location)) {
|
|
// We found a match, pull this one to the front
|
|
swap_start = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Move the files down the line as appropriate
|
|
for (int i=swap_start; i > 0; i--) {
|
|
existingLocations.setElementAt(existingLocations.elementAt(i-1),i);
|
|
existingNames.setElementAt(existingNames.elementAt(i-1),i);
|
|
}
|
|
existingLocations.setElementAt(location, 0);
|
|
existingNames.setElementAt(name, 0);
|
|
|
|
// Set the properties
|
|
for (int i=0; i < existingLocations.size(); i++) {
|
|
setPreference("recentfileid" + String.valueOf(i), (String)existingNames.elementAt(i));
|
|
setPreference("recentfileloc" + String.valueOf(i), (String)existingLocations.elementAt(i));
|
|
}
|
|
for (int i=existingLocations.size(); i < NUM_RECENT_FILES; i++) {
|
|
setPreference("recentfileid" + String.valueOf(i), EMPTY_STRING);
|
|
setPreference("recentfileloc" + String.valueOf(i), EMPTY_STRING);
|
|
}
|
|
try {
|
|
savePreferences();
|
|
} catch (IOException ioe) {} // Ignore, its not critical
|
|
}
|
|
|
|
/**
|
|
* Returns a list of the names and locations of the various recently used files.
|
|
* @return A Vector of Strings which is twice in length the number of files known about. The vector contains name 1 then location 1, then name 2 ...
|
|
*/
|
|
|
|
public static Vector getRecentFilesPreferences() {
|
|
if (prop == null) init();
|
|
Vector existing = new Vector();
|
|
for (int i=0; i < NUM_RECENT_FILES; i++) {
|
|
String name = getPreference("recentfileid" + String.valueOf(i));
|
|
String location = getPreference("recentfileloc" + String.valueOf(i));
|
|
if (name.equals(EMPTY_STRING) || location.equals(EMPTY_STRING)) break;
|
|
existing.addElement(name);
|
|
existing.addElement(location);
|
|
}
|
|
return existing;
|
|
}
|
|
|
|
private static void init() {
|
|
Properties defaults = new Properties();
|
|
// This values are needed and are specified by default
|
|
// If they exist in the file, they will be overwritten
|
|
defaults.put("username", Resources.getTranslation("unknown_user"));
|
|
defaults.put("locale", "en");
|
|
defaults.put("lookandfeel", "");
|
|
|
|
prop = new Properties(defaults);
|
|
try {
|
|
FileInputStream fis = new FileInputStream("preferences.properties");
|
|
prop.load(fis);
|
|
} catch (IOException ioe) {
|
|
System.err.println("Error reading properties");
|
|
ioe.printStackTrace(System.err);
|
|
}
|
|
try {
|
|
savePreferences();
|
|
} catch (IOException ioe) {
|
|
System.err.println("Error saving preferences " + ioe.getMessage());
|
|
}
|
|
}
|
|
|
|
/*
|
|
public static void main(String args[]) {
|
|
// Test
|
|
init();
|
|
}
|
|
*/
|
|
}
|