1*e17b4558SAndroid Build Coastguard Worker /* 2*e17b4558SAndroid Build Coastguard Worker * Copyright (C) 2011 The Android Open Source Project 3*e17b4558SAndroid Build Coastguard Worker * 4*e17b4558SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e17b4558SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e17b4558SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e17b4558SAndroid Build Coastguard Worker * 8*e17b4558SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e17b4558SAndroid Build Coastguard Worker * 10*e17b4558SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e17b4558SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e17b4558SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e17b4558SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e17b4558SAndroid Build Coastguard Worker * limitations under the License. 15*e17b4558SAndroid Build Coastguard Worker */ 16*e17b4558SAndroid Build Coastguard Worker 17*e17b4558SAndroid Build Coastguard Worker package vogar.tasks; 18*e17b4558SAndroid Build Coastguard Worker 19*e17b4558SAndroid Build Coastguard Worker import java.io.BufferedInputStream; 20*e17b4558SAndroid Build Coastguard Worker import java.io.BufferedOutputStream; 21*e17b4558SAndroid Build Coastguard Worker import java.io.File; 22*e17b4558SAndroid Build Coastguard Worker import java.io.FileOutputStream; 23*e17b4558SAndroid Build Coastguard Worker import java.io.InputStream; 24*e17b4558SAndroid Build Coastguard Worker import java.io.OutputStream; 25*e17b4558SAndroid Build Coastguard Worker import vogar.Result; 26*e17b4558SAndroid Build Coastguard Worker import vogar.util.IoUtils; 27*e17b4558SAndroid Build Coastguard Worker 28*e17b4558SAndroid Build Coastguard Worker public final class ExtractJarResourceTask extends Task { 29*e17b4558SAndroid Build Coastguard Worker private final String jarResource; 30*e17b4558SAndroid Build Coastguard Worker private final File extractedResource; 31*e17b4558SAndroid Build Coastguard Worker ExtractJarResourceTask(String jarResource, File extractedResource)32*e17b4558SAndroid Build Coastguard Worker public ExtractJarResourceTask(String jarResource, File extractedResource) { 33*e17b4558SAndroid Build Coastguard Worker super("extract " + jarResource + " to " + extractedResource); 34*e17b4558SAndroid Build Coastguard Worker this.jarResource = jarResource; 35*e17b4558SAndroid Build Coastguard Worker this.extractedResource = extractedResource; 36*e17b4558SAndroid Build Coastguard Worker } 37*e17b4558SAndroid Build Coastguard Worker execute()38*e17b4558SAndroid Build Coastguard Worker @Override protected Result execute() throws Exception { 39*e17b4558SAndroid Build Coastguard Worker IoUtils.safeMkdirs(extractedResource.getParentFile()); 40*e17b4558SAndroid Build Coastguard Worker InputStream in = new BufferedInputStream( 41*e17b4558SAndroid Build Coastguard Worker getClass().getResourceAsStream(jarResource)); 42*e17b4558SAndroid Build Coastguard Worker OutputStream out = new BufferedOutputStream(new FileOutputStream(extractedResource)); 43*e17b4558SAndroid Build Coastguard Worker byte[] buf = new byte[1024]; 44*e17b4558SAndroid Build Coastguard Worker int count; 45*e17b4558SAndroid Build Coastguard Worker while ((count = in.read(buf)) != -1) { 46*e17b4558SAndroid Build Coastguard Worker out.write(buf, 0, count); 47*e17b4558SAndroid Build Coastguard Worker } 48*e17b4558SAndroid Build Coastguard Worker out.close(); 49*e17b4558SAndroid Build Coastguard Worker in.close(); 50*e17b4558SAndroid Build Coastguard Worker return Result.SUCCESS; 51*e17b4558SAndroid Build Coastguard Worker } 52*e17b4558SAndroid Build Coastguard Worker }