void InsertFieldElementCommand::execute(void) { //Check for a valid Field Container if(_FC == NULL) { SWARNING << "FieldContainer is NULL." << std::endl; return; } //Check for valid Field EditFieldHandlePtr TheFieldHandle = _FC->editField(_FieldId); if(!TheFieldHandle->isValid()) { SWARNING << "No Field with Id: " << _FieldId << " in FieldContainers of type " << _FC->getType().getName() << std::endl; return; } //Check for valid Field cardinality if(TheFieldHandle->getCardinality() != FieldType::MultiField) { SWARNING << "Field: " << _FC->getType().getName() << " is not a MultiField" << std::endl; return; } //Check for valid indexing if(TheFieldHandle->getCardinality() == FieldType::MultiField && _Index > TheFieldHandle->size()) { SWARNING << "Cannot insert the value " << _Value << " at index " << _Index << ", on field " << TheFieldHandle->getDescription()->getName() << ", on FieldContianer of type " << _FC->getType().getName() << " because that field has size " << TheFieldHandle->size() << std::endl; return; } if(TheFieldHandle->isPointerField()) { EditMFieldHandle<FieldContainerPtrMFieldBase>* TheHandle(dynamic_cast<EditMFieldHandle<FieldContainerPtrMFieldBase>*>(TheFieldHandle.get())); FieldContainer* FC = FieldContainerFactory::the()->getContainer(boost::lexical_cast<UInt32>(_Value)); //Check the pointer types match if(!isFieldContentDerivedFrom(TheFieldHandle->getType(),&FC->getType())) { SWARNING << "Cannot insert the value of field " << TheFieldHandle->getDescription()->getName() << ", on FieldContianer of type " << _FC->getType().getName() << " because the value attemting to be set is not derived from the type the field stores." << std::endl; return; } TheHandle->insert(_Index, FC); } else { TheFieldHandle->insertIndexedValueFromCString(_Value.c_str(), _Index); } Inherited::execute(); _HasBeenDone = true; }