/**
  * @see ApiBase::execute
  *
  * @since 0.3
  */
 public function execute()
 {
     $params = $this->extractRequestParams();
     $this->validateParameters($params);
     $entityId = $this->guidParser->parse($params['statement'])->getEntityId();
     if (isset($params['baserevid'])) {
         $entityRevision = $this->entityLoadingHelper->loadEntityRevision($entityId, (int) $params['baserevid']);
     } else {
         $entityRevision = $this->entityLoadingHelper->loadEntityRevision($entityId);
     }
     $entity = $entityRevision->getEntity();
     $summary = $this->modificationHelper->createSummary($params, $this);
     $claim = $this->modificationHelper->getStatementFromEntity($params['statement'], $entity);
     if (isset($params['reference'])) {
         $this->validateReferenceHash($claim, $params['reference']);
     }
     if (isset($params['snaks-order'])) {
         $snaksOrder = $this->getArrayFromParam($params['snaks-order'], 'snaks-order');
     } else {
         $snaksOrder = array();
     }
     $deserializer = $this->deserializerFactory->newSnakListDeserializer();
     /** @var SnakList $snakList */
     try {
         $snakList = $deserializer->deserialize($this->getArrayFromParam($params['snaks'], 'snaks'));
     } catch (DeserializationException $e) {
         $this->errorReporter->dieError('Failed to get reference from reference Serialization ' . $e->getMessage(), 'snak-instantiation-failure');
     }
     $snakList->orderByProperty($snaksOrder);
     $newReference = new Reference($snakList);
     $changeOp = $this->getChangeOp($newReference);
     $this->modificationHelper->applyChangeOp($changeOp, $entity, $summary);
     $status = $this->entitySavingHelper->attemptSaveEntity($entity, $summary, EDIT_UPDATE);
     $this->resultBuilder->addRevisionIdFromStatusToResult($status, 'pageinfo');
     $this->resultBuilder->markSuccess();
     $this->resultBuilder->addReference($newReference);
 }