Fix and fine-tune suppress_nulls.
[squelch.git] / src / main / java / net / jaekl / squelch / stmt / PSet.java
index a64edc2d926f648c12ce87e0fc74d59baedf0ca2..1431ab9267d141260c168856b8438d88cf6ae011 100644 (file)
@@ -7,10 +7,9 @@ import java.sql.SQLException;
 import java.util.Locale;
 
 import net.jaekl.squelch.db.DbDriver;
+import net.jaekl.squelch.db.Setting;
 
 public class PSet extends Stmt {
-       private static final String SUPPRESS_NULLS = "suppress_nulls";
-
        @Override
        public boolean handles(String line) {
                if (null == line) {
@@ -24,72 +23,40 @@ public class PSet extends Stmt {
        public int exec(DbDriver driver, Connection conn, PrintWriter pw, String line) 
                        throws IOException, SQLException 
        {
-               String trimmed = line.substring(6).trim();
+               String trimmed = line.substring(5).trim();
 
                int equPos = trimmed.indexOf('=');
                
                if (equPos > 0) {
                        return setValue(driver, pw, trimmed, equPos);
                }
-               else if (trimmed.length() > 0) {
-                       return displayValue(driver, pw, trimmed);
-               }
                else {
-                       // TODO:  StringTable
-                       pw.println("???");
-                       return 0;       
+                       return displayValue(driver, pw, trimmed);
                }
        }
        
        private int displayValue(DbDriver driver, PrintWriter pw, String trimmed)
        {
-               String lcName = trimmed.toLowerCase(Locale.CANADA);
+               Setting[] settings = driver.getSettings();
                
-               if (SUPPRESS_NULLS.equals(lcName)) {
-                       // TODO:  StringTable
-                       pw.println(SUPPRESS_NULLS + ":  " + (driver.isSuppressNulls() ? "on" : "off"));
-               }
-               else {
-                       // TODO:  StringTable
-                       pw.println("??? Unrecognized setting:  \"" + trimmed + "\".  Ignored.");
+               for (Setting setting : settings) {
+                       String lcName = trimmed.toLowerCase(Locale.CANADA);
+                       
+                       if ("".equals(lcName) || setting.getName().equals(lcName)) {
+                               // TODO:  StringTable
+                               pw.println(setting.getName() + ":  " + (setting.getBoolean()));
+                       }
                }
                
                return 0;
        }
        
-       private boolean parseBoolean(String value) 
-       {
-               if (null == value) {
-                       return false;
-               }
-               
-               String setting = value.trim().toLowerCase(Locale.CANADA);
-               
-               if (setting.equals("yes") || setting.equals("true")  || setting.equals("on")  || setting.equals("1")) {
-                       return true;
-               }
-               if (setting.equals("no")  || setting.equals("false") || setting.equals("off") || setting.equals("0")) {
-                       return false;
-               }
-               
-               throw new IllegalArgumentException("UnrecognizedBooleanValue:  \"" + value + "\"");
-       }
-       
        private int setValue(DbDriver driver, PrintWriter pw, String trimmed, int equPos)
        {
                String name = trimmed.substring(0, equPos).trim();
                String value = trimmed.substring(equPos + 1).trim();
                
-               String lcName = name.toLowerCase(Locale.CANADA);
-                       
-               if (lcName.equals("suppress_nulls")) {
-                       driver.setSuppressNulls(parseBoolean(value));
-               }
-               else {
-                       // TODO:  Stringtable
-                       pw.println("??? Unrecognized setting name \"" + name + "\" ignored.");
-                       return 0;
-               }
+               driver.set(name, value);
                
                return 1;
        }