00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 package org.objectweb.cjdbc.controller.monitoring;
00025
00026 import org.apache.regexp.RE;
00027 import org.apache.regexp.RESyntaxException;
00028 import org.objectweb.cjdbc.common.sql.AbstractRequest;
00029 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00030
00031
00032
00033
00034
00035
00036
00037 public class SQLMonitoringRule
00038 {
00039 private RE queryPattern;
00040 private boolean isCaseSentive;
00041 private boolean applyToSkeleton;
00042 private boolean monitoring;
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 public SQLMonitoringRule(
00053 String queryPattern,
00054 boolean isCaseSentive,
00055 boolean applyToSkeleton,
00056 boolean monitoring)
00057 {
00058 try
00059 {
00060 this.queryPattern = new RE(queryPattern);
00061 }
00062 catch (RESyntaxException e)
00063 {
00064 throw new RuntimeException(
00065 "Invalid regexp in SQL Monitoring rule (" + e + ")");
00066 }
00067 this.isCaseSentive = isCaseSentive;
00068 if (isCaseSentive)
00069 this.queryPattern.setMatchFlags(RE.MATCH_NORMAL);
00070 else
00071 this.queryPattern.setMatchFlags(RE.MATCH_CASEINDEPENDENT);
00072 this.applyToSkeleton = applyToSkeleton;
00073 this.monitoring = monitoring;
00074 }
00075
00076
00077
00078
00079
00080
00081 public boolean isCaseSentive()
00082 {
00083 return isCaseSentive;
00084 }
00085
00086
00087
00088
00089
00090
00091 public boolean isMonitoring()
00092 {
00093 return monitoring;
00094 }
00095
00096
00097
00098
00099
00100
00101 public String getQueryPattern()
00102 {
00103 return queryPattern.toString();
00104 }
00105
00106
00107
00108
00109
00110
00111 public void setCaseSentive(boolean b)
00112 {
00113 isCaseSentive = b;
00114 }
00115
00116
00117
00118
00119
00120
00121 public void setMonitoring(boolean b)
00122 {
00123 monitoring = b;
00124 }
00125
00126
00127
00128
00129
00130
00131 public void setQueryPattern(String queryPattern)
00132 {
00133 try
00134 {
00135 this.queryPattern = new RE(queryPattern);
00136 }
00137 catch (RESyntaxException e)
00138 {
00139 throw new RuntimeException(
00140 "Invalid regexp in SQL Monitoring rule (" + e + ")");
00141 }
00142 }
00143
00144
00145
00146
00147
00148
00149 public boolean isApplyToSkeleton()
00150 {
00151 return applyToSkeleton;
00152 }
00153
00154
00155
00156
00157
00158
00159 public void setApplyToSkeleton(boolean b)
00160 {
00161 applyToSkeleton = b;
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171 public String matches(AbstractRequest request)
00172 {
00173 if (applyToSkeleton)
00174 {
00175 String skel = request.getSqlSkeleton();
00176 if (skel == null)
00177 return null;
00178 else
00179 {
00180 if (queryPattern.match(skel))
00181 return skel;
00182 else
00183 return null;
00184 }
00185 }
00186 else
00187 {
00188 if (queryPattern.match(request.getSQL()))
00189 return request.getSQL();
00190 else
00191 return null;
00192 }
00193 }
00194
00195
00196
00197
00198 public String getXml()
00199 {
00200 String info =
00201 "<"
00202 + DatabasesXmlTags.ELT_SQLMonitoringRule
00203 + " "
00204 + DatabasesXmlTags.ATT_queryPattern
00205 + "=\""
00206 + getQueryPattern()
00207 + "\" "
00208 + DatabasesXmlTags.ATT_caseSensitive
00209 + "=\""
00210 + isCaseSentive()
00211 + "\" "
00212 + DatabasesXmlTags.ATT_applyToSkeleton
00213 + "=\""
00214 + isApplyToSkeleton()
00215 + "\" "
00216 + DatabasesXmlTags.ATT_monitoring
00217 + "=\"";
00218 if (isMonitoring())
00219 info += "on";
00220 else
00221 info += "off";
00222 info += "\"/>";
00223 return info;
00224 }
00225
00226 }