/* *******************************************************************
* Copyright (c) 1999-2001 Xerox Corporation,
* 2002 Palo Alto Research Center, Incorporated (PARC).
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Xerox/PARC initial implementation
* Helen Hawkins Converted to new interface (bug 148190)
* ******************************************************************/
package org.aspectj.ajde.ui.internal;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import org.aspectj.ajde.Ajde;
import org.aspectj.ajde.ui.UserPreferencesAdapter;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.Message;
import org.aspectj.util.LangUtil;
public class UserPreferencesStore implements UserPreferencesAdapter {
public static final String FILE_NAME = "/.ajbrowser";
private static final String VALUE_SEP = ";";
private Properties properties = new Properties();
private boolean persist = true;
public UserPreferencesStore() {
this(true);
}
public UserPreferencesStore(boolean loadDefault) {
persist = loadDefault;
if (persist) {
loadProperties(getPropertiesFilePath());
}
}
public String getProjectPreference(String name) {
return properties.getProperty(name);
}
public List getProjectMultivalPreference(String name) {
List values = new ArrayList();
String valuesString = properties.getProperty(name);
if (valuesString != null && !valuesString.trim().equals("")) {
StringTokenizer st = new StringTokenizer(valuesString, VALUE_SEP);
while (st.hasMoreTokens()) {
values.add(st.nextToken());
}
}
return values;
}
public void setProjectPreference(String name, String value) {
properties.setProperty(name, value);
saveProperties();
}
public void setProjectMultivalPreference(String name, List values) {
String valuesString = "";
for (Iterator it = values.iterator(); it.hasNext(); ) {
valuesString += (String)it.next() + ';';
}
properties.setProperty(name, valuesString);
saveProperties();
}
public static String getPropertiesFilePath() {
String path = System.getProperty("user.home");
if (path == null) {
path = ".";
}
return path + FILE_NAME;
}
public String getGlobalPreference(String name) {
return getProjectPreference(name);
}
public List getGlobalMultivalPreference(String name) {
return getProjectMultivalPreference(name);
}
public void setGlobalPreference(String name, String value) {
setProjectPreference(name, value);
}
public void setGlobalMultivalPreference(String name, List values) {
setProjectMultivalPreference(name, values);
}
private void loadProperties(String path) {
if (LangUtil.isEmpty(path)) {
return;
}
File file = new File(path);
if (!file.canRead()) {
return;
}
FileInputStream in = null;
try {
path = getPropertiesFilePath();
in = new FileInputStream(file);
properties.load(in);
} catch (IOException ioe) {
Message msg = new Message("Error reading properties from " + path,IMessage.ERROR,ioe,null);
Ajde.getDefault().getMessageHandler().handleMessage(msg);
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
// ignore
}
}
}
}
public void saveProperties() {
if (!persist) return;
FileOutputStream out = null;
String path = null;
try {
path = getPropertiesFilePath();
out = new FileOutputStream(path);
properties.store(out, "AJDE Settings");
} catch (IOException ioe) {
Message msg = new Message("Error writing properties to " + path,IMessage.ERROR,ioe,null);
Ajde.getDefault().getMessageHandler().handleMessage(msg);
} finally {
if (null != out) {
try {
out.close();
} catch (IOException e) {
// ignore
}
}
}
}
}