private boolean isDataMissing(final Exception e) {
    boolean dataMissing = false;
    if (e instanceof RestconfDocumentedException) {
      final RestconfDocumentedException rde = (RestconfDocumentedException) e;
      if (!rde.getErrors().isEmpty()) {
        if (rde.getErrors().get(0).getErrorTag() == ErrorTag.DATA_MISSING) {
          dataMissing = true;
        }
      }
    }

    return dataMissing;
  }
Пример #2
0
  public PATCHStatusContext patchConfigurationDataWithinTransaction(
      final PATCHContext context, final SchemaContext globalSchema) {
    final DOMDataReadWriteTransaction patchTransaction = domDataBroker.newReadWriteTransaction();
    List<PATCHStatusEntity> editCollection = new ArrayList<>();
    List<RestconfError> editErrors;
    List<RestconfError> globalErrors = null;
    int errorCounter = 0;

    for (PATCHEntity patchEntity : context.getData()) {
      final PATCHEditOperation operation =
          PATCHEditOperation.valueOf(patchEntity.getOperation().toUpperCase());

      switch (operation) {
        case CREATE:
          if (errorCounter == 0) {
            try {
              postDataWithinTransaction(
                  patchTransaction,
                  CONFIGURATION,
                  patchEntity.getTargetNode(),
                  patchEntity.getNode(),
                  globalSchema);
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), true, null));
            } catch (RestconfDocumentedException e) {
              editErrors = new ArrayList<>();
              editErrors.addAll(e.getErrors());
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), false, editErrors));
              errorCounter++;
            }
          }
          break;
        case REPLACE:
          if (errorCounter == 0) {
            try {
              putDataWithinTransaction(
                  patchTransaction,
                  CONFIGURATION,
                  patchEntity.getTargetNode(),
                  patchEntity.getNode(),
                  globalSchema);
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), true, null));
            } catch (RestconfDocumentedException e) {
              editErrors = new ArrayList<>();
              editErrors.addAll(e.getErrors());
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), false, editErrors));
              errorCounter++;
            }
          }
          break;
        case DELETE:
          if (errorCounter == 0) {
            try {
              deleteDataWithinTransaction(
                  patchTransaction, CONFIGURATION, patchEntity.getTargetNode());
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), true, null));
            } catch (RestconfDocumentedException e) {
              editErrors = new ArrayList<>();
              editErrors.addAll(e.getErrors());
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), false, editErrors));
              errorCounter++;
            }
          }
          break;
        case REMOVE:
          if (errorCounter == 0) {
            try {
              deleteDataWithinTransaction(
                  patchTransaction, CONFIGURATION, patchEntity.getTargetNode());
              editCollection.add(new PATCHStatusEntity(patchEntity.getEditId(), true, null));
            } catch (RestconfDocumentedException e) {
              LOG.error(
                  "Error removing {} by {} operation",
                  patchEntity.getTargetNode().toString(),
                  patchEntity.getEditId(),
                  e);
            }
          }
          break;
      }
    }

    // TODO: make sure possible global errors are filled up correctly and decide transaction
    // submission based on that
    // globalErrors = new ArrayList<>();
    if (errorCounter == 0) {
      final CheckedFuture<Void, TransactionCommitFailedException> submit =
          patchTransaction.submit();
      return new PATCHStatusContext(
          context.getPatchId(), ImmutableList.copyOf(editCollection), true, globalErrors);
    } else {
      patchTransaction.cancel();
      return new PATCHStatusContext(
          context.getPatchId(), ImmutableList.copyOf(editCollection), false, globalErrors);
    }
  }