package com.taobao.zeus.jobs.sub.tool;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.taobao.zeus.jobs.AbstractJob;
import com.taobao.zeus.jobs.JobContext;
public class MavenDownloadJob extends AbstractJob {
public static class MavenConfig {
private String group;
private String artifact;
private String version;
private String url;
public MavenConfig() {
}
public MavenConfig(String group, String artifact, String version,
String url) {
this.group = group;
this.artifact = artifact;
this.version = version;
this.url = url;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getArtifact() {
return artifact;
}
public void setArtifact(String artifact) {
this.artifact = artifact;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
private List<MavenConfig> files = new ArrayList<MavenConfig>();
public MavenDownloadJob(JobContext jobContext, List<MavenConfig> files) {
super(jobContext);
if (files != null) {
this.files = files;
}
}
@Override
public Integer run() {
Integer exitCode = 0;
for (MavenConfig mc : files) {
String downloadUrl = mc.getUrl();
if (downloadUrl == null || "".equals(downloadUrl)) {
downloadUrl = "http://mvnrepo.taobao.ali.com:8081/nexus/content/groups/public/"
+ StringUtils.replaceChars(mc.getGroup(), '.', '/')
+ "/"
+ mc.getArtifact()
+ "/"
+ mc.getArtifact()
+ mc.getArtifact() + "-" + mc.getVersion() + ".jar";
}
try {
jobContext.getJobHistory().getLog()
.appendZeus("开始下载maven配置文件:" + downloadUrl);
download(downloadUrl, jobContext.getWorkDir() + File.separator
+ downloadUrl.substring(downloadUrl.lastIndexOf("/")));
jobContext.getJobHistory().getLog()
.appendZeus("下载maven配置文件 :" + downloadUrl + " 成功");
} catch (Exception e) {
jobContext.getJobHistory().getLog().appendZeusException(e);
exitCode = -1;
}
}
return exitCode;
}
private void download(String destUrl, String localFilePath)
throws Exception {
int size = 0;
byte[] buf = new byte[1024];
HttpURLConnection httpUrl = (HttpURLConnection) new URL(destUrl)
.openConnection();
httpUrl.connect();
BufferedInputStream bis = new BufferedInputStream(
httpUrl.getInputStream());
FileOutputStream fos = new FileOutputStream(new File(localFilePath));
while ((size = bis.read(buf)) != -1) {
fos.write(buf, 0, size);
}
fos.close();
bis.close();
httpUrl.disconnect();
}
@Override
public void cancel() {
canceled = true;
}
}