func main()

in wstl1/mapping_engine/main/main.go [146:211]


func main() {
	flag.Parse()

	dhConfig := &dhpb.DataHarmonizationConfig{}

	if *dhConfigFile != "" {
		if *mappingFile != "" || *harmonizeCodeDir != "" || *harmonizeUnitFile != "" || *libDir != "" {
			log.Fatal("data_harmonization_config_file_spec flag should not be set along with other configuration flags " +
				"(mapping_file_spec, harmonize_code_dir_spec, harmonize_unit_spec, lib_dir_spec).")
		}
		n := fileutil.MustRead(*dhConfigFile, "data harmonization config")
		if err := prototext.Unmarshal(n, dhConfig); err != nil {
			log.Fatalf("Failed to parse data harmonization config")
		}
	} else {
		dhConfig = &dhpb.DataHarmonizationConfig{
			StructureMappingConfig: &hpb.StructureMappingConfig{
				Mapping: &hpb.StructureMappingConfig_MappingLanguageString{
					MappingLanguageString: string(fileutil.MustRead(*mappingFile, "mapping")),
				},
			},
			HarmonizationConfig:     codeHarmonizationConfig(*harmonizeCodeDir),
			UnitHarmonizationConfig: unitHarmonizationConfig(*harmonizeUnitFile),
			LibraryConfig:           libConfigs(*libDir),
		}
	}

	tconfig := transform.TransformationConfig{
		LogTrace: *verbose,
	}

	var tr transform.Transformer
	var err error

	if tr, err = transform.NewTransformer(context.Background(), dhConfig, tconfig); err != nil {
		log.Fatalf("Failed to load mapping config: %v", err)
	}

	for _, f := range readInputs(*inputFile) {
		i := fileutil.MustRead(f, "input")

		ji, err := tr.ParseJSON(i)
		if err != nil {
			log.Fatalf("Failed to parse inputJSON in file %v: %v", f, err)
		}

		res, err := tr.Transform(ji)
		if err != nil {
			log.Fatalf("Mapping failed for input file %v: %v", f, err)
		}

		bres, err := json.MarshalIndent(res, "", "  ")
		if err != nil {
			log.Fatalf("Failed to serialize output: %v", err)
		}

		op := outputFileName(*outputDir, f)
		if *outputDir == "" {
			log.Printf("File %q\n\n%s\n", op, string(bres))
		} else {
			if err := ioutil.WriteFile(op, bres, fileWritePerm); err != nil {
				log.Fatalf("Could not write output file %q: %v", op, err)
			}
		}
	}
}