/* * 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.ivy.plugins.resolver; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.jar.JarFile; import org.apache.ivy.core.cache.CacheResourceOptions; import org.apache.ivy.core.event.EventManager; import org.apache.ivy.core.report.ArtifactDownloadReport; import org.apache.ivy.core.report.DownloadStatus; import org.apache.ivy.plugins.repository.Resource; import org.apache.ivy.plugins.repository.jar.JarRepository; import org.apache.ivy.plugins.repository.url.URLRepository; import org.apache.ivy.plugins.repository.url.URLResource; public class JarResolver extends RepositoryResolver { private URL url; public JarResolver() { setRepository(new JarRepository()); } public String getTypeName() { return "jar"; } public void setFile(String jarFile) { setJarFile(new File(jarFile)); } public void setUrl(String jarUrl) { try { url = new URL(jarUrl); } catch (MalformedURLException e) { throw new RuntimeException("the jar repository " + getName() + " has an malformed url : " + jarUrl + " (" + e.getMessage() + ")"); } } public JarRepository getJarRepository() { return (JarRepository) super.getRepository(); } private void setJarFile(File jarLocalFile) { JarFile jar; try { jar = new JarFile(jarLocalFile); } catch (IOException e) { throw new RuntimeException("the jar repository " + getName() + " could not be read (" + e.getMessage() + ")", e); } getJarRepository().setJarFile(jar); } public void setSettings(ResolverSettings settings) { super.setSettings(settings); // let's resolve the url if (url != null) { ArtifactDownloadReport report; EventManager eventManager = getEventManager(); try { if (eventManager != null) { getRepository().addTransferListener(eventManager); } Resource jarResource = new URLResource(url); CacheResourceOptions options = new CacheResourceOptions(); report = getRepositoryCacheManager().downloadRepositoryResource(jarResource, "jarrepository", "jar", "jar", options, new URLRepository()); } finally { if (eventManager != null) { getRepository().removeTransferListener(eventManager); } } if (report.getDownloadStatus() == DownloadStatus.FAILED) { throw new RuntimeException("The jar file " + url.toExternalForm() + " could not be downloaded (" + report.getDownloadDetails() + ")"); } setJarFile(report.getLocalFile()); } } }