001 /* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014 /* 015 * This file has been modified by Chris Pheby in accordance with Section 4.2 016 * of the Apache Software License 017 */ 018 package org.jadira.dependencynavigator.implementations.zip; 019 020 import java.io.BufferedInputStream; 021 import java.io.File; 022 import java.io.FileNotFoundException; 023 import java.io.IOException; 024 import java.io.InputStreamReader; 025 import java.util.zip.ZipEntry; 026 import java.util.zip.ZipFile; 027 028 import org.apache.maven.model.Model; 029 import org.apache.maven.model.io.xpp3.MavenXpp3Reader; 030 import org.codehaus.plexus.context.Context; 031 import org.codehaus.plexus.context.ContextException; 032 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; 033 import org.codehaus.plexus.util.xml.pull.XmlPullParserException; 034 import org.jadira.dependencynavigator.controller.DependencyResolutionException; 035 import org.jadira.dependencynavigator.implementations.Repository; 036 037 public class ZipFileRepository implements Repository, Contextualizable { 038 039 public static final String KEY_ZIPFILE_PATH = "zip.filepath"; 040 public static final String PREFIX_REPOSITORY = "repository"; 041 042 private File repositoryZipFile; 043 044 public Model resolveFile(String groupId, String artifactId, String version) { 045 try { 046 String path = PREFIX_REPOSITORY + "/" + groupId.replaceAll("\\.", "/") + "/" + artifactId + "/" + version + "/" + artifactId + "-" + version + ".pom"; 047 ZipFile zipFile = new ZipFile(repositoryZipFile); 048 ZipEntry entry = zipFile.getEntry(path); 049 if (entry == null) { 050 return null; 051 } 052 053 MavenXpp3Reader pomReader = new MavenXpp3Reader(); 054 055 return pomReader.read(new InputStreamReader(new BufferedInputStream(zipFile.getInputStream(entry)))); 056 } catch (FileNotFoundException e) { 057 throw new DependencyResolutionException(e); 058 } catch (IOException e) { 059 throw new DependencyResolutionException(e); 060 } catch (XmlPullParserException e) { 061 throw new DependencyResolutionException(e); 062 } 063 } 064 065 public boolean canCreateSnapshot() { 066 return false; 067 } 068 069 public void contextualize(Context context) throws ContextException { 070 String zipFilePath = (String) context.get(KEY_ZIPFILE_PATH); 071 if (zipFilePath == null || zipFilePath.trim().length() == 0) { 072 throw new ContextException("Missing configuration parameter: " + KEY_ZIPFILE_PATH); 073 } 074 this.repositoryZipFile = new File(zipFilePath); 075 } 076 }