1 import java.io.*; 2 import java.util.*; 3 4 6 12 public class update12to15 13 { 15 String answer; 16 int step = 0; 17 BufferedReader rin = new BufferedReader( new InputStreamReader( System.in)); 18 19 String wmpath; 20 21 public static final String LINE = " _____________________________________________________"; 22 public static final String HEADER = " Update von webman 1.2 zu webman 1.5\n" + LINE; 23 24 private static boolean isPostgresql( String dbtype ) { return dbtype.toLowerCase().startsWith("postgresql"); } 26 private static boolean isOracle( String dbtype ) { return dbtype.toLowerCase().startsWith("oracle"); } 27 private static boolean isSybase( String dbtype ) { return dbtype.toLowerCase().startsWith("sybase"); } 28 private static String corrPath( String path ) { 30 return path.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar ); 31 } 32 33 private void echo( String msg) { System.out.println( msg); } 35 private void echo() { System.out.println(); } 36 38 private void insist( String msg) { insist( msg, null ); } 40 private void insist( String msg, char a1) { insist( msg, new String []{ ""+a1 } ); } 41 private void insist( String msg, String a1, String a2) { insist( msg, new String []{ a1, a2 } ); } 42 private void insist( String msg, String [] answers) { 43 while ( true ) { 45 System.out.print( msg); 46 try { answer = ""; answer = rin.readLine(); } 47 catch ( IOException e ) { System.err.println( e.getMessage()); System.exit( 1 ); } 48 if ( answers == null ) return; 49 for ( int i = 0; i < answers.length; i++ ) if ( answers[i].equals( answer ) ) return; 50 } 51 } 52 53 private void clearScreen() { for ( int i = 0; i < 64; i++ ) System.out.println(); } 55 private void clearScreen( String hdr) { clearScreen(); System.out.println( hdr ); } 56 58 59 public void start( String [] args) { 61 63 65 clearScreen(); 66 echo(); 67 echo(" ************************ Webman Update *************************"); 68 echo(" * *"); 69 echo(" * Bitte lesen Sie zunaechst README.html auf der CD! *"); 70 echo(" * *"); 71 echo(" ****************************************************************"); 72 echo(); 73 insist( " Haben Sie README.html gelesen (j,n) ? ", 'j' ); 74 75 76 clearScreen(" Willkommen zum " + HEADER); 77 echo(" Hinweis: Sie koennen das Update jederzeit durch"); 78 echo(" Eingabe von ctrl-c abbrechen."); 79 echo(); 80 echo(" Fuer die zu aktualisierenden Dateien und Datenbanken"); 81 echo(" benoetigen Sie Schreib- und Leserechte."); 82 echo(); 83 insist(" Besitzen Sie entsprechende Rechte (j,n) ? ", 'j' ); 84 85 step++; 86 clearScreen(HEADER); 87 echo(); 88 echo(" "+step+".) Fertigen Sie Sicherungen der Datenbank und"); 89 echo(" saemtlicher Dateien der zu aktualisierenden"); 90 echo(" webman-Instanz an. Testen sie deren Wiederherstellung."); 91 echo(); 92 insist(" Haben Sie dies getan (j,n) ? ", 'j' ); 93 94 step++; 95 clearScreen(HEADER); 96 echo(); 97 echo(" "+step+".) Stoppen Sie die zu aktualisierende webman-Instanz, ebenso alle"); 98 echo(" anderen webman-Instanzen, die auf dieselbe Datenbank zugreifen."); 99 echo(); 100 echo(" Stoppen Sie dazu jeweils den Servletcontainer (meist tomcat), "); 101 echo(" als auch gegebenenfalls den Webserver (meist apache)."); 102 echo(); 103 insist(" Haben Sie dies getan (j,n) ? ", 'j' ); 104 105 step++; 106 clearScreen(HEADER); 107 echo(); 108 echo(" "+step+".) Geben Sie bitte den (vollen!) Verzeichnispfad der"); 109 echo(" zu aktualisierenden webman-Webapplikation ein:"); 110 echo(); 111 while (true ) { 112 insist(" "); 113 answer = corrPath( answer); 114 if (! answer.startsWith( ""+File.separatorChar)) { 115 echo(); 116 echo(" Der Pfad '" + answer +"'"); 117 echo(" ist nicht vollstaendig bzw. absolut."); 118 } 119 else if (! (new File( corrPath( answer+"/WEB-INF/classes/webmandb.ini"))).canRead()) { 120 echo(); 121 echo(" In '" + answer +"'"); 122 echo(" befindet sich keine intakte webman-Applikation."); 123 } 124 else { 125 wmpath = answer; 126 break; 127 } 128 echo(); 129 echo(" Bitte versuchen Sie es erneut:"); 130 } 131 132 boolean hasWebappAuth = true; 133 clearScreen(HEADER); 134 step++; 135 echo(); 136 insist("\n "+step+".) Durch wen wird die Authentifizierung der Anwender\n" 137 +" durchgefuehrt, durch den (1)Webserver oder\n" 138 +" durch den (2)Servletcontainer (1|2) ? ", "1", "2" ); 139 hasWebappAuth = answer.equals( "2"); 140 141 boolean allowsWorkflowFix = false; 142 clearScreen(HEADER); 143 step++; 144 echo(); 145 insist("\n "+step+".) Wurden bei der Arbeit mit dieser webman-Applikation\n" 146 +" Aenderungen am Standard-Workflow definiert (j|n) ? ", "j", "n" ); 147 allowsWorkflowFix = answer.equals( "j"); 148 149 boolean needsDbUpdate = true; 150 156 157 clearScreen(HEADER); 158 echo(); 159 echo(" Der Update-Prozess beginnt, wenn sie nunmehr 'ok'"); 160 echo(" eingeben, andernfalls wird der Vorgang beendet:"); 161 insist( " "); 162 if (! answer.equals("ok")) System.exit( 1 ); 163 echo(); 164 165 echo(); 166 echo(" Loeschen zu ersetzender Webman-Komponenten ..."); 167 echo(); 169 new DeepClassFileRemove().start( wmpath + "/WEB-INF/classes/com/teamkonzept"); 170 new DeepClassFileRemove().start( wmpath + "/WEB-INF/classes/de/webman"); 171 new DeepClassFileRemove().start( wmpath + "/WEB-INF/classes/webman/stager"); 172 173 echo(" Einspielen neuerer Webman-Komponenten ..."); 174 echo(); 176 File[] zips = (new File( "../wmbuild")).listFiles(); 178 for ( int i = 0; i < zips.length; i++ ) 179 new Unzipper().start( new String [] { "-s", "-d", wmpath, "../wmbuild/"+zips[i].getName() } ); 180 181 echo(" Anpassen der Konfigurationsdateien ..."); 182 echo(); 184 String backFile = wmpath+"/WEB-INF/web.xml."; 185 int backVersion = 1; 186 for ( backVersion = 1; backVersion < 9999; backVersion++ ) 187 if (! (new File( backFile+backVersion )).exists() ) break; 188 new TextCutter().start( new String [] { 189 "-f", wmpath+"/WEB-INF/web.xml", 190 "-o", backFile+backVersion }); 191 if (! hasWebappAuth) { 192 new TextCutter().start( new String [] { 193 "-f", backFile+backVersion, 194 "-s", "<security-constraint>", "</security-constraint>", "", 195 "-s", "<login-config>", "</login-config>", "", 196 "-o", wmpath+"/WEB-INF/web.xml" }); 197 } 198 199 200 if ( needsDbUpdate ) { 201 echo(" Update der Datenbank ..."); 202 echo(); 204 String jsqlpath = wmpath + "/WEB-INF/classes/db/JSQL/update"; 205 if (! (new File( jsqlpath )).isDirectory()) jsqlpath = "../jsql/update"; 206 207 new JSQLexec().start( new String [] { 208 "-q", "-w", wmpath+"/WEB-INF/classes/webmandb.ini", 209 "-r", jsqlpath+"/jsql-translations.def", 210 jsqlpath+"/update_1_1_4.jsql", jsqlpath+"/update_1_1_5.jsql", jsqlpath+"/update_1_1_6.jsql", 211 jsqlpath+"/update_1_1_7.jsql" }); 212 213 JSQLexec db = new JSQLexec(); 214 db.start( new String [] {"-q", "-w", wmpath+"/WEB-INF/classes/webmandb.ini"} ); 215 if ( db.dbtype == null ) { 216 System.err.println(" DB-Typ nicht erkannt."); System.exit( 9 ); 217 } 218 else { 219 new JSQLexec().start( new String [] { 220 "-q", "-w", wmpath+"/WEB-INF/classes/webmandb.ini", 221 "-r", jsqlpath+"/jsql-translations.def", 222 jsqlpath+"/Acl_update1.2_"+ db.dbtype +".jsql" 223 }); 224 } 225 if ( allowsWorkflowFix ) { 226 new JSQLexec().start( new String [] { 227 "-q", "-w", wmpath+"/WEB-INF/classes/webmandb.ini", 228 "-r", jsqlpath+"/jsql-translations.def", 229 jsqlpath+"/fix_workflow.jsql" }); 230 } 231 } 232 233 echo( LINE ); 234 echo(); 235 echo(" Vielen Dank, das Update ist beendet."); 236 echo(); 237 } 238 239 240 public static void main( String [] args ) { System.out.println("über"); new update12to15().start( args ); } 242 244 } 245 | Popular Tags |