44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import yaml
|
|
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
|
|
|
|
@dataclass
|
|
class FieldMapping:
|
|
cobol_field: str
|
|
java_field: str
|
|
field_type: str = "string"
|
|
precision: int = 0
|
|
trim: bool = False
|
|
format: str = ""
|
|
init_strategy: str = "auto"
|
|
|
|
|
|
@dataclass
|
|
class MappingConfig:
|
|
program: str = ""
|
|
dialect: str = "ibm"
|
|
field_mappings: list[FieldMapping] = field(default_factory=list)
|
|
redefines_strategy: dict = field(default_factory=dict)
|
|
|
|
@classmethod
|
|
def from_yaml(cls, path: str) -> "MappingConfig":
|
|
data = yaml.safe_load(Path(path).read_text())
|
|
c = cls()
|
|
c.program = data.get("program", "")
|
|
c.dialect = data.get("dialect", "ibm")
|
|
for fm in data.get("field_mapping", []):
|
|
c.field_mappings.append(FieldMapping(**fm))
|
|
c.redefines_strategy = data.get("redefines_strategy", {})
|
|
return c
|
|
|
|
def get_java_field(self, cobol_name: str) -> str:
|
|
for m in self.field_mappings:
|
|
if m.cobol_field == cobol_name:
|
|
return m.java_field
|
|
return cobol_name
|
|
|
|
|
|
_m = FieldMapping(cobol_field="BR-AMT", java_field="billAmount", field_type="decimal", precision=2)
|
|
assert _m.cobol_field == "BR-AMT"
|