001 package org.jadira.dependencynavigator.implementations.zip; 002 /********************************************************************** 003 Licensed under the Apache License, Version 2.0 (the "License"); 004 you may not use this file except in compliance with the License. 005 You may obtain a copy of the License at 006 007 http://www.apache.org/licenses/LICENSE-2.0 008 009 Unless required by applicable law or agreed to in writing, software 010 distributed under the License is distributed on an "AS IS" BASIS, 011 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 See the License for the specific language governing permissions and 013 limitations under the License. 014 015 Contributors: 016 017 **********************************************************************/ 018 import org.apache.maven.project.interpolation.ModelInterpolationException; 019 import org.codehaus.plexus.context.Context; 020 import org.codehaus.plexus.context.ContextException; 021 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; 022 import org.jadira.dependencynavigator.controller.DependencyResolutionException; 023 import org.jadira.dependencynavigator.implementations.Workspace; 024 import org.jadira.dependencynavigator.model.ArtifactInitialisationException; 025 import org.jadira.dependencynavigator.model.PomFile; 026 import org.jadira.dependencynavigator.model.RootPom; 027 028 import java.io.BufferedReader; 029 import java.io.FileNotFoundException; 030 import java.io.IOException; 031 import java.io.InputStreamReader; 032 import java.util.zip.ZipEntry; 033 import java.util.zip.ZipFile; 034 035 public class ZipFileWorkspace extends Workspace implements Contextualizable 036 { 037 038 public static final String KEY_ZIPFILE_PATH = "zip.filepath"; 039 public static final String PREFIX_WORKSPACE = "workspace"; 040 041 private ZipFile zipFile; 042 private String selectedPom; 043 044 ZipFile getZipFile() 045 { 046 return this.zipFile; 047 } 048 049 @Override 050 public String getPath(String moduleName) 051 { 052 return PREFIX_WORKSPACE + selectedPom.replaceFirst("/pom.xml$", "/" + moduleName + "/pom.xml"); 053 } 054 055 @Override 056 public PomFile loadModulePom(String module) 057 { 058 try 059 { 060 String zipEntryPath = getPath(module); 061 ZipEntry zipEntry = zipFile.getEntry(zipEntryPath); 062 BufferedReader zipEntryReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); 063 return loadPom(zipEntryReader); 064 } 065 catch (IOException e) 066 { 067 throw new DependencyResolutionException(e); 068 } 069 } 070 071 @Override 072 public void reloadPomFile() throws ArtifactInitialisationException 073 { 074 try 075 { 076 ZipEntry zipEntry = zipFile.getEntry(PREFIX_WORKSPACE + selectedPom); 077 BufferedReader zipEntryReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); 078 root = new RootPom(loadPom(zipEntryReader), this); 079 } 080 catch (FileNotFoundException e) 081 { 082 throw new DependencyResolutionException(e); 083 } 084 catch (IOException e) 085 { 086 throw new DependencyResolutionException(e); 087 } 088 catch (ModelInterpolationException e) 089 { 090 throw new DependencyResolutionException(e); 091 } 092 } 093 094 public void loadRootPom(String selectedPom) throws ArtifactInitialisationException 095 { 096 this.selectedPom = selectedPom; 097 reloadPomFile(); 098 } 099 100 @Override 101 public boolean canCreateSnapshot() 102 { 103 return false; 104 } 105 106 public void contextualize(Context context) throws ContextException 107 { 108 String zipFilePath = (String) context.get(KEY_ZIPFILE_PATH); 109 if (zipFilePath == null || zipFilePath.trim().length() == 0) 110 { 111 throw new ContextException("Missing configuration parameter: " + KEY_ZIPFILE_PATH); 112 } 113 try 114 { 115 this.zipFile = new ZipFile(zipFilePath); 116 } 117 catch (IOException e) 118 { 119 throw new ContextException("Error instantiating zip file: " + e.getMessage()); 120 } 121 } 122 123 }