KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > update12to15


1 import java.io.*;
2 import java.util.*;
3
4 // Acl... mit dbtype am Ende
5

6 /**
7  * Installer tool to guide the user through the update process.
8  *
9  * @author <a HREF="mailto:ulf@webman.de">Ulf Goldammer</a>
10  * @version $Revision: 1.2 $
11  **/

12 public class update12to15
13 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
14
{
15     String JavaDoc answer;
16     int step = 0;
17     BufferedReader rin = new BufferedReader( new InputStreamReader( System.in));
18     
19     String JavaDoc wmpath;
20     
21     public static final String JavaDoc LINE = " _____________________________________________________";
22     public static final String JavaDoc HEADER = " Update von webman 1.2 zu webman 1.5\n" + LINE;
23     
24     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
25
private static boolean isPostgresql( String JavaDoc dbtype ) { return dbtype.toLowerCase().startsWith("postgresql"); }
26     private static boolean isOracle( String JavaDoc dbtype ) { return dbtype.toLowerCase().startsWith("oracle"); }
27     private static boolean isSybase( String JavaDoc dbtype ) { return dbtype.toLowerCase().startsWith("sybase"); }
28     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29
private static String JavaDoc corrPath( String JavaDoc path ) {
30         return path.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
31     }
32
33     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
34
private void echo( String JavaDoc msg) { System.out.println( msg); }
35     private void echo() { System.out.println(); }
36     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
37

38     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
39
private void insist( String JavaDoc msg) { insist( msg, null ); }
40     private void insist( String JavaDoc msg, char a1) { insist( msg, new String JavaDoc[]{ ""+a1 } ); }
41     private void insist( String JavaDoc msg, String JavaDoc a1, String JavaDoc a2) { insist( msg, new String JavaDoc[]{ a1, a2 } ); }
42     private void insist( String JavaDoc msg, String JavaDoc[] answers) {
43     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
44
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     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
54
private void clearScreen() { for ( int i = 0; i < 64; i++ ) System.out.println(); }
55     private void clearScreen( String JavaDoc hdr) { clearScreen(); System.out.println( hdr ); }
56     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
57

58     
59     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
60
public void start( String JavaDoc[] args) {
61     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
62

63         // we just mimicry the former shell script
64

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 /* clearScreen();
151         step++;
152         echo();
153         insist(" "+step+".) Wurde die zugehoerige Datenbank bereits aktualisiert (j|n) ? ", "j", "n" );
154         needsDbUpdate = answer.equals( "n");
155 */

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         //
168
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         //
175
echo();
176         //
177
File[] zips = (new File( "../wmbuild")).listFiles();
178         for ( int i = 0; i < zips.length; i++ )
179             new Unzipper().start( new String JavaDoc[] { "-s", "-d", wmpath, "../wmbuild/"+zips[i].getName() } );
180
181         echo(" Anpassen der Konfigurationsdateien ...");
182         //
183
echo();
184         String JavaDoc 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 JavaDoc[] {
189             "-f", wmpath+"/WEB-INF/web.xml",
190             "-o", backFile+backVersion });
191         if (! hasWebappAuth) {
192             new TextCutter().start( new String JavaDoc[] {
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             //
203
echo();
204             String JavaDoc jsqlpath = wmpath + "/WEB-INF/classes/db/JSQL/update";
205             if (! (new File( jsqlpath )).isDirectory()) jsqlpath = "../jsql/update";
206             
207             new JSQLexec().start( new String JavaDoc[] {
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 JavaDoc[] {"-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 JavaDoc[] {
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 JavaDoc[] {
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     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
241
public static void main( String JavaDoc[] args ) { System.out.println("&uuml;ber"); new update12to15().start( args ); }
242     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
243

244 }
245
Popular Tags