@dxworks/insider 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/.github/workflows/build.yml +19 -0
  2. package/.github/workflows/release-docs.yml +15 -0
  3. package/.github/workflows/release-voyager.yml +57 -0
  4. package/.github/workflows/release.yml +102 -0
  5. package/Dockerfile +8 -0
  6. package/README.md +89 -0
  7. package/TODO.txt +7 -0
  8. package/bin/insider.bat +1 -0
  9. package/bin/insider.sh +1 -0
  10. package/build.gradle +55 -0
  11. package/config/.ignore +4 -0
  12. package/config/comments.json +71 -0
  13. package/config/fingerprints/_anomalies-full.json +116 -0
  14. package/config/fingerprints/_extLibs.json +2555 -0
  15. package/config/fingerprints/code_smells.json +94 -0
  16. package/config/fingerprints/generated_code.json +17 -0
  17. package/config/fingerprints/libraries.json +4667 -0
  18. package/config/ignoredImports.txt +0 -0
  19. package/config/insider-conf.properties +3 -0
  20. package/config/rules/cloud_services/ad_networks.json +50 -0
  21. package/config/rules/cloud_services/bigdata.json +21 -0
  22. package/config/rules/cloud_services/cloud_hosting.json +398 -0
  23. package/config/rules/cloud_services/data_storage.json +291 -0
  24. package/config/rules/cloud_services/ecommerce.json +45 -0
  25. package/config/rules/cloud_services/socialmedia.json +82 -0
  26. package/config/rules/cloud_services/web_analytics.json +108 -0
  27. package/config/rules/components/active_content.json +157 -0
  28. package/config/rules/components/load_dll.json +66 -0
  29. package/config/rules/cryptography/algorithm_implementation.json +62 -0
  30. package/config/rules/cryptography/certificate.json +199 -0
  31. package/config/rules/cryptography/ciphers.json +174 -0
  32. package/config/rules/cryptography/crypto_currency.json +32 -0
  33. package/config/rules/cryptography/encoding.json +20 -0
  34. package/config/rules/cryptography/extended.json +220 -0
  35. package/config/rules/cryptography/external_libraries.json +141 -0
  36. package/config/rules/cryptography/hash_algorithm.json +98 -0
  37. package/config/rules/cryptography/key_derivation.json +65 -0
  38. package/config/rules/cryptography/protocol.json +156 -0
  39. package/config/rules/cryptography/random.json +97 -0
  40. package/config/rules/cryptography/weakssl.json +206 -0
  41. package/config/rules/data_handling/compressed_files.json +18 -0
  42. package/config/rules/data_handling/database.json +361 -0
  43. package/config/rules/data_handling/deserialization.json +296 -0
  44. package/config/rules/data_handling/json_parsing.json +49 -0
  45. package/config/rules/data_handling/media_parsing.json +33 -0
  46. package/config/rules/data_handling/pastebin.json +18 -0
  47. package/config/rules/data_handling/xml_parsing.json +168 -0
  48. package/config/rules/data_types/financial.json +106 -0
  49. package/config/rules/data_types/media.json +48 -0
  50. package/config/rules/data_types/secrets.json +91 -0
  51. package/config/rules/data_types/sensitive.json +176 -0
  52. package/config/rules/device_permissions/IOSPermissions.json +240 -0
  53. package/config/rules/device_permissions/UWP.json +221 -0
  54. package/config/rules/device_permissions/android_intents.json +599 -0
  55. package/config/rules/frameworks/PHP.json +172 -0
  56. package/config/rules/frameworks/build.json +189 -0
  57. package/config/rules/frameworks/c.json +45 -0
  58. package/config/rules/frameworks/csharp-nonMS.json +19 -0
  59. package/config/rules/frameworks/java.json +291 -0
  60. package/config/rules/frameworks/javascript.json +318 -0
  61. package/config/rules/frameworks/logging.json +103 -0
  62. package/config/rules/frameworks/microsoft.json +257 -0
  63. package/config/rules/frameworks/python.json +274 -0
  64. package/config/rules/frameworks/ruby.json +53 -0
  65. package/config/rules/frameworks/rust.json +77 -0
  66. package/config/rules/general/OSS_license.json +146 -0
  67. package/config/rules/general/code_metrics.json +132 -0
  68. package/config/rules/general/dependencies.json +199 -0
  69. package/config/rules/general/hygiene.json +47 -0
  70. package/config/rules/general/platforms.json +283 -0
  71. package/config/rules/general/solutioninfo.json +378 -0
  72. package/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  73. package/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  74. package/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  75. package/config/rules/networkcomms/outbound_network.json +429 -0
  76. package/config/rules/os/acl.json +250 -0
  77. package/config/rules/os/dynamic_execution.json +359 -0
  78. package/config/rules/os/file_io.json +468 -0
  79. package/config/rules/os/process.json +179 -0
  80. package/config/rules/os/setenv.json +270 -0
  81. package/config/rules/os/system_registry.json +237 -0
  82. package/config/rules/os/user_accts.json +34 -0
  83. package/config/rules/security_feature/authentication.json +387 -0
  84. package/config/rules/security_feature/authorization.json +148 -0
  85. package/config/rules/test_frameworks/cpp_testing.json +194 -0
  86. package/config/rules/test_frameworks/go_testing.json +18 -0
  87. package/config/rules/test_frameworks/java_testing.json +720 -0
  88. package/config/rules/test_frameworks/javascript_testing.json +724 -0
  89. package/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  90. package/config/rules/test_frameworks/php_testing.json +156 -0
  91. package/config/rules/test_frameworks/powershell_testing.json +17 -0
  92. package/config/rules/test_frameworks/python_testing.json +108 -0
  93. package/config/rules/test_frameworks/ruby_testing.json +114 -0
  94. package/config/rules/tools/pipeline.json +195 -0
  95. package/config/rules/webapp/comms.json +89 -0
  96. package/config/rules/webapp/headers.json +178 -0
  97. package/config/rules/webapp/media.json +56 -0
  98. package/config/rules/webapp/sessions.json +228 -0
  99. package/config/rules/webapp/storage.json +215 -0
  100. package/dist/config/.ignore +4 -0
  101. package/dist/config/comments.json +71 -0
  102. package/dist/config/fingerprints/_anomalies-full.json +116 -0
  103. package/dist/config/fingerprints/_extLibs.json +2555 -0
  104. package/dist/config/fingerprints/code_smells.json +94 -0
  105. package/dist/config/fingerprints/generated_code.json +17 -0
  106. package/dist/config/fingerprints/libraries.json +4667 -0
  107. package/dist/config/ignoredImports.txt +0 -0
  108. package/dist/config/insider-conf.properties +3 -0
  109. package/dist/config/rules/cloud_services/ad_networks.json +50 -0
  110. package/dist/config/rules/cloud_services/bigdata.json +21 -0
  111. package/dist/config/rules/cloud_services/cloud_hosting.json +398 -0
  112. package/dist/config/rules/cloud_services/data_storage.json +291 -0
  113. package/dist/config/rules/cloud_services/ecommerce.json +45 -0
  114. package/dist/config/rules/cloud_services/socialmedia.json +82 -0
  115. package/dist/config/rules/cloud_services/web_analytics.json +108 -0
  116. package/dist/config/rules/components/active_content.json +157 -0
  117. package/dist/config/rules/components/load_dll.json +66 -0
  118. package/dist/config/rules/cryptography/algorithm_implementation.json +62 -0
  119. package/dist/config/rules/cryptography/certificate.json +199 -0
  120. package/dist/config/rules/cryptography/ciphers.json +174 -0
  121. package/dist/config/rules/cryptography/crypto_currency.json +32 -0
  122. package/dist/config/rules/cryptography/encoding.json +20 -0
  123. package/dist/config/rules/cryptography/extended.json +220 -0
  124. package/dist/config/rules/cryptography/external_libraries.json +141 -0
  125. package/dist/config/rules/cryptography/hash_algorithm.json +98 -0
  126. package/dist/config/rules/cryptography/key_derivation.json +65 -0
  127. package/dist/config/rules/cryptography/protocol.json +156 -0
  128. package/dist/config/rules/cryptography/random.json +97 -0
  129. package/dist/config/rules/cryptography/weakssl.json +206 -0
  130. package/dist/config/rules/data_handling/compressed_files.json +18 -0
  131. package/dist/config/rules/data_handling/database.json +361 -0
  132. package/dist/config/rules/data_handling/deserialization.json +296 -0
  133. package/dist/config/rules/data_handling/json_parsing.json +49 -0
  134. package/dist/config/rules/data_handling/media_parsing.json +33 -0
  135. package/dist/config/rules/data_handling/pastebin.json +18 -0
  136. package/dist/config/rules/data_handling/xml_parsing.json +168 -0
  137. package/dist/config/rules/data_types/financial.json +106 -0
  138. package/dist/config/rules/data_types/media.json +48 -0
  139. package/dist/config/rules/data_types/secrets.json +91 -0
  140. package/dist/config/rules/data_types/sensitive.json +176 -0
  141. package/dist/config/rules/device_permissions/IOSPermissions.json +240 -0
  142. package/dist/config/rules/device_permissions/UWP.json +221 -0
  143. package/dist/config/rules/device_permissions/android_intents.json +599 -0
  144. package/dist/config/rules/frameworks/PHP.json +172 -0
  145. package/dist/config/rules/frameworks/build.json +189 -0
  146. package/dist/config/rules/frameworks/c.json +45 -0
  147. package/dist/config/rules/frameworks/csharp-nonMS.json +19 -0
  148. package/dist/config/rules/frameworks/java.json +291 -0
  149. package/dist/config/rules/frameworks/javascript.json +318 -0
  150. package/dist/config/rules/frameworks/logging.json +103 -0
  151. package/dist/config/rules/frameworks/microsoft.json +257 -0
  152. package/dist/config/rules/frameworks/python.json +274 -0
  153. package/dist/config/rules/frameworks/ruby.json +53 -0
  154. package/dist/config/rules/frameworks/rust.json +77 -0
  155. package/dist/config/rules/general/OSS_license.json +146 -0
  156. package/dist/config/rules/general/code_metrics.json +132 -0
  157. package/dist/config/rules/general/dependencies.json +199 -0
  158. package/dist/config/rules/general/hygiene.json +47 -0
  159. package/dist/config/rules/general/platforms.json +283 -0
  160. package/dist/config/rules/general/solutioninfo.json +378 -0
  161. package/dist/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  162. package/dist/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  163. package/dist/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  164. package/dist/config/rules/networkcomms/outbound_network.json +429 -0
  165. package/dist/config/rules/os/acl.json +250 -0
  166. package/dist/config/rules/os/dynamic_execution.json +359 -0
  167. package/dist/config/rules/os/file_io.json +468 -0
  168. package/dist/config/rules/os/process.json +179 -0
  169. package/dist/config/rules/os/setenv.json +270 -0
  170. package/dist/config/rules/os/system_registry.json +237 -0
  171. package/dist/config/rules/os/user_accts.json +34 -0
  172. package/dist/config/rules/security_feature/authentication.json +387 -0
  173. package/dist/config/rules/security_feature/authorization.json +148 -0
  174. package/dist/config/rules/test_frameworks/cpp_testing.json +194 -0
  175. package/dist/config/rules/test_frameworks/go_testing.json +18 -0
  176. package/dist/config/rules/test_frameworks/java_testing.json +720 -0
  177. package/dist/config/rules/test_frameworks/javascript_testing.json +724 -0
  178. package/dist/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  179. package/dist/config/rules/test_frameworks/php_testing.json +156 -0
  180. package/dist/config/rules/test_frameworks/powershell_testing.json +17 -0
  181. package/dist/config/rules/test_frameworks/python_testing.json +108 -0
  182. package/dist/config/rules/test_frameworks/ruby_testing.json +114 -0
  183. package/dist/config/rules/tools/pipeline.json +195 -0
  184. package/dist/config/rules/webapp/comms.json +89 -0
  185. package/dist/config/rules/webapp/headers.json +178 -0
  186. package/dist/config/rules/webapp/media.json +56 -0
  187. package/dist/config/rules/webapp/sessions.json +228 -0
  188. package/dist/config/rules/webapp/storage.json +215 -0
  189. package/dist/index.js +13 -0
  190. package/dist/insider.jar +0 -0
  191. package/dist/insider.js +7 -0
  192. package/dist/lib.js +21 -0
  193. package/docs/config/config.md +3 -0
  194. package/docs/config/ignore.md +3 -0
  195. package/docs/config/languages.md +3 -0
  196. package/docs/index.md +58 -0
  197. package/dxworks-site.json +13 -0
  198. package/gradle.properties +0 -0
  199. package/gradlew +240 -0
  200. package/gradlew.bat +91 -0
  201. package/insider/README.md +89 -0
  202. package/insider/config/.ignore +4 -0
  203. package/insider/config/comments.json +71 -0
  204. package/insider/config/fingerprints/_anomalies-full.json +116 -0
  205. package/insider/config/fingerprints/_extLibs.json +2555 -0
  206. package/insider/config/fingerprints/code_smells.json +94 -0
  207. package/insider/config/fingerprints/generated_code.json +17 -0
  208. package/insider/config/fingerprints/libraries.json +4667 -0
  209. package/insider/config/ignoredImports.txt +0 -0
  210. package/insider/config/insider-conf.properties +3 -0
  211. package/insider/config/rules/cloud_services/ad_networks.json +50 -0
  212. package/insider/config/rules/cloud_services/bigdata.json +21 -0
  213. package/insider/config/rules/cloud_services/cloud_hosting.json +398 -0
  214. package/insider/config/rules/cloud_services/data_storage.json +291 -0
  215. package/insider/config/rules/cloud_services/ecommerce.json +45 -0
  216. package/insider/config/rules/cloud_services/socialmedia.json +82 -0
  217. package/insider/config/rules/cloud_services/web_analytics.json +108 -0
  218. package/insider/config/rules/components/active_content.json +157 -0
  219. package/insider/config/rules/components/load_dll.json +66 -0
  220. package/insider/config/rules/cryptography/algorithm_implementation.json +62 -0
  221. package/insider/config/rules/cryptography/certificate.json +199 -0
  222. package/insider/config/rules/cryptography/ciphers.json +174 -0
  223. package/insider/config/rules/cryptography/crypto_currency.json +32 -0
  224. package/insider/config/rules/cryptography/encoding.json +20 -0
  225. package/insider/config/rules/cryptography/extended.json +220 -0
  226. package/insider/config/rules/cryptography/external_libraries.json +141 -0
  227. package/insider/config/rules/cryptography/hash_algorithm.json +98 -0
  228. package/insider/config/rules/cryptography/key_derivation.json +65 -0
  229. package/insider/config/rules/cryptography/protocol.json +156 -0
  230. package/insider/config/rules/cryptography/random.json +97 -0
  231. package/insider/config/rules/cryptography/weakssl.json +206 -0
  232. package/insider/config/rules/data_handling/compressed_files.json +18 -0
  233. package/insider/config/rules/data_handling/database.json +361 -0
  234. package/insider/config/rules/data_handling/deserialization.json +296 -0
  235. package/insider/config/rules/data_handling/json_parsing.json +49 -0
  236. package/insider/config/rules/data_handling/media_parsing.json +33 -0
  237. package/insider/config/rules/data_handling/pastebin.json +18 -0
  238. package/insider/config/rules/data_handling/xml_parsing.json +168 -0
  239. package/insider/config/rules/data_types/financial.json +106 -0
  240. package/insider/config/rules/data_types/media.json +48 -0
  241. package/insider/config/rules/data_types/secrets.json +91 -0
  242. package/insider/config/rules/data_types/sensitive.json +176 -0
  243. package/insider/config/rules/device_permissions/IOSPermissions.json +240 -0
  244. package/insider/config/rules/device_permissions/UWP.json +221 -0
  245. package/insider/config/rules/device_permissions/android_intents.json +599 -0
  246. package/insider/config/rules/frameworks/PHP.json +172 -0
  247. package/insider/config/rules/frameworks/build.json +189 -0
  248. package/insider/config/rules/frameworks/c.json +45 -0
  249. package/insider/config/rules/frameworks/csharp-nonMS.json +19 -0
  250. package/insider/config/rules/frameworks/java.json +291 -0
  251. package/insider/config/rules/frameworks/javascript.json +318 -0
  252. package/insider/config/rules/frameworks/logging.json +103 -0
  253. package/insider/config/rules/frameworks/microsoft.json +257 -0
  254. package/insider/config/rules/frameworks/python.json +274 -0
  255. package/insider/config/rules/frameworks/ruby.json +53 -0
  256. package/insider/config/rules/frameworks/rust.json +77 -0
  257. package/insider/config/rules/general/OSS_license.json +146 -0
  258. package/insider/config/rules/general/code_metrics.json +132 -0
  259. package/insider/config/rules/general/dependencies.json +199 -0
  260. package/insider/config/rules/general/hygiene.json +47 -0
  261. package/insider/config/rules/general/platforms.json +283 -0
  262. package/insider/config/rules/general/solutioninfo.json +378 -0
  263. package/insider/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  264. package/insider/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  265. package/insider/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  266. package/insider/config/rules/networkcomms/outbound_network.json +429 -0
  267. package/insider/config/rules/os/acl.json +250 -0
  268. package/insider/config/rules/os/dynamic_execution.json +359 -0
  269. package/insider/config/rules/os/file_io.json +468 -0
  270. package/insider/config/rules/os/process.json +179 -0
  271. package/insider/config/rules/os/setenv.json +270 -0
  272. package/insider/config/rules/os/system_registry.json +237 -0
  273. package/insider/config/rules/os/user_accts.json +34 -0
  274. package/insider/config/rules/security_feature/authentication.json +387 -0
  275. package/insider/config/rules/security_feature/authorization.json +148 -0
  276. package/insider/config/rules/test_frameworks/cpp_testing.json +194 -0
  277. package/insider/config/rules/test_frameworks/go_testing.json +18 -0
  278. package/insider/config/rules/test_frameworks/java_testing.json +720 -0
  279. package/insider/config/rules/test_frameworks/javascript_testing.json +724 -0
  280. package/insider/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  281. package/insider/config/rules/test_frameworks/php_testing.json +156 -0
  282. package/insider/config/rules/test_frameworks/powershell_testing.json +17 -0
  283. package/insider/config/rules/test_frameworks/python_testing.json +108 -0
  284. package/insider/config/rules/test_frameworks/ruby_testing.json +114 -0
  285. package/insider/config/rules/tools/pipeline.json +195 -0
  286. package/insider/config/rules/webapp/comms.json +89 -0
  287. package/insider/config/rules/webapp/headers.json +178 -0
  288. package/insider/config/rules/webapp/media.json +56 -0
  289. package/insider/config/rules/webapp/sessions.json +228 -0
  290. package/insider/config/rules/webapp/storage.json +215 -0
  291. package/insider/insider.bat +1 -0
  292. package/insider/insider.jar +0 -0
  293. package/insider/insider.sh +1 -0
  294. package/insider/languages.yml +3988 -0
  295. package/instrument.yml +37 -0
  296. package/languages.yml +3988 -0
  297. package/lib/index.js +13 -0
  298. package/lib/insider.js +7 -0
  299. package/lib/lib.js +21 -0
  300. package/lombok.config +2 -0
  301. package/mkdocs.yml +18 -0
  302. package/package.json +51 -0
  303. package/releaseNotes/v2.6.0.md +1 -0
  304. package/releaseNotes/v2.7.1.md +1 -0
  305. package/settings.gradle +2 -0
  306. package/src/main/java/org/dxworks/insider/ChronosTag.java +14 -0
  307. package/src/main/java/org/dxworks/insider/Insider.java +214 -0
  308. package/src/main/java/org/dxworks/insider/InsiderAnalysis.java +7 -0
  309. package/src/main/java/org/dxworks/insider/InsiderFile.java +125 -0
  310. package/src/main/java/org/dxworks/insider/InsiderOptions.java +78 -0
  311. package/src/main/java/org/dxworks/insider/InsiderResult.java +15 -0
  312. package/src/main/java/org/dxworks/insider/application/inspector/CodeRuleExtractor.java +14 -0
  313. package/src/main/java/org/dxworks/insider/application/inspector/CommentRuleExtractor.java +14 -0
  314. package/src/main/java/org/dxworks/insider/application/inspector/FileRuleExtractor.java +14 -0
  315. package/src/main/java/org/dxworks/insider/application/inspector/RuleExtractor.java +11 -0
  316. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Comment.java +18 -0
  317. package/src/main/java/org/dxworks/insider/application/inspector/dtos/CommentPattern.java +44 -0
  318. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Condition.java +15 -0
  319. package/src/main/java/org/dxworks/insider/application/inspector/dtos/InsiderPattern.java +149 -0
  320. package/src/main/java/org/dxworks/insider/application/inspector/dtos/PatternMatch.java +23 -0
  321. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Rule.java +61 -0
  322. package/src/main/java/org/dxworks/insider/application/inspector/services/CommentService.java +165 -0
  323. package/src/main/java/org/dxworks/insider/application/inspector/services/RuleService.java +54 -0
  324. package/src/main/java/org/dxworks/insider/commands/AddCommand.java +125 -0
  325. package/src/main/java/org/dxworks/insider/commands/AllFilesCommand.java +4 -0
  326. package/src/main/java/org/dxworks/insider/commands/ConvertCommand.java +55 -0
  327. package/src/main/java/org/dxworks/insider/commands/DetectCommand.java +42 -0
  328. package/src/main/java/org/dxworks/insider/commands/DiagnoseCommand.java +74 -0
  329. package/src/main/java/org/dxworks/insider/commands/ExtractCommand.java +35 -0
  330. package/src/main/java/org/dxworks/insider/commands/FindCommand.java +102 -0
  331. package/src/main/java/org/dxworks/insider/commands/HelpCommand.java +56 -0
  332. package/src/main/java/org/dxworks/insider/commands/IndentationCount.java +69 -0
  333. package/src/main/java/org/dxworks/insider/commands/InsiderCommand.java +71 -0
  334. package/src/main/java/org/dxworks/insider/commands/InspectCommand.java +98 -0
  335. package/src/main/java/org/dxworks/insider/commands/MeasureCommand.java +47 -0
  336. package/src/main/java/org/dxworks/insider/commands/NoFilesCommand.java +4 -0
  337. package/src/main/java/org/dxworks/insider/commands/VersionCommand.java +34 -0
  338. package/src/main/java/org/dxworks/insider/configuration/InsiderConfiguration.java +123 -0
  339. package/src/main/java/org/dxworks/insider/constants/InsiderConstants.java +19 -0
  340. package/src/main/java/org/dxworks/insider/depext/AbstractImportsProcessor.java +57 -0
  341. package/src/main/java/org/dxworks/insider/depext/CPPImportsProcessor.java +55 -0
  342. package/src/main/java/org/dxworks/insider/depext/CSharpImportsProcessor.java +53 -0
  343. package/src/main/java/org/dxworks/insider/depext/DependencyExtractor.java +105 -0
  344. package/src/main/java/org/dxworks/insider/depext/ImportItem.java +19 -0
  345. package/src/main/java/org/dxworks/insider/depext/ImportResult.java +32 -0
  346. package/src/main/java/org/dxworks/insider/depext/JavastackImportsProcessor.java +88 -0
  347. package/src/main/java/org/dxworks/insider/depext/VBImportsProcessor.java +41 -0
  348. package/src/main/java/org/dxworks/insider/exceptions/InsiderException.java +7 -0
  349. package/src/main/java/org/dxworks/insider/library/detector/C_ImportsContainer.java +73 -0
  350. package/src/main/java/org/dxworks/insider/library/detector/ImportsContainer.java +122 -0
  351. package/src/main/java/org/dxworks/insider/library/detector/JavaImportsContainer.java +63 -0
  352. package/src/main/java/org/dxworks/insider/library/detector/LibraryDetector.java +150 -0
  353. package/src/main/java/org/dxworks/insider/library/detector/LibraryDetectorLanguage.java +6 -0
  354. package/src/main/java/org/dxworks/insider/library/detector/model/PackagingUnit.java +26 -0
  355. package/src/main/java/org/dxworks/insider/technology/finder/LinguistService.java +79 -0
  356. package/src/main/java/org/dxworks/insider/technology/finder/converters/XmlToJsonConverter.java +41 -0
  357. package/src/main/java/org/dxworks/insider/technology/finder/exceptions/FingerprintParseException.java +7 -0
  358. package/src/main/java/org/dxworks/insider/technology/finder/model/Technology.java +73 -0
  359. package/src/main/java/org/dxworks/insider/technology/finder/model/json/JsonConfigurationDTO.java +14 -0
  360. package/src/main/java/org/dxworks/insider/technology/finder/model/json/TechnologyJsonDTO.java +66 -0
  361. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/CategoryXmlDTO.java +21 -0
  362. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/ConfigurationDataXmlDTO.java +17 -0
  363. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/FingerprintXmlDTO.java +17 -0
  364. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguageXmlDTO.java +20 -0
  365. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguagesXmlDTO.java +18 -0
  366. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/TechnologyXmlDTO.java +19 -0
  367. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/XmlConfigurationDTO.java +17 -0
  368. package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsParser.java +14 -0
  369. package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParser.java +57 -0
  370. package/src/main/java/org/dxworks/insider/technology/finder/parsers/JavaLibrariesCsvParser.java +71 -0
  371. package/src/main/java/org/dxworks/insider/technology/finder/parsers/JsonFingerprintParser.java +58 -0
  372. package/src/main/java/org/dxworks/insider/utils/FileUtils.java +45 -0
  373. package/src/main/java/org/dxworks/insider/utils/ImportUtils.java +21 -0
  374. package/src/main/java/org/dxworks/insider/utils/LibraryImport.java +17 -0
  375. package/src/main/java/org/dxworks/insider/utils/LibraryImportInOtherTechnology.java +30 -0
  376. package/src/main/java/org/dxworks/insider/utils/MapUtils.java +19 -0
  377. package/src/main/resources/insider-version +1 -0
  378. package/src/test/java/org/dxworks/insider/application/inspector/services/CommentServiceTest.java +40 -0
  379. package/src/test/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParserTest.java +15 -0
  380. package/src/test/java/org/dxworks/insider/utils/FileUtilsTest.java +31 -0
  381. package/src/test/java/org/dxworks/insider/utils/ImportUtilsTest.java +24 -0
  382. package/src/test/java/org/dxworks/insider/utils/transformers/JsonToCsvTransformerTest.java +18 -0
  383. package/src/test/resources/Test1.java +21 -0
  384. package/src/test/resources/Test2.java +21 -0
  385. package/src/test/resources/cobol/CM201M.CBL +88 -0
@@ -0,0 +1,73 @@
1
+ package org.dxworks.insider.library.detector;
2
+
3
+ import lombok.extern.slf4j.Slf4j;
4
+
5
+ import java.io.IOException;
6
+ import java.nio.file.Files;
7
+ import java.nio.file.Paths;
8
+ import java.util.HashMap;
9
+ import java.util.List;
10
+
11
+ @Slf4j
12
+ public class C_ImportsContainer extends ImportsContainer {
13
+
14
+ private static final String HEADERS_TO_LIBRARIES_MAPPING_FILE_NAME = "config/headersToLibraries.csv";
15
+
16
+ private static final String HEADERS_IMPORTED_OUTPUT_FILE_NAME = "Headers.csv";
17
+ private static final String FILES_WHIT_HEADERS_OUTPUT_FILE_NAME = "FilesWithHeaders.csv";
18
+ private static final String LIBRARIES_OUTPUT_FILE_NAME = "Libraries.csv";
19
+
20
+ private HashMap<String, String> headersToLibraries = new HashMap<>();
21
+
22
+
23
+ protected void configure() {
24
+
25
+ try {
26
+ List<String> stringList = Files.readAllLines(Paths.get(HEADERS_TO_LIBRARIES_MAPPING_FILE_NAME));
27
+ stringList.forEach(line ->
28
+ {
29
+ String[] pair = line.split("\t");
30
+ if (pair.length != 2) {
31
+ log.error("Incorrect input type for 'headersToLibraries.csv'. Headers and libraries have to be tab separated!");
32
+ return;
33
+ }
34
+ String header = pair[0];
35
+ String library = pair[1];
36
+
37
+ if (headersToLibraries.containsKey(header)) {
38
+ System.out.println("Header " + header + " present in 2 libraries: " + headersToLibraries.get(header) + " and " + library + "!");
39
+ return;
40
+ }
41
+
42
+ headersToLibraries.put(header, library);
43
+ });
44
+ } catch (IOException e) {
45
+ log.error("Could not read headersToLibraries.csv file!");
46
+ }
47
+ }
48
+
49
+ @Override
50
+ protected String getImportsResultFilePath() {
51
+ return HEADERS_IMPORTED_OUTPUT_FILE_NAME;
52
+ }
53
+
54
+ @Override
55
+ protected String getFilesWithImportsResultFile() {
56
+ return FILES_WHIT_HEADERS_OUTPUT_FILE_NAME;
57
+ }
58
+
59
+ @Override
60
+ protected String getPackagingUnitResultFilePath() {
61
+ return LIBRARIES_OUTPUT_FILE_NAME;
62
+ }
63
+
64
+ @Override
65
+ public boolean accepts(String importString) {
66
+ return false;
67
+ }
68
+
69
+ @Override
70
+ protected String getPackagingUnitFor(String importedFile) {
71
+ return headersToLibraries.get(importedFile);
72
+ }
73
+ }
@@ -0,0 +1,122 @@
1
+ package org.dxworks.insider.library.detector;
2
+
3
+ import lombok.extern.slf4j.Slf4j;
4
+ import org.dxworks.insider.configuration.InsiderConfiguration;
5
+ import org.dxworks.insider.library.detector.model.PackagingUnit;
6
+ import org.dxworks.insider.utils.MapUtils;
7
+
8
+ import java.io.IOException;
9
+ import java.nio.file.Files;
10
+ import java.nio.file.Paths;
11
+ import java.util.*;
12
+ import java.util.stream.Collectors;
13
+
14
+ import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
15
+
16
+ @Slf4j
17
+ public abstract class ImportsContainer {
18
+
19
+ protected Map<String, Integer> filesToNumberOfImportsMap = new HashMap<>();
20
+ protected Map<String, Integer> importedFilesToNumberOfTimesBeingImportedMap = new HashMap<>();
21
+
22
+ public ImportsContainer() {
23
+ configure();
24
+ }
25
+
26
+ protected abstract void configure();
27
+
28
+ public void addImport(String newImport) {
29
+ int newapp = 1;
30
+ Integer app = importedFilesToNumberOfTimesBeingImportedMap.get(newImport);
31
+ if (app != null)
32
+ newapp = app + 1;
33
+ importedFilesToNumberOfTimesBeingImportedMap.put(newImport, newapp);
34
+ }
35
+
36
+ public void addFile(String fileName, int importNo) {
37
+ filesToNumberOfImportsMap.put(fileName, importNo);
38
+ }
39
+
40
+ public void writeImportsToFile() {
41
+ importedFilesToNumberOfTimesBeingImportedMap = MapUtils.sortMapByValuesDesc(importedFilesToNumberOfTimesBeingImportedMap);
42
+
43
+ String content = getContentFromMap(importedFilesToNumberOfTimesBeingImportedMap);
44
+
45
+ content = "Packages,Appearances,\n" + content;
46
+
47
+ try {
48
+ Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getImportsResultFilePath()), content.getBytes());
49
+ } catch (IOException e) {
50
+ log.error("Could not write Imports file!", e);
51
+ }
52
+ }
53
+
54
+ private String getContentFromMap(Map<String, Integer> map) {
55
+ return map.entrySet().stream()
56
+ .map(entry -> String.join(",", entry.getKey(), entry.getValue().toString()))
57
+ .collect(Collectors.joining("\n"));
58
+ }
59
+
60
+ protected abstract String getImportsResultFilePath();
61
+
62
+ public void writeFilesWithImports() {
63
+ filesToNumberOfImportsMap = MapUtils.sortMapByValuesDesc(filesToNumberOfImportsMap);
64
+
65
+ String content = getContentFromMap(filesToNumberOfImportsMap);
66
+
67
+ content = "Files,Imports,\n" + content;
68
+ try {
69
+ Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getFilesWithImportsResultFile()), content.getBytes());
70
+ } catch (IOException e) {
71
+ log.error("Could not write Imports file!", e);
72
+ }
73
+ }
74
+
75
+ protected abstract String getFilesWithImportsResultFile();
76
+
77
+ public void writePackagingUnits() {
78
+ List<PackagingUnit> packagingUnitList = createPackagingUnitList();
79
+ packagingUnitList = packagingUnitList.stream()
80
+ .sorted(Comparator.comparing(PackagingUnit::getName).reversed())
81
+ .collect(Collectors.toList());
82
+
83
+ String content = packagingUnitList.stream()
84
+ .map(packagingUnit -> String.join(",",
85
+ packagingUnit.getName(),
86
+ packagingUnit.getFrequency() + "",
87
+ packagingUnit.getUnitNumber() + ""))
88
+ .collect(Collectors.joining("\n"));
89
+
90
+ content = "Packages,Appearances,Different Files\n" + content;
91
+
92
+ try {
93
+ Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getPackagingUnitResultFilePath()), content.getBytes());
94
+ } catch (IOException e) {
95
+ log.error("Could not write packaging unit result file file!", e);
96
+ }
97
+ }
98
+
99
+ protected abstract String getPackagingUnitResultFilePath();
100
+
101
+ public abstract boolean accepts(String importString);
102
+
103
+ protected List<PackagingUnit> createPackagingUnitList() {
104
+ List<PackagingUnit> packagingUnits = new ArrayList<>();
105
+
106
+ for (String importedFile : importedFilesToNumberOfTimesBeingImportedMap.keySet()) {
107
+ String packagingUnitName = getPackagingUnitFor(importedFile);
108
+ Integer frequency = importedFilesToNumberOfTimesBeingImportedMap.get(importedFile);
109
+
110
+ PackagingUnit packagingUnit = packagingUnits.stream().filter(packUnit -> packUnit.getName().equals(packagingUnitName)).findFirst().orElse(null);
111
+ if (packagingUnit == null) {
112
+ packagingUnit = new PackagingUnit(packagingUnitName, frequency);
113
+ packagingUnits.add(packagingUnit);
114
+ } else {
115
+ packagingUnit.increment(frequency);
116
+ }
117
+ }
118
+ return packagingUnits;
119
+ }
120
+
121
+ protected abstract String getPackagingUnitFor(String importedFile);
122
+ }
@@ -0,0 +1,63 @@
1
+ package org.dxworks.insider.library.detector;
2
+
3
+ import lombok.extern.slf4j.Slf4j;
4
+
5
+ import java.io.File;
6
+ import java.io.IOException;
7
+ import java.nio.file.Files;
8
+ import java.nio.file.Paths;
9
+ import java.util.ArrayList;
10
+ import java.util.List;
11
+
12
+ @Slf4j
13
+ public class JavaImportsContainer extends ImportsContainer {
14
+ private static final String IGNORED_IMPORTS_FILE_NAME = "config/ignoredImports.txt";
15
+
16
+ private static final String IMPORTS_OUTPUT_FILE_NAME = "Imports.csv";
17
+ private static final String FILES_WITH_IMPORTS_NAME = "FilesWithImports.csv";
18
+ private static final String PACKAGE_IMPORTS_OUTPUT_FILE_NAME = "PackageImports.csv";
19
+
20
+ private List<String> ignoredImports;
21
+
22
+ public void configure() {
23
+ try {
24
+ ignoredImports = Files.readAllLines(Paths.get(IGNORED_IMPORTS_FILE_NAME));
25
+ } catch (IOException e) {
26
+ log.error("Could not read ignored imports file!");
27
+ ignoredImports = new ArrayList<>();
28
+ }
29
+ }
30
+
31
+ @Override
32
+ protected String getImportsResultFilePath() {
33
+ return IMPORTS_OUTPUT_FILE_NAME;
34
+ }
35
+
36
+ @Override
37
+ protected String getFilesWithImportsResultFile() {
38
+ return FILES_WITH_IMPORTS_NAME;
39
+ }
40
+
41
+ @Override
42
+ protected String getPackagingUnitResultFilePath() {
43
+ return PACKAGE_IMPORTS_OUTPUT_FILE_NAME;
44
+ }
45
+
46
+ @Override
47
+ public boolean accepts(String importString) {
48
+ return ignoredImports.stream().noneMatch(importString::startsWith);
49
+ }
50
+
51
+ @Override
52
+ protected String getPackagingUnitFor(String importedFile) {
53
+ return getPackageName(importedFile);
54
+ }
55
+
56
+ private String getPackageName(String _import) {
57
+ int index = _import.lastIndexOf('.');
58
+ if (index == -1)
59
+ return _import;
60
+
61
+ return _import.substring(0, index);
62
+ }
63
+ }
@@ -0,0 +1,150 @@
1
+ package org.dxworks.insider.library.detector;
2
+
3
+ import lombok.extern.slf4j.Slf4j;
4
+ import org.dxworks.insider.InsiderAnalysis;
5
+ import org.dxworks.insider.InsiderFile;
6
+ import org.dxworks.insider.InsiderResult;
7
+ import org.dxworks.insider.technology.finder.LinguistService;
8
+ import org.dxworks.insider.utils.FileUtils;
9
+
10
+ import java.util.List;
11
+ import java.util.regex.Matcher;
12
+ import java.util.regex.Pattern;
13
+ import java.util.stream.Collectors;
14
+ import java.util.stream.Stream;
15
+
16
+ import static java.util.Arrays.asList;
17
+
18
+ @Slf4j
19
+ public class LibraryDetector implements InsiderAnalysis {
20
+
21
+ private static final String JAVA_LANGUAGE = "java";
22
+ private static final List<String> C_LIKE_LANGUAGES = asList("c", "c++", "objective-c", "objective-c++");
23
+ public static final List<String> ACCEPTED_LANGUAGES = Stream.concat(
24
+ Stream.of(JAVA_LANGUAGE),
25
+ C_LIKE_LANGUAGES.stream())
26
+ .collect(Collectors.toList());
27
+
28
+ private LinguistService linguistService = LinguistService.getInstance();
29
+ private ImportsContainer importsContainer;
30
+ private LibraryDetectorLanguage language;
31
+
32
+ public LibraryDetector(LibraryDetectorLanguage language) {
33
+ this.language = language;
34
+ if (language == LibraryDetectorLanguage.C_LIKE)
35
+ importsContainer = new C_ImportsContainer();
36
+ if (language == LibraryDetectorLanguage.JAVA)
37
+ importsContainer = new JavaImportsContainer();
38
+ }
39
+
40
+ public InsiderResult analyze(InsiderFile file) {
41
+ int importNumber = 0;
42
+ String content = file.getContent();
43
+
44
+ content = FileUtils.removeComments(content);
45
+
46
+ if (file.getExtension().equals("java") && !"package-info.java".equalsIgnoreCase(file.getName())) {
47
+ importNumber = analyzeForJava(content, file.getPath());
48
+ } else if (file.getExtension().equals("m") || file.getExtension().equals("mm") || file.getExtension()
49
+ .equals("h") || file.getExtension().equals("cpp") || file.getExtension().equals("c")) {
50
+ importNumber = analyzeForC_Like(content);
51
+ }
52
+
53
+ if (importNumber > 0) {
54
+ importsContainer.addFile(file.getName(), importNumber);
55
+ }
56
+
57
+ return null;
58
+ }
59
+
60
+ private int analyzeForC_Like(String content) {
61
+ int importNumber = 0;
62
+ importNumber += getImportNumberForC_Like(content, "(#(include|import)[ \t]*<[^>]*>)", line ->
63
+ {
64
+ int firstIndex = line.indexOf('<');
65
+ int lastIndex = line.indexOf('>');
66
+ return line.substring(firstIndex + 1, lastIndex);
67
+ });
68
+
69
+ importNumber += getImportNumberForC_Like(content, "(#(include|import)[ \t]*\"[^\"]*\")", line ->
70
+ {
71
+ int firstIndex = line.indexOf('\"');
72
+ int lastIndex = line.indexOf('\"', firstIndex + 1);
73
+ return line.substring(firstIndex + 1, lastIndex);
74
+ });
75
+
76
+ return importNumber;
77
+ }
78
+
79
+ private int getImportNumberForC_Like(String content, String usedPattern,
80
+ C_LikeImportExtractor cLikeImportExtractor) {
81
+ int importNumber = 0;
82
+ Pattern pattern = Pattern.compile(usedPattern);
83
+ Matcher matcher = pattern.matcher(content);
84
+ while (matcher.find()) {
85
+ String importLine = content.substring(matcher.start(), matcher.end());
86
+ String importString = cLikeImportExtractor.getImportedHeaderFromLine(importLine);
87
+
88
+ int index = importString.lastIndexOf('/');
89
+ importString = importString.substring(++index);
90
+
91
+ if (importsContainer.accepts(importString)) {
92
+ importsContainer.addImport(importString);
93
+ importNumber++;
94
+
95
+ }
96
+ }
97
+ return importNumber;
98
+ }
99
+
100
+ private int analyzeForJava(String content, String filePath) {
101
+ int firstAcc = content.indexOf("{");
102
+ if (firstAcc == -1) {
103
+ log.warn("Java file " + filePath + " has no class / viable content!");
104
+ return 0;
105
+ }
106
+ content = content.substring(0, firstAcc);
107
+
108
+ int importNumber = 0;
109
+
110
+ Pattern pattern = Pattern.compile("(import [^;]*;)");
111
+ Matcher matcher = pattern.matcher(content);
112
+ while (matcher.find()) {
113
+ String importString = content.substring(matcher.start() + 7, matcher.end() - 1).trim();
114
+
115
+ if (importString.indexOf("static ") == 0 || importString.indexOf("static\t") == 0) {
116
+ importString = importString.substring(6).trim();
117
+ }
118
+
119
+ if (importsContainer.accepts(importString)) {
120
+ importsContainer.addImport(importString);
121
+ importNumber++;
122
+ }
123
+ }
124
+
125
+ return importNumber;
126
+ }
127
+
128
+ @Override
129
+ public boolean accepts(InsiderFile insiderFile) {
130
+ if (language == LibraryDetectorLanguage.JAVA) {
131
+ return linguistService.hasAcceptedExtension(insiderFile, List.of(JAVA_LANGUAGE));
132
+ }
133
+
134
+ if (language == LibraryDetectorLanguage.C_LIKE) {
135
+ return linguistService.hasAcceptedExtension(insiderFile, C_LIKE_LANGUAGES);
136
+ }
137
+
138
+ return false;
139
+ }
140
+
141
+ public void generateResults() {
142
+ importsContainer.writeFilesWithImports();
143
+ importsContainer.writeImportsToFile();
144
+ importsContainer.writePackagingUnits();
145
+ }
146
+
147
+ private interface C_LikeImportExtractor {
148
+ String getImportedHeaderFromLine(String line);
149
+ }
150
+ }
@@ -0,0 +1,6 @@
1
+ package org.dxworks.insider.library.detector;
2
+
3
+ public enum LibraryDetectorLanguage {
4
+ C_LIKE,
5
+ JAVA
6
+ }
@@ -0,0 +1,26 @@
1
+ package org.dxworks.insider.library.detector.model;
2
+
3
+ import lombok.Data;
4
+ import lombok.EqualsAndHashCode;
5
+
6
+ @Data
7
+ @EqualsAndHashCode(onlyExplicitlyIncluded = true)
8
+ public class PackagingUnit {
9
+
10
+ @EqualsAndHashCode.Include
11
+ protected String name;
12
+
13
+ protected int frequency;
14
+ protected int unitNumber;
15
+
16
+ public PackagingUnit(String name, int frequency) {
17
+ this.name = name;
18
+ this.frequency = frequency;
19
+ this.unitNumber = 1;
20
+ }
21
+
22
+ public void increment(int frequency) {
23
+ this.frequency += frequency;
24
+ unitNumber++;
25
+ }
26
+ }
@@ -0,0 +1,79 @@
1
+ package org.dxworks.insider.technology.finder;
2
+
3
+ import lombok.NonNull;
4
+ import org.dxworks.insider.InsiderFile;
5
+ import org.dxworks.insider.configuration.InsiderConfiguration;
6
+ import org.dxworks.linguist.Language;
7
+ import org.dxworks.linguist.Linguist;
8
+
9
+ import java.nio.file.Path;
10
+ import java.util.List;
11
+ import java.util.stream.Collectors;
12
+
13
+ import static org.dxworks.insider.constants.InsiderConstants.DEFAULT_LINGUIST_FILE;
14
+
15
+ public class LinguistService {
16
+
17
+ private static final LinguistService _instance = new LinguistService();
18
+ private Linguist linguist;
19
+ private List<String> programmingLanguages;
20
+
21
+ private LinguistService() {
22
+ }
23
+
24
+ public static LinguistService getInstance() {
25
+ return _instance;
26
+ }
27
+
28
+ public boolean hasAcceptedExtension(InsiderFile insiderFile) {
29
+ return hasAcceptedExtension(insiderFile.getPath());
30
+ }
31
+
32
+ public boolean hasAcceptedExtension(InsiderFile insiderFile, @NonNull List<String> languages) {
33
+ return hasAcceptedExtension(insiderFile.getPath(), languages);
34
+ }
35
+
36
+ public boolean hasAcceptedExtension(String path) {
37
+ return hasAcceptedExtension(path, InsiderConfiguration.getInstance().getLanguages());
38
+ }
39
+
40
+ public boolean hasAcceptedExtension(String path, @NonNull List<String> languages) {
41
+ return linguist.isOf(path, languages.toArray(new String[0]));
42
+ }
43
+
44
+ public List<String> getLanguagesForFile(InsiderFile file) {
45
+ return linguist.getLanguages(file.getPath()).stream()
46
+ .map(Language::getName)
47
+ .collect(Collectors.toList());
48
+ }
49
+
50
+ public boolean containsLanguage(String lang) {
51
+ return linguist.isRegistered(lang);
52
+ }
53
+
54
+ private List<String> getAllProgrammingLanguages() {
55
+ return linguist.getLanguages().values().stream()
56
+ .filter(lang -> "programming".equalsIgnoreCase(lang.getType()))
57
+ .map(Language::getName)
58
+ .collect(Collectors.toList());
59
+ }
60
+
61
+
62
+ public List<String> getProgrammingLanguages() {
63
+ return programmingLanguages;
64
+ }
65
+
66
+ public void initLinguist(String linguistFile) {
67
+ if (linguistFile == null) {
68
+ try {
69
+ linguist = new Linguist();
70
+ } catch (Exception e) {
71
+ linguist = new Linguist(Path.of(DEFAULT_LINGUIST_FILE).toFile());
72
+ }
73
+ } else {
74
+ linguist = new Linguist(Path.of(linguistFile).toFile());
75
+ }
76
+ programmingLanguages = getAllProgrammingLanguages();
77
+ }
78
+
79
+ }
@@ -0,0 +1,41 @@
1
+ package org.dxworks.insider.technology.finder.converters;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import lombok.extern.slf4j.Slf4j;
5
+ import org.dxworks.insider.technology.finder.model.Technology;
6
+ import org.dxworks.insider.technology.finder.model.json.JsonConfigurationDTO;
7
+ import org.dxworks.insider.technology.finder.model.json.TechnologyJsonDTO;
8
+ import org.dxworks.insider.technology.finder.parsers.FingerprintsXmlParser;
9
+
10
+ import java.io.FileWriter;
11
+ import java.io.IOException;
12
+ import java.util.List;
13
+ import java.util.stream.Collectors;
14
+
15
+ @Slf4j
16
+ public class XmlToJsonConverter {
17
+
18
+ public static void main(String[] args) {
19
+ XmlToJsonConverter xmlToJsonConverter = new XmlToJsonConverter();
20
+
21
+ xmlToJsonConverter.convertXmlFileTOJson("config\\libraries.xml");
22
+
23
+ }
24
+
25
+ public void convertXmlFileTOJson(String xmlFilePath) {
26
+ FingerprintsXmlParser fingerprintsXmlParser = new FingerprintsXmlParser();
27
+ List<Technology> technologies = fingerprintsXmlParser.parseTechnologiesFile(xmlFilePath);
28
+
29
+ List<TechnologyJsonDTO> technologyJsonDTOS = technologies.stream().map(TechnologyJsonDTO::fromTechnology).collect(Collectors.toList());
30
+
31
+ JsonConfigurationDTO jsonConfigurationDTO = new JsonConfigurationDTO();
32
+ jsonConfigurationDTO.setTechnologies(technologyJsonDTOS);
33
+
34
+ ObjectMapper objectMapper = new ObjectMapper();
35
+ try {
36
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(xmlFilePath.substring(0, xmlFilePath.lastIndexOf(".xml")) + ".json"), jsonConfigurationDTO);
37
+ } catch (IOException e) {
38
+ log.error("Could not write JSON file when converting from XML!", e);
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,7 @@
1
+ package org.dxworks.insider.technology.finder.exceptions;
2
+
3
+ public class FingerprintParseException extends RuntimeException {
4
+ public FingerprintParseException(Throwable cause) {
5
+ super(cause);
6
+ }
7
+ }
@@ -0,0 +1,73 @@
1
+ package org.dxworks.insider.technology.finder.model;
2
+
3
+ import lombok.Data;
4
+ import lombok.NoArgsConstructor;
5
+ import org.dxworks.insider.InsiderAnalysis;
6
+ import org.dxworks.insider.InsiderFile;
7
+ import org.dxworks.insider.InsiderResult;
8
+ import org.dxworks.insider.technology.finder.LinguistService;
9
+
10
+ import java.util.List;
11
+ import java.util.regex.Matcher;
12
+ import java.util.regex.Pattern;
13
+ import java.util.stream.Collectors;
14
+
15
+ @Data
16
+ @NoArgsConstructor
17
+ public class Technology implements InsiderAnalysis {
18
+
19
+ private final LinguistService linguistService = LinguistService.getInstance();
20
+ private String category;
21
+ private String name;
22
+ private List<String> languages;
23
+ private List<String> extensions;
24
+ private List<String> fingerprints;
25
+ private List<Pattern> patterns;
26
+
27
+ public Technology(String category, String name, List<String> languages, List<String> extensions,
28
+ List<String> fingerprints) {
29
+ this.category = category;
30
+ this.name = name;
31
+ this.languages = languages;
32
+ this.extensions = extensions;
33
+ this.fingerprints = fingerprints;
34
+ patterns = fingerprints.stream().map(Pattern::compile).collect(Collectors.toList());
35
+ }
36
+
37
+ @Override
38
+ public InsiderResult analyze(InsiderFile insiderFile) {
39
+ if (!accepts(insiderFile))
40
+ return null;
41
+
42
+ int totalOccurrences = patterns.parallelStream()
43
+ .mapToInt(pattern -> getPatternOccurrencesInFile(insiderFile, pattern))
44
+ .sum();
45
+
46
+ return InsiderResult.builder()
47
+ .file(insiderFile.getFullyQualifiedName().toString())
48
+ .category(category)
49
+ .name(name)
50
+ .value(totalOccurrences)
51
+ .build();
52
+ }
53
+
54
+ @Override
55
+ public boolean accepts(InsiderFile insiderFile) {
56
+ return linguistService.hasAcceptedExtension(insiderFile, languages)
57
+ || extensions.contains(insiderFile.getExtension());
58
+ }
59
+
60
+ private int getPatternOccurrencesInFile(InsiderFile insiderFile, Pattern pattern) {
61
+ int fileOcc = 0;
62
+ Matcher matcher = pattern.matcher(insiderFile.getContent());
63
+
64
+ while (matcher.find())
65
+ fileOcc++;
66
+ return fileOcc;
67
+ }
68
+
69
+ public void setFingerprints(List<String> fingerprints) {
70
+ this.fingerprints = fingerprints;
71
+ patterns = fingerprints.stream().map(Pattern::compile).collect(Collectors.toList());
72
+ }
73
+ }
@@ -0,0 +1,14 @@
1
+ package org.dxworks.insider.technology.finder.model.json;
2
+
3
+ import lombok.Data;
4
+
5
+ import java.util.List;
6
+
7
+ @Data
8
+ public class JsonConfigurationDTO {
9
+ private String outputFileName;
10
+
11
+ private boolean useProjectPrefix = true;
12
+
13
+ private List<TechnologyJsonDTO> technologies;
14
+ }