View Javadoc

1   /*
2    * EL4J, the Extension Library for the J2EE, adds incremental enhancements to
3    * the spring framework, http://el4j.sf.net
4    * Copyright (C) 2008 by ELCA Informatique SA, Av. de la Harpe 22-24,
5    * 1000 Lausanne, Switzerland, http://www.elca.ch
6    *
7    * EL4J is published under the GNU Lesser General Public License (LGPL)
8    * Version 2.1. See http://www.gnu.org/licenses/
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU Lesser General Public License for more details.
14   *
15   * For alternative licensing, please contact info@elca.ch
16   */
17  package ch.elca.el4j.maven.plugins.springide;
18  
19  import java.io.File;
20  import java.io.FileNotFoundException;
21  import java.util.ArrayList;
22  import java.util.Arrays;
23  import java.util.List;
24  import java.util.Scanner;
25  
26  import org.apache.commons.io.FileUtils;
27  import org.apache.commons.io.filefilter.FileFilterUtils;
28  
29  /**
30   * 
31   * This class is a helper class that will look for a file that defines the Module Application Context.
32   * First it will check if it finds a .xml file, as this would be the preferred way to define the Module
33   * Application Context in a web project, afterwards it will check through all .java files in the source
34   * alphabetically and return the first one that contains // $$ BEANS INCLUDE $$
35   *
36   * @svnLink $Revision: 3884 $;$Date: 2009-08-04 15:48:31 +0200 (Di, 04. Aug 2009) $;$Author: swismer $;$URL: https://el4j.svn.sourceforge.net/svnroot/el4j/branches/el4j_3_1/el4j/framework/plugins/maven-spring-ide-plugin/src/main/java/ch/elca/el4j/maven/plugins/springide/SourceResolver.java $
37   *
38   * @author Daniel Thomas (DTH)
39   */
40  
41  public class SourceResolver {
42  
43  	/**
44  	 * Search for a file in the sourcefiles that contains the module application context.
45  	 * 
46  	 * @param baseDir
47  	 *            are the paths to the sourcefiles
48  	 * @return File of first found document that contains $$ BEANS EXCLUDE
49  	 * @throws FileNotFoundException
50  	 */
51  	public static File getSourceFile(File baseDir) {
52  		File returnFile = null;
53  		List<File> javaFiles = null;
54  
55  		javaFiles = getAllRelevantFiles(baseDir);
56  
57  		/*
58  		 * check if there is any .java file that contains // $$ BEANS INCLUDE $$, and return it
59  		 */
60  
61  		javaFiles = sortJavaFilesAlpabetically(javaFiles);
62  		
63  		for (File javaFile : javaFiles) {
64  			Scanner scan = null;
65  			try {
66  				scan = new Scanner(javaFile);
67  
68  				while (scan.hasNextLine()) {
69  					if (scan.nextLine().contains("$$ BEANS INCLUDE $$")) {
70  						return javaFile;
71  					}
72  				}
73  				
74  			} catch (Exception e) {
75  				/* nothing to be done */
76  			} finally {
77  				if (scan != null) {
78  					scan.close();
79  				}
80  			}
81  		}
82  
83  		return returnFile;
84  	}
85  
86  	/**
87  	 * Simple selection sort on the names of the files in the javaFiles List.
88  	 */
89  	private static List<File> sortJavaFilesAlpabetically(List<File> javaFiles) {
90  		File[] javaFilesAsArray = (File[]) javaFiles.toArray(new File[1]);
91  		Arrays.sort(javaFilesAsArray);
92  		return Arrays.asList(javaFilesAsArray);
93  
94  	}
95  
96  	/**
97  	 * Populates the Lists javaFiles and xmlFiles with the corresponding Files it found in the sourceDirectory. Checks
98  	 * recursevely through folders.
99  	 * 
100 	 * @param sourceDirectory
101 	 *            folder to start with
102 	 */
103 
104 	private static List<File> getAllRelevantFiles(File sourceDirectory) {
105 		String[] extensions = {"java"};
106 		return (List<File>) FileUtils.listFiles(sourceDirectory, extensions, true);
107 
108 	}
109 
110 }