function formAdaptor($oFieldset, $oDocument = null)
 {
     $widgets = array();
     $validators = array();
     $oVF =& KTValidationFactory::getSingleton();
     $oWF =& KTWidgetFactory::getSingleton();
     $fields =& $oFieldset->getFields();
     foreach ($fields as $oField) {
         // FIXME we probably want to use some form of factory here.
         $field_name = 'metadata_' . $oField->getId();
         if ($field->getHasLookup()) {
             // lookups
             if ($field->getHasLookupTree()) {
                 // tree
                 // FIXME we don't handle trees yet
                 continue;
                 /*
                 $fieldTree = new MDTree();
                                     $fieldTree->buildForField($field->getId());
                                     $fieldTree->setActiveItem($current_value);
                     	    		$fieldOptions['tree'] = $fieldTree->_evilTreeRenderer($fieldTree, $fieldName);
                                     $oField = new KTTreeWidget($fieldLabel, $fieldDescription, $fieldName, $fieldValue, $page, $fieldRequired, null, $fieldErrors, $fieldOptions);
                 */
             } else {
                 // normal
                 $widgets[] = $oWF->get('ktcore.widgets.entityselection', array('label' => $oField->getName(), 'name' => 'metadata_' . $oField->getId(), 'description' => $oField->getDescription(), 'vocab' => MetaData::getEnabledByDocumentField($oField), 'id_method' => 'getName', 'label_method' => 'getName', 'required' => $oField->getIsMandatory()));
                 if ($oField->getIsMandatory()) {
                     $validators[] = $oVF->get('ktcore.validators.required', array('test' => $field_name, 'basename' => 'metadata_'));
                 }
                 $validators[] = $oVF->get('ktcore.validators.membership', array('test' => $field_name, 'output' => $field_name, 'basename' => $field_name, 'vocab' => MetaData::getEnabledValuesForField($oField)));
             }
         } else {
             $widgets[] = $oWF->get('ktcore.widgets.string', array('label' => $oField->getName(), 'output' => $field_name));
             if ($oField->getIsMandatory()) {
                 $validators[] = $oVF->get('ktcore.validators.required', array('test' => $field_name, 'basename' => $field_name));
             }
         }
     }
     return array('widgets' => $widgets, 'validators' => $validators);
 }