1 15 16 package com.jdon.strutsutil; 17 18 import java.util.ArrayList ; 19 import java.util.Collection ; 20 import java.util.List ; 21 22 import javax.servlet.http.HttpServletRequest ; 23 import javax.servlet.http.HttpServletResponse ; 24 25 import org.apache.struts.action.ActionForm; 26 import org.apache.struts.action.ActionForward; 27 import org.apache.struts.action.ActionMapping; 28 29 import com.jdon.controller.model.Model; 30 import com.jdon.controller.model.ModelIF; 31 import com.jdon.controller.model.PageIterator; 32 import com.jdon.model.ModelKey; 33 import com.jdon.util.Debug; 34 35 40 public abstract class ModelListAction extends ModelBaseAction { 41 42 private final static String module = ModelListAction.class.getName(); 43 44 public ActionForward execute(ActionMapping actionMapping, 45 ActionForm actionForm, 46 HttpServletRequest request, 47 HttpServletResponse response) throws 48 Exception { 49 50 intContext(this.getServlet().getServletContext()); 51 52 53 int start = 0; 54 int count = 30; 55 56 String startStr = request.getParameter("start"); 57 if ( (startStr != null) && (startStr.length() != 0)) { 58 start = Integer.parseInt(startStr); 59 } 60 String countStr = request.getParameter("count"); 61 if ( (countStr != null) && (countStr.length() != 0)) { 62 count = Integer.parseInt(countStr); 63 } 64 65 66 ModelListForm listForm = getModelListForm(actionMapping, actionForm, request); 67 listForm.setStart(start); 68 69 PageIterator pageIterator = getPageIterator(request, start, count); 70 if (pageIterator != null) { if (pageIterator.isElementsTypeIsKey()){ 72 setModellistByKey(listForm, pageIterator, request); 73 }else{ 74 setModellistByModel(listForm, pageIterator, request); 75 } 76 } else { 77 Debug.logError("getPageIterator not be implemented, you must implement either of them ", module); 78 listForm.setList(new ArrayList ()); 79 } 80 81 listForm.setOneModel(setupOneModelIF(request)); 82 customizeListForm(actionMapping, actionForm, request, listForm); 83 84 if (actionMapping.findForward(FormBeanUtil.FORWARD_SUCCESS_NAME) == null) 85 Debug.logError( 86 "not found the forward name '" + FormBeanUtil.FORWARD_SUCCESS_NAME + 87 "' in struts-config.xml", module); 88 89 return actionMapping.findForward(FormBeanUtil.FORWARD_SUCCESS_NAME); 90 } 91 92 private void setModellistByKey(ModelListForm listForm, 93 PageIterator pageIterator, HttpServletRequest request) { 94 Collection c = null; 95 try { 96 listForm.setAllCount(pageIterator.getAllCount()); 97 if (pageIterator.getCount() != 0) 98 listForm.setCount(pageIterator.getCount()); c = getModelList(request, pageIterator); 101 Debug.logVerbose( 102 "[JdonFramework] listForm 's property: getList size is " 103 + c.size(), module); 104 pageIterator.reset(); 105 } catch (Exception e) { 106 Debug.logError(" setModellistByKey error " + e, module); 107 c = new ArrayList (); 108 } 109 listForm.setList(c); 110 } 111 112 115 private void setModellistByModel(ModelListForm listForm, 116 PageIterator pageIterator, HttpServletRequest request) { 117 Collection c = null; 118 try { 119 listForm.setAllCount(pageIterator.getAllCount()); 120 if (pageIterator.getCount() != 0) 121 listForm.setCount(pageIterator.getCount()); 122 c = new ArrayList (pageIterator.getSize()); 123 while (pageIterator.hasNext()) { 124 Object o = pageIterator.next(); 125 if ( o != null) 126 c.add(o); 127 } 128 Debug.logVerbose( 129 "[JdonFramework] listForm 's property: getList size is " 130 + c.size(), module); 131 pageIterator.reset(); 132 } catch (Exception e) { 133 Debug.logError(" setModellistByModel error " + e, module); 134 c = new ArrayList (); 135 } 136 listForm.setList(c); 137 } 138 139 148 protected ModelListForm getModelListForm(ActionMapping actionMapping, 149 ActionForm actionForm, 150 HttpServletRequest request) throws 151 Exception { 152 ModelListForm modelListForm = null; 153 if (actionForm == null){ 154 modelListForm = new ModelListForm(); 155 FormBeanUtil.saveActionForm(modelListForm, actionMapping, request); 156 }else if (actionForm instanceof ModelListForm) 157 modelListForm = (ModelListForm) actionForm; 158 159 if (modelListForm == null) 160 throw new Exception ( 161 "not found the bean of com.jdon.strutsutil.ModelListForm"); 162 else 163 return modelListForm; 164 165 } 166 167 174 protected List getModelList(HttpServletRequest request, 175 PageIterator pageIterator) throws Exception { 176 List list = new ArrayList (pageIterator.getSize()); 177 ModelIF model = null; 178 Class modelClass = null; 179 while (pageIterator.hasNext()) { 180 Object dataKey = pageIterator.next(); 181 if ( (modelClass == null) || (!isEnableCache())) { 182 Debug.logVerbose("[JdonFramework] getCache from db. " , module); 183 model = fetchModel(request, dataKey); 184 if (model != null) 185 modelClass = model.getClass(); 186 else 187 continue; 188 } else { 189 ModelKey modelKey = new ModelKey(dataKey, modelClass); 191 model = modelManager.getCache(modelKey); 192 if (model == null) { 193 model = fetchModel(request, dataKey); 194 modelManager.addCache(modelKey, model); 195 } 196 } 197 if (model != null) 198 list.add(model); 199 } 200 return list; 201 } 202 203 204 217 public void customizeListForm(ActionMapping actionMapping, 218 ActionForm actionForm, 219 HttpServletRequest request, 220 ModelListForm modelListForm ) throws Exception { 221 222 223 } 224 225 226 232 protected boolean isEnableCache() { 233 return true; 234 } 235 236 private ModelIF fetchModel(HttpServletRequest request, Object dataKey) throws 237 Exception { 238 if (dataKey == null) return null; 239 ModelIF model = null; 240 try { 241 model = findModelIFByKey(request, dataKey); 242 if (model == null){ 243 Debug.logWarning("[JdonFramework] the model is null for the primary key=" + dataKey+" and data type=" + dataKey.getClass().getName()+ ", reasons:", module); 244 Debug.logWarning("[JdonFramework] 1. maybe the data in database wae deleted ", module); 245 Debug.logWarning("[JdonFramework] 2. a error occured in the findModelByKey mehtod of the class "+ this.getClass().getName(), module); 246 } 247 } catch (Exception ex) { 248 Debug.logError(ex, module); 249 } 250 return model; 251 } 252 253 protected ModelIF setupOneModelIF(HttpServletRequest request) { 254 return setupOneModel(request); 255 } 256 257 protected Model setupOneModel(HttpServletRequest request){ 258 return null; 259 } 260 261 262 270 public abstract PageIterator getPageIterator(HttpServletRequest request, 271 int start, 272 int count); 273 274 281 public ModelIF findModelIFByKey(HttpServletRequest request, Object key){ 282 return findModelByKey(request, key); 283 } 284 285 288 public Model findModelByKey(HttpServletRequest request, Object key){ 289 return null; 290 } 291 292 293 294 295 } 296 | Popular Tags |