Save preference key if it didn't exist before

This commit is contained in:
SiboVG 2023-04-07 01:06:15 +02:00
parent 423295fe52
commit abb742bcc6

View File

@ -125,6 +125,21 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
PREFNODE.put("OpenRocketVersion", BuildProperties.getVersion()); PREFNODE.put("OpenRocketVersion", BuildProperties.getVersion());
} }
/**
* Checks if a certain key exists in the node
* @param node node to check the keys of.
* @param key key to check
* @return true if the key is stored in the preferences, false otherwise
*/
private boolean keyExists(Preferences node, String key) {
try {
return Arrays.asList(node.keys()).contains(key);
} catch (BackingStoreException e) {
e.printStackTrace();
return false;
}
}
/** /**
* Return a string preference. * Return a string preference.
* *
@ -134,12 +149,28 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
*/ */
@Override @Override
public String getString(String key, String def) { public String getString(String key, String def) {
if (!keyExists(PREFNODE, key) && key != null && def != null) {
PREFNODE.put(key, def);
try {
PREFNODE.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
return PREFNODE.get(key, def); return PREFNODE.get(key, def);
} }
@Override @Override
public String getString(String directory, String key, String defaultValue) { public String getString(String directory, String key, String defaultValue) {
Preferences p = PREFNODE.node(directory); Preferences p = PREFNODE.node(directory);
if (!keyExists(p, key) && key != null && defaultValue != null) {
p.put(key, defaultValue);
try {
p.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
return p.get(key, defaultValue); return p.get(key, defaultValue);
} }
@ -179,6 +210,16 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
*/ */
@Override @Override
public boolean getBoolean(String key, boolean def) { public boolean getBoolean(String key, boolean def) {
// Check if the key exists
if (!keyExists(PREFNODE, key) && key != null) {
// Save the default value
PREFNODE.putBoolean(key, def);
try {
PREFNODE.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
return PREFNODE.getBoolean(key, def); return PREFNODE.getBoolean(key, def);
} }
@ -196,6 +237,14 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
@Override @Override
public int getInt(String key, int defaultValue) { public int getInt(String key, int defaultValue) {
if (!keyExists(PREFNODE, key) && key != null) {
PREFNODE.putInt(key, defaultValue);
try {
PREFNODE.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
return PREFNODE.getInt(key, defaultValue); return PREFNODE.getInt(key, defaultValue);
} }
@ -207,6 +256,14 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
@Override @Override
public double getDouble(String key, double defaultValue) { public double getDouble(String key, double defaultValue) {
if (!keyExists(PREFNODE, key) && key != null) {
PREFNODE.putDouble(key, defaultValue);
try {
PREFNODE.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
return PREFNODE.getDouble(key, defaultValue); return PREFNODE.getDouble(key, defaultValue);
} }