1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.AbstractDatabaseEvent;
32 import org.dbforms.interfaces.DbEventInterceptorData;
33 import org.dbforms.interfaces.IDbEventInterceptor;
34
35 import org.dbforms.util.*;
36
37 import java.io.*;
38
39 import java.sql.*;
40
41 import java.util.*;
42
43 import javax.servlet.http.*;
44
45 /***
46 * DOCUMENT ME!
47 *
48 * @author Joe Peer
49 *
50 * @deprecated
51 * <p>
52 */
53 public class DeleteEvent extends AbstractDatabaseEvent {
54
55 static Log logCat = LogFactory.getLog(DeleteEvent.class.getName());
56
57 /***
58 * Creates a new DeleteEvent object.
59 *
60 * @param tableId
61 * DOCUMENT ME!
62 * @param keyId
63 * DOCUMENT ME!
64 * @param request
65 * DOCUMENT ME!
66 * @param config
67 * DOCUMENT ME!
68 */
69 public DeleteEvent(Integer tableId, String keyId,
70 HttpServletRequest request, DbFormsConfig config) {
71 super(tableId.intValue(), keyId, request, config);
72 }
73
74 /***
75 * Creates a new DeleteEvent object.
76 *
77 * @param action
78 * DOCUMENT ME!
79 * @param request
80 * DOCUMENT ME!
81 * @param config
82 * DOCUMENT ME!
83 */
84 public DeleteEvent(String action, HttpServletRequest request,
85 DbFormsConfig config) {
86 super(StringUtil.getEmbeddedStringAsInteger(action, 2, '_'), StringUtil
87 .getEmbeddedString(action, 3, '_'), request, config);
88 }
89
90 /***
91 * DOCUMENT ME!
92 *
93 * @return DOCUMENT ME!
94 */
95 public FieldValues getFieldValues() {
96 return getFieldValues(true);
97 }
98
99 /***
100 * DOCUMENT ME!
101 *
102 * @param con
103 * DOCUMENT ME!
104 *
105 * @throws MultipleValidationException
106 * DOCUMENT ME!
107 */
108 public void processEvent(Connection con) throws SQLException, MultipleValidationException {
109
110 if (!hasUserPrivileg(GrantedPrivileges.PRIVILEG_DELETE)) {
111 String s = MessageResourcesInternal.getMessage("dbforms.events.delete.nogrant",
112 getRequest().getLocale(),
113 new String[] {
114 getTable()
115 .getName()
116 });
117 throw new MultipleValidationException(s);
118 }
119
120
121
122
123
124
125
126
127
128
129
130
131
132 String keyValuesStr = getKeyValues();
133
134 if (Util.isNull(keyValuesStr)) {
135 logCat.error("At least one key is required per table, check your dbforms-config.xml");
136
137 return;
138 }
139
140
141 FieldValues fieldValues = getFieldValues();
142
143 DbEventInterceptorData interceptorData = new DbEventInterceptorData(getRequest(),
144 getConfig(), con, getTable());
145 interceptorData.setAttribute(DbEventInterceptorData.FIELDVALUES, fieldValues);
146 interceptorData.setAttribute(DbEventInterceptorData.KEYVALUES, keyValuesStr);
147
148
149 int operation = getTable()
150 .processInterceptors(IDbEventInterceptor.PRE_DELETE,
151 interceptorData);
152
153
154 if (operation == IDbEventInterceptor.GRANT_OPERATION) {
155
156
157
158
159
160 ResultSet diskblobs = null;
161 PreparedStatement diskblobsPs = null;
162 if (getTable()
163 .containsDiskblob()) {
164 StringBuffer queryBuf = new StringBuffer();
165 queryBuf.append(getTable().getDisblobSelectStatement());
166 queryBuf.append(" WHERE ");
167 queryBuf.append(getTable().getWhereClauseForKeyFields(keyValuesStr));
168
169 diskblobsPs = con.prepareStatement(queryBuf.toString());
170 getTable()
171 .populateWhereClauseWithKeyFields(keyValuesStr, diskblobsPs, 1);
172 diskblobs = diskblobsPs.executeQuery();
173 }
174
175
176 PreparedStatement ps = con.prepareStatement(getTable().getDeleteStatement(keyValuesStr));
177
178
179
180
181 getTable()
182 .populateWhereClauseWithKeyFields(keyValuesStr, ps, 1);
183
184
185 ps.executeUpdate();
186 ps.close();
187
188
189
190 if (diskblobs != null) {
191
192 if (diskblobs.next()) {
193
194 Vector diskblobFields = getTable()
195 .getDiskblobs();
196
197
198 for (int i = 0; i < diskblobFields.size(); i++) {
199 Field aField = (Field) diskblobFields.elementAt(i);
200 String fileName = diskblobs.getString(i + 1);
201
202
203 if (fileName != null) {
204
205 fileName = fileName.trim();
206
207 if (fileName.length() > 0) {
208 String directory = null;
209
210 try {
211 directory = DbFormsConfigRegistry.instance().lookup().replaceVariables(aField.getDirectory());
212 } catch (Exception e) {
213 throw new SQLException(e.getMessage());
214 }
215
216
217
218 File file = new File(directory, fileName);
219
220 if (file.exists()) {
221 file.delete();
222 logCat.info("deleted file " + fileName
223 + " from dir " + directory);
224 } else {
225 logCat.info("delete of file " + fileName
226 + " from dir " + directory
227 + " failed because file not found");
228 }
229 }
230 }
231 }
232 }
233 diskblobsPs.close();
234
235 }
236
237
238
239 getTable()
240 .processInterceptors(IDbEventInterceptor.POST_DELETE, interceptorData);
241 }
242
243
244 }}