| 1 23 24 package org.dbforms.event.classic; 25 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 29 import org.dbforms.config.*; 30 31 import org.dbforms.event.DatabaseEvent; 32 33 import org.dbforms.util.*; 34 35 import java.io.*; 36 37 import java.sql.*; 38 39 import java.util.*; 40 41 import javax.servlet.http.*; 42 43 44 45 53 public class DeleteEvent extends DatabaseEvent { 54 static Log logCat = LogFactory.getLog(DeleteEvent.class.getName()); 56 57 69 public DeleteEvent(Integer tableId, 70 String keyId, 71 HttpServletRequest request, 72 DbFormsConfig config) { 73 super(tableId.intValue(), keyId, request, config); 74 } 75 76 77 87 public DeleteEvent(String action, 88 HttpServletRequest request, 89 DbFormsConfig config) { 90 super(StringUtil.getEmbeddedStringAsInteger(action, 2, '_'), 91 StringUtil.getEmbeddedString(action, 3, '_'), request, config); 92 } 93 94 99 public FieldValues getFieldValues() { 100 return getFieldValues(true); 101 } 102 103 104 115 public void processEvent(Connection con) throws SQLException { 116 if (!hasUserPrivileg(GrantedPrivileges.PRIVILEG_DELETE)) { 118 String s = MessageResourcesInternal.getMessage("dbforms.events.delete.nogrant", 119 getRequest().getLocale(), 120 new String [] { 121 getTable() 122 .getName() 123 }); 124 throw new SQLException(s); 125 } 126 127 String keyValuesStr = getKeyValues(); 140 141 if (Util.isNull(keyValuesStr)) { 142 logCat.error("At least one key is required per table, check your dbforms-config.xml"); 143 144 return; 145 } 146 147 FieldValues fieldValues = getFieldValues(); 149 150 DbEventInterceptorData interceptorData = new DbEventInterceptorData(getRequest(), 151 getConfig(), con, getTable()); 152 interceptorData.setAttribute(DbEventInterceptorData.FIELDVALUES, fieldValues); 153 interceptorData.setAttribute(DbEventInterceptorData.KEYVALUES, keyValuesStr); 154 155 int operation = getTable() 157 .processInterceptors(DbEventInterceptor.PRE_DELETE, 158 interceptorData); 159 160 if (operation == DbEventInterceptor.GRANT_OPERATION) { 162 ResultSet diskblobs = null; 168 169 if (getTable() 170 .containsDiskblob()) { 171 StringBuffer queryBuf = new StringBuffer (); 172 queryBuf.append(getTable().getDisblobSelectStatement()); 173 queryBuf.append(" WHERE "); 174 queryBuf.append(getTable().getWhereClauseForKeyFields()); 175 176 PreparedStatement diskblobsPs = con.prepareStatement(queryBuf 177 .toString()); 178 getTable() 179 .populateWhereClauseWithKeyFields(keyValuesStr, diskblobsPs, 1); 180 diskblobs = diskblobsPs.executeQuery(); 181 diskblobsPs.close(); 182 } 183 184 PreparedStatement ps = con.prepareStatement(getTable().getDeleteStatement()); 186 187 getTable() 191 .populateWhereClauseWithKeyFields(keyValuesStr, ps, 1); 192 193 ps.executeUpdate(); 195 ps.close(); 196 197 if (diskblobs != null) { 201 if (diskblobs.next()) { 202 Vector diskblobFields = getTable() 204 .getDiskblobs(); 205 206 for (int i = 0; i < diskblobFields.size(); i++) { 208 Field aField = (Field) diskblobFields.elementAt(i); 209 String fileName = diskblobs.getString(i + 1); 210 211 if (fileName != null) { 213 fileName = fileName.trim(); 216 if (fileName.length() > 0) { 217 String directory = null; 218 219 try { 220 directory = Util.replaceRealPath(aField.getDirectory(), 221 DbFormsConfigRegistry.instance().lookup().getRealPath()); 222 } catch (Exception e) { 223 throw new SQLException(e.getMessage()); 224 } 225 226 File file = new File(directory, fileName); 229 230 if (file.exists()) { 231 file.delete(); 232 logCat.info("deleted file " + fileName 233 + " from dir " + directory); 234 } else { 235 logCat.info("delete of file " + fileName 236 + " from dir " + directory 237 + " failed because file not found"); 238 } 239 } 240 } 241 } 242 } 243 } 244 245 getTable() 248 .processInterceptors(DbEventInterceptor.POST_DELETE, interceptorData); 249 } 250 251 } 253 } 254 | Popular Tags |