Ejemplo n.º 1
0
  /**
   * removeLink
   *
   * <p>Remove the specified link with the object
   *
   * <pre>
   * Version	Date		Developer				Description
   * 0.21		22/10/2012	Genevieve Turner(GT)	Initial
   * 0.23		26/11/2012	Genevieve Turner (GT)	Added the removal of reverse links
   * </pre>
   *
   * @param fedoraObject The fedoraObject to remove an association with
   * @param linkType The relationship type to remove
   * @param itemId The item to remove the relationship from
   * @throws FedoraClientException
   * @see
   *     au.edu.anu.datacommons.security.service.FedoraObjectService#removeLink(au.edu.anu.datacommons.data.db.model.FedoraObject,
   *     java.lang.String, java.lang.String)
   */
  @Override
  public void removeLink(FedoraObject fedoraObject, String linkType, String itemId)
      throws FedoraClientException {
    String link = GlobalProps.getProperty(GlobalProps.PROP_FEDORA_RELATEDURI);

    LinkTypeDAO linkTypeDAO = new LinkTypeDAOImpl();
    LinkType linkTypeRecord = linkTypeDAO.getByCode(linkType);
    if (null == linkTypeRecord) {
      throw new WebApplicationException(
          Response.status(400).entity("Invalid relation type").build());
    }

    FedoraReference reference = new FedoraReference();
    String referenceType = linkType;
    String referenceItem = itemId;

    reference.setPredicate_(link + referenceType);
    reference.setObject_(referenceItem);
    reference.setIsLiteral_(Boolean.FALSE);
    LOGGER.debug(
        "Item: {}, Predicate: {}, Object: {}",
        new Object[] {
          fedoraObject.getObject_id(), reference.getPredicate_(), reference.getObject_()
        });
    FedoraBroker.removeRelationship(fedoraObject.getObject_id(), reference);

    if (referenceItem.startsWith("info:fedora/")) {
      String referenceItemID = referenceItem.substring(12);
      FedoraReference reverseReference = new FedoraReference();
      reverseReference.setPredicate_(link + linkTypeRecord.getReverse());
      reverseReference.setObject_("info:fedora/" + fedoraObject.getObject_id());
      reverseReference.setIsLiteral_(Boolean.FALSE);
      LOGGER.debug(
          "Item: {}, Predicate: {}, Object: {}",
          new Object[] {
            referenceItemID, reverseReference.getPredicate_(), reverseReference.getObject_()
          });
      FedoraBroker.removeRelationship(referenceItemID, reverseReference);
    }
  }