config_tools: Add vue-json-schema-form and advanced custom component for IVSHMEM field

1. add Vue devtools support
2. update project dependencies
3. refactor configurator source code tree for private library hook
4. fix build issue
5. dynamic load scenario JSON schema(fix cache issue)
6. add vjsf 1.12.2 (latest) for private package dependencies
7. remove vjsf unnecessary files
8. use private vjsf as configurator dependencies
9. Add custom IVSHMEM_REGION widget
10. add a script to populate default values
11. get default values before export scenario xml
12. specify widgets in XML schema
13. add missing vjsf license file
14. populate default values to empty nodes
15. when user clicks save button, update formData with each field default value
16. fix when the user clicks the save button will collapse configFom
17. add success message for saving scenario XML

vue-json-schema-form 1.12.2 (latest)link: b30ea7c2d6/packages/lib

Tracked-On: #6691
Signed-off-by: Weiyi Feng <weiyix.feng@intel.com>
This commit is contained in:
Weiyi-Feng
2022-04-28 23:49:23 +08:00
committed by acrnsi-robot
parent e36b615fe1
commit 06b942f5eb
154 changed files with 7977 additions and 490 deletions

View File

@@ -58,6 +58,11 @@ class DefaultValuePopulator(ScenarioTransformer):
return [new_node]
def fill_empty_node(self, xsd_element_node, xml_parent_node, xml_empty_node):
default_value = self.get_default_value(xsd_element_node, xml_parent_node)
if default_value is not None:
xml_empty_node.text = default_value
class DefaultValuePopulatingStage(PipelineStage):
uses = {"schema_etree", "scenario_etree"}
provides = {"scenario_etree"}

View File

@@ -26,6 +26,7 @@ open(output_file, 'w', encoding='utf-8').write(json_schema)
"""
__package__ = 'scenario_config.jsonschema'
import os
import json
import re
@@ -144,6 +145,12 @@ class XS2JS:
json_schema["definitions"] = self._get_definitions()
return json_schema
def convert_widget_config(self, annotation, js_ele):
if '@acrn:widget' in annotation:
js_ele['ui:widget'] = annotation['@acrn:widget']
if '@acrn:widget-options' in annotation:
js_ele['ui:options'] = {eval(k): eval(v) for k, v in [kv.split('=') for kv in annotation['@acrn:widget-options'].split(',')]}
def xst2jst(self, type_name) -> str:
"""convert xml schema type name to json schema type name"""
if type_name in self.xst2jst_mapping:
@@ -188,6 +195,10 @@ class XS2JS:
enum_names.append(enum_name)
js_st["enumNames"] = enum_names
# widget and its options
if 'xs:annotation' in obj:
self.convert_widget_config(obj['xs:annotation'], js_st)
js_st.update(self.xsa2jsa(restriction))
return js_st
elif 'xs:union' in obj:
@@ -337,6 +348,9 @@ class XS2JS:
else:
js_ele['enum'] = dynamic_enum
# widget and its options
self.convert_widget_config(element['xs:annotation'], js_ele)
properties[name] = js_ele
# build result
@@ -375,7 +389,7 @@ def main():
config_tools = config_tools.parent
schema_file = config_tools / 'schema' / 'sliced.xsd'
json_schema_file = config_tools / 'configurator' / 'src' / 'assets' / 'schema' / 'scenario.json'
json_schema_file = config_tools / 'configurator' / 'packages' / 'configurator' / 'src' / 'assets' / 'schema' / 'scenario.json'
# Convert XSD to JSON Schema
# Todo: turn off it

View File

@@ -68,7 +68,10 @@ class ScenarioTransformer:
self.add_and_transform_missing_node(xsd_element_node, xml_node, new_node_index=index)
else:
while len(children) > 0 and children[0][1].tag == element_name:
self.transform_node(xsd_element_node, children.pop(0)[1])
xml_child_node = children.pop(0)[1]
if self.complex_type_of_element(xsd_element_node, xml_child_node) is None and not xml_child_node.text:
self.fill_empty_node(xsd_element_node, xml_node, xml_child_node)
self.transform_node(xsd_element_node, xml_child_node)
def transform_all(self, xsd_all_node, xml_node):
for xsd_element_node in xsd_all_node.findall("xs:element", namespaces=self.xpath_ns):
@@ -83,6 +86,8 @@ class ScenarioTransformer:
self.add_and_transform_missing_node(xsd_element_node, xml_node)
else:
for xml_child_node in xml_children:
if self.complex_type_of_element(xsd_element_node, xml_child_node) is None and not xml_child_node.text:
self.fill_empty_node(xsd_element_node, xml_node, xml_child_node)
self.transform_node(xsd_element_node, xml_child_node)
def add_and_transform_missing_node(self, xsd_element_node, xml_parent_node, new_node_index=None):
@@ -92,6 +97,9 @@ class ScenarioTransformer:
def add_missing_nodes(self, xsd_element_node, xml_parent_node, new_node_index):
return []
def fill_empty_node(self, xsd_element_node, xml_parent_node, xml_empty_node):
pass
def transform(self, xml_etree):
self.xml_etree = xml_etree