001: // THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
002: // CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
003: // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
004: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
005: // OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
006: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
007: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
008: // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
009: // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
010: // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
011: // EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
012: // POSSIBILITY OF SUCH DAMAGE.
013: //
014: // Copyright 2000-2005 © Softaris Pty.Ltd. All Rights Reserved.
015: package com.metaboss.applications.designstudio;
016:
017: import java.io.File;
018: import java.io.FileInputStream;
019: import java.io.FileOutputStream;
020: import java.util.Properties;
021:
022: /**
023: * @author Rost Vashevnik
024: * @version 1.0
025: */
026:
027: public class UserPreferences {
028: // null untill intialised for the particular application
029: private static String cApplicationName = null;
030: private static String cUserPreferencesFileName = null;
031: private static Properties cUserPreferences = null;
032: private static boolean cModified = false;
033:
034: /** This method must be called first in order to initialise UserPreferences for a particular application
035: * usually done once very early in the main function */
036: public static synchronized void initialise(String pApplicationName) {
037: cUserPreferences = new Properties();
038: cApplicationName = pApplicationName;
039: cUserPreferencesFileName = System.getProperty("user.home")
040: + System.getProperty("file.separator") + "softaris"
041: + System.getProperty("file.separator")
042: + pApplicationName
043: + System.getProperty("file.separator")
044: + "userpreferences.prop";
045: // Try to load initial properties if possible
046: try {
047: File lPropFile = new File(cUserPreferencesFileName);
048: if (lPropFile.isFile() && lPropFile.exists()
049: && lPropFile.canRead())
050: cUserPreferences.load(new FileInputStream(lPropFile));
051: else {
052: // Check if directory exists and create one if necessary
053: File lUserPreferencesDirectory = new File(System
054: .getProperty("user.home")
055: + System.getProperty("file.separator")
056: + "softaris"
057: + System.getProperty("file.separator")
058: + pApplicationName);
059: if (!lUserPreferencesDirectory.exists())
060: lUserPreferencesDirectory.mkdirs();
061: }
062: } catch (java.io.FileNotFoundException e) {
063: e.printStackTrace();
064: } catch (java.io.IOException e) {
065: e.printStackTrace();
066: }
067: }
068:
069: /** Must be called occasionally after modifications to save properties back into file */
070: public static synchronized void save() {
071: if (cUserPreferences == null)
072: throw new RuntimeException(
073: "UserPreferences singleton is not initialised");
074: if (cModified) {
075: try {
076: cUserPreferences.store(new FileOutputStream(
077: cUserPreferencesFileName, false),
078: "User Prefrences for the " + cApplicationName
079: + " application");
080: cModified = false;
081: } catch (java.io.FileNotFoundException e) {
082: e.printStackTrace();
083: } catch (java.io.IOException e) {
084: e.printStackTrace();
085: }
086: }
087: }
088:
089: /** Retrieves specifeid user property or null if specified property has not been found */
090: public static synchronized String getProperty(String pKey) {
091: if (cUserPreferences == null)
092: throw new RuntimeException(
093: "UserPreferences singleton is not initialised");
094: return cUserPreferences.getProperty(pKey);
095: }
096:
097: /** Retrieves specifeid user property or default value if specified property has not been found */
098: public static synchronized String getProperty(String pKey,
099: String pDefaultValue) {
100: if (cUserPreferences == null)
101: throw new RuntimeException(
102: "UserPreferences singleton is not initialised");
103: return cUserPreferences.getProperty(pKey, pDefaultValue);
104: }
105:
106: /** Sets specified property to the specified value.
107: * @return previous value associated with the key or null if none given */
108: public static synchronized String setProperty(String pKey,
109: String pValue) {
110: if (cUserPreferences == null)
111: throw new RuntimeException(
112: "UserPreferences singleton is not initialised");
113: String pOldValue = (String) cUserPreferences.setProperty(pKey,
114: pValue);
115: // Maintain modified flag
116: if ((pOldValue == null) || (!pOldValue.equals(pValue)))
117: cModified = true;
118: return pOldValue;
119: }
120: }
|