78a5e9c28773d8f43b532699aff8d1e2d9e08318
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / methods / ProjectScanner.java
1 /*
2  * JavaInspect - Utility to visualize java software
3  * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  * 
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 3 of the GNU Lesser General Public License
7  * or later as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.inspector.java.methods;
11
12 import eu.svjatoslav.commons.file.FilePathParser;
13 import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
14
15 import java.io.File;
16 import java.io.IOException;
17 import java.util.ArrayList;
18 import java.util.HashMap;
19 import java.util.List;
20 import java.util.Map;
21
22 public class ProjectScanner {
23
24     private final File scanPath;
25     public List<JavaFile> javaFiles = new ArrayList<JavaFile>();
26     Map<File, Project> projects = new HashMap<File, Project>();
27
28     public ProjectScanner(final File projectPath) {
29         scanPath = projectPath;
30         parse();
31     }
32
33     public List<Clazz> getAllClasses() {
34         final List<Clazz> result = new ArrayList<Clazz>();
35
36         for (final JavaFile file : javaFiles)
37             for (final Clazz clazz : file.classes)
38                 result.add(clazz);
39
40         return result;
41     }
42
43     public void parse() {
44
45         if (!scanPath.exists())
46             System.out.println("Path not found: " + scanPath);
47
48         if (!scanPath.canRead())
49             System.out.println("Cannot read path: " + scanPath);
50
51         if (scanPath.isDirectory())
52             parseDirectory(scanPath);
53
54         if (scanPath.isFile())
55             parseFile(scanPath);
56     }
57
58     public void parseDirectory(final File file) {
59
60         File[] filesList = file.listFiles();
61         if (filesList == null) throw new RuntimeException("Cannot scan directory: " + file);
62
63         for (final File subFile : filesList) {
64
65             if (subFile.isFile())
66                 parseFile(subFile);
67
68             if (subFile.isDirectory())
69                 parseDirectory(subFile);
70         }
71     }
72
73     public void parseFile(final File file) {
74         final String fileExtension = FilePathParser.getFileExtension(file);
75         if ("java".equalsIgnoreCase(fileExtension))
76             try {
77                 final JavaFile javaFile = new JavaFile(file);
78                 javaFiles.add(javaFile);
79             } catch (final IOException e) {
80                 System.out.println("Error parsing file: " + file.toString()
81                         + ": " + e.toString());
82             } catch (final InvalidSyntaxException e) {
83                 System.out.println("Syntax error occured while parsing file: "
84                         + file.toString() + ": " + e.toString());
85             }
86     }
87
88 }