// Copyright (C) 2008 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.gerrit.reviewdb.client;

import com.google.gwtorm.client.CompoundKey;
import java.util.Objects;

/** Membership of an {@link Account} in an {@link AccountGroup}. */
public final class AccountGroupMember {
  public static class Key extends CompoundKey<Account.Id> {
    private static final long serialVersionUID = 1L;

    protected Account.Id accountId;

    protected AccountGroup.Id groupId;

    protected Key() {
      accountId = new Account.Id();
      groupId = new AccountGroup.Id();
    }

    public Key(Account.Id a, AccountGroup.Id g) {
      accountId = a;
      groupId = g;
    }

    @Override
    public Account.Id getParentKey() {
      return accountId;
    }

    public AccountGroup.Id getAccountGroupId() {
      return groupId;
    }

    @Override
    public com.google.gwtorm.client.Key<?>[] members() {
      return new com.google.gwtorm.client.Key<?>[] {groupId};
    }
  }

  protected Key key;

  protected AccountGroupMember() {}

  public AccountGroupMember(AccountGroupMember.Key k) {
    key = k;
  }

  public AccountGroupMember.Key getKey() {
    return key;
  }

  public Account.Id getAccountId() {
    return key.accountId;
  }

  public AccountGroup.Id getAccountGroupId() {
    return key.groupId;
  }

  @Override
  public boolean equals(Object o) {
    return (o instanceof AccountGroupMember) && Objects.equals(key, ((AccountGroupMember) o).key);
  }

  @Override
  public int hashCode() {
    return key.hashCode();
  }

  @Override
  public String toString() {
    return getClass().getSimpleName() + "{key=" + key + "}";
  }
}

@@ -668,33 +668,28 @@
 gle.
-gwtorm.client.CompoundKey
+auto.value.AutoValue
 ;%0Aim
@@ -841,120 +841,16 @@
 tic 
-class Key extends CompoundKey%3CAccount.Id%3E %7B%0A    private static final long serialVersionUID = 1L;%0A%0A    protected 
+Key key(
 Acco
@@ -865,32 +865,17 @@
 ccountId
-;%0A%0A    protected
+,
  Account
@@ -894,199 +894,78 @@
 upId
-;%0A
+) %7B
 %0A    
-protected Key() %7B%0A      accountId = new Account.Id();%0A      groupId = new AccountGroup.Id();%0A    %7D%0A%0A    public Key(Account.Id a, AccountGroup.Id g) %7B%0A      accountId = a;%0A     
+return new AutoValue_AccountGroupMember_Key(accountId,
  groupId
  = g
@@ -964,321 +964,157 @@
 upId
- = g
+)
 ;%0A  
- 
- 
 %7D%0A%0A  
- 
- @Override%0A    public Account.Id getParent
+@AutoValue%0A  public abstract static class 
 Key
-()
  %7B%0A    
-  return accountId;%0A    %7D%0A%0A    public AccountGroup.Id getAccountGroupId() %7B%0A      return groupId;%0A    %7D%0A%0A    @Override%0A    public com.google.gwtorm.client.Key%3C?%3E%5B%5D members() %7B%0A      return new com.google.gwtorm.client.Key%3C?%3E%5B%5D %7BgroupId%7D;%0A    %7D
+public abstract Account.Id accountId();%0A%0A    public abstract AccountGroup.Id groupId();
 %0A  %7D
@@ -1373,16 +1373,18 @@
 ccountId
+()
 ;%0A  %7D%0A%0A 
@@ -1451,16 +1451,18 @@
 .groupId
+()
 ;%0A  %7D%0A%0A 

Convert AccountGroupMember.Key to AutoValue