1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.themis.xanalysis.parser.proj;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.themis.xanalysis.parser.base.ThemisXAnalysisChar;
21 import io.github.tonywasher.joceanus.themis.xanalysis.parser.base.ThemisXAnalysisParserDef;
22 import io.github.tonywasher.joceanus.themis.xanalysis.parser.mod.ThemisXAnalysisModModule;
23
24 import java.io.File;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Objects;
28
29
30
31
32 public class ThemisXAnalysisModule {
33
34
35
36 static final String PATH_XTRA = ".src.main.java".replace(ThemisXAnalysisChar.PERIOD, ThemisXAnalysisChar.COMMENT);
37
38
39
40
41 private static final String MODULE_INFO = "module-info" + ThemisXAnalysisFile.SFX_JAVA;
42
43
44
45
46 private final String theName;
47
48
49
50
51 private final File theLocation;
52
53
54
55
56 private final List<ThemisXAnalysisPackage> thePackages;
57
58
59
60
61 private ThemisXAnalysisModModule theModuleInfo;
62
63
64
65
66
67
68
69
70 ThemisXAnalysisModule(final File pLocation,
71 final ThemisXAnalysisMaven pPom) throws OceanusException {
72
73 thePackages = new ArrayList<>();
74
75
76 theLocation = new File(pLocation, PATH_XTRA);
77 theName = pLocation.getName();
78
79
80 checkForPackage(theLocation, null);
81
82
83 for (String myXtra : pPom.getXtraDirs()) {
84 final File myXtraDir = new File(pLocation, myXtra);
85 checkForPackage(myXtraDir, null);
86 }
87 }
88
89
90
91
92
93
94 public String getName() {
95 return theName;
96 }
97
98 @Override
99 public String toString() {
100 return getName();
101 }
102
103
104
105
106
107
108 public List<ThemisXAnalysisPackage> getPackages() {
109 return thePackages;
110 }
111
112
113
114
115
116
117 public ThemisXAnalysisModModule getModuleInfo() {
118 return theModuleInfo;
119 }
120
121
122
123
124
125
126
127
128 void checkForPackage(final File pLocation,
129 final String pPackage) throws OceanusException {
130
131 boolean isPackage = false;
132
133
134 final File myLocation = pPackage == null
135 ? pLocation
136 : new File(pLocation, pPackage.replace(ThemisXAnalysisChar.PERIOD, ThemisXAnalysisChar.COMMENT));
137
138
139 for (File myFile : Objects.requireNonNull(myLocation.listFiles())) {
140
141 final String myName = myFile.getName();
142
143
144 if (myFile.isDirectory()) {
145 final String myPackage = pPackage == null
146 ? myName
147 : pPackage + ThemisXAnalysisChar.PERIOD + myName;
148 checkForPackage(pLocation, myPackage);
149 }
150
151
152 if (myName.endsWith(ThemisXAnalysisFile.SFX_JAVA)
153 && !MODULE_INFO.equals(myName)) {
154 isPackage = pPackage != null;
155 }
156 }
157
158
159 if (isPackage) {
160
161 thePackages.add(new ThemisXAnalysisPackage(pLocation, pPackage));
162 }
163 }
164
165
166
167
168
169
170
171 void parseJavaCode(final ThemisXAnalysisParserDef pParser) throws OceanusException {
172
173 for (ThemisXAnalysisPackage myPackage : thePackages) {
174
175 myPackage.parseJavaCode(pParser);
176 }
177
178
179 final File myModuleInfo = new File(theLocation, MODULE_INFO);
180 if (myModuleInfo.exists()) {
181 theModuleInfo = (ThemisXAnalysisModModule) pParser.parseModuleInfo(myModuleInfo);
182 }
183 }
184 }