コード例 #1
0
        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;
                    }
                }
            }
        }
コード例 #2
0
        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);
            }
        }