1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski package installer; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski import java.io.*; 25*b1cdbd2cSJim Jagielski import java.util.*; 26*b1cdbd2cSJim Jagielski import java.util.zip.*; 27*b1cdbd2cSJim Jagielski import java.awt.*; 28*b1cdbd2cSJim Jagielski import java.awt.event.*; 29*b1cdbd2cSJim Jagielski import javax.swing.*; 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski public class ZipData 32*b1cdbd2cSJim Jagielski { ZipData(String file)33*b1cdbd2cSJim Jagielski public ZipData(String file) { 34*b1cdbd2cSJim Jagielski } 35*b1cdbd2cSJim Jagielski extractEntry(String entry, String destination, JLabel statusLabel)36*b1cdbd2cSJim Jagielski public boolean extractEntry(String entry, String destination, 37*b1cdbd2cSJim Jagielski JLabel statusLabel) { 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski OutputStream out = null; 40*b1cdbd2cSJim Jagielski InputStream in = null; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski System.out.println("Copying: " + entry); 43*b1cdbd2cSJim Jagielski System.out.println("To: " + destination); 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski if (statusLabel != null) { 46*b1cdbd2cSJim Jagielski statusLabel.setText("Copying " + entry); 47*b1cdbd2cSJim Jagielski } 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski String entryName; 50*b1cdbd2cSJim Jagielski if (entry.lastIndexOf("/") != -1) { 51*b1cdbd2cSJim Jagielski entryName = entry.substring(entry.lastIndexOf("/") + 1); 52*b1cdbd2cSJim Jagielski } 53*b1cdbd2cSJim Jagielski else { 54*b1cdbd2cSJim Jagielski entryName = entry; 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski String destName; 58*b1cdbd2cSJim Jagielski if (destination.lastIndexOf(File.separator) != -1) { 59*b1cdbd2cSJim Jagielski destName = destination.substring(destination.lastIndexOf(File.separator) + 1); 60*b1cdbd2cSJim Jagielski } 61*b1cdbd2cSJim Jagielski else { 62*b1cdbd2cSJim Jagielski destName = destination; 63*b1cdbd2cSJim Jagielski } 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski if (!destName.equals(entryName)) 66*b1cdbd2cSJim Jagielski destination = destination.concat(entryName); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski System.out.println("Unzipping " + entry + " to " + destination); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski try { 71*b1cdbd2cSJim Jagielski out = new FileOutputStream(destination); 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski catch (IOException ioe) { 74*b1cdbd2cSJim Jagielski System.err.println("Error opening " + destination + 75*b1cdbd2cSJim Jagielski ": " + ioe.getMessage()); 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski if (statusLabel != null) 78*b1cdbd2cSJim Jagielski statusLabel.setText("Error opening" + destination + 79*b1cdbd2cSJim Jagielski "see SFramework.log for more information"); 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski return false; 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski if (entry.startsWith("/") == false) 85*b1cdbd2cSJim Jagielski entry = "/" + entry; 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski in = this.getClass().getResourceAsStream(entry); 88*b1cdbd2cSJim Jagielski if (in == null) { 89*b1cdbd2cSJim Jagielski System.err.println("File " + entry + " not found in jar file"); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski if (statusLabel != null) 92*b1cdbd2cSJim Jagielski statusLabel.setText("Failed extracting " + entry + 93*b1cdbd2cSJim Jagielski "see SFramework.log for more information"); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski return false; 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski try { 99*b1cdbd2cSJim Jagielski byte[] bytes = new byte[1024]; 100*b1cdbd2cSJim Jagielski int len; 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski while ((len = in.read(bytes)) != -1) 103*b1cdbd2cSJim Jagielski out.write(bytes, 0, len); 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski catch (IOException ioe) { 106*b1cdbd2cSJim Jagielski System.err.println("Error writing " + destination + ": " + 107*b1cdbd2cSJim Jagielski ioe.getMessage()); 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski if (statusLabel != null) 110*b1cdbd2cSJim Jagielski statusLabel.setText("Failed writing " + destination + 111*b1cdbd2cSJim Jagielski "see SFramework.log for more information"); 112*b1cdbd2cSJim Jagielski return false; 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski finally { 115*b1cdbd2cSJim Jagielski try { 116*b1cdbd2cSJim Jagielski in.close(); 117*b1cdbd2cSJim Jagielski out.close(); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski catch (IOException ioe) { 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski return true; 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski } 125