/**
* AstrosoftPref.java
* Created On 2005, Nov 18, 2005 7:06:42 PM
* @author E. Rajasekar
*/
package app.astrosoft.pref;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.BackingStoreException;
import java.util.prefs.PreferenceChangeListener;
import java.util.prefs.Preferences;
import app.astrosoft.beans.Place;
import app.astrosoft.consts.Ayanamsa;
import app.astrosoft.consts.Language;
import app.astrosoft.util.AstroUtil;
public class AstrosoftPref {
private static final Logger log = Logger.getLogger(AstrosoftPref.class.getName());
public static enum Preference {
Language, PanCalcTime, EphCalcTime, Ayanamsa, Place, City, State, Country, Longitude, Latitude, TimeZone, IsInitialized,
AcrobatExe, AstrosoftFilesDir;
}
private static double defaultEphCalcTime = 0.0; // 12.00 AM
private static double defaultPanCalcTime = 6.00; // 12.00 AM
private static boolean defaultIsInitialized = false;
public static String defaultAcrobatExecutable = "";
private static String defaultAstrosoftFilesDir = System.getProperty("user.home") + File.separator;
Preferences root = Preferences.systemNodeForPackage(AstrosoftPref.class);
public AstrosoftPref() {
if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
defaultAstrosoftFilesDir = defaultAstrosoftFilesDir + File.separator + "My Documents" + File.separator;
}
if (root.getBoolean(Preference.IsInitialized.name(),
defaultIsInitialized) == false) {
log.info("Initializing Astrosoft Preferences ");
setDefaults();
}
}
public void setLanguage(Language language) {
root.put(Preference.Language.name(), language.name());
flush();
}
public void setIsInitialized(boolean initialized) {
root.putBoolean(Preference.IsInitialized.name(), initialized);
flush();
}
public void setPanCalcTime(double time) {
root.putDouble(Preference.PanCalcTime.name(), time);
flush();
}
public void setEphCalcTime(double time) {
root.putDouble(Preference.EphCalcTime.name(), time);
flush();
}
public void setAyanamsa(Ayanamsa ayanamsa) {
root.put(Preference.Ayanamsa.name(), ayanamsa.name());
flush();
}
public void setPlace(Place place) {
root.node(Preference.Place.name()).put(Preference.City.name(),
place.city());
root.node(Preference.Place.name()).put(Preference.State.name(),
place.state());
root.node(Preference.Place.name()).put(Preference.Country.name(),
place.country());
root.node(Preference.Place.name()).putDouble(
Preference.Longitude.name(), place.longitude());
root.node(Preference.Place.name()).putDouble(
Preference.Latitude.name(), place.latitude());
root.node(Preference.Place.name()).put(
Preference.TimeZone.name(), place.astrosoftTimeZone().id());
flush();
}
public void setAcrobatExecutable(String acrobatExecutable){
root.put(Preference.AcrobatExe.name(),acrobatExecutable);
flush();
}
public void setAstrosoftFilesDir(String dir){
root.put(Preference.AstrosoftFilesDir.name(),dir);
flush();
}
private void setDefaults() {
setLanguage(Language.getDefault());
setIsInitialized(true);
setPanCalcTime(defaultPanCalcTime);
setEphCalcTime(defaultEphCalcTime);
setAyanamsa(Ayanamsa.getDefault());
setPlace(Place.getDefault());
setAcrobatExecutable(defaultAcrobatExecutable);
setAstrosoftFilesDir(defaultAstrosoftFilesDir);
}
public void flush(){
try {
root.flush();
} catch (BackingStoreException e) {
log.log(Level.SEVERE, "Exception in flusing preferences " ,e);
}
}
public Ayanamsa getAyanamsa(){
return Enum.valueOf(Ayanamsa.class,root.get(Preference.Ayanamsa.name(), Ayanamsa.getDefault().name()));
}
public Language getLanguage() {
return Enum.valueOf(Language.class,root.get(Preference.Language.name(), Language.getDefault().name()));
}
public double getEphCalcTime(){
return root.getDouble(Preference.EphCalcTime.name(), defaultEphCalcTime);
}
public double getPanCalcTime(){
return root.getDouble(Preference.PanCalcTime.name(), defaultPanCalcTime);
}
public Place getPlace() {
Place defaultPlace = Place.getDefault();
Preferences placeNode = root.node("Place");
String city = placeNode.get(Preference.City.name(),defaultPlace.city());
String state = placeNode.get(Preference.State.name(),defaultPlace.state());
String country = placeNode.get(Preference.Country.name(),defaultPlace.country());
double latitude = placeNode.getDouble(Preference.Latitude.name(),defaultPlace.latitude());
double longitude = placeNode.getDouble(Preference.Longitude.name(),defaultPlace.longitude());
String timeZone = placeNode.get(Preference.TimeZone.name(),defaultPlace.astrosoftTimeZone().id());
return new Place(city,state,country, latitude, longitude, timeZone);
}
public String getAcrobatExecutable(){
return root.get(Preference.AcrobatExe.name(), defaultAcrobatExecutable);
}
public String getAstrosoftFilesDir(){
return root.get(Preference.AstrosoftFilesDir.name(), defaultAstrosoftFilesDir);
}
private void clearAll() {
try {
root.clear();
for (String child : root.childrenNames()) {
root.node(child).removeNode();
}
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
AstrosoftPref pref = new AstrosoftPref();
//pref.clearAll();
pref.root.exportSubtree(System.out);
}
public void preferenceChanged(Preference preference, Object value) {
//System.out.println(preference + " changed to " + value);
switch (preference) {
case Language:
setLanguage((Language) value);
break;
case Ayanamsa:
setAyanamsa((Ayanamsa) value);
break;
case PanCalcTime:
setPanCalcTime(AstroUtil.dateToTimeDouble((Date)value));
break;
case EphCalcTime:
setEphCalcTime(AstroUtil.dateToTimeDouble((Date)value));
break;
case Place:
setPlace((Place) value);
break;
}
//FIXME Remove
/*try {
root.exportSubtree(System.out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BackingStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
try {
root.flush();
} catch (BackingStoreException e) {
log.log(Level.SEVERE, "Exception in flusing preferences " ,e);
}
}
public void addPreferenceChangeListener(PreferenceChangeListener prefChangeListener){
root.addPreferenceChangeListener(prefChangeListener);
}
}