org.aspectj.ajde.ui.internal.UserPreferencesStore Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aspectjtools Show documentation
Show all versions of aspectjtools Show documentation
Tools from the AspectJ project
/* *******************************************************************
* 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 v 2.0
* which accompanies this distribution and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
*
* 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.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());
}
}
@Override
public String getProjectPreference(String name) {
return properties.getProperty(name);
}
@Override
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;
}
@Override
public void setProjectPreference(String name, String value) {
properties.setProperty(name, value);
saveProperties();
}
@Override
public void setProjectMultivalPreference(String name, List values) {
StringBuilder valuesString = new StringBuilder();
for (Object value : values) {
valuesString.append((String)value).append(';');
}
properties.setProperty(name, valuesString.toString());
saveProperties();
}
public static String getPropertiesFilePath() {
String path = System.getProperty("user.home");
if (path == null) {
path = ".";
}
return path + FILE_NAME;
}
@Override
public String getGlobalPreference(String name) {
return getProjectPreference(name);
}
@Override
public List getGlobalMultivalPreference(String name) {
return getProjectMultivalPreference(name);
}
@Override
public void setGlobalPreference(String name, String value) {
setProjectPreference(name, value);
}
@Override
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
}
}
}
}
}