Example #1
0
        private ABIExitCode CompileMetadata(MetadataFile metadataFile, List<MetadataFile> commonMetadataFiles)
        {
            _logger.Info("Metadata file process starting");

            #region Metadata

            _logger.Info("Parsing metadata file");
            metadataFile.ParseJson();

            #endregion

            #region Common metadata

            foreach (var commonMetadata in commonMetadataFiles)
            {
                _logger.Info("Parsing common metadata file '{0}'", commonMetadata.RelativePath);
                commonMetadata.ParseJson();

                _logger.Info("Merging common metadata file '{0}'", commonMetadata.RelativePath);
                metadataFile.Json.Merge(commonMetadata.Json, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });
            }

            #endregion

            #region Extended metadata

            _logger.Info("Looking for extended metadata");
            _logger.Debug("Extended metadata file '{0}'", metadataFile.ExtendedRelativePath);

            if (!File.Exists(metadataFile.ExtendedFullName))
            {
                _logger.Info("Extended metadata file not found");
            }
            else
            {
                _logger.Info("Parsing extended metadata file '{0}'", metadataFile.ExtendedRelativePath);
                metadataFile.ParseExtendedJson();

                _logger.Info("Merging extended metadata file '{0}'", metadataFile.ExtendedRelativePath);
                metadataFile.Json.Merge(metadataFile.ExtendedJson, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });
            }

            #endregion

            #region Analyze metadata

            _logger.Info("Analyzing metadata");
            if (metadataFile.Json["ABI3"] == null)
                return ABIExitCode.ErrorABISectionMissingInMetadata;

            _logger.Info("Reading project directives");
            _logger.Info("\tTargetSQLPlatformVersion: '{0}'", metadataFile.TargetSQLPlatformVersion);

            _logger.Info("Reading template directives");
            if (metadataFile.Template == null)
                return ABIExitCode.ErrorTemplateSectionMissingInMetadata;

            _logger.Info("\tPhase: '{0}'", metadataFile.Phase);
            _logger.Info("\tPattern: '{0}'", metadataFile.Pattern);
            _logger.Info("\tSource: '{0}'", metadataFile.Source);
            _logger.Info("\tImplementation: '{0}'", metadataFile.Implementation);
            _logger.Info("\tVersion: '{0}'", metadataFile.Version);

            if (string.IsNullOrEmpty(metadataFile.Pattern))
                return ABIExitCode.ErrorTemplatePatternMissingInMetadata;

            _logger.Debug(metadataFile.Json);

            _logger.Info("Resolving json references");
            metadataFile.ResolveJsonReferences();

            _logger.Info("Resolving plugin expressions");
            metadataFile.ResolvePluginExpressions();

            #endregion

            #region Compile metadata

            _logger.Info("Generating compiler metadata");
            var compilerInfo = new
            {
                ABI3 = new
                {
                    Compiler = new
                    {
                        CompilationDateTime = DateTime.Now.ToString("yyyyMMdd HH:mm:ss")
                    }
                }
            };
            JObject compilerMetadata = JObject.Parse(JsonConvert.SerializeObject(compilerInfo));

            _logger.Info("Merging compiler metadata");
            metadataFile.Json.Merge(compilerMetadata, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });

            #endregion

            #region Schema validation

            _logger.Info("Looking for $schema");
            string fileSchema = (string)metadataFile.Json["$schema"];

            if (string.IsNullOrEmpty(fileSchema))
            {
                _logger.Info("$schema element not found, skipping validation");
            }
            else
            {
                _logger.Info("$schema element found, attempting validation");

                if (fileSchema.StartsWith("/")) fileSchema = "." + fileSchema;
                fileSchema = Path.GetFullPath(Path.Combine(_options.RootPath, fileSchema.Replace("/", "\\")));

                _logger.Debug("$schema file path is '{0}'", fileSchema);

                if (!File.Exists(fileSchema))
                {
                    _logger.Warn("$schema file not found, cannot validate json metadata");
                }
                else
                {
                    var jsonSchema = JSchema.Parse(File.ReadAllText(fileSchema));

                    IList<ValidationError> errors;
                    if (!metadataFile.Json.IsValid(jsonSchema, out errors))
                    {
                        metadataFile.Result.Warnings += ProcessSchemaValidationErrors(errors);
                    }
                    else
                    {
                        _logger.Info("$schema is valid");
                    }
                }
            }

            #endregion

            _logger.Info("Metadata file process completed");

            if (metadataFile.Result.Warnings > 0)
                return ABIExitCode.CompileCompletedWithWarnings;

            return ABIExitCode.CompileCompleted;
        }
Example #2
0
        private ABIExitCode CompileMetadata(MetadataFile metadataFile, List <MetadataFile> commonMetadataFiles)
        {
            _logger.Info("Metadata file process starting");

            #region Metadata

            _logger.Info("Parsing metadata file");
            metadataFile.ParseJson();

            #endregion

            #region Common metadata

            foreach (var commonMetadata in commonMetadataFiles)
            {
                _logger.Info("Parsing common metadata file '{0}'", commonMetadata.RelativePath);
                commonMetadata.ParseJson();

                _logger.Info("Merging common metadata file '{0}'", commonMetadata.RelativePath);
                metadataFile.Json.Merge(commonMetadata.Json, new JsonMergeSettings()
                {
                    MergeArrayHandling = MergeArrayHandling.Union
                });
            }

            #endregion

            #region Extended metadata

            _logger.Info("Looking for extended metadata");
            _logger.Debug($"Extended metadata file '{ metadataFile.ExtendedRelativePath }'");

            if (!File.Exists(metadataFile.ExtendedFullName))
            {
                _logger.Info("Extended metadata file not found");
            }
            else
            {
                _logger.Info($"Parsing extended metadata file '{  metadataFile.ExtendedRelativePath }'");
                metadataFile.ParseExtendedJson();

                _logger.Info($"Merging extended metadata file '{ metadataFile.ExtendedRelativePath }'");
                metadataFile.Json.Merge(metadataFile.ExtendedJson, new JsonMergeSettings()
                {
                    MergeArrayHandling = MergeArrayHandling.Union
                });
            }

            #endregion

            #region Analyze metadata

            _logger.Info("Analyzing metadata");

            if (metadataFile.Json["ABI3"] == null)
            {
                return(ABIExitCode.ErrorABISectionMissingInMetadata);
            }

            _logger.Info("Reading project directives");
            _logger.Info($"\tTargetSQLPlatformVersion: '{ metadataFile.TargetSQLPlatformVersion }'");

            _logger.Info("Reading template directives");
            if (metadataFile.Template == null)
            {
                return(ABIExitCode.ErrorTemplateSectionMissingInMetadata);
            }

            _logger.Info($"\tPhase: '{ metadataFile.Phase }'");
            _logger.Info($"\tPattern: '{ metadataFile.Pattern }'");
            _logger.Info($"\tSource: '{ metadataFile.Source }'");
            _logger.Info($"\tImplementation: '{ metadataFile.Implementation }'");
            _logger.Info($"\tVersion: '{ metadataFile.Version }'");

            if (string.IsNullOrEmpty(metadataFile.Pattern))
            {
                return(ABIExitCode.ErrorTemplatePatternMissingInMetadata);
            }

            _logger.Debug(metadataFile.Json);

            _logger.Info("Resolving json references");
            metadataFile.ResolveJsonReferences();

            _logger.Info("Resolving plugin expressions");
            metadataFile.ResolvePluginExpressions();

            #endregion

            #region Compile metadata

            _logger.Info("Generating compiler metadata");
            var compilerInfo = new
            {
                ABI3 = new
                {
                    Compiler = new
                    {
                        CompilationDateTime = DateTime.Now.ToString("yyyyMMdd HH:mm:ss")
                    }
                }
            };
            JObject compilerMetadata = JObject.Parse(JsonConvert.SerializeObject(compilerInfo));

            _logger.Info("Merging compiler metadata");
            metadataFile.Json.Merge(compilerMetadata, new JsonMergeSettings()
            {
                MergeArrayHandling = MergeArrayHandling.Union
            });

            #endregion

            #region Schema validation

            _logger.Info("Looking for $schema");

            string fileSchema = (string)metadataFile.Json["$schema"];

            if (string.IsNullOrEmpty(fileSchema))
            {
                _logger.Info("$schema element not found, skipping validation");
            }
            else
            {
                _logger.Info("$schema element found, attempting validation");

                if (fileSchema.StartsWith("/"))
                {
                    fileSchema = "." + fileSchema;
                }

                fileSchema = Path.GetFullPath(Path.Combine(_options.RootPath, fileSchema.Replace("/", "\\")));

                _logger.Debug($"$schema file path is '{ fileSchema }'");

                if (!File.Exists(fileSchema))
                {
                    _logger.Warn("$schema file not found, cannot validate json metadata");
                }
                else
                {
                    var jsonSchema = JSchema.Parse(File.ReadAllText(fileSchema));

                    IList <ValidationError> errors;
                    if (!metadataFile.Json.IsValid(jsonSchema, out errors))
                    {
                        metadataFile.Result.Warnings += ProcessSchemaValidationErrors(errors);
                    }
                    else
                    {
                        _logger.Info("$schema is valid");
                    }
                }
            }

            #endregion

            _logger.Info("Metadata file process completed");

            if (metadataFile.Result.Warnings > 0)
            {
                return(ABIExitCode.CompileCompletedWithWarnings);
            }

            return(ABIExitCode.CompileCompleted);
        }