001 package net.minecraft.server.dedicated;
002
003 import java.io.File;
004 import java.io.FileInputStream;
005 import java.io.FileOutputStream;
006 import java.io.IOException;
007 import java.util.Properties;
008 import java.util.logging.Level;
009 import java.util.logging.Logger;
010
011 public class PropertyManager
012 {
013 /** Reference to the logger. */
014 public static Logger logger = Logger.getLogger("Minecraft");
015 private Properties properties = new Properties();
016 private File associatedFile;
017
018 public PropertyManager(File par1File)
019 {
020 this.associatedFile = par1File;
021
022 if (par1File.exists())
023 {
024 FileInputStream var2 = null;
025
026 try
027 {
028 var2 = new FileInputStream(par1File);
029 this.properties.load(var2);
030 }
031 catch (Exception var12)
032 {
033 logger.log(Level.WARNING, "Failed to load " + par1File, var12);
034 this.logMessageAndSave();
035 }
036 finally
037 {
038 if (var2 != null)
039 {
040 try
041 {
042 var2.close();
043 }
044 catch (IOException var11)
045 {
046 ;
047 }
048 }
049 }
050 }
051 else
052 {
053 logger.log(Level.WARNING, par1File + " does not exist");
054 this.logMessageAndSave();
055 }
056 }
057
058 /**
059 * logs an info message then calls saveSettingsToFile Yes this appears to be a potential stack overflow - these 2
060 * functions call each other repeatdly if an exception occurs.
061 */
062 public void logMessageAndSave()
063 {
064 logger.log(Level.INFO, "Generating new properties file");
065 this.saveProperties();
066 }
067
068 /**
069 * Writes the properties to the properties file.
070 */
071 public void saveProperties()
072 {
073 FileOutputStream var1 = null;
074
075 try
076 {
077 var1 = new FileOutputStream(this.associatedFile);
078 this.properties.store(var1, "Minecraft server properties");
079 }
080 catch (Exception var11)
081 {
082 logger.log(Level.WARNING, "Failed to save " + this.associatedFile, var11);
083 this.logMessageAndSave();
084 }
085 finally
086 {
087 if (var1 != null)
088 {
089 try
090 {
091 var1.close();
092 }
093 catch (IOException var10)
094 {
095 ;
096 }
097 }
098 }
099 }
100
101 /**
102 * Returns this PropertyManager's file object used for property saving.
103 */
104 public File getPropertiesFile()
105 {
106 return this.associatedFile;
107 }
108
109 /**
110 * Gets a property. If it does not exist, set it to the specified value.
111 */
112 public String getProperty(String par1Str, String par2Str)
113 {
114 if (!this.properties.containsKey(par1Str))
115 {
116 this.properties.setProperty(par1Str, par2Str);
117 this.saveProperties();
118 }
119
120 return this.properties.getProperty(par1Str, par2Str);
121 }
122
123 /**
124 * Gets an integer property. If it does not exist, set it to the specified value.
125 */
126 public int getIntProperty(String par1Str, int par2)
127 {
128 try
129 {
130 return Integer.parseInt(this.getProperty(par1Str, "" + par2));
131 }
132 catch (Exception var4)
133 {
134 this.properties.setProperty(par1Str, "" + par2);
135 return par2;
136 }
137 }
138
139 /**
140 * Gets a boolean property. If it does not exist, set it to the specified value.
141 */
142 public boolean getBooleanProperty(String par1Str, boolean par2)
143 {
144 try
145 {
146 return Boolean.parseBoolean(this.getProperty(par1Str, "" + par2));
147 }
148 catch (Exception var4)
149 {
150 this.properties.setProperty(par1Str, "" + par2);
151 return par2;
152 }
153 }
154
155 /**
156 * Saves an Object with the given property name.
157 */
158 public void setProperty(String par1Str, Object par2Obj)
159 {
160 this.properties.setProperty(par1Str, "" + par2Obj);
161 }
162 }