public function renderEdit($pid)
 {
     $processors = $this->_campaign->processors;
     $definedProcessors = $this->config('processors')->jsonSerialize();
     if (!isset($processors[$pid])) {
         return $this->renderNew();
     }
     $pData = $processors[$pid];
     $form = new DeferoForm('edit_processor');
     $form->addSelectElement('processorType', array_map('class_shortname', $definedProcessors));
     $form->getElement('processorType')->addAttribute('disabled');
     $processor = $this->config('processors')->getStr($pData->processorType);
     $processor = new $processor();
     // populate types
     $class = new \ReflectionClass($processor);
     foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $p) {
         $default = $p->getValue($processor);
         // get property type (enum)
         // use reflection to check for enumclass
         if ($t = DocBlockHelper::getBlock($processor, $p->getName(), 'enumclass')) {
             $form->addSelectElement($p->getName(), (new OptionBuilder(new $t()))->getOptions(), $default);
         } else {
             $form->addTextElement($p->getName(), $default);
         }
     }
     $form->addSubmitElement();
     $form->hydrate((array) $processor);
     $form->hydrate((array) $pData);
     if ($this->request()->postVariables()) {
         $form->hydrate($this->request()->postVariables());
         if ($form->isValid() && $form->csrfCheck()) {
             $processors[$pid] = $form->jsonSerialize();
             $this->_campaign->processors = $processors;
             $this->_campaign->saveChanges();
             return Redirect::to('/campaigns/' . $this->getInt('cid'));
         }
     }
     echo $form;
 }