Changeset 310a7647e8d85d3bb174808912919400dcb95570
- Timestamp:
- 08/26/07 11:13:46 (1 year ago)
- git-parent:
- Files:
-
- src/net/driftingsouls/ds2/server/comm/Ordner.java (modified) (6 diffs)
- src/net/driftingsouls/ds2/server/comm/PM.java (modified) (10 diffs)
- src/net/driftingsouls/ds2/server/modules/CommController.java (modified) (4 diffs)
- web/WEB-INF/cfg/hibernatemappings.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
src/net/driftingsouls/ds2/server/comm/Ordner.java
r580809c r310a764 37 37 import net.driftingsouls.ds2.server.framework.Context; 38 38 import net.driftingsouls.ds2.server.framework.ContextMap; 39 import net.driftingsouls.ds2.server.framework.db.Database;40 import net.driftingsouls.ds2.server.framework.db.SQLQuery;41 39 42 40 /** … … 233 231 */ 234 232 public int countPMInOrdner() { 235 Database db = ContextMap.getContext().getDatabase();233 org.hibernate.Session db = ContextMap.getContext().getDB(); 236 234 237 235 int gelesen = 2; … … 240 238 } 241 239 242 return db.first("SELECT count(*) count FROM transmissionen WHERE empfaenger='",this.owner.getID(),"' AND ordner=",this.id," AND gelesen<",gelesen).getInt("count"); 240 return ((Number)db.createQuery("select count(*) from PM where empfaenger=? and ordner=? and gelesen<?") 241 .setEntity(0, this.owner) 242 .setInteger(1, this.id) 243 .setInteger(2, gelesen) 244 .iterate().next()).intValue(); 243 245 } 244 246 … … 251 253 */ 252 254 public Map<Integer,Integer> countPMInAllOrdner() { 253 Database db = ContextMap.getContext().getDatabase();255 org.hibernate.Session db = ContextMap.getContext().getDB(); 254 256 Map<Integer,Integer> result = new HashMap<Integer,Integer>(); 255 257 … … 273 275 int trash = getTrash( this.owner ).getID(); 274 276 275 SQLQuery pmcount = db.query( 276 "SELECT ordner, count(*) count " + 277 "FROM transmissionen " + 278 "WHERE empfaenger="+this.owner.getID()+" AND " + 279 "ordner IN ("+Common.implode(",",ordnerIDs)+") AND " + 280 "gelesen < CASE WHEN ordner="+trash+" THEN 10 ELSE 2 END " + 281 "GROUP BY ordner"); 282 while( pmcount.next() ) { 283 result.put(pmcount.getInt("ordner"), pmcount.getInt("count")); 277 List pmcounts = db.createQuery("select ordner, count(*) from PM " + 278 "where empfaenger=? and ordner in ("+Common.implode(",",ordnerIDs)+") " + 279 "and gelesen < case when ordner=? then 10 else 2 end " + 280 "group by ordner") 281 .setEntity(0, this.owner) 282 .setInteger(1, trash) 283 .list(); 284 for( Iterator iter=pmcounts.iterator(); iter.hasNext(); ) { 285 Object[] pmcount = (Object[])iter.next(); 286 result.put(((Number)pmcount[0]).intValue(), ((Number)pmcount[1]).intValue()); 284 287 } 285 288 … … 336 339 */ 337 340 public void setName( String name ) { 338 Database db = ContextMap.getContext().getDatabase();339 db.prepare("UPDATE ordner SET name= ? WHERE id= ?").update(name, this.id);340 341 this.name = name; 341 342 } src/net/driftingsouls/ds2/server/comm/PM.java
re5d3709 r310a764 22 22 import java.util.List; 23 23 24 import javax.persistence.Entity; 25 import javax.persistence.FetchType; 26 import javax.persistence.GeneratedValue; 27 import javax.persistence.Id; 28 import javax.persistence.JoinColumn; 29 import javax.persistence.ManyToOne; 30 import javax.persistence.Table; 31 24 32 import net.driftingsouls.ds2.server.entities.Ally; 25 33 import net.driftingsouls.ds2.server.entities.User; … … 28 36 import net.driftingsouls.ds2.server.framework.Context; 29 37 import net.driftingsouls.ds2.server.framework.ContextMap; 30 import net.driftingsouls.ds2.server.framework.db.Database;31 import net.driftingsouls.ds2.server.framework.db.SQLQuery;32 import net.driftingsouls.ds2.server.framework.db.SQLResultRow;33 38 import net.driftingsouls.ds2.server.tasks.Taskmanager; 34 39 35 40 /** 36 * PM-Verwaltung 41 * <p>Repraesentiert eine PM in der Datenbank.</p> 42 * <p>Eine PM ist immer mit einem Sender sowie Empfaenger verbunden. 43 * Zudem befindet sie sich in einem Ordner, wobei 0 der Hauptordner ist. 44 * Eine PM besitzt zudem einen Gelesen-Status. Ist dieser 0 so wurde die Nachricht noch 45 * nicht gelesen. 1 kennzeichnet sie als gelesen. Wenn der Wert 2 oder hoeher ist 46 * wurde die PM geloescht. Ihr gelesen-Status steigt dann jeden Tick um 1 47 * bis ein Schwellenwert ueberschritten und die PM endgueltig geloescht wird.</p> 48 * <p>Zudem steht ein Kommentarfeld fuer Anmerkungen sowie eine Reihe von Flags zur 49 * Verfuegung.</p> 37 50 * @author Christopher Jung 38 51 * @author Christian Peltz 39 52 * 40 53 */ 54 @Entity 55 @Table(name="transmissionen") 41 56 public class PM { 42 57 /** … … 98 113 public static void sendToAlly( User from, Ally to, String title, String txt, int flags ) { 99 114 Context context = ContextMap.getContext(); 100 Database db = context.getDatabase();115 org.hibernate.Session db = context.getDB(); 101 116 102 117 String msg = "an Allianz "+to.getName()+"\n"+txt; … … 106 121 } 107 122 108 List members = context.getDB().createQuery("from User where ally=?")123 List members = db.createQuery("from User where ally=?") 109 124 .setEntity(0, to) 110 125 .list(); … … 112 127 User member = (User)iter.next(); 113 128 114 db.prepare("INSERT INTO transmissionen (sender,empfaenger,inhalt,time,title,flags,kommentar) " +115 "VALUES (?,?,?,?,?,?,?)")116 .update(from.getID(), member.getID(), msg, Common.time(), title, flags, "");129 PM pm = new PM(from, member, title, msg); 130 pm.setFlags(flags); 131 db.persist(pm); 117 132 } 118 133 } … … 128 143 public static void send( User from, int to, String title, String txt, int flags ) { 129 144 Context context = ContextMap.getContext(); 130 Database db = context.getDatabase();145 org.hibernate.Session db = context.getDB(); 131 146 132 147 /* … … 139 154 } 140 155 141 User user = (User) context.getDB().get(User.class, to);156 User user = (User)db.get(User.class, to); 142 157 if( user != null ) { 143 db.prepare("INSERT INTO transmissionen (sender,empfaenger,inhalt,time,title,flags,kommentar) " +144 "VALUES (?,?,?,?,?,?,?)")145 .update(from.getID(), to, txt, Common.time(), title, flags, "");146 158 PM pm = new PM(from, user, title, txt); 159 pm.setFlags(flags); 160 db.persist(pm); 161 147 162 String forward = user.getUserValue("TBLORDER/pms/forward"); 148 163 if( !"".equals(forward) && (Integer.parseInt(forward) != 0) ) { … … 197 212 */ 198 213 public static int deleteAllInOrdner( Ordner ordner, User user ) { 199 Database db = ContextMap.getContext().getDatabase(); 200 201 int trash = Ordner.getTrash( user ).getID(); 202 203 SQLQuery pm = db.query("SELECT id,empfaenger,flags,gelesen FROM transmissionen WHERE ordner="+ordner.getID()); 204 while( pm.next() ){ 205 if( pm.getInt("empfaenger") == user.getID() ) { 206 if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 207 return 1; //PM muss gelesen werden 208 } 209 db.update("UPDATE transmissionen SET gelesen=2, ordner="+trash+" WHERE id="+pm.getInt("id")); 210 } 211 else { 212 return 2; //Loeschen fehlgeschlagen 214 org.hibernate.Session db = ContextMap.getContext().getDB(); 215 216 List pms = db.createQuery("from PM where ordner=?") 217 .setInteger(0, ordner.getID()) 218 .list(); 219 for( Iterator iter=pms.iterator(); iter.hasNext(); ) { 220 PM pm = (PM)iter.next(); 221 222 if( pm.getEmpfaenger().getID() != user.getID() ) { 223 return 2; 213 224 } 214 } 215 pm.free(); 216 return 0; //geloescht 217 } 218 219 /** 220 * Loescht die PM eines Benutzers 221 * @param pm_id Die ID der PM 222 * @param user Der Emfpaenger der PM 223 * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 224 */ 225 public static int deleteByID( int pm_id, User user ) { 226 Database db = ContextMap.getContext().getDatabase(); 227 228 int trash = Ordner.getTrash( user ).getID(); 229 SQLResultRow pm = db.first("SELECT empfaenger,flags,gelesen FROM transmissionen WHERE id="+pm_id); 230 if( pm.getInt("empfaenger") == user.getID() ) { 231 if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 232 return 1; //PM muss gelesen werden 225 int result = pm.delete(); 226 if( result != 0 ) { 227 return result; 233 228 } 234 db.update("UPDATE transmissionen SET gelesen=2, ordner="+trash+" WHERE id="+pm_id); 235 } 236 else { 237 return 2; //Loeschen fehlgeschlagen 238 } 229 } 230 239 231 return 0; //geloescht 240 232 } … … 247 239 */ 248 240 public static void moveAllToOrdner( Ordner source, Ordner dest , User user) { 249 Database db = ContextMap.getContext().getDatabase();241 org.hibernate.Session db = ContextMap.getContext().getDB(); 250 242 Ordner trash = Ordner.getTrash( user ); 251 252 SQLQuery pm = db.query("SELECT id,gelesen FROM transmissionen WHERE ordner="+source.getID()+" AND empfaenger="+user.getID()); 253 while( pm.next() ){ 254 int gelesen = (trash == source) ? 1 : pm.getInt("gelesen"); 255 gelesen = (trash == dest) ? 2 : gelesen; 256 db.update("UPDATE transmissionen SET ordner="+dest.getID()+", gelesen='"+gelesen+"' WHERE id="+pm.getInt("id")); 257 } 258 pm.free(); 259 } 260 261 /** 262 * Stellt eine geloeschte PM wieder her 263 * @param pm_id Die ID der PM 264 * @param user Der Empfaenger der PM 265 */ 266 public static void recoverByID( int pm_id, User user ) { 267 Database db = ContextMap.getContext().getDatabase(); 268 int trash = Ordner.getTrash( user ).getID(); 269 270 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"' AND empfaenger='"+user.getID()+"' AND id='"+pm_id+"'"); 243 244 List pms = db.createQuery("from PM where ordner=? and empfaenger=?") 245 .setInteger(0, source.getID()) 246 .setEntity(1, user) 247 .list(); 248 for( Iterator iter=pms.iterator(); iter.hasNext(); ) { 249 PM pm = (PM)iter.next(); 250 int gelesen = (trash == source) ? 1 : pm.getGelesen(); 251 252 pm.setGelesen((trash == dest) ? 2 : gelesen); 253 pm.setOrdner(dest.getID()); 254 } 271 255 } 272 256 … … 276 260 */ 277 261 public static void recoverAll( User user ) { 278 Database db = ContextMap.getContext().getDatabase();262 org.hibernate.Session db = ContextMap.getContext().getDB(); 279 263 int trash = Ordner.getTrash( user ).getID(); 280 264 281 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"'"); 265 db.createQuery("update PM set ordner=0,gelesen=1 where ordner=?") 266 .setInteger(0, trash) 267 .executeUpdate(); 268 } 269 270 @Id @GeneratedValue 271 private int id; 272 private int gelesen; 273 @ManyToOne(fetch=FetchType.LAZY) 274 @JoinColumn(name="sender", nullable=false) 275 private User sender; 276 @ManyToOne(fetch=FetchType.LAZY) 277 @JoinColumn(name="empfaenger", nullable=false) 278 private User empfaenger; 279 private String title; 280 private long time; 281 // Kein Join auf Ordner, da der Hauptordner 0 nicht in der DB existiert 282 private int ordner; 283 private int flags; 284 private String inhalt; 285 private String kommentar; 286 287 /** 288 * Konstruktor 289 * 290 */ 291 public PM() { 292 // EMPTY 293 } 294 295 /** 296 * Erstellt eine neue PM 297 * @param sender Der Sender der PM 298 * @param empfaenger Der Empfaenger 299 * @param title Der Titel 300 * @param inhalt Der Inhalt 301 */ 302 public PM(User sender, User empfaenger, String title, String inhalt) { 303 this.gelesen = 0; 304 this.sender = sender; 305 this.empfaenger = empfaenger; 306 this.title = title; 307 this.time = Common.time(); 308 this.ordner = 0; 309 this.flags = 0; 310 this.inhalt = inhalt; 311 this.kommentar = ""; 312 } 313 314 /** 315 * Gibt den Empfaenger zurueck 316 * @return Der Empfaenger 317 */ 318 public User getEmpfaenger() { 319 return empfaenger; 320 } 321 322 /** 323 * Setzt den Empfaenger 324 * @param empfaenger Der Empfaenger 325 */ 326 public void setEmpfaenger(User empfaenger) { 327 this.empfaenger = empfaenger; 328 } 329 330 /** 331 * Gibt die Flags zurueck 332 * @return Die Flags 333 */ 334 public int getFlags() { 335 return flags; 336 } 337 338 /** 339 * Prueft, ob die Nachricht das angegebene Flag hat 340 * @param flag Das Flag 341 * @return <code>true</code>, falls die Nachricht das Flag hat 342 */ 343 public boolean hasFlag(int flag) { 344 return (this.flags & flag) != 0; 345 } 346 347 /** 348 * Setzt die Flags der Nachricht 349 * @param flags Die Flags 350 */ 351 public void setFlags(int flags) { 352 this.flags = flags; 353 } 354 355 /** 356 * Gibt den Gelesen-Status der Nachricht zurueck 357 * @return Der Gelesen-Status 358 */ 359 public int getGelesen() { 360 return gelesen; 361 } 362 363 /** 364 * Setzt den Gelesen-Status der Nachricht 365 * @param gelesen Der Gelesen-Status 366 */ 367 public void setGelesen(int gelesen) { 368 this.gelesen = gelesen; 369 } 370 371 /** 372 * Gibt den Inhalt der Nachricht zurueck 373 * @return Der Inhalt 374 */ 375 public String getInhalt() { 376 return inhalt; 377 } 378 379 /** 380 * Setzt den Inahlt der Nachricht 381 * @param inhalt Der Inhalt 382 */ 383 public void setInhalt(String inhalt) { 384 this.inhalt = inhalt; 385 } 386 387 /** 388 * Gibt den Kommentar/die Anmerkung zur Nachricht zurueck 389 * @return Der Kommentar 390 */ 391 public String getKommentar() { 392 return kommentar; 393 } 394 395 /** 396 * Setzt den Kommentar/die Anmerkung zur Nachricht 397 * @param kommentar Der Kommentar 398 */ 399 public void setKommentar(String kommentar) { 400 this.kommentar = kommentar; 401 } 402 403 /** 404 * Gibt den Ordner zurueck, in dem sich die Nachricht befindet 405 * @return Der Ordner 406 */ 407 public int getOrdner() { 408 return ordner; 409 } 410 411 /** 412 * Setzt den Ordner, in dem sich die Nachricht befindet 413 * @param ordner Der Ordner 414 */ 415 public void setOrdner(int ordner) { 416 this.ordner = ordner; 417 } 418 419 /** 420 * Gibt den Sender der Nachricht zurueck 421 * @return Der Sender 422 */ 423 public User getSender() { 424 return sender; 425 } 426 427 /** 428 * Setzt den Sender der Nachricht 429 * @param sender Der Sender 430 */ 431 public void setSender(User sender) { 432 this.sender = sender; 433 } 434 435 /** 436 * Gibt den Zeitpunkt zurueck, an dem die Nachricht erstellt wurde 437 * @return Der Zeitpunkt 438 */ 439 public long getTime() { 440 return time; 441 } 442 443 /** 444 * Setzt den Zeitpunkt, an dem die Nachricht erstellt wurde 445 * @param time Der Zeitpunkt 446 */ 447 public void setTime(long time) { 448 this.time = time; 449 } 450 451 /** 452 * Gibt den Titel der Nachricht zurueck 453 * @return Der Titel 454 */ 455 public String getTitle() { 456 return title; 457 } 458 459 /** 460 * Setzt den Titel der Nachricht 461 * @param title Der Titel 462 */ 463 public void setTitle(String title) { 464 this.title = title; 465 } 466 467 /** 468 * Gibt die ID der Nachricht zurueck 469 * @return Die ID 470 */ 471 public int getId() { 472 return id; 473 } 474 475 /** 476 * Stellt eine geloeschte PM wieder her 477 */ 478 public void recover() { 479 if( this.gelesen <= 1 ) { 480 return; 481 } 482 483 int trash = Ordner.getTrash( this.empfaenger ).getID(); 484 if( this.ordner != trash ) { 485 return; 486 } 487 this.gelesen = 1; 488 this.ordner = 0; 489 } 490 491 /** 492 * Loescht die PM 493 * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 494 */ 495 public int delete() { 496 if( this.gelesen > 1 ) { 497 return 2; 498 } 499 int trash = Ordner.getTrash( this.empfaenger ).getID(); 500 if( this.hasFlag(PM.FLAGS_IMPORTANT) && (this.gelesen < 1) ) { 501 return 1; 502 } 503 this.gelesen = 2; 504 this.ordner = trash; 505 506 return 0; //geloescht 282 507 } 283 508 } src/net/driftingsouls/ds2/server/modules/CommController.java
rddc6772 r310a764 123 123 */ 124 124 public void deleteAction() { 125 org.hibernate.Session db = getDB(); 125 126 User user = (User)getUser(); 126 127 TemplateEngine t = getTemplateEngine(); … … 134 135 if( (ordner != null) && (delete == 0) ) { 135 136 result = ordner.deleteOrdner(); 136 } else { 137 result = PM.deleteByID( delete, user ); 137 } 138 else { 139 PM pm = (PM)db.get(PM.class, delete); 140 if( pm.getEmpfaenger() == user ) { 141 result = pm.delete(); 142 } 138 143 } 139 144 … … 502 507 503 508 if( pm_id == pms.get(i) ) { 504 PM.deleteByID( pm_id, user ); 509 PM pm = (PM)getDB().get(PM.class, pm_id); 510 if( pm.getEmpfaenger() != user ) { 511 continue; 512 } 513 pm.delete(); 505 514 } 506 515 } … … 712 721 713 722 parameterNumber("recover"); 714 int recover = getInteger("recover"); 715 716 PM.recoverByID( recover, user ); 723 PM pm = (PM)getDB().get(PM.class, getInteger("recover")); 724 725 if( pm.getEmpfaenger() == user ) { 726 pm.recover(); 727 } 717 728 718 729 redirect("showInbox"); web/WEB-INF/cfg/hibernatemappings.xml
rdcfb531 r310a764 82 82 <mapping class="net.driftingsouls.ds2.server.tasks.Task" /> 83 83 <mapping class="net.driftingsouls.ds2.server.entities.ResourceLimit" /> 84 < !-- transmissionen [net.driftingsouls.ds2.server.comm.PM umbauen] -->84 <mapping class="net.driftingsouls.ds2.server.comm.PM" /> 85 85 <mapping class="net.driftingsouls.ds2.server.entities.User" /> 86 86 <!-- user_f -->
