1 23 package org.dbforms.event.datalist; 24 import org.apache.commons.logging.Log; 25 import org.apache.commons.logging.LogFactory; 26 27 import org.dbforms.config.DbEventInterceptorData; 28 import org.dbforms.config.DbFormsConfig; 29 import org.dbforms.config.FieldValue; 30 import org.dbforms.config.FieldValues; 31 import org.dbforms.config.ResultSetVector; 32 import org.dbforms.config.Table; 33 34 import org.dbforms.event.NavigationEvent; 35 import org.dbforms.event.datalist.dao.DataSourceFactory; 36 import org.dbforms.event.datalist.dao.DataSourceSessionList; 37 38 import org.dbforms.util.ParseUtil; 39 import org.dbforms.util.Util; 40 41 import java.io.UnsupportedEncodingException ; 42 43 import java.sql.SQLException ; 44 45 import javax.servlet.http.HttpServletRequest ; 46 47 48 49 56 public class GotoEvent extends NavigationEvent { 57 private static Log logCat = LogFactory.getLog(GotoEvent.class.getName()); 59 private String childField; 60 private String parentField; 61 62 private String position; 64 private String tableList = null; 65 private String whereClause = null; 66 private Table srcTable; 67 private boolean singleRow = false; 68 69 79 public GotoEvent(String action, HttpServletRequest request, 80 DbFormsConfig config) { 81 super("data_data_-1", request, config); 84 85 String destTable = ParseUtil.getParameter(request, 86 "data" + action + "_destTable"); 87 88 if (destTable == null) { 90 setTable(null); 91 92 return; 93 } 94 95 setTable(config.getTableByName(destTable)); 98 99 if (getTable() == null) { 100 setTable(config.getTable(Integer.parseInt(destTable))); 101 } 102 103 String psrcTable = ParseUtil.getParameter(request, 104 "data" + action + "_srcTable"); 105 106 singleRow = "true".equals(ParseUtil.getParameter(request, 107 "data" + action + "_singleRow")); 108 109 if (psrcTable != null) { 110 this.srcTable = config.getTableByName(psrcTable); 111 112 if (this.srcTable == null) { 113 this.srcTable = config.getTable(Integer.parseInt(psrcTable)); 114 } 115 116 childField = ParseUtil.getParameter(request, 117 "data" + action + "_childField"); 118 parentField = ParseUtil.getParameter(request, 119 "data" + action + "_parentField"); 120 } 121 122 String destPos = ParseUtil.getParameter(request, 125 "data" + action + "_destPos"); 126 127 if (destPos != null) { 129 this.position = destPos; 130 } else { 131 String keyToDestPos = ParseUtil.getParameter(request, 132 "data" + action + "_keyToDestPos"); 133 134 if (keyToDestPos != null) { 136 this.position = ParseUtil.getParameter(request, keyToDestPos); 137 } else { 138 String keyToKeyToDestPos = ParseUtil.getParameter(request, 139 "data" + action + "_keyToKeyToDestPos"); 140 141 if (keyToKeyToDestPos != null) { 144 String widgetValue = ParseUtil.getParameter(request, 145 keyToKeyToDestPos); this.position = ParseUtil.getParameter(request, 147 "k_" + widgetValue); } 149 } 150 } 151 152 logCat.info("--->pos=" + position); 153 } 154 155 156 166 public GotoEvent(Table table, HttpServletRequest request, 167 DbFormsConfig config, String position) { 168 super(table, request, config); 169 this.position = table.getKeyPositionString(table.getFieldValues(position)); 170 } 171 172 173 184 public GotoEvent(Table table, HttpServletRequest request, 185 DbFormsConfig config, String whereClause, String tableList) { 186 super(table, request, config); 187 this.whereClause = whereClause; 188 this.tableList = tableList; 189 } 190 191 212 public ResultSetVector processEvent(FieldValue[] childFieldValues, 213 FieldValue[] orderConstraint, String sqlFilter, 214 FieldValue[] sqlFilterParams, int count, String firstPosition, 215 String lastPosition, DbEventInterceptorData interceptorData) 216 throws SQLException { 217 logCat.info("==> GotoEvent.processEvent"); 219 220 FieldValues fv; 221 222 if (!Util.isNull(position)) { 223 try { 224 position = Util.decode(position, getRequest().getCharacterEncoding()); 225 } catch (UnsupportedEncodingException e) { 226 logCat.error(e); 227 throw new SQLException (e.getMessage()); 228 } 229 230 if ((srcTable != null) && !Util.isNull(childField) 231 && !Util.isNull(parentField)) { 232 fv = getTable().mapChildFieldValues(srcTable, parentField, 233 childField, position); 234 } else { 235 fv = getTable().getFieldValues(position); 236 } 237 238 position = getTable().getKeyPositionString(fv); 239 240 if (singleRow && (fv != null)) { 241 childFieldValues = fv.toArray(); 242 } 243 } 244 245 DataSourceSessionList ds = DataSourceSessionList.getInstance(getRequest()); 246 ds.remove(getTable(), getRequest()); 247 248 DataSourceFactory qry = new DataSourceFactory((String ) interceptorData 249 .getAttribute(DbEventInterceptorData.CONNECTIONNAME), 250 interceptorData.getConnection(), getTable()); 251 252 if (Util.isNull(whereClause)) { 253 qry.setSelect(childFieldValues, orderConstraint, sqlFilter, 254 sqlFilterParams); 255 } else { 256 qry.setSelect(tableList, whereClause); 257 } 258 259 ds.put(getTable(), getRequest(), qry); 260 261 return qry.getCurrent(interceptorData, position, count); 262 } 263 } 264 | Popular Tags |