blob: c1ab0ef203b083b15a01b3a7978ccc0d862105d9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.easyant4e.ivyde.extension;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.easyant4e.Activator;
import org.eclipse.core.runtime.IStatus;
/**
* This class unpack the default EasyAnt repository in local file system.
*/
public class RepositoryInstaller {
static final int BUFFER_SIZE = 102400;
static final String REPOSITORY_ARCHIVE_PATH = "repository.zip";
private URL interpreterZipUrl;
public void install(File installDir) {
this.interpreterZipUrl = Activator.getDefault().getBundle().getResource(REPOSITORY_ARCHIVE_PATH);
try {
unPackArchive(installDir);
} catch (IOException e) {
Activator.getEasyAntPlugin().log(IStatus.ERROR, "Cannot install EasyAnt repository", e);
}
}
private void unPackArchive(File installDir) throws IOException {
InputStream inputStream = this.interpreterZipUrl.openStream();
ZipInputStream zipFileStream = new ZipInputStream(inputStream);
ZipEntry zipEntry = zipFileStream.getNextEntry();
while (zipEntry != null) {
File destination = new File(installDir.getPath(), zipEntry.getName());
if (!zipEntry.isDirectory()) {
/*
* Copy files (and make sure parent directory exist)
*/
File parentFile = destination.getParentFile();
boolean parentFileExist = isFileExists(parentFile);
if (!parentFileExist) {
parentFileExist = parentFile.mkdirs();
}
if (parentFileExist) {
OutputStream os = null;
try {
os = new FileOutputStream(destination);
byte[] buffer = new byte[BUFFER_SIZE];
while (true) {
int len = zipFileStream.read(buffer);
if (zipFileStream.available() == 0) {
break;
}
os.write(buffer, 0, len);
}
} finally {
if (null != os) {
os.close();
}
}
} else {
Activator.getEasyAntPlugin().log(IStatus.ERROR,
"Installing EasyAnt repository, but " + parentFile + " already exists!");
}
} else {
boolean created = destination.mkdirs();
if (!created) {
Activator.getEasyAntPlugin().log(IStatus.ERROR,
"Installing EasyAnt repository. Cannot create directory: " + destination);
}
}
zipFileStream.closeEntry();
zipEntry = zipFileStream.getNextEntry();
}
inputStream.close();
zipFileStream.close();
}
private boolean isFileExists(File file) {
return (null != file && file.exists());
}
}