/* (non-Javadoc)
  * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleCreate(org.collectionspace.services.common.document.DocumentWrapper)
  */
 @Override
 public void handleCreate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
   // first fill all the parts of the document, refname and short ID get set as well
   super.handleCreate(wrapDoc);
   // Ensure we have required fields set properly
   handleInAuthority(wrapDoc.getWrappedObject());
 }
 @Override
 public void fillAllParts(DocumentWrapper<DocumentModel> wrapDoc, Action action) throws Exception {
   //
   // We currently don't override this method with any AuthorityItemDocumentModelHandler specific
   // functionality, so
   // we could remove this method.
   //
   super.fillAllParts(wrapDoc, action);
 }
 @Override
 public void handleCreate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
   super.handleCreate(wrapDoc);
   // CSPACE-3178:
   // Uncomment once debugged and App layer is read to integrate
   // Experimenting with this uncommented now ...
   handleDisplayNameAsShortIdentifier(wrapDoc.getWrappedObject(), authorityCommonSchemaName);
   updateRefnameForAuthority(wrapDoc, authorityCommonSchemaName); // CSPACE-3178
 }
 /**
  * Filters out selected values supplied in an update request.
  *
  * @param objectProps the properties filtered out from the update payload
  * @param partMeta metadata for the object to fill
  */
 @Override
 public void filterReadOnlyPropertiesForPart(
     Map<String, Object> objectProps, ObjectPartType partMeta) {
   super.filterReadOnlyPropertiesForPart(objectProps, partMeta);
   String commonPartLabel = getServiceContext().getCommonPartLabel();
   if (partMeta.getLabel().equalsIgnoreCase(commonPartLabel)) {
     objectProps.remove(AuthorityJAXBSchema.CSID);
     objectProps.remove(AuthorityJAXBSchema.SHORT_IDENTIFIER);
     objectProps.remove(AuthorityJAXBSchema.REF_NAME);
   }
 }
 /* (non-Javadoc)
  * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleUpdate(org.collectionspace.services.common.document.DocumentWrapper)
  */
 @Override
 // FIXME: Once we remove the refName field from the authority item schemas, we can remove this
 // override method since our super does everthing for us now.
 @Deprecated
 public void handleUpdate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
   // Must call our super's version first, this updates the core schema and the relationship
   // records to deal with possible refName changes/update
   super.handleUpdate(wrapDoc);
   if (this.hasRefNameUpdate() == true) {
     DocumentModel docModel = wrapDoc.getWrappedObject();
     docModel.setProperty(
         authorityItemCommonSchemaName,
         AuthorityItemJAXBSchema.REF_NAME,
         this
             .newRefNameOnUpdate); // This field is deprecated since it is now a duplicate of what
                                   // is in the collectionspace_core:refName field
   }
 }
  /*
   * This method gets called after the primary update to an authority item has happened.  If the authority item's refName
   * has changed, then we need to updated all the records that use that refname with the new/updated version
   *
   * (non-Javadoc)
   * @see org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl#completeUpdate(org.collectionspace.services.common.document.DocumentWrapper)
   */
  public void completeUpdate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
    // Must call our super class' version first
    super.completeUpdate(wrapDoc);

    //
    // Look for and update authority references with the updated refName
    //
    if (hasRefNameUpdate() == true) {
      // We have work to do.
      if (logger.isDebugEnabled()) {
        final String EOL = System.getProperty("line.separator");
        logger.debug(
            "Need to find and update references to authority item."
                + EOL
                + "   Old refName"
                + oldRefNameOnUpdate
                + EOL
                + "   New refName"
                + newRefNameOnUpdate);
      }
      ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = getServiceContext();
      RepositoryClient<PoxPayloadIn, PoxPayloadOut> repoClient = getRepositoryClient(ctx);
      RepositoryInstanceInterface repoSession = this.getRepositorySession();

      // Update all the existing records that have a field with the old refName in it
      int nUpdated =
          RefNameServiceUtils.updateAuthorityRefDocs(
              ctx,
              repoClient,
              repoSession,
              oldRefNameOnUpdate,
              newRefNameOnUpdate,
              getRefPropName());

      // Finished so log a message.
      if (logger.isDebugEnabled()) {
        logger.debug("Updated " + nUpdated + " instances of oldRefName to newRefName");
      }
    }
  }
 @Override
 public void extractAllParts(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
   MultipartServiceContext ctx = (MultipartServiceContext) getServiceContext();
   super.extractAllParts(wrapDoc);
 }