Kawai Wiki

Rev

Rev 77 | Rev 79 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 77 Rev 78
Line 7... Line 7...
7
7
8
import org.kawai.dao.PageDAO;
8
import org.kawai.dao.PageDAO;
9
import org.kawai.model.Language;
9
import org.kawai.model.Language;
10
import org.kawai.model.Page;
10
import org.kawai.model.Page;
11
import org.kawai.model.Preview;
11
import org.kawai.model.Preview;
-
 
12
import org.kawai.model.Revision;
12
import org.kawai.model.User;
13
import org.kawai.model.User;
13
import org.mentabean.BeanSession;
14
import org.mentabean.BeanSession;
14
15
15
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
16
public class JdbcPageDAO extends AbstractJdbcDAO implements PageDAO {
16
       
17
       
Line 291... Line 292...
291
                Preview preview = loadPreview(userId, name, lang);
292
                Preview preview = loadPreview(userId, name, lang);
292
                if (preview != null) {
293
                if (preview != null) {
293
                        Preview p = new Preview();
294
                        Preview p = new Preview();
294
                        p.setId(preview.getId());
295
                        p.setId(preview.getId());
295
                        session.delete(p);
296
                        session.delete(p);
-
 
297
                }
-
 
298
        }
-
 
299
       
-
 
300
        @Override
-
 
301
        public Revision loadRevision(int revision, String name, Language lang) {
-
 
302
                Revision r = new Revision();
-
 
303
                r.setRevision(revision);
-
 
304
                r.setName(name);
-
 
305
                r.setLanguageId(lang.getId());
-
 
306
                return session.loadUnique(r);
-
 
307
        }
-
 
308
       
-
 
309
        @Override
-
 
310
        public void insertRevision(Revision r) {
-
 
311
               
-
 
312
                PreparedStatement stmt = null;
-
 
313
                ResultSet rset = null;
-
 
314
               
-
 
315
                try {
-
 
316
                       
-
 
317
                        // first time, lock whole table 
-
 
318
                        stmt = conn.prepareStatement("LOCK TABLES Revisions WRITE"); // this works as a synchronized block locked on the database... (I tested it!)
-
 
319
                        stmt.execute();
-
 
320
                        stmt.close();
-
 
321
                       
-
 
322
                        stmt = conn.prepareStatement("select max(revision) from Revisions where name = ? and language_id = ?");
-
 
323
                        stmt.setString(1, r.getName());
-
 
324
                        stmt.setInt(2, r.getLanguageId());
-
 
325
                        rset = stmt.executeQuery();
-
 
326
                        rset.next();
-
 
327
                        int revisionNumber = rset.getInt(1) + 1;
-
 
328
                        rset.close();
-
 
329
                        stmt.close();
-
 
330
                       
-
 
331
                        r.setRevision(revisionNumber);
-
 
332
                        session.insert(r);
-
 
333
-
 
334
                        stmt = conn.prepareStatement("UNLOCK TABLES");
-
 
335
                        stmt.execute();
-
 
336
                       
-
 
337
                } catch(Exception e) {
-
 
338
                        throw new RuntimeException(e);
-
 
339
                } finally {
-
 
340
                        close(stmt, rset);
296
                }
341
                }
297
        }
342
        }
298
}
343
}