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,16 @@
1
+ module Blufin
2
+
3
+ class SiteUI
4
+
5
+ attr_accessor :id, :name
6
+
7
+ def initialize(id, name)
8
+
9
+ self.id = id
10
+ self.name = name
11
+
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,219 @@
1
+ module Blufin
2
+
3
+ class YmlConfigValidator < Blufin::YmlValidatorBase
4
+
5
+ GET = 'GET'
6
+ POST = 'POST'
7
+ PUT = 'PUT'
8
+ PATCH = 'PATCH'
9
+ DELETE = 'DELETE'
10
+
11
+ VALID_METHODS = [GET, POST, PUT, PATCH, DELETE]
12
+
13
+ attr_accessor :config_data
14
+
15
+ GLOBAL = 'global'
16
+ GLOBAL_AUTHENTICATION = 'authentication'
17
+
18
+ CRON = 'cron'
19
+
20
+ WORKER = 'worker'
21
+ WORKER_PRIORITY = 'priority'
22
+ WORKER_DESCRIPTION = 'description'
23
+
24
+ MESSAGE = 'message'
25
+ MESSAGE_RECEIVER = 'MessageReceiver'
26
+
27
+ STRUCTURE = [
28
+ {
29
+ :section_name => GLOBAL,
30
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_FIXED,
31
+ :section_data => {
32
+ GLOBAL_AUTHENTICATION => {
33
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
34
+ :required => true
35
+ }
36
+ }
37
+ },
38
+ {
39
+ :section_name => CRON,
40
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_DYNAMIC,
41
+ :section_data => {
42
+ :section_alphabetical => true,
43
+ :section_regex => /\A[a-z_]+\z/,
44
+ :section_fields => {
45
+ MESSAGE => {
46
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
47
+ :required => true
48
+ }
49
+ }
50
+ }
51
+ },
52
+ {
53
+ :section_name => WORKER,
54
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_DYNAMIC,
55
+ :section_data => {
56
+ :section_alphabetical => true,
57
+ :section_regex => /\A[a-z_]+\z/,
58
+ :section_fields => {
59
+ WORKER_PRIORITY => {
60
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
61
+ :required => true
62
+ },
63
+ WORKER_DESCRIPTION => {
64
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
65
+ :required => true
66
+ }
67
+ }
68
+ }
69
+ }
70
+ ]
71
+
72
+ PLACEHOLDER_PACKAGE = '{{--PLACEHOLDER-PACKAGE--}}'
73
+ PLACEHOLDER_CLASS = '{{--PLACEHOLDER-CLASS--}}'
74
+ PLACEHOLDER_ONE = '{{--PLACEHOLDER-ONE--}}'
75
+ PLACEHOLDER_TWO = '{{--PLACEHOLDER-TWO--}}'
76
+ PLACEHOLDER_THREE = '{{--PLACEHOLDER-THREE--}}'
77
+ PLACEHOLDER_FOUR = '{{--PLACEHOLDER-FOUR--}}'
78
+ PLACEHOLDER_FIVE = '{{--PLACEHOLDER-FIVE--}}'
79
+ PLACEHOLDER_SIX = '{{--PLACEHOLDER-SIX--}}'
80
+ PLACEHOLDER_SITE_NAME = '{{--SITE-NAME--}}'
81
+ PLACEHOLDER_SITE_DOMAIN = '{{--SITE-DOMAIN--}}'
82
+
83
+ TEMPLATE_WORKER = <<TEMPLATE
84
+ package #{PLACEHOLDER_PACKAGE};
85
+
86
+ import org.blufin.core.cloud.queue.MessageIncoming;
87
+ import org.blufin.worker.queue.MessageHandlerInterface;
88
+
89
+ public final class #{PLACEHOLDER_CLASS} implements MessageHandlerInterface {
90
+
91
+ @Override
92
+ public boolean handle(MessageIncoming message) throws Exception {
93
+
94
+ return false;
95
+ }
96
+ }
97
+ TEMPLATE
98
+
99
+ # Initialize the class.
100
+ # @return void
101
+ def initialize(site, error_handler)
102
+
103
+ @site = Blufin::SiteResolver::validate_site(site)
104
+ @site_path = Blufin::SiteResolver::get_site_location(@site)
105
+ @site_name = Blufin::SiteResolver::get_site_name(@site)
106
+ @site_domain = Blufin::SiteResolver::get_site_domain(@site)
107
+
108
+ @error_handler = error_handler
109
+ @config_file = "#{Blufin::SiteResolver::get_site_location(@site)}/#{Blufin::Site::PATH_TO_YML_CONFIG}/config.yml"
110
+
111
+ @@message_types = nil
112
+ @@cron_types = nil
113
+
114
+ return unless Blufin::YmlCommon::validate_directory_structure(@site_path, Blufin::Site::PATH_TO_YML_CONFIG, %w(config.yml), [], @error_handler)
115
+
116
+ @@config_data = validate_single_file(site, @config_file, STRUCTURE, error_handler)
117
+ @@config_data = @@config_data[@config_file]
118
+
119
+ @config_data = @@config_data
120
+
121
+ validate_data
122
+
123
+ end
124
+
125
+ # Get MessageType(s) as Array from @@config_data.
126
+ # @return Array
127
+ def self.get_message_types
128
+ if @@message_types.nil?
129
+ @@message_types = {}
130
+ if !@@config_data[WORKER].nil? && @@config_data[WORKER].keys.any?
131
+ @@config_data[WORKER].each do |key, data|
132
+ @@message_types[key] = data
133
+ end
134
+ end
135
+ end
136
+ @@message_types
137
+ end
138
+
139
+ # Get CronTypes(s) as Array from @@config_data.
140
+ # @return Array
141
+ def self.get_cron_types
142
+ if @@cron_types.nil?
143
+ @@cron_types = {}
144
+ if !@@config_data[CRON].nil? && @@config_data[CRON].keys.any?
145
+ @@config_data[CRON].each do |key, data|
146
+ @@cron_types[key] = data
147
+ end
148
+ end
149
+ end
150
+ @@cron_types
151
+ end
152
+
153
+ private
154
+
155
+ # Custom validation only applicable to CONFIG YML definition(s).
156
+ # @return void
157
+ def validate_data
158
+
159
+ validate_global
160
+ return unless validate_worker # Worker needs to go first because it contains all the "message" types.
161
+ validate_cron
162
+
163
+ end
164
+
165
+ # Validates -> "global" section
166
+ # @return void
167
+ def validate_global
168
+ if @@config_data[GLOBAL].is_a?(Hash)
169
+ value = @@config_data[GLOBAL][GLOBAL_AUTHENTICATION]
170
+ valid_auth_levels = Blufin::SiteAuth::AUTHENTICATION_LEVELS.keys
171
+ # Make sure the AuthLevel is a valid value.
172
+ unless valid_auth_levels.include?(value)
173
+ @yml_error_handler.add_error(Blufin::YmlErrorHandler::FIELD_INVALID_VALUE, @config_file, GLOBAL, GLOBAL_AUTHENTICATION, valid_auth_levels.join(' '))
174
+ return
175
+ end
176
+ raise 'This error occurred because you forgot to run Blufin::SiteEmbedded::init() somewhere...' if Blufin::SiteEmbedded::get_data.nil?
177
+ # Make sure the embedded object exists.
178
+ valid_embedded_objects = Blufin::SiteEmbedded::get_data.keys
179
+ expected_embedded_objects = Blufin::SiteAuth::AUTHENTICATION_LEVELS[value]
180
+ expected_embedded_objects.each do |expected_embedded_object|
181
+ @yml_error_handler.add_error(Blufin::YmlErrorHandler::EMBEDDED_OBJECT_NOT_FOUND, @config_file, GLOBAL, GLOBAL_AUTHENTICATION, expected_embedded_object) unless valid_embedded_objects.include?(expected_embedded_object)
182
+ end
183
+ end
184
+ end
185
+
186
+ # Validates -> "worker" section
187
+ # Checks that the boiler-plate MessageType handlers exist and implement correct interface.
188
+ # @return void
189
+ def validate_worker
190
+ message_types = Blufin::YmlConfigValidator::get_message_types.keys
191
+ return false unless message_types.any?
192
+ content_hash = {}
193
+ message_types.each do |snake_cased_string|
194
+ class_name = "#{Blufin::Strings::snake_case_to_camel_case(snake_cased_string)}#{Blufin::YmlJavaWorkerWriter::MESSAGE_HANDLER}"
195
+ message_type_camel_cased_lower = Blufin::Strings::snake_case_to_camel_case_lower(snake_cased_string)
196
+ contents = TEMPLATE_WORKER
197
+ contents = contents.gsub(PLACEHOLDER_PACKAGE, "#{@site_domain}.#{@site_name.gsub('-', '.')}.#{Blufin::SiteServices::WORKER}.messages.#{message_type_camel_cased_lower}".gsub(/^\./, ''))
198
+ contents = contents.gsub(PLACEHOLDER_CLASS, class_name)
199
+ content_hash[snake_cased_string] = [contents, [' return false;'], "#{class_name}.java"]
200
+ end
201
+ path = "#{Blufin::SiteResolver::path_to_java_worker(@site)}/src/main/java/#{@site_domain.gsub('.', '/')}/#{@site_name}/#{Blufin::SiteServices::WORKER}/messages"
202
+ Blufin::YmlCommon::create_boilerplate_files(content_hash, path, @site, @error_handler)
203
+ true
204
+ end
205
+
206
+ # Validates -> "cron" section
207
+ # @return void
208
+ def validate_cron
209
+ cron_types = Blufin::YmlConfigValidator::get_cron_types
210
+ return false unless cron_types.any?
211
+ message_types = Blufin::YmlConfigValidator::get_message_types.keys
212
+ cron_types.each do |key, value|
213
+ @error_handler.add_error(Blufin::YmlErrorHandler::WORKER_MESSAGE_TYPE_NOT_FOUND, @config_file, CRON, "#{key}|#{MESSAGE}", value[MESSAGE]) unless message_types.include?(value[MESSAGE])
214
+ end
215
+ end
216
+
217
+ end
218
+
219
+ end
@@ -0,0 +1,1132 @@
1
+ module Blufin
2
+
3
+ class YmlMavenValidator < Blufin::YmlValidatorBase
4
+
5
+ attr_accessor :data_blufin, :data_app
6
+
7
+ CONFIG = 'config'
8
+ CONFIG_JAVA = 'java'
9
+ CONFIG_JAVA_VERSION = 'version'
10
+ CONFIG_BLUFIN = 'blufin'
11
+ CONFIG_BLUFIN_VERSION = 'version'
12
+ CONFIG_PARENTS = 'parents'
13
+ CONFIG_PARENTS_NAME = 'name'
14
+ CONFIG_PARENTS_TITLE = 'title'
15
+ CONFIG_APP_VERSION = 'version'
16
+
17
+
18
+ DEPENDENCIES_APP = 'dependencies-app'
19
+ DEPENDENCIES_BLUFIN = 'dependencies-blufin'
20
+ DEPENDENCIES_MVN = 'dependencies-mvn'
21
+ DEPENDENCIES_GROUP_ID = 'group-id'
22
+ DEPENDENCIES_ARTIFACT_ID = 'artifact-id'
23
+ DEPENDENCIES_VERSION = 'version'
24
+ DEPENDENCIES_USE = 'use'
25
+ DEPENDENCIES_EXCLUDE = 'exclude'
26
+ DEPENDENCIES_TEST_SCOPE = 'testScope'
27
+ DEPENDENCIES_TEST_JAR = 'testJar'
28
+
29
+ BLUFIN = 'blufin'
30
+ BLUFIN_TITLE = 'title'
31
+ BLUFIN_PARENT = 'parent'
32
+
33
+ APP_INFRASTRUCTURE = 'app-infrastructure'
34
+ APP_INFRASTRUCTURE_API = 'api'
35
+ APP_INFRASTRUCTURE_CRON = 'cron'
36
+ APP_INFRASTRUCTURE_LIB = 'lib'
37
+ APP_INFRASTRUCTURE_SDK_CORE = 'sdk-core'
38
+ APP_INFRASTRUCTURE_SDK_INTERNAL = 'sdk-internal'
39
+ APP_INFRASTRUCTURE_SDK_OAUTH = 'sdk-oauth'
40
+ APP_INFRASTRUCTURE_WORKER = 'worker'
41
+ APP_INFRASTRUCTURE_BUILD_PLUGINS = 'dependencies-external'
42
+
43
+ EXTRA_DATA = 'extra-data'
44
+ EXTRA_DATA_CORE_LIBS = 'core-libs'
45
+ EXTRA_DATA_CORE_LIBS_WITH_CHILDREN = 'core-libs-with-children'
46
+ EXTRA_DATA_CORE_LIBS_PARENTS = 'core-libs-parents'
47
+ EXTRA_DATA_MVN_CACHE = 'extra-data-mvn-cache'
48
+
49
+ TYPE_BLUFIN = 'type_blufin'
50
+ TYPE_APP = 'type_app'
51
+
52
+ STRUCTURE_BLUFIN = [
53
+ {
54
+ :section_name => CONFIG,
55
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_FIXED,
56
+ :section_data => {
57
+ CONFIG_JAVA => {
58
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
59
+ :required => true,
60
+ :section_data => {
61
+ CONFIG_JAVA_VERSION => {
62
+ :type => FIELD_TYPE_TEXT,
63
+ :required => true,
64
+ :regex => /\A1\.[0-9]+\z/
65
+ }
66
+ }
67
+ },
68
+ CONFIG_BLUFIN => {
69
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
70
+ :required => true,
71
+ :section_data => {
72
+ CONFIG_BLUFIN_VERSION => {
73
+ :type => FIELD_TYPE_TEXT,
74
+ :required => true,
75
+ :regex => /\A[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}(-SNAPSHOT)?\z/
76
+ }
77
+ }
78
+ },
79
+ CONFIG_PARENTS => {
80
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
81
+ :required => false,
82
+ :section_data => {
83
+ CONFIG_PARENTS_NAME => {
84
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
85
+ :regex => /\Ablufin-([a-z0-9\-])+\z/
86
+ },
87
+ CONFIG_PARENTS_TITLE => {
88
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
89
+ },
90
+ }
91
+ }
92
+ }
93
+ },
94
+ {
95
+ :section_name => DEPENDENCIES_MVN,
96
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_ARRAY,
97
+ :section_data => {
98
+ DEPENDENCIES_GROUP_ID => {
99
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
100
+ },
101
+ DEPENDENCIES_ARTIFACT_ID => {
102
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
103
+ },
104
+ DEPENDENCIES_VERSION => {
105
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
106
+ }
107
+ }
108
+ },
109
+ {
110
+ :section_name => BLUFIN,
111
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_DYNAMIC,
112
+ :section_data => {
113
+ :section_alphabetical => true,
114
+ :section_regex => /[a-z\-]+/,
115
+ :section_fields => {
116
+ BLUFIN_TITLE => {
117
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
118
+ :required => true
119
+ },
120
+ BLUFIN_PARENT => {
121
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
122
+ :required => false
123
+ },
124
+ DEPENDENCIES_BLUFIN => {
125
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
126
+ :required => false,
127
+ :section_data => {
128
+ DEPENDENCIES_USE => {
129
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
130
+ },
131
+ DEPENDENCIES_EXCLUDE => {
132
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
133
+ :required => false
134
+ },
135
+ DEPENDENCIES_TEST_SCOPE => {
136
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
137
+ :required => false
138
+ },
139
+ DEPENDENCIES_TEST_JAR => {
140
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
141
+ :required => false
142
+ }
143
+ }
144
+ },
145
+ DEPENDENCIES_MVN => {
146
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
147
+ :required => false,
148
+ :section_data => {
149
+ DEPENDENCIES_USE => {
150
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
151
+ },
152
+ DEPENDENCIES_EXCLUDE => {
153
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
154
+ :required => false
155
+ },
156
+ DEPENDENCIES_TEST_SCOPE => {
157
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
158
+ :required => false
159
+ }
160
+ }
161
+ }
162
+ },
163
+ }
164
+ }
165
+ ]
166
+
167
+ STRUCTURE_APP = [
168
+ {
169
+ :section_name => CONFIG,
170
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_FIXED,
171
+ :section_data => {
172
+ CONFIG_JAVA => {
173
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
174
+ :required => true,
175
+ :section_data => {
176
+ CONFIG_JAVA_VERSION => {
177
+ :type => FIELD_TYPE_TEXT,
178
+ :required => true,
179
+ :regex => /\A1\.[0-9]+\z/
180
+ }
181
+ }
182
+ },
183
+ CONFIG_BLUFIN => {
184
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
185
+ :required => true,
186
+ :section_data => {
187
+ CONFIG_BLUFIN_VERSION => {
188
+ :type => FIELD_TYPE_TEXT,
189
+ :required => true,
190
+ :regex => /\A[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}(-SNAPSHOT)?\z/
191
+ }
192
+ }
193
+ },
194
+ CONFIG_PARENTS => {
195
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
196
+ :required => false,
197
+ :section_data => {
198
+ CONFIG_PARENTS_NAME => {
199
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
200
+ :regex => /\A[a-z0-9\-]+-[a-z0-9\-]+\z/
201
+ },
202
+ CONFIG_PARENTS_TITLE => {
203
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
204
+ },
205
+ }
206
+ }
207
+ }
208
+ },
209
+ {
210
+ :section_name => DEPENDENCIES_MVN,
211
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_ARRAY,
212
+ :required => false,
213
+ :section_data => {
214
+ DEPENDENCIES_GROUP_ID => {
215
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
216
+ },
217
+ DEPENDENCIES_ARTIFACT_ID => {
218
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
219
+ },
220
+ DEPENDENCIES_VERSION => {
221
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
222
+ }
223
+ }
224
+ },
225
+ {
226
+ :section_name => APP_INFRASTRUCTURE,
227
+ :section_type => Blufin::YmlValidatorBase::SECTION_TYPE_FIXED,
228
+ :section_data => {
229
+ APP_INFRASTRUCTURE_API => {
230
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
231
+ :required => true,
232
+ :section_data => {
233
+ BLUFIN_TITLE => {
234
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
235
+ :required => true
236
+ },
237
+ BLUFIN_PARENT => {
238
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
239
+ :required => false
240
+ },
241
+ DEPENDENCIES_APP => {
242
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
243
+ :required => false,
244
+ :section_data => {
245
+ DEPENDENCIES_USE => {
246
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
247
+ },
248
+ DEPENDENCIES_EXCLUDE => {
249
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
250
+ :required => false
251
+ },
252
+ DEPENDENCIES_TEST_SCOPE => {
253
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
254
+ :required => false
255
+ },
256
+ DEPENDENCIES_TEST_JAR => {
257
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
258
+ :required => false
259
+ }
260
+ }
261
+ },
262
+ DEPENDENCIES_BLUFIN => {
263
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
264
+ :required => false,
265
+ :section_data => {
266
+ DEPENDENCIES_USE => {
267
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
268
+ },
269
+ DEPENDENCIES_EXCLUDE => {
270
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
271
+ :required => false
272
+ },
273
+ DEPENDENCIES_TEST_SCOPE => {
274
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
275
+ :required => false
276
+ },
277
+ DEPENDENCIES_TEST_JAR => {
278
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
279
+ :required => false
280
+ }
281
+ }
282
+ },
283
+ DEPENDENCIES_MVN => {
284
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
285
+ :required => false,
286
+ :section_data => {
287
+ DEPENDENCIES_USE => {
288
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
289
+ },
290
+ DEPENDENCIES_EXCLUDE => {
291
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
292
+ :required => false
293
+ },
294
+ DEPENDENCIES_TEST_SCOPE => {
295
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
296
+ :required => false
297
+ }
298
+ }
299
+ }
300
+ }
301
+ },
302
+ APP_INFRASTRUCTURE_CRON => {
303
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
304
+ :required => true,
305
+ :section_data => {
306
+ BLUFIN_TITLE => {
307
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
308
+ :required => true
309
+ },
310
+ BLUFIN_PARENT => {
311
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
312
+ :required => false
313
+ },
314
+ DEPENDENCIES_APP => {
315
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
316
+ :required => false,
317
+ :section_data => {
318
+ DEPENDENCIES_USE => {
319
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
320
+ },
321
+ DEPENDENCIES_EXCLUDE => {
322
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
323
+ :required => false
324
+ },
325
+ DEPENDENCIES_TEST_SCOPE => {
326
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
327
+ :required => false
328
+ },
329
+ DEPENDENCIES_TEST_JAR => {
330
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
331
+ :required => false
332
+ }
333
+ }
334
+ },
335
+ DEPENDENCIES_BLUFIN => {
336
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
337
+ :required => false,
338
+ :section_data => {
339
+ DEPENDENCIES_USE => {
340
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
341
+ },
342
+ DEPENDENCIES_EXCLUDE => {
343
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
344
+ :required => false
345
+ },
346
+ DEPENDENCIES_TEST_SCOPE => {
347
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
348
+ :required => false
349
+ },
350
+ DEPENDENCIES_TEST_JAR => {
351
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
352
+ :required => false
353
+ }
354
+ }
355
+ },
356
+ DEPENDENCIES_MVN => {
357
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
358
+ :required => false,
359
+ :section_data => {
360
+ DEPENDENCIES_USE => {
361
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
362
+ },
363
+ DEPENDENCIES_EXCLUDE => {
364
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
365
+ :required => false
366
+ },
367
+ DEPENDENCIES_TEST_SCOPE => {
368
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
369
+ :required => false
370
+ }
371
+ }
372
+ }
373
+ }
374
+ },
375
+ APP_INFRASTRUCTURE_LIB => {
376
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
377
+ :required => true,
378
+ :section_data => {
379
+ BLUFIN_TITLE => {
380
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
381
+ :required => true
382
+ },
383
+ BLUFIN_PARENT => {
384
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
385
+ :required => false
386
+ },
387
+ DEPENDENCIES_APP => {
388
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
389
+ :required => false,
390
+ :section_data => {
391
+ DEPENDENCIES_USE => {
392
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
393
+ },
394
+ DEPENDENCIES_EXCLUDE => {
395
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
396
+ :required => false
397
+ },
398
+ DEPENDENCIES_TEST_SCOPE => {
399
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
400
+ :required => false
401
+ },
402
+ DEPENDENCIES_TEST_JAR => {
403
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
404
+ :required => false
405
+ }
406
+ }
407
+ },
408
+ DEPENDENCIES_BLUFIN => {
409
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
410
+ :required => false,
411
+ :section_data => {
412
+ DEPENDENCIES_USE => {
413
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
414
+ },
415
+ DEPENDENCIES_EXCLUDE => {
416
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
417
+ :required => false
418
+ },
419
+ DEPENDENCIES_TEST_SCOPE => {
420
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
421
+ :required => false
422
+ },
423
+ DEPENDENCIES_TEST_JAR => {
424
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
425
+ :required => false
426
+ }
427
+ }
428
+ },
429
+ DEPENDENCIES_MVN => {
430
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
431
+ :required => false,
432
+ :section_data => {
433
+ DEPENDENCIES_USE => {
434
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
435
+ },
436
+ DEPENDENCIES_EXCLUDE => {
437
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
438
+ :required => false
439
+ },
440
+ DEPENDENCIES_TEST_SCOPE => {
441
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
442
+ :required => false
443
+ }
444
+ }
445
+ }
446
+ }
447
+ },
448
+ APP_INFRASTRUCTURE_SDK_CORE => {
449
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
450
+ :required => true,
451
+ :section_data => {
452
+ BLUFIN_TITLE => {
453
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
454
+ :required => true
455
+ },
456
+ BLUFIN_PARENT => {
457
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
458
+ :required => false
459
+ },
460
+ DEPENDENCIES_APP => {
461
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
462
+ :required => false,
463
+ :section_data => {
464
+ DEPENDENCIES_USE => {
465
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
466
+ },
467
+ DEPENDENCIES_EXCLUDE => {
468
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
469
+ :required => false
470
+ },
471
+ DEPENDENCIES_TEST_SCOPE => {
472
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
473
+ :required => false
474
+ },
475
+ DEPENDENCIES_TEST_JAR => {
476
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
477
+ :required => false
478
+ }
479
+ }
480
+ },
481
+ DEPENDENCIES_BLUFIN => {
482
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
483
+ :required => false,
484
+ :section_data => {
485
+ DEPENDENCIES_USE => {
486
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
487
+ },
488
+ DEPENDENCIES_EXCLUDE => {
489
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
490
+ :required => false
491
+ },
492
+ DEPENDENCIES_TEST_SCOPE => {
493
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
494
+ :required => false
495
+ },
496
+ DEPENDENCIES_TEST_JAR => {
497
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
498
+ :required => false
499
+ }
500
+ }
501
+ },
502
+ DEPENDENCIES_MVN => {
503
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
504
+ :required => false,
505
+ :section_data => {
506
+ DEPENDENCIES_USE => {
507
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
508
+ },
509
+ DEPENDENCIES_EXCLUDE => {
510
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
511
+ :required => false
512
+ },
513
+ DEPENDENCIES_TEST_SCOPE => {
514
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
515
+ :required => false
516
+ }
517
+ }
518
+ }
519
+ }
520
+ },
521
+ APP_INFRASTRUCTURE_SDK_INTERNAL => {
522
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
523
+ :required => true,
524
+ :section_data => {
525
+ BLUFIN_TITLE => {
526
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
527
+ :required => true
528
+ },
529
+ BLUFIN_PARENT => {
530
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
531
+ :required => false
532
+ },
533
+ DEPENDENCIES_APP => {
534
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
535
+ :required => false,
536
+ :section_data => {
537
+ DEPENDENCIES_USE => {
538
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
539
+ },
540
+ DEPENDENCIES_EXCLUDE => {
541
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
542
+ :required => false
543
+ },
544
+ DEPENDENCIES_TEST_SCOPE => {
545
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
546
+ :required => false
547
+ },
548
+ DEPENDENCIES_TEST_JAR => {
549
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
550
+ :required => false
551
+ }
552
+ }
553
+ },
554
+ DEPENDENCIES_BLUFIN => {
555
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
556
+ :required => false,
557
+ :section_data => {
558
+ DEPENDENCIES_USE => {
559
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
560
+ },
561
+ DEPENDENCIES_EXCLUDE => {
562
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
563
+ :required => false
564
+ },
565
+ DEPENDENCIES_TEST_SCOPE => {
566
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
567
+ :required => false
568
+ },
569
+ DEPENDENCIES_TEST_JAR => {
570
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
571
+ :required => false
572
+ }
573
+ }
574
+ },
575
+ DEPENDENCIES_MVN => {
576
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
577
+ :required => false,
578
+ :section_data => {
579
+ DEPENDENCIES_USE => {
580
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
581
+ },
582
+ DEPENDENCIES_EXCLUDE => {
583
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
584
+ :required => false
585
+ },
586
+ DEPENDENCIES_TEST_SCOPE => {
587
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
588
+ :required => false
589
+ }
590
+ }
591
+ }
592
+ }
593
+ },
594
+ APP_INFRASTRUCTURE_SDK_OAUTH => {
595
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
596
+ :required => true,
597
+ :section_data => {
598
+ BLUFIN_TITLE => {
599
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
600
+ :required => true
601
+ },
602
+ BLUFIN_PARENT => {
603
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
604
+ :required => false
605
+ },
606
+ DEPENDENCIES_APP => {
607
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
608
+ :required => false,
609
+ :section_data => {
610
+ DEPENDENCIES_USE => {
611
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
612
+ },
613
+ DEPENDENCIES_EXCLUDE => {
614
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
615
+ :required => false
616
+ },
617
+ DEPENDENCIES_TEST_SCOPE => {
618
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
619
+ :required => false
620
+ },
621
+ DEPENDENCIES_TEST_JAR => {
622
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
623
+ :required => false
624
+ }
625
+ }
626
+ },
627
+ DEPENDENCIES_BLUFIN => {
628
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
629
+ :required => false,
630
+ :section_data => {
631
+ DEPENDENCIES_USE => {
632
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
633
+ },
634
+ DEPENDENCIES_EXCLUDE => {
635
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
636
+ :required => false
637
+ },
638
+ DEPENDENCIES_TEST_SCOPE => {
639
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
640
+ :required => false
641
+ },
642
+ DEPENDENCIES_TEST_JAR => {
643
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
644
+ :required => false
645
+ }
646
+ }
647
+ },
648
+ DEPENDENCIES_MVN => {
649
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
650
+ :required => false,
651
+ :section_data => {
652
+ DEPENDENCIES_USE => {
653
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
654
+ },
655
+ DEPENDENCIES_EXCLUDE => {
656
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
657
+ :required => false
658
+ },
659
+ DEPENDENCIES_TEST_SCOPE => {
660
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
661
+ :required => false
662
+ }
663
+ }
664
+ }
665
+ }
666
+ },
667
+ APP_INFRASTRUCTURE_WORKER => {
668
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
669
+ :required => true,
670
+ :section_data => {
671
+ BLUFIN_TITLE => {
672
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
673
+ :required => true
674
+ },
675
+ BLUFIN_PARENT => {
676
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
677
+ :required => false
678
+ },
679
+ DEPENDENCIES_APP => {
680
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
681
+ :required => false,
682
+ :section_data => {
683
+ DEPENDENCIES_USE => {
684
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
685
+ },
686
+ DEPENDENCIES_EXCLUDE => {
687
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
688
+ :required => false
689
+ },
690
+ DEPENDENCIES_TEST_SCOPE => {
691
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
692
+ :required => false
693
+ },
694
+ DEPENDENCIES_TEST_JAR => {
695
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
696
+ :required => false
697
+ }
698
+ }
699
+ },
700
+ DEPENDENCIES_BLUFIN => {
701
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
702
+ :required => false,
703
+ :section_data => {
704
+ DEPENDENCIES_USE => {
705
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
706
+ },
707
+ DEPENDENCIES_EXCLUDE => {
708
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
709
+ :required => false
710
+ },
711
+ DEPENDENCIES_TEST_SCOPE => {
712
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
713
+ :required => false
714
+ },
715
+ DEPENDENCIES_TEST_JAR => {
716
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
717
+ :required => false
718
+ }
719
+ }
720
+ },
721
+ DEPENDENCIES_MVN => {
722
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
723
+ :required => false,
724
+ :section_data => {
725
+ DEPENDENCIES_USE => {
726
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT
727
+ },
728
+ DEPENDENCIES_EXCLUDE => {
729
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
730
+ :required => false
731
+ },
732
+ DEPENDENCIES_TEST_SCOPE => {
733
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_BOOLEAN,
734
+ :required => false
735
+ }
736
+ }
737
+ }
738
+ }
739
+ }
740
+ }
741
+ }
742
+ ]
743
+
744
+ # Initialize the class.
745
+ # @return void
746
+ def initialize(site, error_handler)
747
+
748
+ @error_handler = error_handler
749
+ @config_file_blufin = "#{Blufin::Config::get_path('Paths', 'BlufinJava')}/maven.yml"
750
+
751
+ unless site.nil?
752
+
753
+ @site = Blufin::SiteResolver::validate_site(site)
754
+ @site_path = Blufin::SiteResolver::get_site_location(@site)
755
+ @site_name = Blufin::SiteResolver::get_site_name(@site)
756
+ @site_title = Blufin::SiteResolver::get_site_title(@site)
757
+ @site_domain = Blufin::SiteResolver::get_site_domain(@site)
758
+
759
+ @config_file_app = "#{Blufin::SiteResolver::get_site_location(@site)}/#{Blufin::YmlMavenValidator::APP_INFRASTRUCTURE}/maven.yml"
760
+
761
+ return unless Blufin::YmlCommon::validate_directory_structure(@site_path, Blufin::Site::PATH_TO_YML_CONFIG, %w(config.yml), [], @error_handler)
762
+
763
+ end
764
+
765
+ # Parse BLUFIN maven.yml.
766
+ error_count_before = @error_handler.get_error_count
767
+ @data = validate_single_file(site, @config_file_blufin, STRUCTURE_BLUFIN, error_handler)
768
+ return false if @data.nil? || @error_handler.get_error_count > error_count_before
769
+ @data = @data[@config_file_blufin]
770
+ @data_blufin = validate_yml_file(@config_file_blufin, TYPE_BLUFIN)
771
+
772
+ unless site.nil?
773
+
774
+ @core_libraries = nil
775
+ @core_libraries_with_children = nil
776
+
777
+ # Parse APP-INFRASTRUCTURE maven.yml.
778
+ error_count_before = @error_handler.get_error_count
779
+ @data = validate_single_file(site, @config_file_app, alter_structure_for_app(STRUCTURE_APP), error_handler)
780
+ return false if @data.nil? || @error_handler.get_error_count > error_count_before
781
+ @data = @data[@config_file_app]
782
+ @data_app = validate_yml_file(@config_file_app, TYPE_APP)
783
+
784
+ end
785
+
786
+ end
787
+
788
+ private
789
+
790
+ # Custom validation only applicable to MAVEN YML definition(s) - BLUFIN.
791
+ # @return void
792
+ def validate_yml_file(config_file, type)
793
+
794
+ @data[EXTRA_DATA] = {}
795
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_PARENTS] = {}
796
+ @data[DEPENDENCIES_MVN] = [] if @data[DEPENDENCIES_MVN].nil?
797
+
798
+ # CACHE PARENT DEFINITIONS.
799
+ if @data[CONFIG].has_key?(CONFIG_PARENTS)
800
+
801
+ @data[CONFIG][CONFIG_PARENTS].each do |parent_definition|
802
+ name = nil
803
+ title = nil
804
+ parent_definition.each do |pd|
805
+ key = pd.keys[0]
806
+ value = pd.values[0]
807
+ if key == CONFIG_PARENTS_NAME
808
+ name = value
809
+ elsif key == CONFIG_PARENTS_TITLE
810
+ title = value
811
+ end
812
+ end
813
+ raise RuntimeError, 'name was empty, this should never happen!' if name.nil?
814
+ raise RuntimeError, 'title was empty, this should never happen!' if title.nil?
815
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_PARENTS][name] = {
816
+ :title => title
817
+ }
818
+ end
819
+
820
+ end
821
+
822
+ if type == TYPE_BLUFIN
823
+
824
+ # CHECK FOR DUPLICATES (blufin-java).
825
+ mvn_modules_internal = get_mvn_modules_and_check_for_duplicates(@data[DEPENDENCIES_MVN], config_file, DEPENDENCIES_MVN)
826
+
827
+ # CHECK MODULES ARE IN ALPHABETICAL ORDER (blufin-java).
828
+ check_modules_are_alphabetical_and_not_duplicated(mvn_modules_internal, DEPENDENCIES_MVN, nil, type)
829
+
830
+ else
831
+
832
+ @data_blufin[DEPENDENCIES_MVN].each do |bsd|
833
+ asd_found = false
834
+ if @data[DEPENDENCIES_MVN].any?
835
+ bsd_extract = Blufin::YmlCommon::extract_group_artifact_version_from_array(bsd)
836
+ @data[DEPENDENCIES_MVN].each do |asd|
837
+ asd_extract = Blufin::YmlCommon::extract_group_artifact_version_from_array(asd)
838
+ asd_found = true if "#{bsd_extract[DEPENDENCIES_GROUP_ID]}:#{bsd_extract[DEPENDENCIES_ARTIFACT_ID]}" == "#{asd_extract[DEPENDENCIES_GROUP_ID]}:#{asd_extract[DEPENDENCIES_ARTIFACT_ID]}"
839
+ end
840
+ end
841
+ @data[DEPENDENCIES_MVN] << bsd unless asd_found
842
+ end
843
+
844
+ end
845
+
846
+ @data[EXTRA_DATA][EXTRA_DATA_MVN_CACHE] = map_dependencies(DEPENDENCIES_MVN)
847
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS] = get_core_libraries(type == TYPE_BLUFIN ? Blufin::Config::get_path('Paths', 'BlufinJava') : "#{@site_path}/#{APP_INFRASTRUCTURE}", type)
848
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_WITH_CHILDREN] = get_core_libraries_with_children(type)
849
+
850
+ # ADD ERROR FOR UNUSED PARENTS.
851
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_PARENTS].keys.each { |n| @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_UNUSED_PARENT, config_file, CONFIG, CONFIG_PARENTS, n) unless @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_WITH_CHILDREN].include?(n) }
852
+
853
+ # VALIDATE CORE
854
+ core_libraries = @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS]
855
+ core_modules = []
856
+
857
+ data_key = type == TYPE_BLUFIN ? BLUFIN : @site_name
858
+
859
+ @data[data_key].each do |key, data|
860
+ validate_dependencies_are_alphabetical_and_exist(data[DEPENDENCIES_BLUFIN], "#{key}.#{DEPENDENCIES_BLUFIN}", DEPENDENCIES_BLUFIN, data_key, type)
861
+ validate_dependencies_are_alphabetical_and_exist(data[DEPENDENCIES_MVN], "#{key}.#{DEPENDENCIES_MVN}", DEPENDENCIES_MVN, data_key, type)
862
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_UNRECOGNIZED, config_file, data_key, key, key) unless core_libraries.include?(key)
863
+ core_modules << key
864
+ end
865
+ core_libraries.each do |core_library|
866
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_NOT_DEFINED, config_file, data_key, nil, core_library) unless core_modules.include?(core_library)
867
+ end
868
+
869
+ @data
870
+
871
+ end
872
+
873
+ # Alter's the APP-STRUCTURE Hash for this particular site (IE: TaskBot).
874
+ # @return Array
875
+ def alter_structure_for_app(structure)
876
+ structure[0][:section_data] = {
877
+ CONFIG_JAVA => structure[0][:section_data][CONFIG_JAVA],
878
+ CONFIG_BLUFIN => structure[0][:section_data][CONFIG_BLUFIN],
879
+ @site_name => structure[0][:section_data][@site_name] = {
880
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_NESTED_DATA,
881
+ :required => true,
882
+ :section_data => {
883
+ CONFIG_BLUFIN_VERSION => {
884
+ :type => FIELD_TYPE_TEXT,
885
+ :required => true,
886
+ :regex => /\A[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}(-SNAPSHOT)?\z/
887
+ }
888
+ }
889
+ },
890
+ CONFIG_PARENTS => {
891
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_ARRAY,
892
+ :required => false,
893
+ :section_data => {
894
+ CONFIG_PARENTS_NAME => {
895
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
896
+ :regex => /\A(#{@site_name})-[a-z\-]+\z/
897
+ },
898
+ CONFIG_PARENTS_TITLE => {
899
+ :type => Blufin::YmlValidatorBase::FIELD_TYPE_TEXT,
900
+ :regex => /\A(#{@site_title})\s[A-Za-z0-9\-()\s]+\z/
901
+
902
+ },
903
+ }
904
+ }
905
+ }
906
+ app_idx = nil # The index of the key in APP_STRUCTURE for which to make changes.
907
+ structure.each_with_index { |n, idx| app_idx = idx if n[:section_name] == APP_INFRASTRUCTURE }
908
+ app_hash = {}
909
+ structure[app_idx][:section_data].keys.each do |key|
910
+ base_config = structure[app_idx][:section_data][key]
911
+ base_config[:section_data][BLUFIN_TITLE][:regex] = /\A(#{@site_title})\s[A-Za-z0-9\-()\s]+\z/
912
+ base_config[:section_data][BLUFIN_PARENT][:regex] = /\A(#{@site_name})-[a-z\-]+\z/
913
+ app_hash["#{@site_name}-#{key}"] = base_config
914
+ end
915
+ structure[app_idx][:section_name] = @site_name
916
+ structure[app_idx][:section_data] = app_hash
917
+ structure
918
+ end
919
+
920
+ # Returns and Array of formatted modules & checks there are no duplicates.
921
+ # @return Array
922
+ def get_mvn_modules_and_check_for_duplicates(dependencies, config_file, dependencies_for_error)
923
+ mvn_modules = []
924
+ dependencies.each do |mvn_module|
925
+ group = ''
926
+ artifact = ''
927
+ mvn_module.each do |mmi|
928
+ group = mmi.values[0] if mmi.keys[0] == DEPENDENCIES_GROUP_ID
929
+ artifact = mmi.values[0] if mmi.keys[0] == DEPENDENCIES_ARTIFACT_ID
930
+ end
931
+ raise RuntimeError, 'group should never be nil!' if group.nil?
932
+ raise RuntimeError, 'artifact should never be nil!' if artifact.nil?
933
+ group_artifact = "#{group}:#{artifact}"
934
+ if mvn_modules.include?(group_artifact)
935
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_DUPLICATE, config_file, data_key, dependencies_for_error, group_artifact)
936
+ next
937
+ end
938
+ mvn_modules << group_artifact
939
+ end
940
+ mvn_modules
941
+ end
942
+
943
+ # Validate order of dependencies.
944
+ # @return void
945
+ def validate_dependencies_are_alphabetical_and_exist(data, field, section_type, section, type)
946
+ if data.is_a?(Array) && data.length > 0
947
+ config_file = type == TYPE_BLUFIN ? @config_file_blufin : @config_file_app
948
+ modules = []
949
+ data.each do |data_inner|
950
+ data_inner.each do |di|
951
+ if di.keys[0] == DEPENDENCIES_USE
952
+ val = di.values[0]
953
+ case section_type
954
+ when DEPENDENCIES_BLUFIN
955
+ if type == TYPE_BLUFIN
956
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_NOT_REGISTERED, config_file, section, field, val) unless @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS].include?(val)
957
+ else
958
+
959
+ # TODO - MUST VALIDATE AGAINST CORE-LIBS WHEN LOOPING APP MAVEN.YML
960
+
961
+ end
962
+ when DEPENDENCIES_MVN
963
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_NOT_REGISTERED, config_file, section, field, val) unless @data[EXTRA_DATA][EXTRA_DATA_MVN_CACHE].keys.include?(val)
964
+ else
965
+ raise RuntimeError, "Unrecognized section-type: #{field}"
966
+ end
967
+ modules << val
968
+ end
969
+ end
970
+ end
971
+ # CHECK FOR DUPLICATES (Must come BEFORE A-Z check).
972
+ modules_dup = modules.select { |n| modules.count(n) > 1 }
973
+ modules_dup.uniq!
974
+ # TODO - This is commented out because blufin-api needs blufin-core as a regular dependency and a '<type>test-jar</type>' (for the Mocks). This flags it as a duplicate.
975
+ # if modules_dup.length > 0
976
+ # modules_dup.each do |duplicate|
977
+ # @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_DUPLICATE, config_file, section, field, duplicate)
978
+ # end
979
+ # end
980
+ # CHECK IF IN ALPHABETICAL ORDER
981
+ modules.uniq!
982
+ modules_sorted = modules.sort
983
+ modules.each_with_index do |mvn_module, idx|
984
+ if modules_sorted[idx] != mvn_module
985
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_ORDER, config_file, section, field, mvn_module)
986
+ return
987
+ end
988
+ end
989
+ end
990
+ end
991
+
992
+ # Throw error if not in alphabetical order.
993
+ # @return void
994
+ def check_modules_are_alphabetical_and_not_duplicated(modules, section, field, type)
995
+ modules = modules.dup
996
+ config_file = type == TYPE_BLUFIN ? @config_file_blufin : @config_file_app
997
+ # CHECK FOR DUPLICATES (Must come BEFORE A-Z check).
998
+ modules_dup = modules.select { |n| modules.count(n) > 1 }
999
+ modules_dup.uniq!
1000
+ if modules_dup.length > 0
1001
+ modules_dup.each do |duplicate|
1002
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_DUPLICATE, config_file, section, field, duplicate)
1003
+ end
1004
+ end
1005
+ # CHECK IF IN ALPHABETICAL ORDER
1006
+ modules.uniq!
1007
+ modules_sorted = modules.sort
1008
+ modules.each_with_index do |mvn_module, idx|
1009
+ if modules_sorted[idx] != mvn_module
1010
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_ORDER, config_file, section, field, mvn_module)
1011
+ return
1012
+ end
1013
+ end
1014
+ end
1015
+
1016
+ # Gets an Array of core libs.
1017
+ # @return Array
1018
+ def get_core_libraries(site_path, type)
1019
+ if @core_libraries.nil?
1020
+ core_libraries = []
1021
+ core_libraries_with_children = get_core_libraries_with_children(type)
1022
+ Blufin::Files::get_dirs_in_dir(site_path).each do |path|
1023
+ path = get_path_fragment(path)
1024
+ if core_libraries_with_children.include?(path)
1025
+ Blufin::Files::get_dirs_in_dir("#{site_path}/#{path}").each do |path|
1026
+ path = get_path_fragment(path)
1027
+ core_libraries << path unless path == 'target'
1028
+ end
1029
+ else
1030
+ core_libraries << path unless path == 'target'
1031
+ end
1032
+ end
1033
+ @core_libraries = core_libraries
1034
+ end
1035
+ @core_libraries
1036
+ end
1037
+
1038
+ # Gets an Array of all libraries which have children.
1039
+ # @return Array
1040
+ def get_core_libraries_with_children(type)
1041
+ if @core_libraries_with_children.nil?
1042
+ parent_keys = @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_PARENTS].keys
1043
+ non_existent_parents = []
1044
+ core_libraries_with_children = []
1045
+ @data[type == TYPE_BLUFIN ? BLUFIN : @site_name].each do |key, data|
1046
+ if data.has_key?(BLUFIN_PARENT)
1047
+ parent = data[BLUFIN_PARENT]
1048
+ core_libraries_with_children << parent
1049
+ non_existent_parents << [parent, key] unless parent_keys.include?(parent)
1050
+ end
1051
+ end
1052
+ config_file = type == TYPE_BLUFIN ? @config_file_blufin : @config_file_app
1053
+ if non_existent_parents.any?
1054
+ non_existent_parents.each do |nep|
1055
+ @error_handler.add_error(Blufin::YmlErrorHandler::MAVEN_MODULE_UNDEFINED_PARENT, config_file, nep[1], BLUFIN_PARENT, nep[0]) unless parent_keys.include?(nep[0])
1056
+ end
1057
+ end
1058
+ core_libraries_with_children.sort!
1059
+ core_libraries_with_children.uniq!
1060
+ @core_libraries_with_children = core_libraries_with_children
1061
+ end
1062
+ @core_libraries_with_children
1063
+ end
1064
+
1065
+ # Returns an Array of colon (:) separated dependencies from all the internal dependencies.
1066
+ # @return Array
1067
+ def get_core_libraries_as_pair
1068
+ pairs = []
1069
+ @data[BLUFIN].each do |key, data|
1070
+ if data.has_key?(BLUFIN_PARENT)
1071
+ pairs << "org.blufin.#{get_core_lib_suffix(key).gsub('-', '.')}:#{key}"
1072
+ else
1073
+ pairs << "org.blufin:#{key}"
1074
+ end
1075
+ end
1076
+ pairs
1077
+ end
1078
+
1079
+ # Turns path/to/blufin-core -> blufin-core
1080
+ # @return String
1081
+ def get_path_fragment(path)
1082
+ path = path.split('/')
1083
+ path[path.length - 1]
1084
+ end
1085
+
1086
+ # Caches MVN dependencies.
1087
+ # @return Hash
1088
+ def map_dependencies(data_map_key)
1089
+ cache = {}
1090
+ dep_data = @data[data_map_key]
1091
+ if dep_data.is_a?(Array) || dep_data.length > 0
1092
+ dep_data.each do |dep|
1093
+ dep_hash = {}
1094
+ dep.each do |dep_inner|
1095
+ key = dep_inner.keys[0]
1096
+ val = dep_inner.values[0]
1097
+ case key
1098
+ when DEPENDENCIES_GROUP_ID
1099
+ dep_hash[:group] = val
1100
+ when DEPENDENCIES_ARTIFACT_ID
1101
+ dep_hash[:artifact] = val
1102
+ when DEPENDENCIES_VERSION
1103
+ dep_hash[:version] = val
1104
+ when DEPENDENCIES_EXCLUDE
1105
+ dep_hash[:exclude] = val
1106
+ else
1107
+ raise RuntimeError, "Unrecognized key: #{key}"
1108
+ end
1109
+ end
1110
+ raise RuntimeError, ":group must be defined: #{dep_hash.inspect}" if dep_hash[:group].nil?
1111
+ raise RuntimeError, ":artifact must be defined: #{dep_hash.inspect}" if dep_hash[:artifact].nil?
1112
+ raise RuntimeError, ":version must be defined: #{dep_hash.inspect}" if dep_hash[:version].nil?
1113
+ cache["#{dep_hash[:group]}:#{dep_hash[:artifact]}"] = dep_hash
1114
+ end
1115
+ end
1116
+ cache
1117
+ end
1118
+
1119
+ # Returns the group "suffix" (if any) for core libs -- or NIL.
1120
+ # @return Hash
1121
+ def get_core_lib_suffix(core_lib_name)
1122
+ @data[EXTRA_DATA][EXTRA_DATA_CORE_LIBS_WITH_CHILDREN].each do |core_lib_with_child|
1123
+ if core_lib_name =~ /\A#{core_lib_with_child}-/
1124
+ return core_lib_with_child.gsub(/\Ablufin-/, '')
1125
+ end
1126
+ end
1127
+ nil
1128
+ end
1129
+
1130
+ end
1131
+
1132
+ end