public OpenAMUpdate(
      final ObjectClass oc,
      final OpenAMConfiguration configuration,
      final Uid uid,
      final Set<Attribute> attrs)
      throws UnsupportedEncodingException {

    super(configuration);

    adminToken = new AdminToken(configuration);

    objectClass = oc;
    this.uid = uid;
    this.attrs = attrs;
    connection = OpenAMConnection.openConnection(configuration);
  }
  private Uid doUpdate() throws IOException {

    if (!objectClass.equals(ObjectClass.ACCOUNT) && (!objectClass.equals(ObjectClass.GROUP))) {
      throw new IllegalStateException("Wrong object class");
    }

    if (!userExists(
        uid.getUidValue(), configuration.getOpenamRealm(), adminToken.getToken(), connection)) {
      LOG.error("User " + uid.getUidValue() + " do not exists");
      throw new ConnectorException("User " + uid.getUidValue() + " do not exists");
    }

    try {
      connection.update(createUpdateQueryString(uid, attrs, adminToken).toString());
      LOG.ok("User " + uid.getUidValue() + " updated");
    } catch (HttpClientErrorException hcee) {
      throw hcee;
    }
    return uid;
  }