00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 2009 by Denis M. Gabaidulin * 00004 * * 00005 * This program is free software; you can redistribute it and/or modify * 00006 * it under the terms of the GNU Lesser General Public License as * 00007 * published by the Free Software Foundation; either version 3 of the * 00008 * License, or (at your option) any later version. * 00009 * * 00010 ***************************************************************************/ 00011 00012 final class ArgumentParser extends Singleton 00013 { 00014 private $form = null; 00015 private $result = null; 00016 00020 public static function me() 00021 { 00022 return Singleton::getInstance(__CLASS__); 00023 } 00024 00028 public function setForm(Form $form) 00029 { 00030 $this->form = $form; 00031 00032 return $this; 00033 } 00034 00038 public function getForm() 00039 { 00040 return $this->form; 00041 } 00042 00046 public function parse() 00047 { 00048 Assert::isNotNull($this->form); 00049 00050 $long = FormToArgumentsConverter::getLong($this->form); 00051 00052 // NOTE: stupid php, see man about long params 00053 if (empty($long)) 00054 $this->result = getopt( 00055 FormToArgumentsConverter::getShort($this->form) 00056 ); 00057 else 00058 $this->result = getopt( 00059 FormToArgumentsConverter::getShort($this->form), 00060 $long 00061 ); 00062 00063 return $this; 00064 } 00065 00069 public function validate() 00070 { 00071 Assert::isNotNull($this->result); 00072 00073 $this->form->import($this->result); 00074 00075 if ($errors = $this->form->getErrors()) 00076 throw new WrongArgumentException( 00077 "\nArguments wrong:\n" 00078 .print_r($errors, true) 00079 ); 00080 00081 return $this; 00082 } 00083 } 00084 ?>