Beispiel #1
0
 private void releaseTheHounds() {
   Future<Boolean> future = sparqlOnDemandIndexer.asyncUpdatesAndDeletes(toUpdate, toDelete);
   boolean success = false;
   try {
     success = future.get(120, TimeUnit.SECONDS);
   } catch (Exception e) {
     logger.error("Async triplestore update exception", e);
   }
   if (!success) {
     logger.error("Triplestore update timed out, retrying.");
     future = sparqlOnDemandIndexer.asyncUpdatesAndDeletes(toUpdate, toDelete);
     try {
       success = future.get(120, TimeUnit.SECONDS);
     } catch (Exception e) {
       logger.error("Async triplestore retry update exception", e);
     }
     if (!success) {
       toUpdate.clear();
       toDelete.clear();
       throw new RuntimeException("Triplestore update timed out twice, that sux a big one.");
     }
   }
   toUpdate.clear();
   toDelete.clear();
 }
Beispiel #2
0
  private void updateBinary(ZdoModel model) throws IOException {
    try (InputStream in = model.getContent()) {
      Response.StatusType statusInfo =
          ClientBuilder.newClient()
              .target(fitTransactionToUrl(model.getUrl()))
              .request()
              .put(Entity.entity(in, model.get(ZdoTerms.mimeType)))
              .getStatusInfo();

      if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) {
        logError(model.getUrl(), statusInfo);
        throw new IOException("Failed to update resource " + model.getUrl());
      } else {
        model.setUrl(model.getUrl() + "/fcr:metadata");
        patchMetadata(model);
        model.setUrl(
            model.getUrl().substring(0, model.getUrl().length() - "/fcr:metadata".length()));

        // Also update triplestore
        model.stripPossibleBadUrlEnding(); // strip fcr:metadata
        if (transactionPath == null) {
          sparqlOnDemandIndexer.update(model);
        } else { // If in transaction, triplestore operations are delayed till its end
          toUpdate.add(model);
        }
      }
    }
  }
Beispiel #3
0
  public void delete(String url) {
    Response.StatusType statusInfo =
        ClientBuilder.newClient()
            .target(fitTransactionToUrl(url))
            .request()
            .delete()
            .getStatusInfo();

    if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) {
      logError(fitTransactionToUrl(url), statusInfo);
      // Delete operations mostly fail because the item already is not there - which can be
      // considered a desired state, so no exception
      /*throw new IOException("Failed to update resource " + fitTransactionToUrl(url));*/
    }

    // Also update triplestore
    if (transactionPath == null) {
      sparqlOnDemandIndexer.remove(removeTransactionFromUrl(url));
    } else { // If in transaction, triplestore operations are delayed till its end
      toDelete.add(removeTransactionFromUrl(url));
    }
  }
Beispiel #4
0
  private void updateMetadata(ZdoModel model) throws IOException {
    Response.StatusType statusInfo =
        ClientBuilder.newClient()
            .target(fitTransactionToUrl(model.getUrl()))
            .request()
            .put(Entity.entity(model, RDF_SERIALIZATION))
            .getStatusInfo();

    if (statusInfo.getFamily() != Response.Status.Family.SUCCESSFUL) {
      logError(fitTransactionToUrl(model.getUrl()), statusInfo);
      throw new IOException("Failed to update resource " + fitTransactionToUrl(model.getUrl()));
    }

    model.removeAllValuesOfProperty(ZdoTerms.fedoraLastModified);
    if (ZdoType.isAbovePageCategory(model.get(ZdoTerms.zdoType))) {
      model.add(
          model.getSubject(),
          ZdoTerms.fedoraLastModified,
          OffsetDateTime.now().toString(),
          XSDDatatype.XSDdateTime);
      if (model.get(ZdoTerms.fedoraCreated) == null) {
        model.add(
            model.getSubject(),
            ZdoTerms.fedoraCreated,
            OffsetDateTime.now().toString(),
            XSDDatatype.XSDdateTime);
      }
    } else {
      model.removeAllValuesOfProperty(ZdoTerms.fedoraCreated);
    }

    // Also update triplestore
    model.stripPossibleBadUrlEnding(); // strip fcr:metadata
    if (transactionPath == null) {
      sparqlOnDemandIndexer.update(model);
    } else { // If in transaction, triplestore operations are delayed till its end
      toUpdate.add(model);
    }
  }