View Javadoc
1   /*
2    * Copyright 2001-2005 The Apache Software Foundation.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package net.sf.mavenizer.cli.commands;
18  
19  import java.io.File;
20  import java.io.FileFilter;
21  import java.io.FileNotFoundException;
22  import java.io.FileOutputStream;
23  import java.io.IOException;
24  import java.io.OutputStream;
25  import java.util.ArrayList;
26  import java.util.Iterator;
27  import java.util.List;
28  
29  import net.sf.mavenizer.MavenizerException;
30  import net.sf.mavenizer.analyser.scanner.ScannerFileFilter;
31  import net.sf.mavenizer.cli.exceptions.ProjectSavingException;
32  import net.sf.mavenizer.core.Mavenizer;
33  import net.sf.mavenizer.core.loader.DefaultJarLoader;
34  import net.sf.mavenizer.io.writer.DefaultMavenizerProjectWriter;
35  import net.sf.mavenizer.io.writer.MavenizerProjectWriter;
36  
37  import org.apache.commons.logging.Log;
38  import org.apache.commons.logging.LogFactory;
39  
40  
41  /***
42   * @author <a href="mailto:cedric-vidal@users.sourceforge.net">C&eacute;dric Vidal</a>
43   *
44   */
45  public class Analyse {
46  
47  	private static final Log log = LogFactory.getLog(Analyse.class);
48  
49  	private File rootDir;
50  
51  	private List searchDirList = new ArrayList();
52  
53  	private File workDir;
54  
55  	private File tempDir;
56  
57  	private File projectFile;
58  
59  	private MavenizerProjectWriter mavenizerProjectWriter;
60  
61  	private FileFilter fileFilter;
62  
63  	public Analyse() {
64  		super();
65  	}
66  
67  	public void execute() throws MavenizerException {
68  
69  		Mavenizer mavenizer = new Mavenizer();
70  
71  		for (Iterator i = getSearchDirList().iterator(); i.hasNext();) {
72  			String dirPath = (String) i.next();
73  			addJars(new File(dirPath), mavenizer);
74  		}
75  
76  		DefaultJarLoader defaultJarLoader = new DefaultJarLoader();
77  		defaultJarLoader.setTempDir(getTempDir());
78  		mavenizer.setJarLoader(defaultJarLoader);
79  		mavenizer.start();
80  
81  		saveProject(mavenizer);
82  	}
83  
84  	protected void saveProject(Mavenizer mavenizer) throws MavenizerException {
85  		getWorkDir().mkdirs();
86  		OutputStream out = null;
87  		try {
88  			out = new FileOutputStream(getProjectFile());
89  			getMavenizerProjectWriter().write(mavenizer, out);
90  		} catch (FileNotFoundException e) {
91  			throw new ProjectSavingException(e);
92  		} finally {
93  			if (out != null) {
94  				try {
95  					out.close();
96  				} catch (IOException e) {
97  					throw new ProjectSavingException(e);
98  				}
99  			}
100 		}
101 	}
102 
103 	static final String EXTENSION_JAR = ".jar";
104 
105 	private void addJars(File file, Mavenizer builder) {
106 
107 		if (file.isDirectory()) {
108 			File[] files = file.listFiles(getFileFilter());
109 			for (int i = 0; i < files.length; i++) {
110 				File childFile = files[i];
111 				addJars(childFile, builder);
112 			}
113 		} else if (file.getName().endsWith(EXTENSION_JAR)) {
114 			builder.getJarFiles().add(file);
115 		}
116 
117 	}
118 
119 	protected FileFilter getFileFilter() {
120 		if (fileFilter == null) {
121 			fileFilter = new ScannerFileFilter();
122 		}
123 		return fileFilter;
124 	}
125 
126 	/***
127 	 * @return Returns the rootDir.
128 	 */
129 	public File getRootDir() {
130 		return rootDir;
131 	}
132 
133 	/***
134 	 * @param rootDir
135 	 *            The rootDir to set.
136 	 */
137 	public void setRootDir(File rootDir) {
138 		this.rootDir = rootDir;
139 	}
140 
141 	/***
142 	 * @return Returns the jarList.
143 	 */
144 	public List getSearchDirList() {
145 		return searchDirList;
146 	}
147 
148 	/***
149 	 * @param jarList
150 	 *            The jarList to set.
151 	 */
152 	public void setSearchDirList(List jarList) {
153 		this.searchDirList = jarList;
154 	}
155 
156 	/***
157 	 * @return Returns the workDir.
158 	 */
159 	public File getWorkDir() {
160 		if (workDir == null) {
161 			workDir = new File(getRootDir(), "work");
162 		}
163 		return workDir;
164 	}
165 
166 	/***
167 	 * @param workDir
168 	 *            The workDir to set.
169 	 */
170 	public void setWorkDir(File workDir) {
171 		this.workDir = workDir;
172 	}
173 
174 	/***
175 	 * @return Returns the tempDir.
176 	 */
177 	public File getTempDir() {
178 		if (tempDir == null) {
179 			tempDir = new File(getRootDir(), "temp");
180 		}
181 		return tempDir;
182 	}
183 
184 	/***
185 	 * @param tempDir
186 	 *            The tempDir to set.
187 	 */
188 	public void setTempDir(File tempDir) {
189 		this.tempDir = tempDir;
190 	}
191 
192 	/***
193 	 * @return Returns the projectFile.
194 	 */
195 	public File getProjectFile() {
196 		if (projectFile == null) {
197 			projectFile = new File(getWorkDir(), "mavenizer.xml");
198 		}
199 		return projectFile;
200 	}
201 
202 	/***
203 	 * @param projectFile
204 	 *            The projectFile to set.
205 	 */
206 	public void setProjectFile(File projectFile) {
207 		this.projectFile = projectFile;
208 	}
209 
210 	/***
211 	 * @return Returns the mavenizerProjectWriter.
212 	 */
213 	public MavenizerProjectWriter getMavenizerProjectWriter() {
214 		if (mavenizerProjectWriter == null) {
215 			mavenizerProjectWriter = new DefaultMavenizerProjectWriter();
216 		}
217 		return mavenizerProjectWriter;
218 	}
219 
220 	/***
221 	 * @param mavenizerProjectWriter
222 	 *            The mavenizerProjectWriter to set.
223 	 */
224 	public void setMavenizerProjectWriter(
225 			MavenizerProjectWriter mavenizerProjectWriter) {
226 		this.mavenizerProjectWriter = mavenizerProjectWriter;
227 	}
228 
229 }