/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.options.impl;
import java.io.File;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.jboss.tools.common.model.options.*;
import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.common.util.FileUtil;
public class PreferenceImportExport implements Preferences.IPropertyChangeListener {
static String MODEL_PREFERENCES = "model_preferences"; //$NON-NLS-1$
static PreferenceImportExport instance;
public static PreferenceImportExport getInstance() {
if(instance == null) {
instance = new PreferenceImportExport();
}
return instance;
}
int lock = 0;
public PreferenceImportExport() {
Runnable r = new Runnable() {
public void run() {
getPreferences().addPropertyChangeListener(PreferenceImportExport.this);
}
};
new Thread(r).start();
}
public void lock() {
lock++;
}
public void unlock() {
if(lock > 0) lock--;
}
public boolean isLocked() {
return lock > 0;
}
public void propertyChange(PropertyChangeEvent event) {
if(isLocked()) return;
if(!event.getProperty().equals(MODEL_PREFERENCES)) return;
String newValue = (String)event.getNewValue();
XStudioLoaderPeer peer = XStudioLoaderPeer.instance();
File f = peer.getProjectPreferencesFile();
if(f != null) {
String text = f.exists() ? FileUtil.readFile(f) : null;
if(newValue != null && newValue.equals(text)) return;
if(newValue == null && text == null) return;
if(newValue != null) {
FileUtil.writeFile(f, newValue);
} else {
f.delete();
}
lock();
try {
PreferenceModelUtilities.getPreferenceModel().load();
} finally {
unlock();
}
}
}
private Preferences getPreferences() {
return ModelPlugin.getDefault().getPluginPreferences();
}
public void apply(File f) {
if(isLocked()) return;
lock();
try {
if(f == null || !f.exists()) return;
String text = FileUtil.readFile(f);
if(text != null && text.length() > 0) {
String oldValue = getPreferences().getString(MODEL_PREFERENCES);
if(text.equals(oldValue)) return;
getPreferences().setValue(MODEL_PREFERENCES, text);
}
} finally {
unlock();
}
}
}