public CommandResult Execute(IEnumerable <string> inputParams)
            {
                AppioLogger.Warn(LoggingText.UnknownCommandCalled);
                var outputMessages = new MessageLines();

                outputMessages.Add(Constants.CommandResults.Failure, string.Empty);
                return(new CommandResult(false, outputMessages));
            }
示例#2
0
        public bool GenerateTypesSourceCodeFiles(string projectName, IModelData modelData)
        {
            // Verify if model has types
            if (string.IsNullOrEmpty(modelData.Types))
            {
                return(true);
            }

            // Verify types extension
            if (_fileSystem.GetExtension(modelData.Types) != Constants.FileExtension.ModelTypes)
            {
                AppioLogger.Warn(string.Format(LoggingText.NodesetCompilerExecutableFailsInvalidFile, modelData.Types));
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailureInvalidFile, projectName, modelData.Name, modelData.Types);
                return(false);
            }

            // Verify if types file exists
            var typesPath = _fileSystem.CombinePaths(projectName, Constants.DirectoryName.Models, modelData.Types);

            if (!_fileSystem.FileExists(typesPath))
            {
                AppioLogger.Warn(string.Format(LoggingText.NodesetCompilerExecutableFailsMissingFile, typesPath));
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailureMissingFile, projectName, modelData.Name, typesPath);
                return(false);
            }

            // Create a directory for generated C code
            var srcDirectory = _fileSystem.CombinePaths(projectName, Constants.DirectoryName.SourceCode, Constants.DirectoryName.ServerApp);

            CreateDirectoryForGeneratedModelsSourceCode(srcDirectory);

            // Build types source file and target files directories
            var modelName = _fileSystem.GetFileNameWithoutExtension(modelData.Name);
            var typesSourceRelativePath = @"../../" + _fileSystem.CombinePaths(Constants.DirectoryName.Models, modelData.Types);
            var typesTargetRelativePath = _fileSystem.CombinePaths(Constants.DirectoryName.InformationModels, modelName.ToLower());

            // Build types generation script arguments
            var generatedTypesArgs = Constants.ExecutableName.GenerateDatatypesScriptPath +
                                     string.Format(Constants.ExecutableName.GenerateDatatypesTypeBsd, typesSourceRelativePath) +
                                     " " +
                                     typesTargetRelativePath +
                                     Constants.InformationModelsName.Types;

            // Execute types generation script call
            var generatedTypesResult = _fileSystem.CallExecutable(Constants.ExecutableName.PythonScript, srcDirectory, generatedTypesArgs);

            if (!generatedTypesResult)
            {
                AppioLogger.Warn(LoggingText.GeneratedTypesExecutableFails);
                _outputMessage = string.Format(OutputText.GenerateInformationModelGenerateTypesFailure, projectName, modelData.Name, modelData.Types);
                return(false);
            }

            // Add generated types header file to server's meson build
            AdjustServerMesonBuildCFile(srcDirectory, modelName.ToLower() + Constants.InformationModelsName.TypesGenerated);

            return(true);
        }
示例#3
0
        public override void Generate(string appName, string filePrefix, uint keySize, uint days, string organization)
        {
            var openSSLConfigBuilder =
                new StringBuilder(_fileSystem.LoadTemplateFile(Resources.Resources.OpenSSLConfigTemplateFileName));

            openSSLConfigBuilder.Replace("$KEY_SIZE", keySize.ToString());
            openSSLConfigBuilder.Replace("$ORG_NAME", organization);
            openSSLConfigBuilder.Replace("$COMMON_NAME", appName);

            var certificateFolder     = _fileSystem.CombinePaths(appName, Constants.DirectoryName.Certificates);
            var certificateConfigPath = _fileSystem.CombinePaths(certificateFolder, Constants.FileName.CertificateConfig);

            try
            {
                _fileSystem.CreateDirectory(certificateFolder);
                _fileSystem.CreateFile(certificateConfigPath, openSSLConfigBuilder.ToString());
            }
            catch (Exception)
            {
                AppioLogger.Warn(string.Format(LoggingText.CertificateGeneratorFailureNonexistentDirectory, appName));
                return;
            }

            var separator = filePrefix == string.Empty ? "" : "_";

            try
            {
                _fileSystem.CallExecutable(Constants.ExecutableName.OpenSSL, certificateFolder, string.Format(Constants.ExternalExecutableArguments.OpenSSL, filePrefix + separator, days));
                _fileSystem.CallExecutable(Constants.ExecutableName.OpenSSL, certificateFolder, string.Format(Constants.ExternalExecutableArguments.OpenSSLConvertKeyFromPEM, filePrefix + separator + Constants.FileName.PrivateKeyPEM, filePrefix + separator + Constants.FileName.PrivateKeyDER));
            }
            catch (Exception)
            {
                AppioLogger.Warn(LoggingText.CertificateGeneratorFailureOpenSSLError);
            }

            _fileSystem.DeleteFile(_fileSystem.CombinePaths(certificateFolder, filePrefix + separator + Constants.FileName.PrivateKeyPEM));
            AppioLogger.Info(string.Format(LoggingText.CertificateGeneratorSuccess, filePrefix == string.Empty ? appName : appName + "/" + filePrefix));
        }
示例#4
0
        public ResolvedParameters <TIdent> ResolveParams(IEnumerable <string> parameters)
        {
            var resolvedStringParams = new string[_numStringParams];
            var resolvedBoolParams   = new bool[_numBoolParams];

            Array.Fill(resolvedBoolParams, false);

            var handledFlags = new List <Tuple <TIdent, string> >();

            var parameterArray = parameters as string[] ?? parameters.ToArray();

            for (var providedFlagNameIndex = 0; providedFlagNameIndex < parameterArray.Length; providedFlagNameIndex++)
            {
                var providedFlagName = parameterArray[providedFlagNameIndex];
                var flagIndex        = _flags.FindIndex(pair => pair.Name == providedFlagName);
                if (flagIndex == -1)
                {
                    AppioLogger.Warn(string.Format(LoggingText.UnknownParameterProvided, _commandName));
                    return(new ResolvedParameters <TIdent> {
                        ErrorMessage =
                            string.Format(OutputText.UnknownParameterProvided, providedFlagName, JoinFlagString())
                    });
                }

                switch (_flags[flagIndex].Type)
                {
                case IdentifierNames.DataType.String:
                    ++providedFlagNameIndex;
                    if (providedFlagNameIndex >= parameterArray.Length ||
                        parameterArray[providedFlagNameIndex] == string.Empty)
                    {
                        AppioLogger.Warn(string.Format(LoggingText.ParameterValueMissing, _commandName));
                        return(new ResolvedParameters <TIdent> {
                            ErrorMessage = string.Format(OutputText.ParameterValueMissing, _flags[flagIndex].Name)
                        });
                    }
                    resolvedStringParams[(int)(object)_flags[flagIndex].Identifier] = parameterArray[providedFlagNameIndex];
                    break;

                case IdentifierNames.DataType.Bool:
                    resolvedBoolParams[(int)(object)_flags[flagIndex].Identifier - _boolOffset] = true;
                    break;
                }

                handledFlags.Add(new Tuple <TIdent, string>(_flags[flagIndex].Identifier, providedFlagName));
            }

            if (ContainsDuplicateParameters(handledFlags, out var affectedFlag))
            {
                AppioLogger.Warn(string.Format(LoggingText.DuplicateParameterProvided, _commandName));
                return(new ResolvedParameters <TIdent> {
                    ErrorMessage =
                        string.Format(OutputText.DuplicateParameterProvided, affectedFlag)
                });
            }

            if (!FillDefaultValues(resolvedStringParams, out var missingParamString))
            {
                AppioLogger.Warn(string.Format(LoggingText.MissingRequiredParameter, _commandName));
                return(new ResolvedParameters <TIdent> {
                    ErrorMessage =
                        string.Format(OutputText.MissingRequiredParameter, missingParamString)
                });
            }

            return(new ResolvedParameters <TIdent>
            {
                StringParameters = new ParameterList <string, TIdent>(0, resolvedStringParams),
                BoolParameters = new ParameterList <bool, TIdent>(_boolOffset, resolvedBoolParams)
            });
        }
示例#5
0
        public bool GenerateNodesetSourceCodeFiles(string projectName, IModelData modelData, List <RequiredModelsData> requiredModelsData)
        {
            // Verify if nodeset file name is not empty
            if (string.IsNullOrEmpty(modelData.Name))
            {
                AppioLogger.Warn(LoggingText.GenerateInformationModelFailureEmptyModelName);
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailureEmptyModelName, projectName);
                return(false);
            }

            // Verify nodeset extension
            if (_fileSystem.GetExtension(modelData.Name) != Constants.FileExtension.InformationModel)
            {
                AppioLogger.Warn(string.Format(LoggingText.NodesetCompilerExecutableFailsInvalidModelFile, modelData.Name));
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailureInvalidModel, projectName, modelData.Name);
                return(false);
            }

            // Verify if nodeset file exists
            var modelPath = _fileSystem.CombinePaths(projectName, Constants.DirectoryName.Models, modelData.Name);

            if (!_fileSystem.FileExists(modelPath))
            {
                AppioLogger.Warn(string.Format(LoggingText.NodesetCompilerExecutableFailsMissingModelFile, modelData.Name));
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailureMissingModel, projectName, modelData.Name, modelPath);
                return(false);
            }

            // Validate nodeset
            if (!_modelValidator.Validate(modelPath, Resources.Resources.UANodeSetXsdFileName))
            {
                AppioLogger.Warn(string.Format(LoggingText.NodesetValidationFailure, modelData.Name));
                _outputMessage = string.Format(OutputText.NodesetValidationFailure, modelData.Name);
                return(false);
            }

            // Create a directory for generated C code
            var srcDirectory = _fileSystem.CombinePaths(projectName, Constants.DirectoryName.SourceCode, Constants.DirectoryName.ServerApp);

            CreateDirectoryForGeneratedModelsSourceCode(srcDirectory);

            // Build nodeset compiler script arguments
            var modelName           = _fileSystem.GetFileNameWithoutExtension(modelData.Name);
            var nodesetCompilerArgs = BuildNodesetCompilerArgs(modelName, modelData, requiredModelsData);

            // Execute nodeset compiler call
            var nodesetResult = _fileSystem.CallExecutable(Constants.ExecutableName.PythonScript, srcDirectory, nodesetCompilerArgs);

            if (!nodesetResult)
            {
                AppioLogger.Warn(LoggingText.NodesetCompilerExecutableFails);
                _outputMessage = string.Format(OutputText.GenerateInformationModelFailure, projectName, modelData.Name);
                return(false);
            }

            // Add nodeset header file to server's meson build
            AdjustServerMesonBuildCFile(srcDirectory, modelName);

            // Add nodeset function call to server code
            AdjustLoadInformationModelsCFile(srcDirectory, modelName);

            // Add method callback functioncs to server code
            AdjustMainCallbacksCFile(srcDirectory, modelPath, modelData);

            return(true);
        }