コード例 #1
0
 private static Command.Argument Translate(RoomieCommandArgument argument)
 {
     return new Command.Argument(
         name: argument.Name,
         defaultValue: argument.DefaultValue,
         hasDefaultValue: argument.HasDefault,
         type: Translate(argument.Type)
     );
 }
コード例 #2
0
ファイル: CommandUtilities.cs プロジェクト: Mavtak/roomie
        public static IEnumerable <RoomieCommandArgument> GetArgumentsFromAttributes(Type type)
        {
            foreach (ParameterAttribute parameter in type.GetCustomAttributes(typeof(ParameterAttribute), true))
            {
                var argument = new RoomieCommandArgument(
                    name: parameter.Name,
                    type: parameter.Type,
                    defaultValue: parameter.Default,
                    hasDefault: parameter.HasDefault
                    );

                yield return(argument);
            }
        }
コード例 #3
0
ファイル: CommandUtilities.cs プロジェクト: Mavtak/roomie
        public static IEnumerable<RoomieCommandArgument> GetArgumentsFromAttributes(Type type)
        {
            foreach (ParameterAttribute parameter in type.GetCustomAttributes(typeof(ParameterAttribute), true))
            {
                var argument = new RoomieCommandArgument(
                    name: parameter.Name,
                    type: parameter.Type,
                    defaultValue: parameter.Default,
                    hasDefault: parameter.HasDefault
                    );

                yield return argument;
            }
        }
コード例 #4
0
ファイル: Define.cs プロジェクト: Mavtak/roomie
        protected override void Execute_Definition(RoomieCommandContext context)
        {
            var commandLibrary = context.CommandLibrary;
            var interpreter = context.Interpreter;
            var parameterTypes = context.ArgumentTypes;
            var originalCommand = context.OriginalCommand;
            var innerCommands = originalCommand.InnerCommands;

            if (originalCommand == null)
            {
                throw new RoomieRuntimeException("No custom command definition");
            }

            if (innerCommands.Select("Subcommands") == null)
            {
                throw new RoomieRuntimeException("No subcommands specified");
            }

            string group = context.ReadParameter("Group").Value;
            string name = context.ReadParameter("Name").Value;
            string description = context.ReadParameter("Description").Value;
            if (String.IsNullOrWhiteSpace(description))
            {
                description = null;
            }

            List<RoomieCommandArgument> arguments = new List<RoomieCommandArgument>();

            var argumentsDefinition = innerCommands.Select("Arguments");

            if (argumentsDefinition != null)
            {
                foreach (var argumentDefinition in argumentsDefinition.InnerCommands)
                {
                    if (!argumentDefinition.Parameters.ContainsParameterName("Name"))
                    {
                        throw new RoomieRuntimeException("\"Name\" not specified in an argument listing for the " + group + "." + name + " custom command.");
                    }
                    string argumentName = argumentDefinition.Parameters["Name"].Value;

                    if (!argumentDefinition.Parameters.ContainsParameterName("Type"))
                    {
                        throw new RoomieRuntimeException("Type not specified for the \"" + argumentName + "\" argumet in an argument listing for the " + group + "." + name + " custom command.");
                    }
                    string typeString = argumentDefinition.Parameters["Type"].Value;
                    var type = parameterTypes[typeString];
                    //TODO: catch not found exception
                    if (!argumentDefinition.Parameters.ContainsParameterName("Default"))
                    {
                        var argument = new RoomieCommandArgument(
                            name: argumentName,
                            type: type
                            );
                        arguments.Add(argument);
                    }
                    else
                    {
                        string defaultValue = argumentDefinition.Parameters["Default"].Value;
                        var argument = new RoomieCommandArgument(
                            name: argumentName,
                            type: type,
                            defaultValue: defaultValue,
                            hasDefault: true
                            );
                        arguments.Add(argument);
                    }
                }
            }

            var subcommands = innerCommands.Select("Subcommands").InnerCommands;

            var dynamicCommand = new RoomieDynamicCommand(group, name, arguments, subcommands, description);

            commandLibrary.AddCommand(dynamicCommand);
        }