1 4 package com.tc.test.server.appserver; 5 6 import com.tc.util.ZipBuilder; 7 import com.tc.util.runtime.Os; 8 9 import java.io.BufferedInputStream ; 10 import java.io.File ; 11 import java.io.FileReader ; 12 import java.io.FileWriter ; 13 import java.io.IOException ; 14 import java.io.LineNumberReader ; 15 import java.io.PrintWriter ; 16 import java.net.URL ; 17 import java.net.URLConnection ; 18 import java.text.DateFormat ; 19 import java.util.Date ; 20 21 26 final class ConcreteReadOnlyAppServerInstallation { 27 28 private static final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG); 29 30 static File create(URL host, File serverDir, String serverType, String majorVersion, String minorVersion) throws Exception { 31 File serverInstallDir = new File (serverDir + File.separator + serverType + "-" + majorVersion + "." + minorVersion + "-install"); 32 serverInstallDir.mkdir(); 33 File timestampFile = new File (serverInstallDir + File.separator + "timestamp"); 34 if (equalTimestamps(host, serverType, majorVersion, minorVersion, timestampFile)) { return serverInstallDir; } 35 File deleteServer = new File (serverInstallDir + File.separator + serverType + "-" + majorVersion + "." + minorVersion); 36 if (deleteServer.exists()) { 37 deleteServer.delete(); 38 } 39 BufferedInputStream in = new BufferedInputStream (appendPath(host, serverType, majorVersion, minorVersion).openStream()); 40 ZipBuilder.unzip(in, serverInstallDir); 41 in.close(); 42 return serverInstallDir; 43 } 44 45 private static boolean equalTimestamps(URL host, String serverType, String majorVersion, String minorVersion, File timestampFile) throws Exception { 46 URLConnection conn = appendPath(host, serverType, majorVersion, minorVersion).openConnection(); 47 System.out.println("**Connection=" + host); 48 System.out.println("**Connection=" + conn); 49 long modified = conn.getLastModified(); 50 if (!timestampFile.exists()) { 51 writeTimestamp(modified, timestampFile); 52 return false; 53 } 54 LineNumberReader in = new LineNumberReader (new FileReader (timestampFile)); 55 String serverStamp = in.readLine(); 56 in.close(); 57 if (df.parse(serverStamp).getTime() != df.parse(df.format(new Date (modified))).getTime()) { 58 writeTimestamp(modified, timestampFile); 59 return false; 60 } 61 return true; 62 } 63 64 private static void writeTimestamp(long timestamp, File timestampFile) throws IOException { 65 PrintWriter out = new PrintWriter (new FileWriter (timestampFile)); 66 out.println(df.format(new Date (timestamp))); 67 out.close(); 68 } 69 70 private static String resolvePlatform() { 71 return Os.platform(); 72 } 73 74 private static URL appendPath(URL host, String serverType, String majorVersion, String minorVersion) throws Exception { 75 String baseUrl = host.toExternalForm(); 76 String appendedPath = serverType + "/" + resolvePlatform() + "/" + serverType.toLowerCase() + "-" + majorVersion.toLowerCase() 77 + "." + minorVersion.toLowerCase() + ".zip"; 78 return new URL (baseUrl + "/" + appendedPath); 79 } 80 } 81 | Popular Tags |