/**
  * {@inheritdoc}
  */
 public function validate(Form $form)
 {
     // first build the form
     $this->errorCollection->reset();
     $this->buildForm($form);
     $this->validated = false;
     // check pre conditions first
     if ($this->getTransition()->checkPreCondition($this->item, $this->context, $this->errorCollection)) {
         $this->validated = true;
         // validate form input now
         if ($this->isInputRequired()) {
             $this->validated = $this->getForm()->validate();
             if (!$this->validated) {
                 $this->errorCollection->addError('transition.validate.form.failed', array(), $form->getErrorCollection());
             }
         }
         // check conditions after validating the form so that context is setup
         if ($this->validated && !$this->getTransition()->checkCondition($this->item, $this->context, $this->errorCollection)) {
             $this->validated = false;
         }
     }
     // trigger the listener, no matter if validated so far
     $this->validated = $this->listener->onValidate($form, $this->validated, $this->workflow, $this->item, $this->context, $this->getTransition()->getName());
     return $this->validated;
 }