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.DbEventInterceptor; 28 import org.dbforms.config.DbEventInterceptorData; 29 import org.dbforms.config.DbFormsConfig; 30 import org.dbforms.config.FieldValues; 31 import org.dbforms.config.GrantedPrivileges; 32 33 import org.dbforms.event.DatabaseEvent; 34 import org.dbforms.event.datalist.dao.DataSourceFactory; 35 import org.dbforms.event.datalist.dao.DataSourceSessionList; 36 37 import org.dbforms.util.MessageResourcesInternal; 38 import org.dbforms.util.StringUtil; 39 import org.dbforms.util.Util; 40 41 import java.sql.Connection ; 42 import java.sql.SQLException ; 43 44 import javax.servlet.http.HttpServletRequest ; 45 46 47 48 54 public class DeleteEvent extends DatabaseEvent { 55 private static Log logCat = LogFactory.getLog(DeleteEvent.class.getName()); 56 57 65 public DeleteEvent(Integer tableId, String keyId, 66 HttpServletRequest request, DbFormsConfig config) { 67 super(tableId.intValue(), keyId, request, config); 68 } 69 70 71 78 public DeleteEvent(String action, HttpServletRequest request, 79 DbFormsConfig config) { 80 super(StringUtil.getEmbeddedStringAsInteger(action, 2, '_'), 81 StringUtil.getEmbeddedString(action, 3, '_'), request, config); 82 } 83 84 89 public FieldValues getFieldValues() { 90 return getFieldValues(true); 91 } 92 93 94 102 public void processEvent(Connection con) throws SQLException { 103 if (!hasUserPrivileg(GrantedPrivileges.PRIVILEG_DELETE)) { 105 String s = MessageResourcesInternal.getMessage("dbforms.events.delete.nogrant", 106 getRequest().getLocale(), new String [] { 107 getTable().getName() 108 }); 109 throw new SQLException (s); 110 } 111 112 String keyValuesStr = getKeyValues(); 114 115 if (Util.isNull(keyValuesStr)) { 116 logCat.error( 117 "::processEvent - At least one key is required per table, check your dbforms-config.xml"); 118 119 return; 120 } 121 122 FieldValues fieldValues = getFieldValues(); 124 DbEventInterceptorData interceptorData = new DbEventInterceptorData(getRequest(), 125 getConfig(), con, getTable()); 126 interceptorData.setAttribute(DbEventInterceptorData.FIELDVALUES, 127 fieldValues); 128 interceptorData.setAttribute(DbEventInterceptorData.KEYVALUES, 129 keyValuesStr); 130 131 int operation = getTable().processInterceptors(DbEventInterceptor.PRE_DELETE, 135 interceptorData); 136 137 if (operation == DbEventInterceptor.GRANT_OPERATION) { 138 DataSourceSessionList ds = DataSourceSessionList.getInstance(getRequest()); 140 DataSourceFactory qry = ds.get(getTable(), getRequest()); 141 boolean own = false; 142 143 if (qry == null) { 144 qry = new DataSourceFactory((String ) interceptorData 145 .getAttribute(DbEventInterceptorData.CONNECTIONNAME), 146 interceptorData.getConnection(), getTable()); 147 own = true; 148 } 149 150 qry.doDelete(interceptorData, keyValuesStr); 151 152 if (own) { 153 qry.close(); 154 } else { 155 ds.remove(getTable(), getRequest()); 156 } 157 158 getTable().processInterceptors(DbEventInterceptor.POST_DELETE, 161 interceptorData); 162 } 163 164 } 166 } 167 | Popular Tags |