Index: base/command_line_validator.cc |
diff --git a/base/command_line_validator.cc b/base/command_line_validator.cc |
deleted file mode 100644 |
index ef2cc7620d5147f82005345a8be2cc900bb83917..0000000000000000000000000000000000000000 |
--- a/base/command_line_validator.cc |
+++ /dev/null |
@@ -1,256 +0,0 @@ |
-// Copyright 2008-2009 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
-// ======================================================================== |
- |
-#include "omaha/base/command_line_validator.h" |
- |
-#include <atlbase.h> |
- |
-#include "omaha/base/command_line_parser.h" |
-#include "omaha/base/debug.h" |
-#include "omaha/base/error.h" |
-#include "omaha/base/logging.h" |
-#include "omaha/base/utils.h" |
- |
-namespace omaha { |
- |
-CommandLineValidator::CommandLineValidator() : scenario_sequence_number_(0) { |
-} |
- |
-CommandLineValidator::~CommandLineValidator() { |
- Clear(); |
-} |
- |
-HRESULT CommandLineValidator::CreateScenario(const CString& scenario_name) { |
- if (scenarios_.find(scenario_name) != scenarios_.end()) { |
- return E_INVALIDARG; |
- } |
- |
- ScenarioParameters scenario_parameters; |
- scenarios_[scenario_name] = scenario_parameters; |
- return S_OK; |
-} |
- |
-// TODO(Omaha): Instead of creating the scenario in the map then populating it, |
-// which requires these methods to know about the map, verify the scenario |
-// exists, etc. - why not build the scenario then add it to the map? That seems |
-// more straightforward. |
-HRESULT CommandLineValidator::AddScenarioParameter( |
- const CString& scenario_name, |
- const CString& switch_name, |
- int num_required_parameters) { |
- MapScenariosIter iter = scenarios_.find(scenario_name); |
- if (iter == scenarios_.end()) { |
- return E_INVALIDARG; |
- } |
- |
- ScenarioParameter* scenario_parameter = |
- new ScenarioParameter(switch_name, num_required_parameters); |
- (*iter).second.required.push_back(scenario_parameter); |
- return S_OK; |
-} |
- |
-HRESULT CommandLineValidator::AddOptionalScenarioParameter( |
- const CString& scenario_name, |
- const CString& switch_name, |
- int num_required_parameters) { |
- MapScenariosIter iter = scenarios_.find(scenario_name); |
- if (iter == scenarios_.end()) { |
- return E_INVALIDARG; |
- } |
- |
- ScenarioParameter* scenario_parameter = |
- new ScenarioParameter(switch_name, num_required_parameters); |
- (*iter).second.optional.push_back(scenario_parameter); |
- return S_OK; |
-} |
- |
-HRESULT CommandLineValidator::CreateScenarioFromCmdLine( |
- const CString& command_line, |
- CString* scenario_name) { |
- ASSERT1(scenario_name); |
- |
- CommandLineParser parser; |
- HRESULT hr = parser.ParseFromString(command_line); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- // Generate a unique scenario name. |
- CString scenario_name_str; |
- do { |
- ++scenario_sequence_number_; |
- scenario_name_str.Format(_T("scenario_%d"), scenario_sequence_number_); |
- } while (scenarios_.find(scenario_name_str) != scenarios_.end()); |
- |
- CreateScenario(scenario_name_str); |
- |
- int switch_count = parser.GetSwitchCount(); |
- for (int idx_switch = 0; idx_switch < switch_count; ++idx_switch) { |
- CString switch_name; |
- hr = parser.GetSwitchNameAtIndex(idx_switch, &switch_name); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- int arg_count = 0; |
- hr = parser.GetSwitchArgumentCount(switch_name, &arg_count); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = AddScenarioParameter(scenario_name_str, switch_name, arg_count); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- } |
- |
- switch_count = parser.GetOptionalSwitchCount(); |
- for (int idx_switch = 0; idx_switch < switch_count; ++idx_switch) { |
- CString switch_name; |
- hr = parser.GetOptionalSwitchNameAtIndex(idx_switch, &switch_name); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- int arg_count = 0; |
- hr = parser.GetOptionalSwitchArgumentCount(switch_name, &arg_count); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- |
- hr = AddOptionalScenarioParameter(scenario_name_str, |
- switch_name, |
- arg_count); |
- if (FAILED(hr)) { |
- return hr; |
- } |
- } |
- |
- *scenario_name = scenario_name_str; |
- |
- return S_OK; |
-} |
- |
-HRESULT CommandLineValidator::Validate( |
- const CommandLineParser& command_line_parser, |
- CString* scenario_name) const { |
- // Attempt to verify the data within the command_line_parser against each of |
- // the scenarios. |
- MapScenariosConstIter scenarios_iter; |
- for (scenarios_iter = scenarios_.begin(); |
- scenarios_iter != scenarios_.end(); |
- ++scenarios_iter) { |
- // Make sure we have a match for the number of switches in this scenario. |
- int parser_switch_count = command_line_parser.GetSwitchCount(); |
- int scenario_required_switch_count = |
- (*scenarios_iter).second.required.size(); |
- int scenario_optional_switch_count = |
- (*scenarios_iter).second.optional.size(); |
- |
- if (parser_switch_count < scenario_required_switch_count || |
- parser_switch_count > scenario_required_switch_count + |
- scenario_optional_switch_count) { |
- continue; |
- } |
- |
- if (DoesScenarioMatch(command_line_parser, (*scenarios_iter).second)) { |
- *scenario_name = (*scenarios_iter).first; |
- return S_OK; |
- } |
- } |
- |
- return GOOGLEUPDATE_COMMANDLINE_E_NO_SCENARIO_HANDLER_MATCHED; |
-} |
- |
-bool CommandLineValidator::DoesScenarioMatch( |
- const CommandLineParser& command_line_parser, |
- const ScenarioParameters& scenario_parameters) const { |
- // Make sure that each switch matches with the right number of arguments. |
- ScenarioParameterVectorConstIter parameter_iter; |
- for (parameter_iter = scenario_parameters.required.begin(); |
- parameter_iter != scenario_parameters.required.end(); |
- ++parameter_iter) { |
- CString current_switch_name = (*parameter_iter)->switch_name_; |
- // This would probably allow duplicate switches (i.e. /c /c) in a command |
- // line. |
- if (!command_line_parser.HasSwitch(current_switch_name)) { |
- return false; |
- } |
- |
- int arg_count = 0; |
- HRESULT hr = command_line_parser.GetSwitchArgumentCount(current_switch_name, |
- &arg_count); |
- if (FAILED(hr)) { |
- return false; |
- } |
- |
- int switch_arg_count = (*parameter_iter)->num_required_parameters_; |
- if (arg_count != switch_arg_count) { |
- return false; |
- } |
- } |
- |
- int parser_optional_switch_count = command_line_parser.GetSwitchCount() - |
- scenario_parameters.required.size(); |
- for (parameter_iter = scenario_parameters.optional.begin(); |
- parser_optional_switch_count != 0 && |
- parameter_iter != scenario_parameters.optional.end(); |
- ++parameter_iter) { |
- CString current_switch_name = (*parameter_iter)->switch_name_; |
- // This would probably allow duplicate optional switches (i.e. /oem /oem) in |
- // a command line. |
- if (!command_line_parser.HasSwitch(current_switch_name)) { |
- continue; |
- } |
- |
- int arg_count = 0; |
- HRESULT hr = command_line_parser.GetSwitchArgumentCount(current_switch_name, |
- &arg_count); |
- if (FAILED(hr)) { |
- return false; |
- } |
- |
- int switch_arg_count = (*parameter_iter)->num_required_parameters_; |
- if (arg_count != switch_arg_count) { |
- return false; |
- } |
- --parser_optional_switch_count; |
- } |
- |
- return parser_optional_switch_count == 0; |
-} |
- |
-void CommandLineValidator::Clear() { |
- MapScenariosIter scenarios_iter; |
- for (scenarios_iter = scenarios_.begin(); |
- scenarios_iter != scenarios_.end(); |
- ++scenarios_iter) { |
- ScenarioParameterVectorIter param_iter; |
- for (param_iter = (*scenarios_iter).second.required.begin(); |
- param_iter != (*scenarios_iter).second.required.end(); |
- ++param_iter) { |
- delete *param_iter; |
- } |
- for (param_iter = (*scenarios_iter).second.optional.begin(); |
- param_iter != (*scenarios_iter).second.optional.end(); |
- ++param_iter) { |
- delete *param_iter; |
- } |
- } |
- scenarios_.clear(); |
-} |
- |
-} // namespace omaha |
- |