package com.zky.para;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import com.zky.pub.DbConn;
import com.zky.pub.HashFmlBuf;
/**
* @author dy
*
* 同步参数到各个参数实体Bean中
*
*/
public class SyncPara extends Thread {
private Connection con = null;
private ResultSet rs = null;
private Statement st = null;
private String sql = "select a.table_name,b.sortcolumn,b.sortorder,a.updatetime from td_s_tableinfo a,td_s_tableinfo_web b where upper(a.table_name) = upper(b.table_name)";
private String updateSql = null;
private String table_name;
private String class_name;
private HashMap hm = new HashMap();
private int SleepTime = 60000;
private HashMap table_hm = new HashMap();
/**
* 构造函数 启动线程
*
*/
public SyncPara() {
start();
}
/**
* 同步方法
*/
private void sync() {
try {
System.gc();
con = (Connection) DbConn.getConn();
st = con.createStatement();
rs = st.executeQuery(sql);
String updatetime;
String sortColumn = "";
String sortOrder = "";
int i = 0;
while (rs.next()) {
table_name = rs.getString("TABLE_NAME").toUpperCase();
sortColumn = rs.getString("sortColumn");
sortOrder = rs.getString("sortOrder");
updatetime = (String) table_hm.get(table_name);
if (updatetime != null
&& updatetime.equals(rs.getString("updatetime"))) {
continue;
}
table_hm.put(table_name, rs.getString("updatetime"));
i++;
try {
ParaTable p = new ParaTable(table_name, sortColumn,
sortOrder);
p.init();
hm.remove(table_name);
hm.put(table_name, p);
} catch (Exception e) {
e.printStackTrace();
}
}
rs.close();
st.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (st != null)
st.close();
if (con != null) {
con.close();
}
} catch (Exception e) {
}
}
}
/**
* 线程 休眠一段时间后检查参数是否有更新
*/
public void run() {
while (true) {
try {
sync();
Thread.sleep(SleepTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 根据表名取出所对应的参数表
* @param tableName
* @return
*/
public ParaTable getTable(String tableName) {
ParaTable table = (ParaTable) hm.get(tableName.toUpperCase());
try {
if (table == null)
throw new Exception("表名“" + tableName + "”出错或该表不属于参数表!");
} catch (Exception e) {
e.printStackTrace();
}
return table;
}
/**
* 根据表名、数据列、显示列、过滤列、过滤值来生成下拉框的内容
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param FilterColumn
* @param FilterValue
* @return
*/
public String getSelectParaFilter(String TableName, String DataColumn,
String DisplayColumn, String FilterColumn, String FilterValue) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
StringBuffer rtn = new StringBuffer("");
String ls_datacolumn = null, ls_displaycolumn = null;
String ls_filtercolumn = "";
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
FilterColumn = FilterColumn.toUpperCase();
if (FilterColumn.startsWith("!")) {
FilterColumn = FilterColumn.replaceFirst("!", "");
for (int i = 0; i < li_count; i++) {
ls_filtercolumn = buf.fget(FilterColumn, i);
if (ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
rtn.append("\n");
}
} else {
for (int i = 0; i < li_count; i++) {
ls_filtercolumn = buf.fget(FilterColumn, i);
if (!ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
rtn.append("\n");
}
}
return rtn.toString();
}
//==================================================旧系统
/**
* @param TableName
* @param DataCol
* @param DisplayCol
* @return
*/
public ArrayList getParaList(String TableName, String DataCol,
String DisplayCol) {
return getFilterParaList(TableName, DataCol, DisplayCol, "", "");
}
/**
* @param TableName
* @param DataCol
* @param DisplayCol
* @param FilterCol
* @param FilterValue
* @return
*/
public ArrayList getFilterParaList(String TableName, String DataCol,
String DisplayCol, String FilterCol, String FilterValue) {
ParaTable table = getTable(TableName);
int iCount = table.getRowCount();
if (iCount == 0) {
return null;
}
ArrayList list = new ArrayList();
String sDataCol = "", sDisplayCol = "", sFilterValue = "";
if (FilterCol.equals("")) {
for (int i = 0; i < iCount; i++) {
sDataCol = table.getColValue(DataCol.toUpperCase(), i);
sDisplayCol = table.getColValue(DisplayCol.toUpperCase(), i);
list.add(new Row(sDataCol, sDisplayCol));
}
} else {
for (int i = 0; i < iCount; i++) {
sFilterValue = table.getColValue(FilterCol.toUpperCase(), i);
if (FilterValue.equals(sFilterValue)) {
sDataCol = table.getColValue(DataCol.toUpperCase(), i);
sDisplayCol = table
.getColValue(DisplayCol.toUpperCase(), i);
list.add(new Row(sDataCol, sDisplayCol));
}
}
}
return list;
}
/**
* @param TableName
* @param DataCol
* @param DisplayCol
* @param DataValue
* @return
*/
public String getDesc(String TableName, String DataCol, String DisplayCol,
String DataValue) {
HashFmlBuf buf = getBuf(TableName);
String Display = "";
int pos = buf.find(DataCol.toUpperCase(), DataValue);
if (pos == -1)
return Display;
Display = buf.fget(DisplayCol.toUpperCase(), pos);
return Display;
}
/**
* 根据frameworkid过滤
* @param TableName
* @param DataCol
* @param DisplayCol
* @param DataValue
* @param Frameworkid
* @return
*/
public String getDesc(String TableName, String DataCol, String DisplayCol,
String DataValue, String Frameworkid) {
HashFmlBuf buf = getBuf(TableName);
int icount = Integer.parseInt(buf.fget("ROWCOUNT", 0));
String sframeworkid = "", svalue;
for (int i = 0; i < icount; i++) {
sframeworkid = buf.fget("FRAMEWORKID", i);
if (sframeworkid == null)
return getDesc(TableName, DataCol, DisplayCol, DataValue);
if (sframeworkid.equals(Frameworkid)) {
svalue = buf.fget(DataCol.toUpperCase(), i);
if (svalue == null)
return null;
if (svalue.equals(DataValue)) {
return buf.fget(DisplayCol.toUpperCase(), i);
}
}
}
return null;
}
/**
* 通过传入的表名 获取该表对应的实例 ,然后返回该实例中的数据
* @param TableName
* @return 返回一个HashFmlBuf中存放这参数表的数据
*/
public HashFmlBuf getBuf(String TableName) {
return getTable(TableName).getRows();
}
/**
* 根据表名、数据列、显示列、过滤列、过滤值、check框的名称、文字在框的左右标志来生成check框
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param FilterColumn
* @param FilterValue
* @param CheckName
* @param flag
* @return
*/
public String getCheckParaFilter(String TableName, String DataColumn,
String DisplayColumn, String FilterColumn, String FilterValue,
String CheckName, String flag) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null;
String ls_filtercolumn = "", ls_filtervalue = "";
int li_count = 0;
String ls_left_rtn = "", ls_right_rtn = "";
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i);
if (!ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_left_rtn = ls_left_rtn + ls_displaycolumn
+ "";
ls_right_rtn = ls_right_rtn + ""
+ ls_displaycolumn;
}
if (flag == "0") {
return ls_left_rtn;
} else {
return ls_right_rtn;
}
}
/**
*
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @return
*/
public String getSelectPara(String TableName, String DataColumn,
String DisplayColumn) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
StringBuffer ls_rtn = new StringBuffer("");
String ls_datacolumn = null, ls_displaycolumn = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_rtn.append("\n");
}
return ls_rtn.toString();
}
public String getSelectPara(String TableName, String DataColumn,
String DisplayColumn, String Frameworkid) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
StringBuffer ls_rtn = new StringBuffer("");
String ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_frameworkid = buf.fget("FRAMEWORKID", i);
if (ls_frameworkid == null)
return getSelectPara(TableName, DataColumn, DisplayColumn);
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_rtn.append("\n");
}
return ls_rtn.toString();
}
/**
*根据表名、数据列、显示列、默认值来设置下拉列表框的数据
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param selvalue
* @return
*/
public String getdefaultSelectPara(String TableName, String DataColumn,
String DisplayColumn, String selvalue) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
if (selvalue.equals(ls_datacolumn)) {
ls_rtn = ls_rtn + "";
} else {
ls_rtn = ls_rtn + "";
}
}
return ls_rtn;
}
/**
* 首先根据frameworkid过滤,再根据过滤列过滤
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param FilterColumn
* @param FilterValue
* @param Frameworkid
* @return
*/
public String getSelectParaFilter(String TableName, String DataColumn,
String DisplayColumn, String FilterColumn, String FilterValue,
String Frameworkid) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null;
String ls_filtercolumn = "", ls_filtervalue = "";
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_frameworkid = buf.fget("FRAMEWORKID", i);
if (ls_frameworkid == null)
return getSelectParaFilter(TableName, DataColumn,
DisplayColumn, FilterColumn, FilterValue);
if (!ls_frameworkid.equals(Frameworkid))
continue;
ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i);
if (!ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_rtn = ls_rtn + "";
}
return ls_rtn;
}
/**
* 首先根据frameworkid过滤,再根据过滤列过滤
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param FilterColumn
* @param FilterValue
* @param Frameworkid
* @param selvalue
* @return
*/
public String getSelectParaFilter(String TableName, String DataColumn,
String DisplayColumn, String FilterColumn, String FilterValue,
String Frameworkid, String selvalue) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_frameworkid = null;
String ls_filtercolumn = "", ls_filtervalue = "";
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_frameworkid = buf.fget("FRAMEWORKID", i);
if (ls_frameworkid == null)
return getSelectParaFilter(TableName, DataColumn,
DisplayColumn, FilterColumn, FilterValue);
if (!ls_frameworkid.equals(Frameworkid))
continue;
ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i);
if (!ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
if (selvalue.equals(ls_datacolumn)) {
ls_rtn = ls_rtn + "";
} else {
ls_rtn = ls_rtn + "";
}
}
return ls_rtn;
}
/**
* 首先根据Data_code过滤,再根据过滤列过滤
* @param TableName
* @param DataColumn
* @param DisplayColumn
* @param FilterColumn
* @param FilterValue
* @param Data_code
* @param selvalue
* @return
*/
public String getSParaFilter(String TableName, String DataColumn,
String DisplayColumn, String FilterColumn, String FilterValue,
String Datacode, String selvalue) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_datacode = null;
String ls_filtercolumn = "", ls_filtervalue = "";
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_datacode = buf.fget("TYPE_CODE", i);
if (ls_datacode == null)
return getSelectParaFilter(TableName, DataColumn,
DisplayColumn, FilterColumn, FilterValue);
if (ls_datacode.equals(Datacode))
continue;
ls_filtercolumn = buf.fget(FilterColumn.toUpperCase(), i);
if (!ls_filtercolumn.equals(FilterValue))
continue;
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
if (selvalue.equals(ls_datacolumn)) {
ls_rtn = ls_rtn + "";
} else {
ls_rtn = ls_rtn + "";
}
}
return ls_rtn;
}
/**
*
* @param TableName 表的名字
* @param DataColumn 数据的实际值
* @param DisplayColumn 显示值
* @param CheckName checkbox的名字
* @param flag 表示显示在左边还是在右边,0:左边,1:右边
* @return
*/
public String getCheckPara(String TableName, String DataColumn,
String DisplayColumn, String CheckName, String flag) {
HashFmlBuf buf = null;
buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_left_rtn = "", ls_right_rtn = "", ls_datacolumn = null, ls_displaycolumn = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
for (int i = 0; i < li_count; i++) {
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_left_rtn = ls_left_rtn + ls_displaycolumn
+ "";
ls_right_rtn = ls_right_rtn + ""
+ ls_displaycolumn;
}
if (flag == "0") {
return ls_left_rtn;
} else {
return ls_right_rtn;
}
}
/**
* 根据表名、上层列名、数据列、显示列来生成一个javascript的数组
* @param TableName
* @param UpColumn
* @param DataColumn
* @param DisplayColumn
* @return
*/
public String getParaArray(String TableName, String UpColumn,
String DataColumn, String DisplayColumn) {
HashFmlBuf buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_temp = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
// if (li_count == 0) {
// return null;
// }
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_DEP = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_VALUE = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_TEXT = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
for (int i = 0; i < li_count; i++) {
ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i);
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_rtn = new StringBuffer(ls_rtn).append(
TableName.toUpperCase() + "_DEP[" + Integer.toString(i)
+ "] = " + "'" + ls_upcolumn + "';").append(
TableName.toUpperCase() + "_VALUE[" + Integer.toString(i)
+ "] = " + "'" + ls_datacolumn + "';").append(
TableName.toUpperCase() + "_TEXT[" + Integer.toString(i)
+ "] = " + "'" + ls_displaycolumn + "';").toString();
}
return ls_rtn;
}
/**
* 根据frameworkid过滤
* @param TableName
* @param UpColumn
* @param DataColumn
* @param DisplayColumn
* @param Frameworkid
* @return
*/
public String getParaArray(String TableName, String UpColumn,
String DataColumn, String DisplayColumn, String Frameworkid) {
HashFmlBuf buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_temp = null, ls_frameworkid = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
//表中没有frameworkid列
if (buf.fget("FRAMEWORKID", 0) == null)
return getParaArray(TableName, UpColumn, DataColumn, DisplayColumn);
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_DEP = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_VALUE = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_TEXT = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
for (int i = 0; i < li_count; i++) {
ls_frameworkid = buf.fget("FRAMEWORKID", i);
if (!ls_frameworkid.equals(Frameworkid))
continue;
ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i);
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_rtn = new StringBuffer(ls_rtn).append(
TableName.toUpperCase() + "_DEP[" + Integer.toString(i)
+ "] = " + "'" + ls_upcolumn + "';").append(
TableName.toUpperCase() + "_VALUE[" + Integer.toString(i)
+ "] = " + "'" + ls_datacolumn + "';").append(
TableName.toUpperCase() + "_TEXT[" + Integer.toString(i)
+ "] = " + "'" + ls_displaycolumn + "';").toString();
}
return ls_rtn;
}
/**
* 根据表名、上层列、数据列、显示列、过滤列、过滤值来生成javascript数组
* @param TableName
* @param UpColumn
* @param DataColumn
* @param DisplayColumn
* @param filtercolumn
* @param filtervalue
* @return
*/
public String getParaArrayFilter(String TableName, String UpColumn,
String DataColumn, String DisplayColumn, String filtercolumn,
String filtervalue) {
HashFmlBuf buf = getBuf(TableName);
//根据显示列和数据列来生成一个HTML的代码
String ls_rtn = "", ls_datacolumn = null, ls_displaycolumn = null, ls_upcolumn = null, ls_filter = null, ls_temp = null;
int li_count = 0;
li_count = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (li_count == 0) {
return null;
}
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_DEP = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_VALUE = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
ls_temp = new StringBuffer("var ").append(TableName.toUpperCase())
.append("_TEXT = new Array();").toString();
ls_rtn = new StringBuffer(ls_rtn).append(ls_temp).toString();
int j = 0;
for (int i = 0; i < li_count; i++) {
ls_upcolumn = buf.fget(UpColumn.toUpperCase(), i);
ls_datacolumn = buf.fget(DataColumn.toUpperCase(), i);
ls_displaycolumn = buf.fget(DisplayColumn.toUpperCase(), i);
ls_filter = buf.fget(filtercolumn.toUpperCase(), i);
if (ls_filter != null && ls_filter.equals("")) {
if (!ls_filter.equals(filtervalue))
continue;
}
ls_rtn = new StringBuffer(ls_rtn).append(
TableName.toUpperCase() + "_DEP[" + Integer.toString(j)
+ "] = " + "'" + ls_upcolumn + "';").append(
TableName.toUpperCase() + "_VALUE[" + Integer.toString(j)
+ "] = " + "'" + ls_datacolumn + "';").append(
TableName.toUpperCase() + "_TEXT[" + Integer.toString(j)
+ "] = " + "'" + ls_displaycolumn + "';").toString();
j++;
}
return ls_rtn;
}
public String getDefByID(String ID, String TableName, String FldID,
String FldDef) {
HashFmlBuf buf = getBuf(TableName);
int iCount = Integer.parseInt(buf.fget("ROWCOUNT", 0));
if (iCount == 0)
return "";
for (int i = 0; i < iCount; i++) {
if (buf.fget(FldID.toUpperCase(), i).equals(ID)) {
return buf.fget(FldDef.toUpperCase(), i);
}
}
return "";
}
}