d3877d5c02cce269555a5044379c6d576684673c
[mir.git] / source / mircoders / module / ModuleContent.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30
31 package mircoders.module;
32
33 import mir.log.LoggerWrapper;
34 import mir.module.AbstractModule;
35 import mir.util.JDBCStringRoutines;
36 import mircoders.global.MirGlobal;
37 import mircoders.storage.DatabaseContent;
38
39 /**
40  *
41  * <p>Title: ModuleContent</p>
42  * <p>Description: helper routines to manage articles</p>
43  * <p>Copyright: Copyright (c) 2003</p>
44  * <p>Company: </p>
45  * @author not attributable
46  * @version 1.0
47  */
48
49 public class ModuleContent extends AbstractModule
50 {
51   static LoggerWrapper logger = new LoggerWrapper("Module.Content");
52
53   public ModuleContent() {
54     super(DatabaseContent.getInstance());
55   }
56
57   public void expireArticleLock(String anId, String aUserId) {
58     if (!MirGlobal.isUserLoggedIn(anId)) {
59       unlockArticle(anId, aUserId, false);
60     }
61   }
62
63   /**
64    * Locks an article. Forced (that is, without checking wether it's already locked)
65    * if necessary.
66    *
67    * @param anId The article number
68    * @param aUserId The locking user
69    * @param aForce Should it e forced?
70    * @return
71    */
72   public boolean lockArticle(String anId, String aUserId, boolean aForce) {
73     try {
74       String query =
75           "update content set to_locking_user=" + JDBCStringRoutines.escapeStringLiteral(aUserId) +
76           "  where id = " + JDBCStringRoutines.escapeStringLiteral(anId);
77
78       if (!aForce)
79         query = query + " and to_locking_user is null";
80
81       return storage.executeUpdate(query) > 0;
82     }
83     catch (Throwable t) {
84       return false;
85     }
86   }
87
88   /**
89    * Unlocks an article. Forced (that is, without checking wether it's locked by
90    *     the person that unlocks it) if necessary.
91    *
92    * @param anId The article number
93    * @param aUserId The user that unlocks
94    * @param aForce Should it e forced?
95    * @return <code>true</code> if successfull, <code>false</code> if not
96    */
97   public boolean unlockArticle(String anId, String aUserId, boolean aForce)  {
98     try {
99       String query =
100           "update content set to_locking_user=null" +
101           "  where id = " + JDBCStringRoutines.escapeStringLiteral(anId);
102
103       if (!aForce)
104         query = query + " and to_locking_user = "+JDBCStringRoutines.escapeStringLiteral(aUserId);
105
106       return storage.executeUpdate(query) > 0;
107     }
108     catch (Throwable t) {
109       return false;
110     }
111   }
112
113   /**
114    * Returns the id of the locking user of an article. <code>null</code> otherwise.
115    *
116    * @param anId
117    * @return
118    */
119   public String queryArticleLock(String anId)  {
120     try {
121       String result = storage.executeFreeSingleValueSql("select to_locking_user from content where id = " + JDBCStringRoutines.escapeStringLiteral(anId));
122
123       if (result!=null && !MirGlobal.isUserLoggedIn(result)) {
124         expireArticleLock(anId, result);
125         result = null;
126       }
127
128       return result;
129     }
130     catch (Throwable t) {
131       return null;
132     }
133   }
134 }
135
136