mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-11 05:39:45 +00:00
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:
@@ -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"}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user