1 23 24 package org.dbforms.event; 25 26 import org.dbforms.config.DbFormsConfig; 27 import org.dbforms.config.FieldValue; 28 import org.dbforms.config.FieldValues; 29 import org.dbforms.config.Table; 30 import org.dbforms.config.ValidationException; 31 32 import org.dbforms.util.FileHolder; 33 import java.sql.Connection ; 34 35 import java.util.HashMap ; 36 import java.util.Iterator ; 37 import java.util.Map ; 38 39 import javax.servlet.http.HttpServletRequest ; 40 41 42 43 113 public class BlobInterceptor extends DbEventInterceptorSupport { 114 private static final int BLOB_COL = 0; 115 private static final int NAME_COL = 1; 116 private static final int MIME_COL = 2; 117 private static final int SIZE_COL = 3; 118 private HashMap blobFieldData; 119 120 125 public void setParameterMap(Map params) { 126 super.setParameterMap(params); 127 blobFieldData = new HashMap (); 128 129 for (Iterator iter = params.entrySet() 130 .iterator(); iter.hasNext();) { 131 Map.Entry me = (Map.Entry ) iter.next(); 132 String key = (String ) me.getKey(); 133 String value = (String ) me.getValue(); 134 135 if (key.startsWith("blob-column")) { 136 Integer ii = getSuffixAsInteger(key, "blob-column"); 137 String [] s = (String []) blobFieldData.get(ii); 138 139 if (s == null) { 140 s = new String [4]; 141 blobFieldData.put(ii, s); 142 } 143 144 s[BLOB_COL] = value; 145 } else if (key.startsWith("name-column")) { 146 Integer ii = getSuffixAsInteger(key, "name-column"); 147 String [] s = (String []) blobFieldData.get(ii); 148 149 if (s == null) { 150 s = new String [4]; 151 blobFieldData.put(ii, s); 152 } 153 154 s[NAME_COL] = value; 155 } else if (key.startsWith("mime-column")) { 156 Integer ii = getSuffixAsInteger(key, "mime-column"); 157 String [] s = (String []) blobFieldData.get(ii); 158 159 if (s == null) { 160 s = new String [4]; 161 blobFieldData.put(ii, s); 162 } 163 164 s[MIME_COL] = value; 165 } else if (key.startsWith("size-column")) { 166 Integer ii = getSuffixAsInteger(key, "size-column"); 167 String [] s = (String []) blobFieldData.get(ii); 168 169 if (s == null) { 170 s = new String [4]; 171 blobFieldData.put(ii, s); 172 } 173 174 s[SIZE_COL] = value; 175 } 176 } 177 } 178 179 180 192 public int preInsert(HttpServletRequest request, 193 Table table, 194 FieldValues fieldValues, 195 DbFormsConfig config, 196 Connection con) throws ValidationException { 197 assignBlobData(table, fieldValues); 198 199 return GRANT_OPERATION; 200 } 201 202 203 215 public int preUpdate(HttpServletRequest request, 216 Table table, 217 FieldValues fieldValues, 218 DbFormsConfig config, 219 Connection con) throws ValidationException { 220 assignBlobData(table, fieldValues); 221 222 return GRANT_OPERATION; 223 } 224 225 226 234 private Integer getSuffixAsInteger(String value, 235 String stub) { 236 String suffix = value.substring(stub.length()); 237 238 if (suffix.length() == 0) { 239 return new Integer (Integer.MIN_VALUE); 240 } else { 241 return new Integer (suffix); 242 } 243 } 244 245 246 254 private void assignBlobData(Table table, 255 FieldValues fieldValues) { 256 for (Iterator iter = blobFieldData.values() 257 .iterator(); iter.hasNext();) { 258 String [] s = (String []) iter.next(); 259 FieldValue fv = fieldValues.get(s[BLOB_COL]); 260 261 if (fv != null) { 262 Object o = fv.getFieldValueAsObject(); 263 264 if ((o != null) && o instanceof FileHolder) { 265 String fileName = ((FileHolder) o).getFileName(); 266 String contentType = ((FileHolder) o).getContentType(); 267 int fileLength = ((FileHolder) o).getFileLength(); 268 setValue(table, fieldValues, s[NAME_COL], fileName); 269 270 if (s[MIME_COL] != null) { 271 setValue(table, fieldValues, s[MIME_COL], contentType); 272 } 273 274 if (s[SIZE_COL] != null) { 275 setValue(table, fieldValues, s[SIZE_COL], 276 String.valueOf(fileLength)); 277 } 278 } 279 } 280 } 281 } 282 } 283 | Popular Tags |