Changeset 253f8ca1779aaed5336e611e7cc78c71fde30e60

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

[23e7f86cd7efb57d7586809a1db5aa31be3cfc6f]

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

Forschungszentrum: Umstellung auf Hibernate

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • db/tables/fz.sql

    r9e9a5b9 r253f8ca  
    11CREATE TABLE `fz` ( 
    2   `id` int(11) NOT NULL auto_increment, 
    32  `col` int(11) NOT NULL default '0', 
    43  `type` int(11) NOT NULL default '0', 
    54  `forschung` int(11) NOT NULL default '0', 
    65  `dauer` int(11) NOT NULL default '0', 
    7   PRIMARY KEY  (`id`), 
    8   KEY `col` (`col`) 
     6  PRIMARY KEY  (`col`) 
    97) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    108 
  • db/updates.xml

    r23e7f86 r253f8ca  
    367367                UPDATE buildings SET module='net.driftingsouls.ds2.server.bases.ForschungszentrumBuilding' WHERE module='net.driftingsouls.ds2.server.bases.Forschungszentrum'; 
    368368        ]]></update> 
     369        <update type="structure" datum="2007-08-05"><![CDATA[ 
     370                ALTER TABLE `fz` DROP `id`; 
     371                ALTER TABLE `fz` ADD PRIMARY KEY ( `col` ); 
     372                ALTER TABLE `fz` DROP INDEX `col`; 
     373        ]]></update> 
    369374</updates> 
  • src/net/driftingsouls/ds2/server/bases/ForschungszentrumBuilding.java

    r23e7f86 r253f8ca  
    2020 
    2121import java.util.ArrayList; 
     22import java.util.Iterator; 
    2223import java.util.List; 
    2324 
     
    3031import net.driftingsouls.ds2.server.config.Rassen; 
    3132import net.driftingsouls.ds2.server.entities.Forschung; 
     33import net.driftingsouls.ds2.server.entities.Forschungszentrum; 
    3234import net.driftingsouls.ds2.server.entities.User; 
    3335import net.driftingsouls.ds2.server.framework.Common; 
     
    3537import net.driftingsouls.ds2.server.framework.Context; 
    3638import net.driftingsouls.ds2.server.framework.ContextMap; 
    37 import net.driftingsouls.ds2.server.framework.db.Database; 
    38 import net.driftingsouls.ds2.server.framework.db.SQLQuery; 
    39 import net.driftingsouls.ds2.server.framework.db.SQLResultRow; 
    4039import net.driftingsouls.ds2.server.framework.templates.TemplateEngine; 
    4140 
     
    6766                        throw new RuntimeException("No Context available"); 
    6867                } 
    69                  
    70                 context.getDatabase().update("INSERT INTO fz VALUES(0,"+base.getID()+",1,0,0)"); 
     68                org.hibernate.Session db = context.getDB(); 
     69                 
     70                Forschungszentrum fz = new Forschungszentrum(base); 
     71                db.persist(fz); 
    7172        } 
    7273 
     
    7576                super.cleanup(context, base); 
    7677                 
    77                 context.getDatabase().update("DELETE FROM fz WHERE col="+base.getID()); 
     78                org.hibernate.Session db = context.getDB(); 
     79                db.createQuery("delete from Forschungszentrum where base=?") 
     80                        .setEntity(0, base) 
     81                        .executeUpdate(); 
    7882        } 
    7983         
     
    9094        @Override 
    9195        public boolean isActive(Base base, int status, int field) { 
    92                 Database db = ContextMap.getContext().getDatabase(); 
    93  
    94                 SQLResultRow forschungszentrum = db.first( "SELECT dauer FROM fz WHERE col=",base.getID()); 
    95                 if( !forschungszentrum.isEmpty() && (forschungszentrum.getInt("dauer") > 0) ) { 
     96                org.hibernate.Session db = ContextMap.getContext().getDB(); 
     97 
     98                Forschungszentrum fz = (Forschungszentrum)db.get(Forschungszentrum.class, base.getID()); 
     99                if( (fz != null) && (fz.getDauer() > 0) ) { 
    96100                        return true; 
    97101                } 
    98                 else if( forschungszentrum.isEmpty() ) { 
     102                else if( fz == null ) { 
    99103                        LOG.warn("Forschungszentrum ohne fz-Eintrag auf Basis "+base.getID()+" gefunden"); 
    100104                } 
     
    104108        @Override 
    105109        public String echoShortcut(Context context, Base base, int field, int building) { 
    106                 Database db = context.getDatabase(); 
     110                org.hibernate.Session db = context.getDB(); 
    107111                 
    108112                String sess = context.getSession(); 
    109113                 
    110114                StringBuilder result = new StringBuilder(100); 
    111                 SQLResultRow fz = db.first("SELECT id,dauer,forschung FROM fz WHERE col="+base.getID()); 
    112                 if( !fz.isEmpty() ) { 
    113                         if( fz.getInt("dauer") == 0 ) { 
     115                Forschungszentrum fz = (Forschungszentrum)db.get(Forschungszentrum.class, base.getID()); 
     116                if( fz != null ) { 
     117                        if( fz.getDauer() == 0 ) { 
    114118                                result.append("<a class=\"back\" href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+base.getID()+"&amp;field="+field+"\">[F]</a>"); 
    115119                        } 
    116120                        else { 
    117121                                StringBuilder popup = new StringBuilder(Common.tableBegin( 350, "left" ).replace("\"", "'") ); 
    118                                 SQLResultRow forschung = db.first("SELECT name FROM forschungen WHERE id="+fz.getInt("forschung")); 
    119                                 popup.append("<img align='left' border='0' src='"+Configuration.getSetting("URL")+"data/tech/"+fz.getInt("forschung")+".gif' alt='' />"); 
    120                                 popup.append(forschung.getString("name")+"<br />"); 
    121                                 popup.append("Dauer: noch <img src='"+Configuration.getSetting("URL")+"data/interface/time.gif' alt='noch ' />"+fz.getInt("dauer")+"<br />"); 
     122                                Forschung forschung = Forschung.getInstance(fz.getForschung()); 
     123                                popup.append("<img align='left' border='0' src='"+Configuration.getSetting("URL")+"data/tech/"+fz.getForschung()+".gif' alt='' />"); 
     124                                popup.append(forschung.getName()+"<br />"); 
     125                                popup.append("Dauer: noch <img src='"+Configuration.getSetting("URL")+"data/interface/time.gif' alt='noch ' />"+fz.getDauer()+"<br />"); 
    122126                                popup.append( Common.tableEnd().replace("\"", "'") ); 
    123127 
     
    126130                                                "onmouseover=\"return overlib('<span style=\\'font-size:13px\\'>"+StringEscapeUtils.escapeJavaScript(popup.toString())+"</span>',REF,'p"+base.getID()+"_"+field+"',REFY,22,NOJUSTY,TIMEOUT,0,DELAY,150,WIDTH,280,BGCLASS,'gfxtooltip',FGCLASS,'gfxtooltip',TEXTFONTCLASS,'gfxtooltip');\" " + 
    127131                                                "onmouseout=\"return nd();\" " + 
    128                                                 "href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+base.getID()+"&amp;field="+field+"\">[F]<span style=\"font-weight:normal\">"+fz.getInt("dauer")+"</span></a>"); 
     132                                                "href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+base.getID()+"&amp;field="+field+"\">[F]<span style=\"font-weight:normal\">"+fz.getDauer()+"</span></a>"); 
    129133                        } 
    130134                } 
     
    135139        } 
    136140         
    137         private void possibleResearch(Context context, StringBuilder echo, Base base, int field) { 
    138                 Database db = context.getDatabase(); 
     141        private void possibleResearch(Context context, StringBuilder echo, Forschungszentrum fz, int field) { 
     142                org.hibernate.Session db = context.getDB(); 
    139143                String sess = context.getSession(); 
    140144                 
     
    148152                echo.append("</tr>\n"); 
    149153         
     154                Base base = fz.getBase(); 
    150155                Cargo cargo = base.getCargo(); 
    151156         
    152157                List<Integer> researches = new ArrayList<Integer>(); 
    153                 SQLQuery research = db.query("SELECT fz.forschung " + 
    154                                 "FROM fz JOIN bases AS b ON fz.col=b.id " + 
    155                                 "WHERE fz.forschung>0 AND b.owner=",user.getID()); 
    156                 while( research.next() ) { 
    157                         researches.add(research.getInt("forschung")); 
    158                 } 
    159                 research.free(); 
     158                List researchList = db.createQuery("from Forschungszentrum " + 
     159                                "where forschung>0 and base.owner=?") 
     160                                .setEntity(0, user) 
     161                                .list(); 
     162                for( Iterator iter=researchList.iterator(); iter.hasNext(); ) { 
     163                        Forschungszentrum aFz = (Forschungszentrum)iter.next(); 
     164                         
     165                        researches.add(aFz.getForschung()); 
     166                } 
    160167                 
    161168                boolean first = true; 
     
    229236         
    230237        private void alreadyResearched( Context context, StringBuilder echo ) { 
    231                 Database db = context.getDatabase(); 
     238                org.hibernate.Session db = context.getDB(); 
    232239                String sess = context.getSession(); 
    233240                 
     
    237244                echo.append("<tr><td class=\"noBorderX\" align=\"left\">Bereits erforscht:</td></tr>\n"); 
    238245         
    239                 for( int i = 1; i < 100; i++ ) { 
    240                         if( user.hasResearched(i) ) { 
    241                                 SQLResultRow tech = db.first("SELECT name FROM forschungen WHERE id=",i); 
    242                                 if( tech.isEmpty() ) { 
    243                                         continue; 
    244                                 } 
     246                final Iterator forschungIter = db.createQuery("from Forschung order by id").iterate(); 
     247                while( forschungIter.hasNext() ) { 
     248                        Forschung tech = (Forschung)forschungIter.next(); 
     249                         
     250                        if( user.hasResearched(tech.getID()) ) { 
    245251                                echo.append("<tr><td class=\"noBorderX\">\n"); 
    246                                 echo.append("<a class=\"forschinfo\" href=\"./ds?module=forschinfo&amp;sess="+sess+"&amp;res="+i+"\">"+Common._plaintitle(tech.getString("name"))+"</a>"); 
     252                                echo.append("<a class=\"forschinfo\" href=\"./ds?module=forschinfo&amp;sess="+sess+"&amp;res="+tech.getID()+"\">"+Common._plaintitle(tech.getName())+"</a>"); 
    247253                                echo.append("</td></tr>\n"); 
    248254                        } 
     
    251257        } 
    252258         
    253         private boolean currentResearch(Context context, StringBuilder echo, Base base, int field ) { 
    254                 Database db = context.getDatabase(); 
    255                 String sess = context.getSession(); 
    256                  
    257                 SQLResultRow fz = db.first("SELECT fz.forschung,fz.dauer,f.name " + 
    258                                 "FROM fz JOIN forschungen AS f ON fz.forschung=f.id " + 
    259                                 "WHERE fz.col="+base.getID()); 
    260          
    261                 if( !fz.isEmpty() ) { 
    262                         echo.append("<img style=\"float:left;border:0px\" src=\""+Configuration.getSetting("URL")+"data/tech/"+fz.getInt("forschung")+".gif\" alt=\"\" />"); 
    263                         echo.append("Erforscht: <a class=\"forschinfo\" href=\"./ds?module=forschinfo&amp;sess="+sess+"&amp;res="+fz.getInt("forschung")+"\">"+Common._plaintitle(fz.getString("name"))+"</a>\n"); 
    264                         echo.append("[<a class=\"error\" href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+base.getID()+"&amp;field="+field+"&amp;kill=yes\">x</a>]<br />\n"); 
    265                         echo.append("Dauer: noch <img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"\" />"+fz.getInt("dauer")+" Runden\n"); 
     259        private boolean currentResearch(Context context, StringBuilder echo, Forschungszentrum fz, int field ) { 
     260                String sess = context.getSession(); 
     261                 
     262                Forschung tech = Forschung.getInstance(fz.getForschung()); 
     263                if( tech != null ) { 
     264                        echo.append("<img style=\"float:left;border:0px\" src=\""+Configuration.getSetting("URL")+"data/tech/"+tech.getID()+".gif\" alt=\"\" />"); 
     265                        echo.append("Erforscht: <a class=\"forschinfo\" href=\"./ds?module=forschinfo&amp;sess="+sess+"&amp;res="+tech.getID()+"\">"+Common._plaintitle(tech.getName())+"</a>\n"); 
     266                        echo.append("[<a class=\"error\" href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+fz.getBase().getID()+"&amp;field="+field+"&amp;kill=yes\">x</a>]<br />\n"); 
     267                        echo.append("Dauer: noch <img style=\"vertical-align:middle\" src=\""+Configuration.getSetting("URL")+"data/interface/time.gif\" alt=\"\" />"+fz.getDauer()+" Runden\n"); 
    266268                        echo.append("<br /><br />\n"); 
    267269                        return true; 
     
    270272        } 
    271273         
    272         private void killResearch(Context context, StringBuilder echo, Base base, int field, String conf) { 
    273                 Database db = context.getDatabase(); 
     274        private void killResearch(Context context, StringBuilder echo, Forschungszentrum fz, int field, String conf) { 
    274275                String sess = context.getSession(); 
    275276                 
     
    278279                        echo.append("Wollen sie die Forschung wirklich abbrechen?<br />\n"); 
    279280                        echo.append("Achtung: Es erfolgt keine R&uuml;ckerstattung der Resourcen!<br /><br />\n"); 
    280                         echo.append("<a class=\"error\" href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+base.getID()+"&amp;field="+field+"&amp;kill=yes&amp;conf=ok\">Forschung abbrechen</a><br />\n"); 
     281                        echo.append("<a class=\"error\" href=\"./ds?module=building&amp;sess="+sess+"&amp;col="+fz.getBase().getID()+"&amp;field="+field+"&amp;kill=yes&amp;conf=ok\">Forschung abbrechen</a><br />\n"); 
    281282                        echo.append("</div>\n"); 
    282283                        return; 
    283284                } 
    284                 db.update("UPDATE fz SET forschung=0,dauer=0 WHERE col=",base.getID()); 
     285                 
     286                fz.setForschung(0); 
     287                fz.setDauer(0); 
     288                 
    285289                echo.append("<div style=\"text-align:center;color:red;font-weight:bold\">\n"); 
    286290                echo.append("Forschung abgebrochen<br />\n"); 
     
    288292        } 
    289293         
    290         private void doResearch(Context context, StringBuilder echo, int researchid, Base base, int field, String conf) { 
    291                 Database db = context.getDatabase(); 
     294        private void doResearch(Context context, StringBuilder echo, Forschungszentrum fz, int researchid, int field, String conf) { 
    292295                String sess = context.getSession(); 
    293296                User user = (User)context.getActiveUser(); 
    294          
    295                 SQLResultRow fz = db.first("SELECT forschung,dauer FROM fz WHERE col="+base.getID()); 
    296          
     297 
     298                Base base = fz.getBase(); 
     299                
    297300                Forschung tech = Forschung.getInstance(researchid); 
    298301                boolean ok = true; 
     
    324327         
    325328                // Wird bereits im Forschungszentrum geforscht? 
    326                 if( fz.getInt("forschung") != 0 ) { 
     329                if( fz.getForschung() != 0 ) { 
    327330                        ok = false; 
    328331                } 
     
    342345         
    343346                // Alles bis hierhin ok -> nun zu den Resourcen! 
    344                 Cargo cargo = base.getCargo(); 
     347                Cargo cargo = new Cargo(base.getCargo()); 
    345348                ok = true; 
    346349                 
     
    360363                        echo.append("</div>\n"); 
    361364                         
    362                         db.tBegin(); 
    363                         db.tUpdate(1,"UPDATE fz SET forschung=",researchid,",dauer=",tech.getTime()," WHERE col="+base.getID()+" AND forschung=0 AND dauer=0"); 
    364                         db.tUpdate(1,"UPDATE bases SET cargo='",cargo.save(),"' WHERE id="+base.getID()+" AND cargo='",cargo.save(true),"'"); 
     365                        fz.setForschung(researchid); 
     366                        fz.setDauer(tech.getTime()); 
    365367                        base.setCargo(cargo); 
    366                          
    367                         if( !db.tCommit() ) { 
    368                                 context.addError("Beim Starten der Forschung ist ein Fehler aufgetreten. Bitte versuchen sie es sp&auml;ter erneut"); 
    369                         } 
    370368                } 
    371369        } 
     
    373371        @Override 
    374372        public String output(Context context, TemplateEngine t, Base base, int field, int building) { 
    375                 Database db = context.getDatabase(); 
     373                org.hibernate.Session db = context.getDB(); 
    376374 
    377375                String sess = context.getSession(); 
     
    387385                StringBuilder echo = new StringBuilder(2000); 
    388386                 
    389                 SQLResultRow fz = db.first("SELECT id FROM fz WHERE col="+base.getID()); 
    390                 if( fz.isEmpty() ) { 
     387                Forschungszentrum fz = (Forschungszentrum)db.get(Forschungszentrum.class, base.getID()); 
     388                if( fz == null ) { 
    391389                        echo.append("<span style=\"color:red\">Fehler: Dieses Forschungszentrum hat keinen Datenbank-Eintrag</span>\n"); 
    392390                        return echo.toString(); 
     
    416414                if( (kill.length() != 0) || (research != 0) ) { 
    417415                        if( kill.length() != 0 ) { 
    418                                 killResearch( context, echo, base, field, confirm); 
     416                                killResearch( context, echo, fz, field, confirm); 
    419417                        } 
    420418                        if( research != 0 ) { 
    421                                 doResearch( context, echo, research, base, field, confirm ); 
     419                                doResearch( context, echo, fz, research, field, confirm ); 
    422420                        } 
    423421                } 
    424422                else if( show.equals("newres") ) { 
    425                         if( !currentResearch( context, echo, base, field ) ) { 
    426                                 possibleResearch( context, echo, base, field ); 
     423                        if( !currentResearch( context, echo, fz, field ) ) { 
     424                                possibleResearch( context, echo, fz, field ); 
    427425                        } 
    428426                }  
  • src/net/driftingsouls/ds2/server/entities/Forschungszentrum.java

    re3938f6 r253f8ca  
    2121import javax.persistence.Entity; 
    2222import javax.persistence.FetchType; 
    23 import javax.persistence.GeneratedValue; 
    2423import javax.persistence.Id; 
    25 import javax.persistence.JoinColumn
    26 import javax.persistence.ManyToOne
     24import javax.persistence.OneToOne
     25import javax.persistence.PrimaryKeyJoinColumn
    2726import javax.persistence.Table; 
    2827 
     
    3736@Table(name="fz") 
    3837public class Forschungszentrum { 
    39         @Id @GeneratedValue 
    40         private int id
    41         @ManyToOne(fetch=FetchType.LAZY) 
    42         @JoinColumn(name="col") 
     38        @Id 
     39        private int col
     40        @OneToOne(fetch=FetchType.LAZY) 
     41        @PrimaryKeyJoinColumn 
    4342        private Base base; 
    4443        private int type; 
     
    7574         */ 
    7675        public void setBase(Base base) { 
     76                this.col = base.getID(); 
    7777                this.base = base; 
    7878        } 
     
    127127 
    128128        /** 
    129          * Gibt die ID des Forschungszentrums zurueck 
    130          * @return Die ID 
     129         * Gibt die ID der Basis zurueck, auf der das Forschungszentrum steht 
     130         * @return Die ID Der Basis 
    131131         */ 
    132         public int getId() { 
    133                 return id
     132        public int getBaseId() { 
     133                return col
    134134        } 
    135135}