private static void LoadMaps() { foreach (var fileName in Directory.GetFiles(UtilitySettings.Default.MapLocation, "*.xml")) { using (var mapFile = File.Open(fileName, FileMode.Open)) { var mapDocument = XDocument.Load(mapFile); switch (MapReader.ReadHandlerType(mapDocument)) { case HandlerType.ModuleRegistration: ModuleRegistrarFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.TypeResolution: TypeResolverFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.LibraryReader: LibraryReaderFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.Verification: NodeVerifierFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.Translation: ArtifactTranslatorFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.NodeTranslation: NodeTranslatorFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.ModelTranslation: ModelTranslatorFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; case HandlerType.Writing: ArtifactWriterFactory.LoadMap(MapReader.ReadMap(mapDocument)); break; } } } }
public void Run() { // Verifies the xml document specified as the argument contains a valid HeD Schema artifact // Performs XSD validation, as well as expression-level semantic validation DoMessage("Loading catalog modules..."); try { LoadMaps(); RegisterModules(); using (var artifactFile = File.Open(InputFileName, FileMode.Open)) { DoMessage("Loading artifact document..."); var artifactDocument = XDocument.Load(artifactFile, LoadOptions.SetLineInfo); DoMessage("Verifying artifact schema..."); var schemaSet = new XmlSchemaSet(); foreach (var schemaLocation in UtilitySettings.Default.SchemaLocation.Split(';', ',', ' ')) { schemaSet.Add(null, schemaLocation); } //schemaSet.Compile(); var artifact = ArtifactReader.Read(artifactDocument, schemaSet, Path.GetDirectoryName(InputFileName)); DoMessage("Verifying artifact semantics..."); var artifactVerifier = new ArtifactVerifier(); var messages = artifactVerifier.Verify(artifact); bool isValid = true; foreach (var message in messages) { DoMessage(message.Message); if (!message.IsWarning) { isValid = false; } } if (isValid) { DoMessage("Artifact is valid."); if (!String.IsNullOrEmpty(TargetFormat)) { DoMessage(String.Format("Translating artifact to {0} format.", TargetFormat)); var translator = ArtifactTranslatorFactory.GetHandler(TargetFormat); var translatedArtifact = translator.Translate(artifact); var writer = ArtifactWriterFactory.GetHandler(TargetFormat); var outputFileName = GetOutputFileName(writer.GetExtension()); using (var outputFile = File.Open(outputFileName, FileMode.Create)) { writer.Write(outputFile, translatedArtifact); } DoMessage(String.Format("Artifact translated to output file: {0}", outputFileName)); } } } } catch (Exception ex) { DoMessage(ex.Message); } }