blufin 0.1.0

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 (113) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bf +5 -0
  3. data/bin/blufin +5 -0
  4. data/lib/blufin.rb +245 -0
  5. data/lib/core/code_scanners/common/scanner_common.rb +83 -0
  6. data/lib/core/code_scanners/common/scanner_java.rb +106 -0
  7. data/lib/core/code_scanners/scanner_java_embedded_objects.rb +386 -0
  8. data/lib/core/code_scanners/scanner_java_enums.rb +125 -0
  9. data/lib/core/code_scanners/scanner_java_source.rb +29 -0
  10. data/lib/core/code_scanners/scanner_java_tests.rb +157 -0
  11. data/lib/core/error_handling/schema_error.rb +9 -0
  12. data/lib/core/error_handling/sql_error.rb +21 -0
  13. data/lib/core/error_handling/sql_error_handler.rb +149 -0
  14. data/lib/core/error_handling/yml_error.rb +21 -0
  15. data/lib/core/error_handling/yml_error_handler.rb +437 -0
  16. data/lib/core/mysql.rb +347 -0
  17. data/lib/core/opt.rb +21 -0
  18. data/lib/core/site/site.rb +26 -0
  19. data/lib/core/site/site_auth.rb +88 -0
  20. data/lib/core/site/site_embedded.rb +27 -0
  21. data/lib/core/site/site_ports.rb +9 -0
  22. data/lib/core/site/site_resolver.rb +276 -0
  23. data/lib/core/site/site_services.rb +162 -0
  24. data/lib/core/site/site_ui.rb +16 -0
  25. data/lib/core/yml/config/yml_config_validator.rb +219 -0
  26. data/lib/core/yml/maven/yml_maven_validator.rb +1132 -0
  27. data/lib/core/yml/resource/yml_resource_validator.rb +154 -0
  28. data/lib/core/yml/schema/yml_schema_flags.rb +9 -0
  29. data/lib/core/yml/schema/yml_schema_validator.rb +1850 -0
  30. data/lib/core/yml/yml_cache_handler.rb +115 -0
  31. data/lib/core/yml/yml_common.rb +487 -0
  32. data/lib/core/yml/yml_meta_writer_base.rb +300 -0
  33. data/lib/core/yml/yml_outputter.rb +307 -0
  34. data/lib/core/yml/yml_validator_base.rb +630 -0
  35. data/lib/core/yml_writers/yml_configuration_writer.rb +40 -0
  36. data/lib/core/yml_writers/yml_java_api_resource_writer.rb +348 -0
  37. data/lib/core/yml_writers/yml_java_cron_type_writer.rb +113 -0
  38. data/lib/core/yml_writers/yml_java_css_dependency_writer.rb +59 -0
  39. data/lib/core/yml_writers/yml_java_dao_writer.rb +364 -0
  40. data/lib/core/yml_writers/yml_java_dto_writer.rb +251 -0
  41. data/lib/core/yml_writers/yml_java_embedded_object_writer.rb +968 -0
  42. data/lib/core/yml_writers/yml_java_enum_writer.rb +161 -0
  43. data/lib/core/yml_writers/yml_java_js_dependency_writer.rb +59 -0
  44. data/lib/core/yml_writers/yml_java_message_type_writer.rb +106 -0
  45. data/lib/core/yml_writers/yml_java_meta_writer.rb +173 -0
  46. data/lib/core/yml_writers/yml_java_model_writer.rb +510 -0
  47. data/lib/core/yml_writers/yml_java_pom_writer.rb +1050 -0
  48. data/lib/core/yml_writers/yml_java_resource_data_writer.rb +251 -0
  49. data/lib/core/yml_writers/yml_java_sdk_writer.rb +732 -0
  50. data/lib/core/yml_writers/yml_java_validator_writer.rb +280 -0
  51. data/lib/core/yml_writers/yml_java_worker_writer.rb +81 -0
  52. data/lib/core/yml_writers/yml_sql_structure_writer.rb +307 -0
  53. data/lib/core/yml_writers/yml_sql_template_writer.rb +243 -0
  54. data/lib/core/yml_writers/yml_vue_service_writer.rb +170 -0
  55. data/lib/core/yml_writers/yml_writer_base.rb +114 -0
  56. data/lib/routes/api_list.rb +35 -0
  57. data/lib/routes/api_meta.rb +59 -0
  58. data/lib/routes/build.rb +46 -0
  59. data/lib/routes/create/create_api.rb +35 -0
  60. data/lib/routes/create/create_ui.rb +84 -0
  61. data/lib/routes/export.rb +56 -0
  62. data/lib/routes/generate/generate_api.rb +225 -0
  63. data/lib/routes/generate/generate_img_favicon.rb +56 -0
  64. data/lib/routes/generate/generate_img_landing.rb +94 -0
  65. data/lib/routes/generate/generate_lambda.rb +43 -0
  66. data/lib/routes/lint.rb +35 -0
  67. data/lib/routes/mysql_reset.rb +43 -0
  68. data/lib/routes/release_blufin.rb +351 -0
  69. data/lib/routes/run.rb +35 -0
  70. data/lib/version.rb +1 -0
  71. data/opt/README.MD +2 -0
  72. data/opt/config/schema.yml +73 -0
  73. data/opt/config/template.yml +25 -0
  74. data/opt/sql/data/config/data-client.sql +7 -0
  75. data/opt/sql/data/config/data-db-configuration-property.sql +47 -0
  76. data/opt/sql/data/config/data-db-configuration.sql +9 -0
  77. data/opt/sql/data/config/data-db.sql +175 -0
  78. data/opt/sql/data/config/data-profile-api.sql +47 -0
  79. data/opt/sql/data/config/data-profile-cron.sql +0 -0
  80. data/opt/sql/data/config/data-profile-worker.sql +0 -0
  81. data/opt/sql/data/config/data-profile.sql +87 -0
  82. data/opt/sql/data/config/data-project.sql +95 -0
  83. data/opt/sql/structure/blufin-master-structure-fks.sql +65 -0
  84. data/opt/sql/structure/blufin-master-structure.sql +97 -0
  85. data/opt/sql/structure/blufin-mock-structure-fks.sql +38 -0
  86. data/opt/sql/structure/blufin-mock-structure.sql +98 -0
  87. data/opt/sql/templates/config/template-client.sql +7 -0
  88. data/opt/sql/templates/config/template-db-configuration-property.sql +11 -0
  89. data/opt/sql/templates/config/template-db-configuration.sql +9 -0
  90. data/opt/sql/templates/config/template-db.sql +21 -0
  91. data/opt/sql/templates/config/template-profile-api.sql +11 -0
  92. data/opt/sql/templates/config/template-profile-cron.sql +7 -0
  93. data/opt/sql/templates/config/template-profile-worker.sql +7 -0
  94. data/opt/sql/templates/config/template-profile.sql +21 -0
  95. data/opt/sql/templates/config/template-project.sql +23 -0
  96. data/opt/yml/api/schema/config/client.yml +14 -0
  97. data/opt/yml/api/schema/config/db.yml +45 -0
  98. data/opt/yml/api/schema/config/db_configuration.yml +22 -0
  99. data/opt/yml/api/schema/config/db_configuration_property.yml +22 -0
  100. data/opt/yml/api/schema/config/profile.yml +53 -0
  101. data/opt/yml/api/schema/config/profile_api.yml +22 -0
  102. data/opt/yml/api/schema/config/profile_cron.yml +14 -0
  103. data/opt/yml/api/schema/config/profile_worker.yml +14 -0
  104. data/opt/yml/api/schema/config/project.yml +48 -0
  105. data/opt/yml/api/schema/mock/mock.yml +99 -0
  106. data/opt/yml/api/schema/mock/mock_nested_if_enum.yml +16 -0
  107. data/opt/yml/api/schema/mock/mock_nested_if_enum_system.yml +16 -0
  108. data/opt/yml/api/schema/mock/mock_nested_linked.yml +43 -0
  109. data/opt/yml/api/schema/mock/mock_nested_multiple.yml +61 -0
  110. data/opt/yml/api/schema/mock/mock_nested_single.yml +67 -0
  111. data/opt/yml/api/schema/mock/mock_nested_single_super_deep.yml +32 -0
  112. data/opt/yml/api/schema/mock/mock_nested_single_super_super_deep.yml +17 -0
  113. metadata +240 -0
@@ -0,0 +1,27 @@
1
+ module Blufin
2
+
3
+ class SiteEmbedded
4
+
5
+ @@embedded_data = nil
6
+
7
+ # Only needs to be initialized once.
8
+ # @return void
9
+ def self.init(embedded_data)
10
+
11
+ return unless @@embedded_data.nil?
12
+
13
+ raise RuntimeError, "Expected Hash, instead got: #{embedded_data.class}" unless embedded_data.is_a?(Hash)
14
+
15
+ @@embedded_data = embedded_data
16
+
17
+ end
18
+
19
+ # Gets the Data Hash
20
+ # @return Hash
21
+ def self.get_data
22
+ @@embedded_data
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,9 @@
1
+ module Blufin
2
+
3
+ class SitePorts
4
+
5
+ attr_accessor :api, :api_admin, :cron, :cron_admin, :worker, :worker_admin, :port_range_raw, :port_numbers_used
6
+
7
+ end
8
+
9
+ end
@@ -0,0 +1,276 @@
1
+ module Blufin
2
+
3
+ class SiteResolver
4
+
5
+ SITE = 'site'
6
+ SITE_NAME = 'name'
7
+ SITE_TITLE = 'title'
8
+ SITE_ALIAS = 'alias'
9
+ SITE_PORTS = 'ports'
10
+
11
+ PORT_RANGE_CRITERIA_ARRAY = ["\xe2\x80\x94 Consist of two 4-digit numbers separated by a '-' hyphen", "\xe2\x80\x94 Have a numerical difference of exactly 19.", "\xe2\x80\x94 The first number in the set must be divisible by 10.", nil, "An example of a valid #{Blufin::Terminal::format_highlight('port-range')} would be \xe2\x86\x92 #{Blufin::Terminal::format_action('6000-6019')}"]
12
+
13
+ @sitemap = nil
14
+ @site_valid = {}
15
+
16
+ # Gets the PATH to the site repository.
17
+ # @return String
18
+ def self.get_site_location(site)
19
+ validate_site(site)
20
+ get_sitemap[site][:site_location]
21
+ end
22
+
23
+ # Gets the site domain.
24
+ # @return String
25
+ def self.get_site_domain(site)
26
+ validate_site(site)
27
+ get_sitemap[site][:site_domain]
28
+ end
29
+
30
+ # Gets the (repository) name of the site.
31
+ # @return String
32
+ def self.get_site_name(site)
33
+ validate_site(site)
34
+ get_sitemap[site][:site_name]
35
+ end
36
+
37
+ # Gets the (repository) name of the site in camel-cased version.
38
+ # @return String
39
+ def self.get_site_name_camel_cased(site)
40
+ validate_site(site)
41
+ get_sitemap[site][:site_name_camel_cased]
42
+ end
43
+
44
+ # Gets the full name of the site.
45
+ # @return String
46
+ def self.get_site_title(site)
47
+ validate_site(site)
48
+ get_sitemap[site][:site_title]
49
+ end
50
+
51
+ # Gets an object containing all the site ports.
52
+ # @return Blufin::SitePorts
53
+ def self.get_site_ports(site)
54
+ validate_site(site)
55
+ get_sitemap[site][:site_ports]
56
+ end
57
+
58
+ # Checks if the site exists and takes 'aliases' into account.
59
+ # Throws ERROR if site doesn'ts exist.
60
+ # @return String
61
+ def self.validate_site(site, location = true)
62
+ if @site_valid[site].nil?
63
+ sitemap = get_sitemap
64
+ if !sitemap.keys.include?(site) || site.nil?
65
+ Blufin::Terminal::error("An API by the name \"#{Blufin::Terminal::format_highlight(site.nil? ? '[nil]' : site)}\" cannot be found \xe2\x80\x94 available APIs are:", get_available_apis, true)
66
+ else
67
+ validate_location(get_sitemap[site][:site_location]) if location
68
+ validate_ports_internal(get_sitemap[site][:site_ports].port_range_raw)
69
+ @site_valid[site] = true
70
+ site
71
+ end
72
+ else
73
+ site
74
+ end
75
+ end
76
+
77
+ # Get an array of available APIs (for use in Blufin::Terminal messages).
78
+ # @return Array
79
+ def self.get_available_apis
80
+ apis_names = []
81
+ apis_output = []
82
+ apis = Blufin::Projects::get_apis
83
+ apis.each { |api| apis_names << api[1][Blufin::Projects::PROJECT_NAME] }
84
+ api_max_text = apis_names.max_by(&:length).length
85
+ apis.each do |api|
86
+ api = api[1]
87
+ apis_output << "\x1B[38;5;154m#{api[Blufin::Projects::PROJECT_NAME].rjust(api_max_text, ' ')}\x1B[0m\x1B[38;5;240m \xe2\x86\x92 #{get_path_sites}/#{api[Blufin::Projects::PROJECT_NAME]} \x1B[38;5;67m[#{api[Blufin::Projects::PORT_RANGE]}] \x1B[38;5;154m#{api[Blufin::Projects::ALIAS]}"
88
+ end
89
+ apis_output
90
+ end
91
+
92
+ # Get an Array of Hashes used for validation, listing purposes.
93
+ # @return Array (of Hash)
94
+ def self.get_site_details_for_validation
95
+ validation_details = {
96
+ :existing_locations => [],
97
+ :existing_titles => [],
98
+ :existing_aliases => [],
99
+ :existing_names => [],
100
+ :existing_ports => []
101
+ }
102
+ get_sitemap(false).each do |key, site|
103
+ nil if key
104
+ validation_details[:existing_locations] << site[:site_location].to_s
105
+ validation_details[:existing_titles] << site[:site_title]
106
+ validation_details[:existing_aliases] << site[:site_alias]
107
+ validation_details[:existing_names] << site[:site_name]
108
+ validation_details[:existing_names_camel_cased] << site[:site_name_camel_cased]
109
+ validation_details[:existing_ports] << site[:site_ports].port_range_raw
110
+ end
111
+ validation_details[:existing_locations].uniq!
112
+ validation_details[:existing_titles].uniq!
113
+ validation_details[:existing_aliases].uniq!
114
+ validation_details[:existing_names].uniq!
115
+ validation_details[:existing_ports].uniq!
116
+ validation_details
117
+ end
118
+
119
+ # Validates ports. Needs to be in form of -> 6000-6019
120
+ # @return boolean
121
+ def self.validate_ports(site_ports)
122
+ return false unless site_ports.is_a?(String) && site_ports.include?('-')
123
+ valid = true
124
+ site_ports_split = site_ports.split('-')
125
+ if site_ports_split.length == 2
126
+ site_ports_split.each { |site_port| valid = false unless site_port =~ /\d{4}/ }
127
+ valid = false unless site_ports_split[1].to_i - site_ports_split[0].to_i == 19
128
+ valid = false unless site_ports_split[0].to_i % 10 == 0
129
+ else
130
+ valid = false
131
+ end
132
+ valid
133
+ end
134
+
135
+ # Invalidates the sitemap so data will have to be re-retrieved.
136
+ # @return void
137
+ def self.invalidate_sitemap
138
+ @sitemap = nil
139
+ end
140
+
141
+ private
142
+
143
+ # Generates the sitemap (only once during each script-run).
144
+ # If 'with_aliases' == TRUE, returns aliases as keys with identical data to original site-name.
145
+ # @return void
146
+ def self.get_sitemap(with_aliases = true)
147
+ if @sitemap.nil?
148
+ @sitemap = {}
149
+ Blufin::Projects::get_apis.each do |project|
150
+ project = project[1]
151
+ sl = "#{get_path_sites}/#{project[Blufin::Projects::PROJECT_NAME]}"
152
+ @sitemap[project[Blufin::Projects::PROJECT_NAME]] = {
153
+ :site_location => sl,
154
+ :site_title => project[Blufin::Projects::TITLE],
155
+ :site_alias => project[Blufin::Projects::ALIAS],
156
+ :site_name => project[Blufin::Projects::PROJECT_NAME],
157
+ :site_name_camel_cased => project[Blufin::Projects::PROJECT_NAME_PASCAL_CASE],
158
+ :site_domain => project[Blufin::Projects::DOMAIN],
159
+ :site_ports => convert_site_ports_to_object(project[Blufin::Projects::PORT_RANGE])
160
+ }
161
+ @sitemap[project[Blufin::Projects::ALIAS]] = @sitemap[project[Blufin::Projects::PROJECT_NAME]] if with_aliases
162
+ end
163
+ end
164
+ @sitemap
165
+ end
166
+
167
+ # Converts 6000-6019 to a Blufin::SitePorts object.
168
+ # @return Blufin::SitePorts
169
+ def self.convert_site_ports_to_object(site_ports)
170
+ raise RuntimeError, "Expected a String (port-range), instead got:#{site_ports.class}" unless site_ports.is_a?(String)
171
+ site_ports_split = site_ports.split('-')
172
+ base_port = site_ports_split[0].to_i
173
+ spo = Blufin::SitePorts.new
174
+ spo.port_range_raw = site_ports
175
+ spo.port_numbers_used = (site_ports_split[0]..site_ports_split[1]).to_a
176
+ spo.api = base_port + 0
177
+ spo.cron = base_port + 1
178
+ spo.worker = base_port + 3
179
+ spo.api_admin = base_port + 10
180
+ spo.cron_admin = base_port + 11
181
+ spo.worker_admin = base_port + 13
182
+ spo
183
+ end
184
+
185
+ # Checks that the site repo path exists.
186
+ # @return void
187
+ def self.validate_location(site_location)
188
+ unless Blufin::Files::path_exists(File.expand_path(site_location))
189
+ Blufin::Terminal::error("Location not found: #{Blufin::Terminal::format_directory(site_location)}", "Please check the #{Blufin::Terminal::format_highlight('path_sites')} value defined in your configuration file \xe2\x86\x92 #{Blufin::Terminal::format_command("#{App::GEM_NAME} x")}")
190
+ end
191
+ end
192
+
193
+ # Checks that the ports have a range of 20 and start on a number divisible by 10.
194
+ # @return void
195
+ def self.validate_ports_internal(site_ports)
196
+ raise RuntimeError, "Expected a String (port-range), instead got:#{site_ports.class}" unless site_ports.is_a?(String)
197
+ unless validate_ports(site_ports)
198
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight('Port-range')} is in wrong format: #{Blufin::Terminal::format_invalid(site_ports)}. A valid #{Blufin::Terminal::format_highlight('port-range')} must meet the following criteria:", PORT_RANGE_CRITERIA_ARRAY, true)
199
+ end
200
+ end
201
+
202
+ # Returns the path to Java Api from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-api
203
+ # @return String
204
+ def self.path_to_java_api(site)
205
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::API}"
206
+ end
207
+
208
+ # Returns the path to Java Cron from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-cron
209
+ # @return String
210
+ def self.path_to_java_cron(site)
211
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::CRON}"
212
+ end
213
+
214
+ # Returns the path to Java Lib from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-lib
215
+ # @return String
216
+ def self.path_to_java_lib(site)
217
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::LIB}"
218
+ end
219
+
220
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk
221
+ # @return String
222
+ def self.path_to_java_sdk(site)
223
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}"
224
+ end
225
+
226
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-core
227
+ # @return String
228
+ def self.path_to_java_sdk_core(site)
229
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-core"
230
+ end
231
+
232
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-internal
233
+ # @return String
234
+ def self.path_to_java_sdk_internal(site)
235
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-internal"
236
+ end
237
+
238
+ # Returns the path to Java SDK from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-sdk/<site-name>-sdk-oauth
239
+ # @return String
240
+ def self.path_to_java_sdk_oauth(site)
241
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}/#{get_site_name(site)}-#{Blufin::SiteServices::SDK}-oauth"
242
+ end
243
+
244
+ # Returns the path to Java Worker from root -> IE: /Users/<your-name>/.../app-infrastructure/<site-name>-worker
245
+ # @return String
246
+ def self.path_to_java_worker(site)
247
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_APP_INFRASTRUCTURE}/#{get_site_name(site)}-#{Blufin::SiteServices::WORKER}"
248
+ end
249
+
250
+ # Returns the path to the Blufin Java library from root -> IE: /Users/<your-name>/.../blufin-java
251
+ # @return String
252
+ def self.path_to_blufin_java
253
+ File.expand_path(Blufin::Config::get_path('Paths', 'BlufinJava'))
254
+ end
255
+
256
+ # Returns the path to SQL files from root -> IE: /Users/<your-name>/.../sql/
257
+ # @return String
258
+ def self.path_to_sql(site)
259
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_TO_SQL}"
260
+ end
261
+
262
+ # Returns the path to YML files from root -> IE: /Users/<your-name>/.../yml/
263
+ # @return String
264
+ def self.path_to_yml(site)
265
+ "#{get_site_location(site)}/#{Blufin::Site::PATH_TO_YML}"
266
+ end
267
+
268
+ # Gets path to sites.
269
+ # @return String
270
+ def self.get_path_sites
271
+ Blufin::Config::get_path('Paths', 'Sites')
272
+ end
273
+
274
+ end
275
+
276
+ end
@@ -0,0 +1,162 @@
1
+ module Blufin
2
+
3
+ class SiteServices
4
+
5
+ API = 'api'
6
+ CRON = 'cron'
7
+ LIB = 'lib'
8
+ SDK = 'sdk'
9
+ SDK_CORE = 'sdk-core'
10
+ SDK_INTERNAL = 'sdk-internal'
11
+ SDK_OAUTH = 'sdk-oauth'
12
+ WORKER = 'worker'
13
+
14
+ PACKAGE_SYSTEM_ENUMS = 'org.blufin.base.enums'
15
+ PACKAGE_AUTO_GENERATED = 'system'
16
+
17
+ ANNOTATION_TEST_REQUIRED = '@TestRequired'
18
+ ANNOTATION_TEST_NOT_REQUIRED = '@TestNotRequired'
19
+ ANNOTATION_TEST_NOT_RELATED_TO_CLASS = '@TestNotRelatedToClass'
20
+
21
+ REGEX_SERVICES = "#{Blufin::SiteServices::API}|#{Blufin::SiteServices::CRON}|#{Blufin::SiteServices::WORKER}"
22
+ REGEX_SERVICES_CAPITALIZED = "#{Blufin::SiteServices::API.capitalize}|#{Blufin::SiteServices::CRON.capitalize}|#{Blufin::SiteServices::WORKER.capitalize}"
23
+ REGEX_JAVA = "#{REGEX_SERVICES}|#{Blufin::SiteServices::LIB}|#{Blufin::SiteServices::SDK}-core|#{Blufin::SiteServices::SDK}-internal|#{Blufin::SiteServices::SDK}-core"
24
+
25
+ @@services_core = nil
26
+
27
+ # Build blufin-core-lib.
28
+ # @return void
29
+ def self.build_core_service(service, skip_tests = false)
30
+ validate_core_service(service)
31
+ result = Blufin::Terminal.command("mvn clean install#{get_skip_tests_param(skip_tests)}", "#{Blufin::SiteResolver::path_to_blufin_java}/blufin-#{service}")
32
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("blufin-#{service}")} failed to compile.") unless result[0]
33
+ end
34
+
35
+ # Build a service.
36
+ # @return void
37
+ def self.build_site_service(site, service, skip_tests = false)
38
+ Blufin::SiteResolver::validate_site(site)
39
+ service = validate_site_service(site, service)
40
+ result = Blufin::Terminal.command("mvn clean package#{get_skip_tests_param(skip_tests)}", get_available_site_services(site)[service][0])
41
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("#{Blufin::SiteResolver::get_site_name(site)}-#{service}")} failed to compile.") unless result[0]
42
+ end
43
+
44
+ # Build a site lib.
45
+ # NOTE: Cannot use 'build_site_services' because the lib is not maven packaged.
46
+ # @return void
47
+ def self.build_site_lib(site, skip_tests = false)
48
+ Blufin::SiteResolver::validate_site(site)
49
+ result = Blufin::Terminal.command("mvn clean install#{get_skip_tests_param(skip_tests)}", "#{Blufin::SiteResolver::path_to_java_lib(site)}")
50
+ Blufin::Terminal::error("#{Blufin::Terminal::format_highlight("#{Blufin::SiteResolver::get_site_name(site)}-lib")} failed to compile.") unless result[0]
51
+ end
52
+
53
+ # Deploy a service.
54
+ # @return void
55
+ def self.deploy(site, service)
56
+
57
+ Blufin::SiteResolver::validate_site(site)
58
+ service = validate_site_service(site, service, true)
59
+
60
+ # TODO - Re-program this when we need it.
61
+ raise RuntimeError, 'Needs to be re-written to generate YML file from DB values.' if true
62
+
63
+ yml_file = nil
64
+
65
+ # If YML file not found, stop script.
66
+ Blufin::Terminal::error('File not found', yml_file, true) unless Blufin::Files::file_exists(yml_file)
67
+
68
+ # TODO - CURRENTLY LOOKS FOR TO 1.0.0-SNAPSHOT. THIS MUST BE DYNAMIC.
69
+ # TODO - CURRENTLY HAWAII TIMEZONE IS HARD-CODED. SHOULD DYNAMICALLY GRAB TIMEZONE FROM YML FILE.
70
+ Blufin::Terminal.command("java -Duser.timezone=\"US/Hawaii\" -Xms128M -Xmx256M -XX:+UseParallelGC -jar #{get_available_site_services(site)[service][0]}/target/#{Blufin::SiteResolver::get_site_name(site)}-#{service}-1.0.0-SNAPSHOT.jar server #{yml_file}", get_available_site_services(site)[service][0])
71
+
72
+ end
73
+
74
+ # Validate core service.
75
+ # @return String
76
+ def self.validate_core_service(service)
77
+ Blufin::Terminal::error("Non-existent service: #{Blufin::Terminal::format_invalid(service)} \xe2\x80\x94 available services are:", Blufin::SiteServices::get_available_services_output, true) unless get_available_core_services.include?(service)
78
+ service
79
+ end
80
+
81
+ # Validate site service.
82
+ # @return String
83
+ def self.validate_site_service(site, service, for_deploy = false)
84
+ Blufin::SiteResolver::validate_site(site)
85
+ @error_message = ['Valid services are:', nil]
86
+ get_available_site_services(site).keys.each do |service_inner|
87
+ next if for_deploy && service_inner == LIB
88
+ @error_message << " \x1B[38;5;154m#{service_inner}\x1B[0m"
89
+ end
90
+ if for_deploy == true && service == LIB
91
+ Blufin::Terminal::error("You cannot deploy: #{Blufin::Terminal::format_highlight('lib')}", @error_message, true)
92
+ elsif !get_available_site_services(site).keys.include?(service)
93
+ Blufin::Terminal::error("You must specify a valid #{Blufin::Terminal::format_highlight('service')}.", @error_message, true)
94
+ end
95
+ service
96
+ end
97
+
98
+ # Returns Array of services (without the "blufin-" prefix).
99
+ # @return Array
100
+ def self.get_available_core_services
101
+ if @@services_core.nil?
102
+ @@services_core = []
103
+ Blufin::Files::get_dirs_in_dir(Blufin::Config::get_path('Paths', 'BlufinJava')).each do |dir|
104
+ service = dir.split('/')
105
+ service = service[service.length - 1].gsub('blufin-', '')
106
+ @@services_core << service unless service.downcase == 'target'
107
+ end
108
+ end
109
+ @@services_core
110
+ end
111
+
112
+ # Creates clean terminal output of available services in 2 columns with colors.
113
+ # @return Array
114
+ def self.get_available_services_output(services = [], color_selected = false)
115
+ output = []
116
+ half_first = []
117
+ half_second = []
118
+ half = (get_available_core_services.length / 2).to_i
119
+ (0..half).each { |n| half_first << get_available_core_services[n] }
120
+ ((half + 1)..(get_available_core_services.length - 1)).each { |n| half_second << get_available_core_services[n] }
121
+ hfm = half_first.max_by(&:length).length + 4
122
+ hsm = half_second.max_by(&:length).length+4
123
+ (0..[half_first.length, half_second.length].max).each do |n|
124
+ if color_selected
125
+ left = half_first[n].nil? ? '' : half_first[n].ljust(hfm, ' ')
126
+ right = half_second[n].nil? ? '' : half_second[n].ljust(hsm, ' ')
127
+ left = services.include?(half_first[n]) ? "\x1B[38;5;154m#{left}\x1B[38;5;240m" : "\x1B[38;5;240m#{left}"
128
+ right = services.include?(half_second[n]) ? "\x1B[38;5;154m#{right}\x1B[38;5;240m" : "\x1B[38;5;240m#{right}"
129
+ else
130
+ left = half_first[n].nil? ? '' : "\x1B[38;5;154m#{half_first[n].ljust(hfm, ' ')}\x1B[0m"
131
+ right = half_second[n].nil? ? '' : "\x1B[38;5;154m#{ half_second[n].ljust(hsm, ' ')}\x1B[0m"
132
+ end
133
+ output << "#{left}#{right}"
134
+ end
135
+ output
136
+ end
137
+
138
+ # Returns service(s) hash for site.
139
+ # @return Hash
140
+ def self.get_available_site_services(site)
141
+ Blufin::SiteResolver::validate_site(site)
142
+ valid_sites = {
143
+ API => %W(#{Blufin::SiteResolver::path_to_java_api(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_API}),
144
+ CRON => %W(#{Blufin::SiteResolver::path_to_java_cron(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_CRON}),
145
+ LIB => %W(#{Blufin::SiteResolver::path_to_java_lib(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_CORE_LIB}),
146
+ SDK => %W(#{Blufin::SiteResolver::path_to_java_sdk(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_SDK}),
147
+ WORKER => %W(#{Blufin::SiteResolver::path_to_java_worker(site)} #{Blufin::SiteResolver::path_to_blufin_java}#{Blufin::Site::PATH_TO_BLUFIN_WORKER})
148
+ }
149
+ valid_sites
150
+ end
151
+
152
+ private
153
+
154
+ # Returns MVN skipTests string if input is TRUE, blank-string if FALSE.
155
+ # @return String
156
+ def self.get_skip_tests_param(skip_tests)
157
+ skip_tests ? ' -Dmaven.test.skip=true -Dfindbugs.skip=true' : ''
158
+ end
159
+
160
+ end
161
+
162
+ end