docs: @Override
      public void update(Object entry) {
          Assert.notNull(entry, "Entry must not be null");
          if (LOG.isDebugEnabled()) {
              LOG.debug(String.format("Updating entry - %s$1", entry));
          }
  
          Name originalId = odm.getId(entry);
          Name calculatedId = odm.getCalculatedId(entry);
  
          if(originalId != null && calculatedId != null && !originalId.equals(calculatedId)) {
              // The DN has changed - remove the original entry and bind the new one
              // (because other data may have changed as well
              if (LOG.isDebugEnabled()) {
                  LOG.debug(String.format("Calculated DN of %s; of entry %s differs from explicitly specified one; %s - moving",
                          calculatedId, entry, originalId));
              }
  
              unbind(originalId);
  
              DirContextAdapter context = new DirContextAdapter(calculatedId);
              odm.mapToLdapDataEntry(entry, context);
  
              bind(context);
              odm.setId(entry, calculatedId);
          } else {
              // DN is the same, just modify the attributes
  
              Name id = originalId;
              if(id == null) {
                  id = calculatedId;
                  odm.setId(entry, calculatedId);
              }
  
              Assert.notNull(id, String.format("Unable to determine id for entry %s", entry.toString()));
  
              DirContextOperations context = lookupContext(id);
              odm.mapToLdapDataEntry(entry, context);
              modifyAttributes(context);
          }
      }