module PIM::Services::DataModelService
Public Instance Methods
__data_model_service()
click to toggle source
# File services.rb, line 948 def __data_model_service __service(:dataModelService) end
add_all(array, values)
click to toggle source
# File services.rb, line 636 def add_all array, values return if PIM.is_empty?(values) values = [values] unless PIM.is_array?(values) values.each do |value| array << value unless value.nil? end end
add_non_existing_category(data_module, value)
click to toggle source
# File services.rb, line 688 def add_non_existing_category data_module, value PIM.log_trace "setting category #{value} as non existing" @non_existing_categories ||= {} non_existing_module_categories = @non_existing_categories[data_module.to_s] if non_existing_module_categories.nil? non_existing_module_categories = [] @non_existing_categories[data_module.to_s] = non_existing_module_categories end return false if non_existing_module_categories.include?(value.to_s) non_existing_module_categories << value.to_s return true end
create_attributes(data_module, attribute_names)
click to toggle source
# File services.rb, line 606 def create_attributes data_module, attribute_names # Only get and create attributes which do not exist yet attribute_names = attribute_names.reject { |a| data_module.exists_attribute?(a) } return if PIM.is_empty?(attribute_names) # Load data model attributes from Java backend data_model_attributes = get_data_model_attributes(data_module, *attribute_names) # Load and create sub attributes, if necessary sub_attribute_names = [] data_model_attributes.each do |data_model_attribute| add_all(sub_attribute_names, PIM.get_value(data_model_attribute, :members)) add_all(sub_attribute_names, PIM.get_value(data_model_attribute, :key_members)) add_all(sub_attribute_names, PIM.get_value(data_model_attribute, :value_members)) params = PIM.get_value(data_model_attribute, :params) if params params = PIM.symbolized_snakeized_hash(params) add_all(sub_attribute_names, PIM.get_value(params, :value_attribute)) end end create_attributes data_module, sub_attribute_names if not sub_attribute_names.empty? # Create Ruby attributes data_model_attributes.each do |data_model_attribute| data_module.create_attribute(data_model_attribute) end end
create_validation_rules(data_module, rule_names: nil, tags: nil, attributes: nil)
click to toggle source
# File services.rb, line 813 def create_validation_rules data_module, rule_names: nil, tags: nil, attributes: nil if not PIM.is_empty?(rule_names) # Only get and create validation rules which do not exist yet rule_names = rule_names.reject { |v| data_module.exists_validation_rule?(v) } return [] if rule_names.empty? # Get all missing validation rules validation_rules = nil PIM::Utils.timed(group: "validation", key: "create_validation_rules-load", message: "Loaded #{rule_names.size} validation rule(s)") do validation_rules = get_validation_rules(data_module, *rule_names) end # Create Ruby validation rules PIM::Utils.timed(group: "validation", key: "create_validation_rules-create", message: "Created #{validation_rules.size} validation rule(s)") do validation_rules.each do |validation_rule| data_module.create_validation_rule(validation_rule) end end return validation_rules elsif not PIM.is_empty?(tags) or not PIM.is_empty?(attributes) # Determine the rule names to create found_rule_names = nil PIM::Utils.timed(group: "validation", key: "create_validation_rules-get", message: proc { "Got #{found_rule_names.size} validation rules name(s)" }) do found_rule_names = get_validation_rule_names_by_tags_and_attributes(data_module, tags: tags, attributes: attributes) end return [] if found_rule_names.nil? or found_rule_names.empty? # Actually create the rules, if necessary return create_validation_rules(data_module, rule_names: found_rule_names) else return [] end end
find_category(data_module, value)
click to toggle source
Search for the category specified by ‘value’ in a specific data model and create it, if found This method will query the backend for actual category and attribute definitions.
Example:
find_category
Gdsn3GpcModel, ‘10003959’
This will search for a category by the name of code of ‘10003959’ in the data model ‘Gdsn3GpcModel’. For this to work, the data model must be loaded beforehand!
# File services.rb, line 555 def find_category data_module, value PIM.log_trace "find_category: #{data_module} -> #{value}" # Check if both parameters are not empty return nil if data_module.nil? or PIM.is_empty?(value) # Check if category already exists category = data_module.category(value) return category unless category.nil? # Check if value has already been queried and no category could be found if is_non_existing_category?(data_module, value) PIM.log_trace "find_category: category #{value} was already set as non existing" return nil end # Load data model category from Java backend and create Ruby attributes and category data_model_category = get_data_model_category(data_module, value) PIM.log_trace "find_category: found: #{data_model_category}" if data_model_category # If category was found for a 'different' name, then check again if it already exists category_name = PIM.get_value(data_model_category, 'name') if category_name != value category = data_module.category(category_name) PIM.log_trace "find_category: found #{data_model_category} for category name '#{category_name}'" return category unless category.nil? end # Ensure, parent categories are created first if necessary parent_value = PIM.get_value(data_model_category, 'parent') parent_category = find_category(data_module, parent_value) if parent_category.nil? PIM.log_warn "Cannot create category '#{category_name}' because parent '#{parent_value}' does not exist" return nil end attributes = PIM.get_value(data_model_category, 'attributes') create_attributes(data_module, attributes) unless PIM.is_empty?(attributes) category = data_module.create_category(data_model_category) PIM.log_trace "find_category: created category #{category.as_json}" end # Add query to list of non existing categories if it could not be found add_non_existing_category(data_module, value) if category.nil? return category end
get_data_model_attributes(data_module, *attribute_names)
click to toggle source
# File services.rb, line 644 def get_data_model_attributes data_module, *attribute_names return data_module.get_data_model_attributes(*attribute_names) if data_module.respond_to?(:get_data_model_attributes) if is_java_service_available? return get_data_model_attributes_from_java(data_module, *attribute_names) elsif is_yaml_definition_available?(data_module) data_module.extend PIM::Services::DataModelServiceYaml return data_module.get_data_model_attributes_from_yaml(*attribute_names) else raise "Cannot get data model attributes, because JAVA services are not available and classification YAML file is not specified" end end
get_data_model_attributes_from_java(data_module, *attribute_names)
click to toggle source
# File services.rb, line 656 def get_data_model_attributes_from_java data_module, *attribute_names return __data_model_service.getDataModelAttributesForService(data_module.service_name, PIM.stringified_value(attribute_names.compact)) end
get_data_model_categories(data_module, *category_names)
click to toggle source
# File services.rb, line 665 def get_data_model_categories data_module, *category_names return data_module.get_data_model_categories(*category_names) if data_module.respond_to?(:get_data_model_categories) if is_java_service_available? return get_data_model_categories_from_java(data_module, *category_names) elsif is_yaml_definition_available?(data_module) data_module.extend PIM::Services::DataModelServiceYaml return data_module.get_data_model_categories_from_yaml(*category_names) else raise "Cannot get data model categories, because JAVA services are not available and classification YAML file is not specified" end end
get_data_model_categories_from_java(data_module, *category_names)
click to toggle source
# File services.rb, line 677 def get_data_model_categories_from_java data_module, *category_names return __data_model_service.getDataModelCategoriesForService(data_module.service_name, PIM.stringified_value(category_names.compact)) end
get_data_model_category(data_module, category_name)
click to toggle source
# File services.rb, line 660 def get_data_model_category data_module, category_name categories = get_data_model_categories(data_module, category_name) return categories.first unless categories.nil? end
get_data_model_option_lists_from_java(service_name, *option_list_names)
click to toggle source
# File services.rb, line 802 def get_data_model_option_lists_from_java service_name, *option_list_names return __data_model_service.getDataModelOptionListsForService(service_name, PIM.stringified_value(option_list_names.compact)) end
get_data_model_options(service, option_list_name, *option_names)
click to toggle source
# File services.rb, line 701 def get_data_model_options service, option_list_name, *option_names if PIM.has_module?(service) data_module = service service_name = data_module.service_name cache = data_module.cache else data_module = nil service_name = service cache = {} end option_list_name = option_list_name.to_s option_lists_cache = cache['option_lists'] ||= {} option_list_cache = option_lists_cache[option_list_name] ||= {} options_cache = option_list_cache['options'] ||= {} # 'Flag' to determine, if all options were already retrieved has_all_options = option_list_cache['all_options'] result_map = {} missing_option_names = [] option_names.each do |option_name| option_name = option_name.to_s option = options_cache[option_name] if option == false # Ignore non existing option next elsif not option.nil? # Add to result result_map[option_name] = option elsif not has_all_options # Add to list of missing options missing_option_names << option_name end end if not missing_option_names.empty? or (option_names.empty? and !has_all_options) if is_java_service_available? # Retrieve missing options from service options = get_data_model_options_from_java(service_name, option_list_name, *missing_option_names) elsif is_yaml_definition_available?(data_module) # Load option list from YAML data_module.extend PIM::Services::DataModelServiceYaml option_lists = data_module.get_data_model_option_lists_from_yaml(option_list_name) option_list = option_lists.first unless option_lists.nil? if option_list.nil? options = nil elsif option_names.empty? options = option_list.options else options = option_list.options.select { |o| missing_option_names.include?(o.name) } end else raise "Cannot get data model options, because JAVA services are not available and classification YAML file is not specified" end unless options.nil? options.each do |option| # Add to result next if result_map.include?(option.name) result_map[option.name] = option # Add to cache options_cache[option.name] = option # Remove from missing missing_option_names.delete(option.name) end option_list_cache['all_options'] = true if option_names.empty? end # Cache all unavailable options as non existent missing_option_names.each do |option_name| options_cache[option_name] = false end elsif has_all_options and not options_cache.empty? result_map = options_cache end return result_map.values end
get_data_model_options_from_java(service_name, option_list_name, *option_names)
click to toggle source
# File services.rb, line 806 def get_data_model_options_from_java service_name, option_list_name, *option_names return __data_model_service.getDataModelOptionListOptionsForService(service_name, option_list_name, nil, PIM.stringified_value(option_names.compact)) end
get_validation_rule_names_by_attributes(data_module, *attributes)
click to toggle source
# File services.rb, line 893 def get_validation_rule_names_by_attributes data_module, *attributes # Convert to array of compacted unique strings attributes = PIM.stringified_compact_unique_array(*attributes) if is_java_service_available? return get_validation_rule_names_by_attributes_from_java(data_module, *attributes) elsif is_yaml_definition_available?(data_module) data_module.extend PIM::Services::DataModelServiceYaml return data_module.get_validation_rule_names_by_attributes_from_yaml(*attributes) else raise "Cannot get data model validation rules, because JAVA services are not available and classification YAML file is not specified" end end
get_validation_rule_names_by_attributes_from_java(data_module, *attributes)
click to toggle source
# File services.rb, line 932 def get_validation_rule_names_by_attributes_from_java data_module, *attributes return __data_model_service.getValidationRuleNamesByAttributes(data_module.service_name, attributes) end
get_validation_rules(data_module, *validation_rule_names)
click to toggle source
# File services.rb, line 863 def get_validation_rules data_module, *validation_rule_names # Convert to array of compacted unique strings validation_rule_names = PIM.stringified_compact_unique_array(*validation_rule_names) if is_java_service_available? return get_validation_rules_from_java(data_module, *validation_rule_names) elsif is_yaml_definition_available?(data_module) data_module.extend PIM::Services::DataModelServiceYaml return data_module.get_validation_rules_from_yaml(*validation_rule_names) else raise "Cannot get data model validation rules, because JAVA services are not available and classification YAML file is not specified" end end
get_validation_rules_from_java(data_module, *names)
click to toggle source
# File services.rb, line 924 def get_validation_rules_from_java data_module, *names return __data_model_service.getValidationRules(data_module.service_name, names) end
is_java_service_available?()
click to toggle source
# File services.rb, line 940 def is_java_service_available? return (PIM::Services.is_java_services_available? and not __data_model_service.nil?) end
is_non_existing_category?(data_module, value)
click to toggle source
# File services.rb, line 681 def is_non_existing_category? data_module, value return false if @non_existing_categories.nil? non_existing_module_categories = @non_existing_categories[data_module.to_s] return false if non_existing_module_categories.nil? return non_existing_module_categories.include?(value.to_s) end
is_yaml_definition_available?(data_module)
click to toggle source
# File services.rb, line 944 def is_yaml_definition_available? data_module return (not data_module.nil? and not data_module.data_model_definitions_yaml.nil?) end