Changeset 310a7647e8d85d3bb174808912919400dcb95570

Show
Ignore:
Timestamp:
08/26/07 11:13:46 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1188119626 +0200
git-parent:

[83b75a066026185e29fcf147e4b81bfc393fd03f]

git-author:
Christopher Jung <bktheg@web.de> 1188119626 +0200
Message:

Entity fuer transmissionen hinzugefuegt und an einigen Stellen verwendet

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/net/driftingsouls/ds2/server/comm/Ordner.java

    r580809c r310a764  
    3737import net.driftingsouls.ds2.server.framework.Context; 
    3838import net.driftingsouls.ds2.server.framework.ContextMap; 
    39 import net.driftingsouls.ds2.server.framework.db.Database; 
    40 import net.driftingsouls.ds2.server.framework.db.SQLQuery; 
    4139 
    4240/** 
     
    233231         */ 
    234232        public int countPMInOrdner() { 
    235                 Database db = ContextMap.getContext().getDatabase(); 
     233                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    236234 
    237235                int gelesen = 2; 
     
    240238                } 
    241239                 
    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(); 
    243245        } 
    244246         
     
    251253         */ 
    252254        public Map<Integer,Integer> countPMInAllOrdner() {  
    253                 Database db = ContextMap.getContext().getDatabase(); 
     255                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    254256                Map<Integer,Integer> result = new HashMap<Integer,Integer>(); 
    255257                 
     
    273275                int trash = getTrash( this.owner ).getID(); 
    274276                 
    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()); 
    284287                } 
    285288 
     
    336339         */ 
    337340        public void setName( String name ) { 
    338                 Database db = ContextMap.getContext().getDatabase(); 
    339                 db.prepare("UPDATE ordner SET name= ? WHERE id= ?").update(name, this.id); 
    340341                this.name = name; 
    341342        } 
  • src/net/driftingsouls/ds2/server/comm/PM.java

    re5d3709 r310a764  
    2222import java.util.List; 
    2323 
     24import javax.persistence.Entity; 
     25import javax.persistence.FetchType; 
     26import javax.persistence.GeneratedValue; 
     27import javax.persistence.Id; 
     28import javax.persistence.JoinColumn; 
     29import javax.persistence.ManyToOne; 
     30import javax.persistence.Table; 
     31 
    2432import net.driftingsouls.ds2.server.entities.Ally; 
    2533import net.driftingsouls.ds2.server.entities.User; 
     
    2836import net.driftingsouls.ds2.server.framework.Context; 
    2937import 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; 
    3338import net.driftingsouls.ds2.server.tasks.Taskmanager; 
    3439 
    3540/** 
    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>   
    3750 * @author Christopher Jung 
    3851 * @author Christian Peltz 
    3952 * 
    4053 */ 
     54@Entity 
     55@Table(name="transmissionen") 
    4156public class PM { 
    4257        /** 
     
    98113        public static void sendToAlly( User from, Ally to, String title, String txt, int flags ) { 
    99114                Context context = ContextMap.getContext(); 
    100                 Database db = context.getDatabase(); 
     115                org.hibernate.Session db = context.getDB(); 
    101116 
    102117                String msg = "an Allianz "+to.getName()+"\n"+txt; 
     
    106121                } 
    107122                 
    108                 List members = context.getDB().createQuery("from User where ally=?") 
     123                List members = db.createQuery("from User where ally=?") 
    109124                        .setEntity(0, to) 
    110125                        .list(); 
     
    112127                        User member = (User)iter.next(); 
    113128                         
    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); 
    117132                } 
    118133        } 
     
    128143        public static void send( User from, int to, String title, String txt, int flags ) { 
    129144                Context context = ContextMap.getContext(); 
    130                 Database db = context.getDatabase(); 
     145                org.hibernate.Session db = context.getDB(); 
    131146 
    132147                /* 
     
    139154                        } 
    140155                 
    141                         User user = (User)context.getDB().get(User.class, to); 
     156                        User user = (User)db.get(User.class, to); 
    142157                        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                                                                        
    147162                                String forward = user.getUserValue("TBLORDER/pms/forward"); 
    148163                                if( !"".equals(forward) && (Integer.parseInt(forward) != 0) ) { 
     
    197212         */ 
    198213        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; 
    213224                        } 
    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; 
    233228                        } 
    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 
    239231                return 0;       //geloescht 
    240232        } 
     
    247239         */ 
    248240        public static void moveAllToOrdner( Ordner source, Ordner dest , User user) { 
    249                 Database db = ContextMap.getContext().getDatabase(); 
     241                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    250242                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                } 
    271255        } 
    272256 
     
    276260         */ 
    277261        public static void recoverAll( User user ) { 
    278                 Database db = ContextMap.getContext().getDatabase(); 
     262                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    279263                int trash = Ordner.getTrash( user ).getID(); 
    280264         
    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 
    282507        } 
    283508} 
  • src/net/driftingsouls/ds2/server/modules/CommController.java

    rddc6772 r310a764  
    123123         */ 
    124124        public void deleteAction() { 
     125                org.hibernate.Session db = getDB(); 
    125126                User user = (User)getUser(); 
    126127                TemplateEngine t = getTemplateEngine(); 
     
    134135                if( (ordner != null) && (delete == 0) ) { 
    135136                        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                        } 
    138143                } 
    139144 
     
    502507 
    503508                        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(); 
    505514                        } 
    506515                } 
     
    712721 
    713722                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                } 
    717728                 
    718729                redirect("showInbox"); 
  • web/WEB-INF/cfg/hibernatemappings.xml

    rdcfb531 r310a764  
    8282        <mapping class="net.driftingsouls.ds2.server.tasks.Task" /> 
    8383        <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" />  
    8585        <mapping class="net.driftingsouls.ds2.server.entities.User" /> 
    8686        <!-- user_f -->