Changeset 580809c76656c03d41c381ab69c7a996bbb3a12e

Show
Ignore:
Timestamp:
08/05/07 16:25:37 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1186323937 +0200
git-parent:

[044b8a02866e5215e5cc402103df25acb6e1e7bf]

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

Ordner: Umstellung auf Hibernate

Files:

Legend:

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

    r7cb4eda r580809c  
    2121import java.util.ArrayList; 
    2222import java.util.HashMap; 
     23import java.util.Iterator; 
    2324import java.util.List; 
    2425import java.util.Map; 
    2526 
     27import javax.persistence.Entity; 
     28import javax.persistence.FetchType; 
     29import javax.persistence.GeneratedValue; 
     30import javax.persistence.Id; 
     31import javax.persistence.JoinColumn; 
     32import javax.persistence.ManyToOne; 
     33import javax.persistence.Table; 
     34 
     35import net.driftingsouls.ds2.server.entities.User; 
    2636import net.driftingsouls.ds2.server.framework.Common; 
    2737import net.driftingsouls.ds2.server.framework.Context; 
     
    2939import net.driftingsouls.ds2.server.framework.db.Database; 
    3040import net.driftingsouls.ds2.server.framework.db.SQLQuery; 
    31 import net.driftingsouls.ds2.server.framework.db.SQLResultRow; 
    3241 
    3342/** 
     
    4150 * @author Christopher Jung 
    4251 */ 
     52@Entity 
     53@Table(name="ordner") 
    4354public class Ordner { 
    4455        /** 
     
    5162        public static final int FLAG_TRASH      = 1; 
    5263         
    53         private SQLResultRow data; 
    54          
    55         private Ordner(SQLResultRow data) { 
    56                 this.data = data; 
     64        @Id @GeneratedValue 
     65        private int id; 
     66        private String name; 
     67        @ManyToOne(fetch=FetchType.LAZY) 
     68        @JoinColumn(name="playerid", nullable=false) 
     69        private User owner; 
     70        private int flags; 
     71        private int parent; 
     72         
     73        /** 
     74         * Konstruktor 
     75         */ 
     76        public Ordner() { 
     77                // EMPTY 
     78        } 
     79         
     80        private Ordner(String name, User owner, Ordner parent) { 
     81                this.name = name; 
     82                this.owner = owner; 
     83                this.parent = parent.getID(); 
     84        } 
     85         
     86        /** 
     87         * Gibt den Ordner mit der angegebenen ID zurueck. 
     88         * Sollte kein solcher Ordner existieren, so wird <code>null</code> zurueckgegeben. 
     89         *  
     90         * @param id Die ID des Ordners 
     91         * @return Der Ordner 
     92         */ 
     93        public static Ordner getOrdnerByID( int id ) { 
     94                return getOrdnerByID(id, null); 
    5795        } 
    5896         
     
    62100         *  
    63101         * @param id Die ID des Ordners 
    64          * @param user_id Die ID des Benutzers 
     102         * @param user Der Benutzer 
    65103         * @return Der Ordner 
    66104         */ 
    67         public static Ordner getOrdnerByID( int id, int user_id ) {     //findet den Ordner mit der einer bestimmten ID 
     105        public static Ordner getOrdnerByID( int id, User user ) { 
     106                org.hibernate.Session db = ContextMap.getContext().getDB(); 
     107                 
    68108                if( id != 0 ) { 
    69                         Database db = ContextMap.getContext().getDatabase(); 
    70                         String userstatement = ""; 
    71                         if( user_id != 0 ) { 
    72                                 userstatement = " AND playerid="+user_id; 
    73                         }  
    74                          
    75                         SQLResultRow data = db.first("SELECT * FROM ordner WHERE id=",id,userstatement); 
    76                         if( !data.isEmpty() ) { 
    77                                 return new Ordner( data ); 
     109                        Ordner ordner = (Ordner)db.get(Ordner.class, id); 
     110                         
     111                        if( ordner == null ) { 
     112                                return null; 
    78113                        } 
    79                         return null; 
    80                 } 
    81                 SQLResultRow row = new SQLResultRow(); 
    82                 row.put("id", 0); 
    83                 row.put("name", "Hauptverzeichnis"); 
    84                 row.put("flags", 0); 
    85                 return new Ordner( row ); 
     114                         
     115                        if( (user != null) && (ordner.getOwner() != user) ) { 
     116                                return null; 
     117                        } 
     118                         
     119                        return ordner; 
     120                } 
     121                 
     122                Ordner ordner = new Ordner(); 
     123                ordner.id = 0; 
     124                ordner.name = "Hauptverzeichnis"; 
     125                ordner.flags = 0; 
     126                ordner.owner = user; 
     127                 
     128                return ordner; 
    86129        } 
    87130         
    88131        /** 
    89132         * Gibt den Papierkorb eines Benutzers zurueck. Jeder Benutzer hat einen Papierkorb... 
    90          * @param user_id Die ID des Benutzers 
     133         * @param user Der Benutzer 
    91134         * @return Der Papierkorb 
    92135         */ 
    93         public static Ordner getTrash ( int user_id ) { 
     136        public static Ordner getTrash ( User user ) { 
    94137                Context context = ContextMap.getContext(); 
    95                 Object trash = context.getVariable(Ordner.class, "trash"+user_id); 
     138                Object trash = context.getVariable(Ordner.class, "trash"+user.getID()); 
    96139                if( trash == null ) { 
    97                         Database db = context.getDatabase(); 
    98                         trash = new Ordner(db.first("SELECT * FROM ordner WHERE playerid='",user_id,"' AND (flags & ",Ordner.FLAG_TRASH,")")); 
    99                         context.putVariable(Ordner.class, "trash"+user_id, trash); 
     140                        org.hibernate.Session db = ContextMap.getContext().getDB(); 
     141                         
     142                        trash = db.createQuery("from Ordner where owner=? and bit_and(flags,?)!=0") 
     143                                .setEntity(0, user) 
     144                                .setInteger(1, Ordner.FLAG_TRASH) 
     145                                .uniqueResult(); 
     146                         
     147                        context.putVariable(Ordner.class, "trash"+user.getID(), trash); 
    100148                } 
    101149                return (Ordner)trash; 
     
    103151         
    104152        /** 
    105          * Loescht einen bestimmten Ordner eines Users. Alle im Ordner enthaltenen 
     153         * Loescht den Ordner. Alle im Ordner enthaltenen 
    106154         * Unterordner und Pms werden ebenfalls geloescht. 
    107          * @param ordner_id Die ID des Ordners 
    108          * @param user_id Die ID des Besitzers 
    109155         * @return <code>0</code>, falls das Loeschen erfolgreich war, <code>1</code>, falls erst noch eine PM gelesen werden muss 
    110156         * und <code>2</code>, bei sonstigen Fehlern 
    111157         */ 
    112         public static int deleteOrdnerByID( int ordner_id, int user_id ) { 
    113                 Database db = ContextMap.getContext().getDatabase(); 
     158        public int deleteOrdner() { 
     159                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    114160                int result = 0; 
    115                 if( ordner_id == getTrash(user_id).getID() ) { 
     161                if( (this.flags & Ordner.FLAG_TRASH) != 0 ) { 
    116162                        return 2; 
    117163                } 
    118                 if( (result = PM.deleteAllInOrdner( ordner_id, user_id )) != 0 ){ 
     164                if( (result = PM.deleteAllInOrdner( this, this.owner )) != 0 ){ 
    119165                        return result; 
    120166                } 
    121                 SQLQuery subordner_id = db.query("SELECT id FROM ordner WHERE parent=",ordner_id," AND playerid=",user_id); 
    122                 while( subordner_id.next() ){ 
    123                         if( (result = deleteOrdnerByID( subordner_id.getInt("id"), user_id )) != 0 ){ 
    124                                 subordner_id.free(); 
     167                List ordnerlist = db.createQuery("from Ordner where parent=? and owner=?") 
     168                        .setInteger(0, this.id) 
     169                        .setEntity(1, this.owner) 
     170                        .list(); 
     171                 
     172                for( Iterator iter=ordnerlist.iterator(); iter.hasNext(); ) { 
     173                        Ordner subordner = (Ordner)iter.next(); 
     174                         
     175                        if( (result = subordner.deleteOrdner()) != 0 ){ 
    125176                                return result; 
    126177                        } 
    127178                } 
    128                 subordner_id.free(); 
    129                 db.update("DELETE FROM ordner WHERE id=",ordner_id); 
     179 
     180                db.delete(this); 
     181                 
    130182                return 0; 
    131183        } 
     
    134186         * Erstellt einen neuen Ordner fuer einen bestimmten Spieler 
    135187         * @param name Der Name des neuen Ordners 
    136          * @param parent_id Die ID des Elternordners 
    137          * @param user_id Die ID des Besitzers 
    138          */ 
    139         public static void createNewOrdner( String name, int parent_id, int user_id ) { 
    140                 Database db = ContextMap.getContext().getDatabase(); 
    141                 int trash = Ordner.getTrash( user_id ).getID(); 
    142                 if( trash != parent_id ) { 
    143                         db.update("INSERT INTO ordner SET name='",name,"', parent=",parent_id,", playerid=",user_id); 
    144                 } 
    145         } 
    146          
    147         /** 
    148          * Prueft, ob der Ordner mit der angegebenen ID eines bestimmten Besitzers 
    149          * existiert 
    150          * @param ordner_id Die ID des Ordners 
    151          * @param user_id Die ID des Spielers 
    152          * @return <code>true</code>, falls der Ordner existiert 
    153          */ 
    154         public static boolean existsOrdnerWithID( int ordner_id, int user_id ) { 
    155                 Database db = ContextMap.getContext().getDatabase(); 
    156                 if( ordner_id != 0 ) { 
    157                         return !db.first("SELECT id FROM ordner WHERE id=",ordner_id," AND playerid=",user_id).isEmpty(); 
    158                 } 
    159                 return true; 
    160         } 
    161          
    162         /** 
    163          * Gibt die IDs aller Kindordner, ob direkt oder indirekt, eines bestimmten Ordners 
    164          * eines Spielers zurueck 
    165          * @param parent_id Die Ordner-ID 
    166          * @param user_id Die Spieler-ID 
     188         * @param parent Der Elternordner 
     189         * @param user Der Besitzer 
     190         * @return Der neue Ordner 
     191         * @throws IllegalArgumentException Falls der Elternordner der Papierkorb ist 
     192         */ 
     193        public static Ordner createNewOrdner( String name, Ordner parent, User user ) throws IllegalArgumentException { 
     194                org.hibernate.Session db = ContextMap.getContext().getDB(); 
     195                 
     196                if( (parent.getFlags() & Ordner.FLAG_TRASH) != 0 ) { 
     197                        throw new IllegalArgumentException("Ordnererstellung im Papierkorb nicht moeglich"); 
     198                } 
     199                Ordner ordner = new Ordner(name, user, parent); 
     200                db.save(ordner); 
     201                         
     202                return ordner; 
     203        } 
     204         
     205        /** 
     206         * Gibt alle Kindordner, ob direkt oder indirekt, des Ordners zurueck 
    167207         * @return Liste mit Ordner-IDs 
    168208         */ 
    169         public static List<Integer> getAllChildIDs ( int parent_id, int user_id ) { 
    170                 Database db = ContextMap.getContext().getDatabase(); 
    171                  
    172                 List<Integer> childs = new ArrayList<Integer>(); 
    173                  
    174                 SQLQuery child = db.query("SELECT id FROM ordner WHERE parent=",parent_id," AND playerid=",user_id); 
    175                 while( child.next() ){ 
    176                         childs.add(child.getInt("id")); 
    177                 } 
    178  
    179                 child.free(); 
    180          
    181                 for( int i=0; i < childs.size(); i++ ){ 
    182                         childs.addAll( getAllChildIDs( childs.get(i), user_id ) ); 
    183                 } 
    184  
    185                 return childs; 
    186         } 
    187          
    188         /** 
    189          * Gibt alle Kindordner, ob direkt oder indirekt, eines bestimmten Ordners 
    190          * eines Spielers zurueck 
    191          * @param parent_id Die Ordner-ID 
    192          * @param user_id Die Spieler-ID 
    193          * @return Liste mit Ordner-IDs 
    194          */ 
    195         public static List<Ordner> getAllChildren( int parent_id, int user_id ) { 
    196                 Database db = ContextMap.getContext().getDatabase(); 
     209        public List<Ordner> getAllChildren() { 
     210                org.hibernate.Session db = ContextMap.getContext().getDB(); 
    197211                 
    198212                List<Ordner> children = new ArrayList<Ordner>(); 
    199213                 
    200                 SQLQuery child = db.query("SELECT * FROM ordner WHERE parent=",parent_id," AND playerid=",user_id); 
    201                 while( child.next() ){ 
    202                         children.add(new Ordner(child.getRow())); 
    203                 } 
    204  
    205                 child.free(); 
     214                List ordnerlist = db.createQuery("from Ordner where parent=? and owner=?") 
     215                        .setInteger(0, this.id) 
     216                        .setEntity(1, this.owner) 
     217                        .list(); 
     218                for( Iterator iter=ordnerlist.iterator(); iter.hasNext(); ) { 
     219                        children.add((Ordner)iter.next()); 
     220                } 
    206221         
    207222                for( int i=0; i < children.size(); i++ ){ 
    208                         children.addAll( getAllChildren( children.get(i).getID(), user_id ) ); 
     223                        children.addAll( children.get(i).getAllChildren() ); 
    209224                } 
    210225 
     
    215230         * Gibt die Anzahl der im Ordner vorhandenen PMs zurueck. 
    216231         * Unterordner werden nicht beruecksichtigt. 
    217          * @param ordner_id Die ID des Ordners 
    218          * @param user_id Der Besitzer des Ordners 
    219232         * @return Die Anzahl der PMs 
    220233         */ 
    221         public static int countPMInOrdner( int ordner_id, int user_id ) { 
     234        public int countPMInOrdner() { 
    222235                Database db = ContextMap.getContext().getDatabase(); 
    223                 int trash = getTrash( user_id ).getID(); 
    224236 
    225237                int gelesen = 2; 
    226                 if( ordner_id == trash ){ 
     238                if( (this.flags & Ordner.FLAG_TRASH) != 0 ){ 
    227239                        gelesen = 10; 
    228240                } 
    229                 return db.first("SELECT count(*) count FROM transmissionen WHERE empfaenger='",user_id,"' AND ordner=",ordner_id," AND gelesen<",gelesen).getInt("count"); 
    230         } 
    231          
    232         /** 
    233         * Gibt die Anzahl der PMs in allen Ordnern unterhalb eines bestimmten Ordners  
    234          * eines Spielers zurueck. 
     241                 
     242               return db.first("SELECT count(*) count FROM transmissionen WHERE empfaenger='",this.owner.getID(),"' AND ordner=",this.id," AND gelesen<",gelesen).getInt("count"); 
     243        } 
     244         
     245        /** 
     246         * Gibt die Anzahl der PMs in allen Ordnern unterhalb des Ordners zurueck. 
    235247         * PMs in Unterordnern erhoehen die Anzahl der PMs im uebergeordneten Ordner. 
    236248         * Zurueckgegeben wird eine Map, in der die Ordner-ID der Schluessel ist. Der Wert 
    237249         * ist die Anzahl der PMs 
    238          * @param parent_id Die OrdnerID 
    239          * @param user_id Die Spieler-ID 
    240250         * @return Map mit der Anzahl der PMs in den jeweiligen Unterordnern 
    241251         */ 
    242         public static Map<Integer,Integer> countPMInAllOrdner( int parent_id, int user_id ) {  
     252        public Map<Integer,Integer> countPMInAllOrdner() {  
    243253                Database db = ContextMap.getContext().getDatabase(); 
    244254                Map<Integer,Integer> result = new HashMap<Integer,Integer>(); 
    245255                 
    246                 List<Ordner> ordners = getAllChildren( parent_id, user_id ); 
     256                List<Ordner> ordners = this.getAllChildren(); 
    247257                 
    248258                // Wenn der Ordner keine Unterordner hat, dann eine leere Map zurueckgeben 
     
    261271 
    262272                // Map mit der Anzahl der PMs fuellen, die sich direkt im Ordner befinden 
    263                 int trash = getTrash( user_id ).getID(); 
     273                int trash = getTrash( this.owner ).getID(); 
    264274                 
    265275                SQLQuery pmcount = db.query( 
    266276                                "SELECT ordner, count(*) count " + 
    267277                                "FROM transmissionen " + 
    268                                 "WHERE empfaenger="+user_id+" AND " + 
     278                                "WHERE empfaenger="+this.owner.getID()+" AND " + 
    269279                                                "ordner IN ("+Common.implode(",",ordnerIDs)+") AND " + 
    270280                                                "gelesen < CASE WHEN ordner="+trash+" THEN 10 ELSE 2 END " + 
     
    279289                while( (childCount.size() > 0) && (maxloops-- > 0) ) { 
    280290                        for( int i=0; i < ordners.size(); i++ ) { 
    281                                 Ordner ordner = ordners.get(i); 
    282                                 if( childCount.get(ordner.getID()) != null ) { 
     291                                Ordner aOrdner = ordners.get(i); 
     292                                if( childCount.get(aOrdner.getID()) != null ) { 
    283293                                        continue; 
    284294                                } 
    285295                                 
    286                                 int parent = ordner.getParent(); 
     296                                int parent = aOrdner.getParent(); 
    287297                                // Die Anzahl der PMs des Elternordners um die  
    288298                                // des aktuellen Ordners erhoehen. Anschliessend 
     
    291301                                        result.put(parent, 0); 
    292302                                } 
    293                                 Integer child = result.get(ordner.getID()); 
     303                                Integer child = result.get(aOrdner.getID()); 
    294304                                result.put(parent, result.get(parent)+ (child != null ? child : 0) ); 
    295305                                 
    296306                                childCount.put(parent, childCount.get(parent)-1); 
    297                                 childCount.remove(ordner.getID()); 
     307                                childCount.remove(aOrdner.getID()); 
    298308                                 
    299309                                ordners.remove(i); 
     
    310320         */ 
    311321        public int getID() { 
    312                 return this.data.getInt("id")
     322                return this.id
    313323        } 
    314324 
     
    318328         */ 
    319329        public String getName() { 
    320                 return this.data.getString("name"); 
    321         } 
     330                return this.name; 
     331        } 
     332         
     333        /** 
     334         * Setzt den Namen des Ordners 
     335         * @param name der neue Name 
     336         */ 
     337        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                this.name = name; 
     341        } 
     342 
    322343         
    323344        /** 
     
    326347         */ 
    327348        public int getParent() { 
    328                 return this.data.getInt("parent"); 
    329         } 
    330  
    331         /** 
    332          * Setzt den Namen des Ordners 
    333          * @param name der neue Name 
    334          */ 
    335         public void setName( String name ) { 
    336                 Database db = ContextMap.getContext().getDatabase(); 
    337                 db.prepare("UPDATE ordner SET name= ? WHERE id= ?").update(name, this.data.getInt("id")); 
    338                 this.data.put("name", name); 
    339         } 
    340  
     349                return this.parent; 
     350        } 
     351 
     352        /** 
     353         * Setzt den Elternordner 
     354         * @param parent Der Elternordner 
     355         */ 
     356        public void setParent(Ordner parent) { 
     357                this.parent = parent.getID(); 
     358        } 
     359         
    341360        /** 
    342361         * Gibt die Flags des Ordners zurueck 
     
    344363         */ 
    345364        public int getFlags() { 
    346                 return this.data.getInt("flags"); 
     365                return this.flags; 
     366        } 
     367         
     368        /** 
     369         * Setzt die Flags des Ordners 
     370         * @param flags Die Flags 
     371         */ 
     372        public void setFlags(int flags) { 
     373                this.flags = flags; 
     374        } 
     375         
     376        /** 
     377         * Gibt den Besitzer des Ordners zurueck 
     378         * @return Der Besitzer 
     379         */ 
     380        public User getOwner() { 
     381                return this.owner; 
     382        } 
     383         
     384        /** 
     385         * Setzt den Besitzer des Ordners 
     386         * @param owner Der Besitzer 
     387         */ 
     388        public void setOwner(User owner) { 
     389                this.owner = owner; 
    347390        } 
    348391} 
  • src/net/driftingsouls/ds2/server/comm/PM.java

    r6e0b642 r580809c  
    174174         * Loescht alle PMs aus einem Ordner eines bestimmten Spielers. 
    175175         * Der Vorgang schlaegt fehl, wenn noch nicht alle wichtigen PMs gelesen wurden 
    176          * @param ordner_id Der Ordner, dessen Inhalt geloescht werden soll 
    177          * @param user_id Die ID des Besitzers des Ordners 
     176         * @param ordner Der Ordner, dessen Inhalt geloescht werden soll 
     177         * @param user Der Besitzer des Ordners 
    178178         * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 
    179179         */ 
    180         public static int deleteAllInOrdner( int ordner_id, int user_id )
     180        public static int deleteAllInOrdner( Ordner ordner, User user )
    181181                Database db = ContextMap.getContext().getDatabase(); 
    182182                 
    183                 int trash = Ordner.getTrash( user_id ).getID(); 
     183                int trash = Ordner.getTrash( user ).getID(); 
    184184                 
    185                 SQLQuery pm = db.query("SELECT id,empfaenger,flags,gelesen FROM transmissionen WHERE ordner="+ordner_id); 
     185                SQLQuery pm = db.query("SELECT id,empfaenger,flags,gelesen FROM transmissionen WHERE ordner="+ordner.getID()); 
    186186                while( pm.next() ){ 
    187                         if( pm.getInt("empfaenger") == user_id ) { 
     187                        if( pm.getInt("empfaenger") == user.getID() ) { 
    188188                                if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 
    189189                                        return 1;       //PM muss gelesen werden 
     
    202202         * Loescht die PM eines Benutzers 
    203203         * @param pm_id Die ID der PM 
    204          * @param user_id Die ID des Emfpaengers der PM 
     204         * @param user Der Emfpaenger der PM 
    205205         * @return 0, falls der Vorgang erfolgreich war. 1, wenn ein Fehler aufgetreten ist und 2, falls nicht alle PMs gelesen wurden 
    206206         */ 
    207         public static int deleteByID( int pm_id, int user_id )
     207        public static int deleteByID( int pm_id, User user )
    208208                Database db = ContextMap.getContext().getDatabase(); 
    209209                 
    210                 int trash = Ordner.getTrash( user_id ).getID(); 
     210                int trash = Ordner.getTrash( user ).getID(); 
    211211                SQLResultRow pm = db.first("SELECT empfaenger,flags,gelesen FROM transmissionen WHERE id="+pm_id); 
    212                 if( pm.getInt("empfaenger") == user_id ) { 
     212                if( pm.getInt("empfaenger") == user.getID() ) { 
    213213                        if( ((pm.getInt("flags") & PM.FLAGS_IMPORTANT) != 0) && (pm.getInt("gelesen") < 1) ) { 
    214214                                return 1;       //PM muss gelesen werden 
     
    224224        /** 
    225225         * Verschiebt alle PMs von einem Ordner in einen anderen 
    226          * @param source Die ID des Ausgangsordners 
    227          * @param dest Die ID des Zielordners 
    228          * @param user_id Die ID des Besitzers der PM 
    229          */ 
    230         public static void moveAllToOrdner( int source, int dest , int user_id)
    231                 Database db = ContextMap.getContext().getDatabase(); 
    232                 int trash = Ordner.getTrash( user_id ).getID(); 
    233  
    234                 SQLQuery pm = db.query("SELECT id,gelesen FROM transmissionen WHERE ordner="+source+" AND empfaenger="+user_id); 
     226         * @param source Der Ausgangsordner 
     227         * @param dest Der Zielordner 
     228         * @param user Der Besitzer der PM 
     229         */ 
     230        public static void moveAllToOrdner( Ordner source, Ordner dest , User user)
     231                Database db = ContextMap.getContext().getDatabase(); 
     232                Ordner trash = Ordner.getTrash( user ); 
     233 
     234                SQLQuery pm = db.query("SELECT id,gelesen FROM transmissionen WHERE ordner="+source.getID()+" AND empfaenger="+user.getID()); 
    235235                while( pm.next() ){ 
    236236                        int gelesen = (trash == source) ? 1 : pm.getInt("gelesen"); 
    237237                        gelesen = (trash == dest) ? 2 : gelesen; 
    238                         db.update("UPDATE transmissionen SET ordner="+dest+", gelesen='"+gelesen+"' WHERE id="+pm.getInt("id")); 
     238                        db.update("UPDATE transmissionen SET ordner="+dest.getID()+", gelesen='"+gelesen+"' WHERE id="+pm.getInt("id")); 
    239239                } 
    240240                pm.free(); 
     
    244244         * Stellt eine geloeschte PM wieder her 
    245245         * @param pm_id Die ID der PM 
    246          * @param user_id Die ID des Empfaengers der PM 
    247          */ 
    248         public static void recoverByID( int pm_id, int user_id )
    249                 Database db = ContextMap.getContext().getDatabase(); 
    250                 int trash = Ordner.getTrash( user_id ).getID(); 
    251  
    252                 db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"' AND empfaenger='"+user_id+"' AND id='"+pm_id+"'"); 
     246         * @param user Der Empfaenger der PM 
     247         */ 
     248        public static void recoverByID( int pm_id, User user )
     249                Database db = ContextMap.getContext().getDatabase(); 
     250                int trash = Ordner.getTrash( user ).getID(); 
     251 
     252                db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"' AND empfaenger='"+user.getID()+"' AND id='"+pm_id+"'"); 
    253253        } 
    254254 
    255255        /** 
    256256         * Stelllt alle geloeschten PMs eines Spielers wieder her 
    257          * @param user_id Die ID des Spielers 
    258          */ 
    259         public static void recoverAll( int user_id )
    260                 Database db = ContextMap.getContext().getDatabase(); 
    261                 int trash = Ordner.getTrash( user_id ).getID(); 
     257         * @param user Der Spieler 
     258         */ 
     259        public static void recoverAll( User user )
     260                Database db = ContextMap.getContext().getDatabase(); 
     261                int trash = Ordner.getTrash( user ).getID(); 
    262262         
    263263                db.update("UPDATE transmissionen SET ordner=0,gelesen=1 WHERE ordner='"+trash+"'"); 
  • src/net/driftingsouls/ds2/server/framework/db/HibernateFacade.java

    r61674f4 r580809c  
    2929import org.hibernate.SessionFactory; 
    3030import org.hibernate.cfg.AnnotationConfiguration; 
     31import org.hibernate.dialect.function.SQLFunctionTemplate; 
    3132import org.hibernate.dialect.function.StandardSQLFunction; 
    3233import org.hibernate.stat.Statistics; 
     
    5152                conf.addSqlFunction("floor", new StandardSQLFunction("floor", Hibernate.LONG)); 
    5253                conf.addSqlFunction("ncp", new NullCompFunction()); 
     54                conf.addSqlFunction("bit_and", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 & ?2")); 
     55                conf.addSqlFunction("bit_or", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 | ?2")); 
    5356                 
    5457                try { 
  • src/net/driftingsouls/ds2/server/modules/CommController.java

    r283e6c7 r580809c  
    108108                int ordner = getInteger("ordner"); 
    109109 
    110                 int trash = Ordner.getTrash( user.getID() ).getID(); 
     110                int trash = Ordner.getTrash( user ).getID(); 
    111111 
    112112                db.update("UPDATE transmissionen SET gelesen=2, ordner='",trash,"' WHERE empfaenger='",user.getID(),"' AND ordner='",ordner,"' AND (gelesen=1 OR !(flags & ",PM.FLAGS_IMPORTANT,"))"); 
     
    129129                parameterNumber("delord"); 
    130130                int delete = getInteger("delete"); 
    131                 int ordner = getInteger("delord"); 
     131                Ordner ordner = Ordner.getOrdnerByID(getInteger("delord"), user); 
    132132 
    133133                int result = 0; 
    134                 if( (ordner != 0) && (delete == 0) ) { 
    135                         result = Ordner.deleteOrdnerByID( ordner, user.getID() ); 
     134                if( (ordner != null) && (delete == 0) ) { 
     135                        result = ordner.deleteOrdner(); 
    136136                } else { 
    137                         result = PM.deleteByID( delete, user.getID() ); 
     137                        result = PM.deleteByID( delete, user ); 
    138138                } 
    139139 
     
    160160         */ 
    161161        public void newOrdnerAction() { 
     162                User user = (User)getUser(); 
    162163                parameterString("ordnername"); 
    163164                parameterNumber("ordner"); 
    164165                String name = getString("ordnername"); 
    165                 int parent = getInteger("ordner"); 
    166  
    167                 Ordner.createNewOrdner(name, parent, getUser().getID()); 
     166                Ordner parent = Ordner.getOrdnerByID(getInteger("ordner"), user); 
     167                 
     168                if( parent == null ) { 
     169                        redirect("showInbox"); 
     170                        return; 
     171                } 
     172 
     173                Ordner.createNewOrdner(name, parent, user); 
    168174 
    169175                redirect("showInbox"); 
     
    182188                parameterNumber("ordner"); 
    183189 
    184                 int moveto = getInteger("moveto"); 
    185                 int ordner = getInteger("ordner"); 
    186  
    187                 if( Ordner.existsOrdnerWithID( moveto, user.getID() ) )
    188                         PM.moveAllToOrdner( ordner, moveto, user.getID() ); 
     190                Ordner moveto = Ordner.getOrdnerByID(getInteger("moveto"), user); 
     191                Ordner ordner = Ordner.getOrdnerByID(getInteger("ordner"), user); 
     192 
     193                if( (moveto != null) && (ordner != null) )
     194                        PM.moveAllToOrdner( ordner, moveto, user ); 
    189195                } 
    190196 
     
    200206        public void renameAction() { 
    201207                User user = (User)getUser(); 
    202                 Database db = getDatabase(); 
    203208                 
    204209                parameterString("ordnername"); 
     
    207212                int subject = getInteger("subject"); 
    208213 
    209                 newname = db.prepareString(newname); 
    210  
    211                 Ordner ordner = Ordner.getOrdnerByID( subject, user.getID() ); 
    212  
     214                Ordner ordner = Ordner.getOrdnerByID( subject, user ); 
    213215                ordner.setName( newname ); 
    214216 
     
    295297                int ordner = getInteger("ordner"); 
    296298                 
    297                 Ordner moveto = Ordner.getOrdnerByID( movetoID, user.getID() ); 
    298                 Ordner trash = Ordner.getTrash( user.getID() ); 
     299                Ordner moveto = Ordner.getOrdnerByID( movetoID, user ); 
     300                Ordner trash = Ordner.getTrash( user ); 
    299301 
    300302                if( moveto == null ) { 
     
    303305                } 
    304306 
    305                 if( trash.getID() == moveto.getID())
     307                if( trash == moveto )
    306308                        getContext().getResponse().getContent().append("ERROR: Es duerfen keine Nachrichten/Ordner in den Papierkorb verschoben werden"); 
    307309                        return; 
     
    329331                for(int i = 0; i < count_ordner; i++ ) { 
    330332                        parameterNumber("ordner_"+ordners.get(i)); 
    331                         int tomove = getInteger("ordner_"+ordners.get(i)); 
    332                         if( (tomove != 0) && Ordner.getAllChildIDs(tomove, user.getID()).contains(moveto.getID())) { 
     333                        Ordner tomove = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 
     334                        if( tomove == null ) { 
     335                                continue; 
     336                        } 
     337                         
     338                        if( tomove.getAllChildren().contains(moveto)) { 
    333339                                getContext().getResponse().getContent().append("ERROR: Es duerfen keine Ordner in ihre eignen Unterordner verschoben werden"); 
    334340                                return ; 
     
    336342 
    337343 
    338                         if( tomove == ordners.get(i) ){ 
     344                        if( tomove.getID() == ordners.get(i) ){ 
    339345                                counter++; 
    340                                 db.update("UPDATE ordner SET parent='",moveto.getID(),"' WHERE id='",tomove,"'"); 
     346                                tomove.setParent(moveto); 
    341347                        } 
    342348                } 
     
    373379                int ordner = getInteger("ordner"); 
    374380                 
    375                 Ordner moveto = Ordner.getOrdnerByID( movetoID, user.getID() ); 
    376                 Ordner trash = Ordner.getTrash( user.getID() ); 
     381                Ordner moveto = Ordner.getOrdnerByID( movetoID, user ); 
     382                Ordner trash = Ordner.getTrash( user ); 
    377383 
    378384                if( moveto == null ) { 
     
    408414                for(int i = 0; i < count_ordner; i++ ) { 
    409415                        parameterNumber("ordner_"+ordners.get(i)); 
    410                         int tomove = getInteger("ordner_"+ordners.get(i)); 
    411                         if( (tomove != 0) && Ordner.getAllChildIDs(tomove, user.getID()).contains(moveto.getID())) { 
     416                        Ordner tomove = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 
     417                        if( tomove == null ) { 
     418                                continue; 
     419                        } 
     420                         
     421                        if( tomove.getAllChildren().contains(moveto)) { 
    412422                                t.set_var("show.message", "<span style=\"color:red\">Es d&uuml;rfen keine Ordner in ihre eignen Unterordner verschoben werden.</span>"); 
    413423                                redirect("showInbox"); 
     
    416426 
    417427 
    418                         if( tomove == ordners.get(i) )
    419                                 db.update("UPDATE ordner SET parent='",moveto.getID(),"' WHERE id='",tomove,"'"); 
     428                        if( tomove.getID() == ordners.get(i) )
     429                                tomove.setParent(moveto); 
    420430                        } 
    421431                } 
     
    465475                for( int i = 0; i < count_ordner; i++ ) { 
    466476                        parameterNumber("ordner_"+ordners.get(i)); 
    467                         int delordner = getInteger("ordner_"+ordners.get(i)); 
    468  
    469                         if( delordner == ordners.get(i) ) { 
    470                                 Ordner.deleteOrdnerByID( delordner, user.getID() ); 
     477                        Ordner delordner = Ordner.getOrdnerByID(getInteger("ordner_"+ordners.get(i)), user); 
     478 
     479                        if( delordner.getID() == ordners.get(i) ) { 
     480                                delordner.deleteOrdner(); 
    471481                        } 
    472482                } 
     
    477487 
    478488                        if( pm_id == pms.get(i) ) { 
    479                                 PM.deleteByID( pm_id, user.getID() ); 
     489                                PM.deleteByID( pm_id, user ); 
    480490                        } 
    481491                } 
     
    692702                int recover = getInteger("recover"); 
    693703         
    694                 PM.recoverByID( recover, user.getID() ); 
     704                PM.recoverByID( recover, user ); 
    695705                 
    696706                redirect("showInbox"); 
     
    705715                TemplateEngine t = getTemplateEngine(); 
    706716         
    707                 PM.recoverAll( user.getID() ); 
     717                PM.recoverAll( user ); 
    708718                 
    709719                t.set_var("show.message", "<span style=\"color:red\">Nachrichten wiederhergestellt</span>"); 
     
    733743                 
    734744                // Liste aller vorhandenen Ordner generieren 
    735                 SQLQuery ordner = db.query("SELECT * FROM ordner WHERE playerid=",user.getID()," ORDER BY name ASC"); 
     745                SQLQuery ordnerRow = db.query("SELECT * FROM ordner WHERE playerid=",user.getID()," ORDER BY name ASC"); 
    736746 
    737747