a64edc2d926f648c12ce87e0fc74d59baedf0ca2
[squelch.git] / src / main / java / net / jaekl / squelch / stmt / PSet.java
1 package net.jaekl.squelch.stmt;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.sql.Connection;
6 import java.sql.SQLException;
7 import java.util.Locale;
8
9 import net.jaekl.squelch.db.DbDriver;
10
11 public class PSet extends Stmt {
12         private static final String SUPPRESS_NULLS = "suppress_nulls";
13
14         @Override
15         public boolean handles(String line) {
16                 if (null == line) {
17                         return false;
18                 }
19                 
20                 return line.toLowerCase(Locale.CANADA).startsWith("\\pset ");
21         }
22
23         @Override
24         public int exec(DbDriver driver, Connection conn, PrintWriter pw, String line) 
25                         throws IOException, SQLException 
26         {
27                 String trimmed = line.substring(6).trim();
28
29                 int equPos = trimmed.indexOf('=');
30                 
31                 if (equPos > 0) {
32                         return setValue(driver, pw, trimmed, equPos);
33                 }
34                 else if (trimmed.length() > 0) {
35                         return displayValue(driver, pw, trimmed);
36                 }
37                 else {
38                         // TODO:  StringTable
39                         pw.println("???");
40                         return 0;       
41                 }
42         }
43         
44         private int displayValue(DbDriver driver, PrintWriter pw, String trimmed)
45         {
46                 String lcName = trimmed.toLowerCase(Locale.CANADA);
47                 
48                 if (SUPPRESS_NULLS.equals(lcName)) {
49                         // TODO:  StringTable
50                         pw.println(SUPPRESS_NULLS + ":  " + (driver.isSuppressNulls() ? "on" : "off"));
51                 }
52                 else {
53                         // TODO:  StringTable
54                         pw.println("??? Unrecognized setting:  \"" + trimmed + "\".  Ignored.");
55                 }
56                 
57                 return 0;
58         }
59         
60         private boolean parseBoolean(String value) 
61         {
62                 if (null == value) {
63                         return false;
64                 }
65                 
66                 String setting = value.trim().toLowerCase(Locale.CANADA);
67                 
68                 if (setting.equals("yes") || setting.equals("true")  || setting.equals("on")  || setting.equals("1")) {
69                         return true;
70                 }
71                 if (setting.equals("no")  || setting.equals("false") || setting.equals("off") || setting.equals("0")) {
72                         return false;
73                 }
74                 
75                 throw new IllegalArgumentException("UnrecognizedBooleanValue:  \"" + value + "\"");
76         }
77         
78         private int setValue(DbDriver driver, PrintWriter pw, String trimmed, int equPos)
79         {
80                 String name = trimmed.substring(0, equPos).trim();
81                 String value = trimmed.substring(equPos + 1).trim();
82                 
83                 String lcName = name.toLowerCase(Locale.CANADA);
84                         
85                 if (lcName.equals("suppress_nulls")) {
86                         driver.setSuppressNulls(parseBoolean(value));
87                 }
88                 else {
89                         // TODO:  Stringtable
90                         pw.println("??? Unrecognized setting name \"" + name + "\" ignored.");
91                         return 0;
92                 }
93                 
94                 return 1;
95         }
96 }