Ignore:
Timestamp:
8/4/2010 9:44:20 AM (22 months ago)
Author:
lowjoel
Message:

Allow the user to specify the Name or the GUID of the erasure method, to increase usability of the CLI. The name can be used as a convenient shorthand, the GUID must be used in the event of ambiguity.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser/Eraser/Program.cs

    r2232 r2233  
    9393            /// The erasure method which the user specified on the command line. 
    9494            /// </summary> 
    95             [Arg("method", "The erasure method to use", typeof(Guid), false, null, null)] 
    96             public Guid ErasureMethod { get; set; } 
     95            [Arg("method", "The erasure method to use", typeof(string), false, null, null)] 
     96            public string ErasureMethod { get; set; } 
    9797 
    9898            /// <summary> 
     
    322322 
    323323parameters for addtask: 
    324   eraser addtask [/method=<methodGUID>] [/schedule=(now|manually|restart)] <target> [target [...]] 
     324  eraser addtask [/method=(<methodGUID>|<methodName>)] [/schedule=(now|manually|restart)] <target> [target [...]] 
    325325 
    326326  /method             The Erasure method to use. 
     
    332332                      is next restarted. 
    333333 
    334   where target is: 
     334  where target is one of more of: 
    335335{0} 
    336336 
     
    341341 
    342342parameters for importtasklist: 
    343   eraser importtasklist (file)[...] 
    344  
    345   [file]              A list of one or more files to import. 
     343  eraser importtasklist <file>[...] 
     344 
     345    file               A list of one or more files to import. 
    346346 
    347347All arguments are case sensitive. 
     
    398398            AddTaskArguments arguments = (AddTaskArguments)arg; 
    399399 
    400             //Create the task then set the method as well as schedule 
     400            //Create the task 
    401401            Task task = new Task(); 
    402             ErasureMethod method = arguments.ErasureMethod == Guid.Empty ? 
     402 
     403            //Get the erasure method the user wants to use 
     404            ErasureMethod method = string.IsNullOrEmpty(arguments.ErasureMethod) ? 
    403405                ErasureMethodRegistrar.Default : 
    404                 ManagerLibrary.Instance.ErasureMethodRegistrar[arguments.ErasureMethod]; 
     406                ErasureMethodFromNameOrGuid(arguments.ErasureMethod); 
     407 
     408            //Define the schedule 
    405409            switch (arguments.Schedule.ToUpperInvariant()) 
    406410            { 
     
    442446                        { 
    443447                            //Yes, it is an ambiguity. Throw an error. 
    444                             throw new InvalidOperationException("Ambiguous argument: {0} can be " + 
    445                                 "handled by more than one erasure target."); 
     448                            throw new ArgumentException(S._("Ambiguous argument: {0} can be " + 
     449                                "handled by more than one erasure target.", argument)); 
    446450                        } 
    447451                    } 
     
    467471            using (eraserClient = CommandConnect()) 
    468472                eraserClient.Tasks.Add(task); 
     473        } 
     474 
     475        private static ErasureMethod ErasureMethodFromNameOrGuid(string param) 
     476        { 
     477            try 
     478            { 
     479                return ManagerLibrary.Instance.ErasureMethodRegistrar[new Guid(param)]; 
     480            } 
     481            catch (FormatException) 
     482            { 
     483                //Invalid GUID. Check every registered erasure method for the name 
     484                string upperParam = param.ToUpperInvariant(); 
     485                ErasureMethod result = null; 
     486                foreach (ErasureMethod method in ManagerLibrary.Instance.ErasureMethodRegistrar) 
     487                { 
     488                    if (method.Name.ToUpperInvariant() == upperParam) 
     489                        if (result == null) 
     490                            result = method; 
     491                        else 
     492                            throw new ArgumentException(S._("Ambiguous erasure method name: {0} " + 
     493                                "identifies more than one erasure method.", param)); 
     494                } 
     495            } 
     496 
     497            throw new ArgumentException(S._("The provided Erasure Method '{0}' does not exist.", 
     498                param)); 
    469499        } 
    470500 
Note: See TracChangeset for help on using the changeset viewer.