/** * TODO: Description. * * @throws SynchronizationException TODO. */ void delete() throws SynchronizationException { if (_id != null) { // forgiving delete try { DeleteRequest r = Requests.newDeleteRequest(linkId(_id)); r.setRevision(_rev); mapping .getService() .getConnectionFactory() .getConnection() .delete(mapping.getService().getServerContext(), r); } catch (ResourceException ose) { LOGGER.warn("Failed to delete link", ose); throw new SynchronizationException(ose); } clear(); } }
/** * Removes the <code>Dictionary</code> for the given <code>pid</code>. If such a dictionary does * not exist, this method has no effect. * * @param pid The identifier of the dictionary to delet. * @throws IOException If an error occurrs deleting the dictionary. This exception must not be * thrown if no dictionary with the given identifier exists. */ public void delete(String pid) throws IOException { logger.debug("delete call for {}", pid); Object removed = tempStore.remove(pid); if (removed != null) { logger.debug("Deleted {} from temporary store", pid); } try { if (isReady(0) && requireRepository) { String id = pidToId(pid); boolean retry; String rev = null; do { retry = false; try { ReadRequest readRequest = Requests.newReadRequest(id); Map<String, Object> existing = repo.read(readRequest).getContent().asMap(); if (existing != null) { rev = (String) existing.get("_rev"); DeleteRequest r = Requests.newDeleteRequest(id); r.setRevision(rev); repo.delete(r); logger.debug("Deleted {}", pid); } } catch (PreconditionFailedException ex) { logger.debug("Concurrent change during delete, retrying {} {}", pid, rev); retry = true; } catch (NotFoundException ex) { // If it doesn't exists (anymore) that's fine } } while (retry); } } catch (ResourceException ex) { throw new IOException( "Failed to delete configuration + " + pid + " in repository: " + ex.getMessage(), ex); } }