/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingspectator.monitor.ui.prefs;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import org.eclipse.jface.preference.IPreferenceStore;
import edu.illinois.codingspectator.monitor.core.submission.LocalSVNManager;
import edu.illinois.codingspectator.monitor.ui.Activator;
import edu.illinois.codingspectator.monitor.ui.Messages;
import edu.illinois.codingspectator.monitor.ui.RunningModes;
import edu.illinois.codingspectator.monitor.ui.submission.Submitter;
/**
* This class provides the facade to access the preference store. Since this is a shared resource we
* need to protect it and we do so using a singleton.
*
* @author Mohsen Vakilian
* @author nchen
*/
public class PrefsFacade {
private static final String TESTING_UUID= "00000000-0000-0000-0000-000000000000"; //$NON-NLS-1$
// This method of providing a thread safe singleton comes from
// http://www.ibm.com/developerworks/java/library/j-dcl.html
private static PrefsFacade instance= new PrefsFacade();
private PrefsFacade() {
}
public static PrefsFacade getInstance() {
return instance;
}
public IPreferenceStore getPreferenceStore() {
return Activator.getDefault().getPreferenceStore();
}
private String getPreferenceStringValue(String key) {
return getPreferenceStore().getString(key);
}
private void setPreferenceValue(String key, String value) {
getPreferenceStore().setValue(key, value);
}
private boolean isUUIDSet() {
return !(getPreferenceStringValue(Messages.UploadingPreferencePage_UUIDFieldPreferenceKey)).isEmpty();
}
private void setUUIDLazily() {
if (!isUUIDSet()) {
String generatedID;
if (RunningModes.isInProductionMode()) {
generatedID= new LocalSVNManager(Submitter.WATCHED_FOLDER).getSVNWorkingCopyRepositoryUUID();
if (generatedID.isEmpty()) {
generatedID= UUIDGenerator.generateID();
}
} else {
generatedID= TESTING_UUID;
}
setUUID(generatedID);
}
}
private synchronized void setUUID(String uiud) {
setPreferenceValue(Messages.UploadingPreferencePage_UUIDFieldPreferenceKey, uiud);
}
public synchronized String getAndSetUUIDLazily() {
setUUIDLazily();
return getPreferenceStringValue(Messages.UploadingPreferencePage_UUIDFieldPreferenceKey);
}
public synchronized boolean getForcedAutoUpdatePref() {
return getPreferenceStore().getBoolean(Messages.PrefsFacade_ForcedAutomaticUpdateHasBeenSetKey);
}
public synchronized void setForcedAutoUpdatePref(boolean value) {
getPreferenceStore().setValue(Messages.PrefsFacade_ForcedAutomaticUpdateHasBeenSetKey, value);
}
public synchronized long getLastUploadTime() throws ParseException {
return getDateFormat().parse(getPreferenceStringValue(Messages.PrefsFacade_LastUploadTimeKey)).getTime();
}
public synchronized void updateLastUploadTime() {
setPreferenceValue(Messages.PrefsFacade_LastUploadTimeKey, getDateFormat().format(new Date()));
}
private DateFormat getDateFormat() {
return DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
}
}