Changeset ef36dc708901b61c4798486719bbcaf97859d611

Show
Ignore:
Timestamp:
11/01/07 15:14:25 (1 year ago)
Author:
Christopher Jung <bktheg@web.de>
git-committer:
Christopher Jung <bktheg@web.de> 1193926465 +0100
git-parent:

[ae27f31c209666431d2bb6c69fca39c2317d5ac6]

git-author:
Christopher Jung <bktheg@web.de> 1193926465 +0100
Message:

Flottenverwaltung: Umbenennen aller Schiffe in einer Flotte eingebaut

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/net/driftingsouls/ds2/server/modules/FleetMgntController.java

    r6becea5 ref36dc7  
    966966        } 
    967967         
     968        /** 
     969         * Zeigt das Eingabefeld fuer das Umbenennen der Schiffe der Flotte 
     970         * 
     971         */ 
     972        @Action(ActionType.DEFAULT) 
     973        public void renameShipsAction() { 
     974                TemplateEngine t = getTemplateEngine(); 
     975                 
     976                t.setVar(       "show.renameShips",     1, 
     977                                        "fleet.id",                     this.fleet.getId(), 
     978                                        "fleet.name",           Common._plaintitle(this.fleet.getName()) ); 
     979        } 
     980         
     981        /** 
     982         * Teil eines Formatierungsstrings fuer Schiffsnamen 
     983         */ 
     984        private static interface NamePatternElement { 
     985                /** 
     986                 * Gibt den Text fuer das naechste Schiff zurueck 
     987                 * @return Der Text 
     988                 */ 
     989                public String next(); 
     990        } 
     991         
     992        private static class StringNamePatternElement implements NamePatternElement { 
     993                private String text; 
     994                 
     995                StringNamePatternElement(String text) { 
     996                        this.text = text; 
     997                } 
     998                 
     999                public String next() { 
     1000                        return text; 
     1001                } 
     1002        } 
     1003         
     1004        private static class NumberNamePatternElement implements NamePatternElement { 
     1005                private int counter = 1; 
     1006                 
     1007                NumberNamePatternElement() { 
     1008                        // EMPTY 
     1009                } 
     1010                 
     1011                public String next() { 
     1012                        return Integer.toString(counter++); 
     1013                } 
     1014        } 
     1015         
     1016        private static class RomanNumberNamePatternElement implements NamePatternElement { 
     1017                private static final String[] base = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" }; 
     1018                private static final String[] tens = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" }; 
     1019                private static final String[] hundreds =  { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" }; 
     1020                private static final String[] thousands = { "", "M", "MM", "MMM" }; 
     1021                 
     1022                private int counter = 1; 
     1023           
     1024                RomanNumberNamePatternElement() { 
     1025                        // EMPTY 
     1026                } 
     1027                 
     1028                public String next() { 
     1029                        int number = counter++; 
     1030                         
     1031                        if( counter == 4000 ) { 
     1032                                counter = 1; 
     1033                        } 
     1034                         
     1035                    return thousands[ (number / 1000) ] + 
     1036                        hundreds[ (number / 100) % 10 ] + 
     1037                                tens[ (number / 10) % 10 ] + 
     1038                                base[ number % 10 ]; 
     1039                } 
     1040        } 
     1041         
     1042        /** 
     1043         * Konvertiert das angegebene Formatierungsmuster fuer Schiffsnamen in eine Liste 
     1044         * von <code>NamePatternElements</code>.  
     1045         * Die Sortierung entspricht ihrem vorkommen im String. 
     1046         * @param name Der Formatierungsstring 
     1047         * @return Die Liste 
     1048         */ 
     1049        private List<NamePatternElement> parseNamePattern(String name) { 
     1050                List<NamePatternElement> nameParts = new ArrayList<NamePatternElement>(); 
     1051                do { 
     1052                        if( name.startsWith("$(") ) { 
     1053                                int end = name.indexOf(')'); 
     1054                                if( end == -1 ) { 
     1055                                        nameParts.add(new StringNamePatternElement(name)); 
     1056                                        break; 
     1057                                } 
     1058                                 
     1059                                String partName = name.substring(2, end); 
     1060                                 
     1061                                if( "number".equalsIgnoreCase(partName) ) { 
     1062                                        nameParts.add(new NumberNamePatternElement()); 
     1063                                } 
     1064                                else if( "roman".equalsIgnoreCase(partName) ) { 
     1065                                        nameParts.add(new RomanNumberNamePatternElement()); 
     1066                                } 
     1067                                else { 
     1068                                        nameParts.add(new StringNamePatternElement("$("+partName+")")); 
     1069                                } 
     1070                                 
     1071                                if( end == name.length()+1 ) { 
     1072                                        break; 
     1073                                } 
     1074                                 
     1075                                name = name.substring(end+1); 
     1076                        } 
     1077                        else { 
     1078                                int index = name.indexOf("$("); 
     1079                                if( index != -1 ) { 
     1080                                        nameParts.add(new StringNamePatternElement(name.substring(0,index))); 
     1081                                        name = name.substring(index); 
     1082                                } 
     1083                                else { 
     1084                                        nameParts.add(new StringNamePatternElement(name)); 
     1085                                        break; 
     1086                                } 
     1087                        } 
     1088                } 
     1089                while( name.contains("$(") ); 
     1090                 
     1091                return nameParts; 
     1092        } 
     1093         
     1094        /** 
     1095         * Generiert aus einer Liste von Namensteilen den Gesamtnamen fuer das naechste Schiff 
     1096         * @param nameParts Die Namensteile 
     1097         * @return Der Gesamtname 
     1098         */ 
     1099        private String generateNextShipName(List<NamePatternElement> nameParts) { 
     1100                StringBuilder builder = new StringBuilder(); 
     1101                 
     1102                for( int i=0; i < nameParts.size(); i++ ) { 
     1103                        builder.append(nameParts.get(i).next()); 
     1104                } 
     1105                 
     1106                return builder.toString(); 
     1107        } 
     1108         
     1109        /** 
     1110         * Benennt die Schiffe der Flotte um 
     1111         * @urlparam String name Das Namensmuster 
     1112         * 
     1113         */ 
     1114        @Action(ActionType.DEFAULT) 
     1115        public void renameShips2Action() { 
     1116                org.hibernate.Session db = getDB(); 
     1117                TemplateEngine t = getTemplateEngine(); 
     1118                 
     1119                parameterString("name"); 
     1120                final String name = getString("name"); 
     1121                 
     1122                List<NamePatternElement> nameParts = parseNamePattern(name); 
     1123                 
     1124                List ships = db.createQuery("from Ship where id>0 and fleet=?" ) 
     1125                        .setEntity(0, this.fleet) 
     1126                        .list(); 
     1127                 
     1128                for( Iterator iter=ships.iterator(); iter.hasNext(); ) { 
     1129                        Ship ship = (Ship)iter.next(); 
     1130                         
     1131                        ship.setName(generateNextShipName(nameParts)); 
     1132                } 
     1133                 
     1134                t.setVar(       "fleetmgnt.message",    "Die Namen wurden ge&auml;ndert", 
     1135                                        "jscript.reloadmain",   1 ); 
     1136                 
     1137                this.redirect(); 
     1138        } 
     1139         
    9681140        @Override 
    9691141        @Action(ActionType.DEFAULT) 
  • templates/fleetmgnt.html

    r28128f8 ref36dc7  
    118118                {!link_to Nein, default, css_class:ok, fleet:$fleet.id} - 
    119119                {!link_to Ja, newowner3, css_class:error, fleet:$fleet.id, ownerid:$newowner.id}  
     120        {!table_end} 
     121{/endif} 
     122{if show.renameShips} 
     123        {!table_begin 355, center} 
     124                <h3>Schiffe umbenennen</h3> 
     125                <span style="font-style:italic">&gt; {fleet.name} &lt;</span><br /><br /> 
     126                <form action="ds" method="post"> 
     127                        {!form_create_hidden renameShips2, fleet:$fleet.id} 
     128                        Namensmuster: <input type="text" name="name" value="{fleet.name} $(number)" maxlength="50" /> 
     129                        <input type="submit" value="ok" /> 
     130                </form> 
     131                <br /> 
     132                <h3>Platzhalter</h3> 
     133                <ul> 
     134                        <li>$(number) - Gibt jedem Schiff eine individuelle Nummer beginnend bei 1</li> 
     135                        <li>$(roman) - Gibt jedem Schiff eine individuelle Nummer in Form einer r&ouml;mischen Ziffer beginnend bei I (1)</li> 
     136                </ul> 
    120137        {!table_end} 
    121138{/endif} 
     
    210227                                                <option value="fleetcombine">Flotten zusammenlegen</option> 
    211228                                        {/endif} 
    212                                         <option value="rename">umbenennen</option> 
     229                                        <option value="rename">Flotte umbenennen</option> 
    213230                                        <option value="kill">aufl&ouml;sen</option> 
    214231                                        <option value="newowner">&uuml;bergeben</option> 
     232                                        <option value="renameShips">Schiffe umbenennen</option> 
    215233                                        <option value="show">---------</option> 
    216234                                        <option value="export">exportieren</option>