Allow group includes to be by UUID instead of group ID

Per discussion on-list, the behavior change in 2.5 to only
allow groups by ID is considered a regression for groups
that want to include external groups (like LDAP).

In order to permit smooth migration, we want to allow both
ID and UUIDs to co-exist for the time being.

Change-Id: I0dbdb15b9c62f2dbce64acbc34c515c7b8229c04
This commit is contained in:
Chad Horohoe
2012-12-13 15:00:04 -05:00
parent 57143be354
commit 2cf207f384
24 changed files with 329 additions and 192 deletions

View File

@@ -18,7 +18,7 @@ import com.google.gwtorm.client.Column;
import com.google.gwtorm.client.CompoundKey;
/** Membership of an {@link AccountGroup} in an {@link AccountGroup}. */
public final class AccountGroupInclude {
public final class AccountGroupIncludeByUuid {
public static class Key extends CompoundKey<AccountGroup.Id> {
private static final long serialVersionUID = 1L;
@@ -26,16 +26,16 @@ public final class AccountGroupInclude {
protected AccountGroup.Id groupId;
@Column(id = 2)
protected AccountGroup.Id includeId;
protected AccountGroup.UUID includeUUID;
protected Key() {
groupId = new AccountGroup.Id();
includeId = new AccountGroup.Id();
includeUUID = new AccountGroup.UUID();
}
public Key(final AccountGroup.Id g, final AccountGroup.Id i) {
public Key(final AccountGroup.Id g, final AccountGroup.UUID u) {
groupId = g;
includeId = i;
includeUUID = u;
}
@Override
@@ -47,27 +47,27 @@ public final class AccountGroupInclude {
return groupId;
}
public AccountGroup.Id getIncludeId() {
return includeId;
public AccountGroup.UUID getIncludeUUID() {
return includeUUID;
}
@Override
public com.google.gwtorm.client.Key<?>[] members() {
return new com.google.gwtorm.client.Key<?>[] {includeId};
return new com.google.gwtorm.client.Key<?>[] {includeUUID};
}
}
@Column(id = 1, name = Column.NONE)
protected Key key;
protected AccountGroupInclude() {
protected AccountGroupIncludeByUuid() {
}
public AccountGroupInclude(final AccountGroupInclude.Key k) {
public AccountGroupIncludeByUuid(final AccountGroupIncludeByUuid.Key k) {
key = k;
}
public AccountGroupInclude.Key getKey() {
public AccountGroupIncludeByUuid.Key getKey() {
return key;
}
@@ -75,7 +75,7 @@ public final class AccountGroupInclude {
return key.groupId;
}
public AccountGroup.Id getIncludeId() {
return key.includeId;
public AccountGroup.UUID getIncludeUUID() {
return key.includeUUID;
}
}

View File

@@ -20,7 +20,7 @@ import com.google.gwtorm.client.CompoundKey;
import java.sql.Timestamp;
/** Inclusion of an {@link AccountGroup} in another {@link AccountGroup}. */
public final class AccountGroupIncludeAudit {
public final class AccountGroupIncludeByUuidAudit {
public static class Key extends CompoundKey<AccountGroup.Id> {
private static final long serialVersionUID = 1L;
@@ -28,19 +28,19 @@ public final class AccountGroupIncludeAudit {
protected AccountGroup.Id groupId;
@Column(id = 2)
protected AccountGroup.Id includeId;
protected AccountGroup.UUID includeUUID;
@Column(id = 3)
protected Timestamp addedOn;
protected Key() {
groupId = new AccountGroup.Id();
includeId = new AccountGroup.Id();
includeUUID = new AccountGroup.UUID();
}
public Key(final AccountGroup.Id g, final AccountGroup.Id i, final Timestamp t) {
public Key(final AccountGroup.Id g, final AccountGroup.UUID u, final Timestamp t) {
groupId = g;
includeId = i;
includeUUID = u;
addedOn = t;
}
@@ -49,8 +49,8 @@ public final class AccountGroupIncludeAudit {
return groupId;
}
public AccountGroup.Id getIncludedId() {
return includeId;
public AccountGroup.UUID getIncludeUUID() {
return includeUUID;
}
public Timestamp getAddedOn() {
@@ -59,7 +59,7 @@ public final class AccountGroupIncludeAudit {
@Override
public com.google.gwtorm.client.Key<?>[] members() {
return new com.google.gwtorm.client.Key<?>[] {includeId};
return new com.google.gwtorm.client.Key<?>[] {includeUUID};
}
}
@@ -75,18 +75,23 @@ public final class AccountGroupIncludeAudit {
@Column(id = 4, notNull = false)
protected Timestamp removedOn;
protected AccountGroupIncludeAudit() {
protected AccountGroupIncludeByUuidAudit() {
}
public AccountGroupIncludeAudit(final AccountGroupInclude m,
final Account.Id adder) {
public AccountGroupIncludeByUuidAudit(final AccountGroupIncludeByUuid m,
final Account.Id adder, final Timestamp when) {
final AccountGroup.Id group = m.getGroupId();
final AccountGroup.Id include = m.getIncludeId();
key = new AccountGroupIncludeAudit.Key(group, include, now());
final AccountGroup.UUID include = m.getIncludeUUID();
key = new AccountGroupIncludeByUuidAudit.Key(group, include, when);
addedBy = adder;
}
public AccountGroupIncludeAudit.Key getKey() {
public AccountGroupIncludeByUuidAudit(final AccountGroupIncludeByUuid m,
final Account.Id adder) {
this(m, adder, now());
}
public AccountGroupIncludeByUuidAudit.Key getKey() {
return key;
}
@@ -99,7 +104,12 @@ public final class AccountGroupIncludeAudit {
removedOn = now();
}
public void removed(final Account.Id deleter, final Timestamp when) {
removedBy = deleter;
removedOn = when;
}
private static Timestamp now() {
return new Timestamp(System.currentTimeMillis());
}
}
}

View File

@@ -15,21 +15,21 @@
package com.google.gerrit.reviewdb.server;
import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.AccountGroupInclude;
import com.google.gerrit.reviewdb.client.AccountGroupIncludeByUuid;
import com.google.gwtorm.server.Access;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.PrimaryKey;
import com.google.gwtorm.server.Query;
import com.google.gwtorm.server.ResultSet;
public interface AccountGroupIncludeAccess extends
Access<AccountGroupInclude, AccountGroupInclude.Key> {
public interface AccountGroupIncludeByUuidAccess extends
Access<AccountGroupIncludeByUuid, AccountGroupIncludeByUuid.Key> {
@PrimaryKey("key")
AccountGroupInclude get(AccountGroupInclude.Key key) throws OrmException;
AccountGroupIncludeByUuid get(AccountGroupIncludeByUuid.Key key) throws OrmException;
@Query("WHERE key.includeId = ?")
ResultSet<AccountGroupInclude> byInclude(AccountGroup.Id id) throws OrmException;
@Query("WHERE key.includeUUID = ?")
ResultSet<AccountGroupIncludeByUuid> byIncludeUUID(AccountGroup.UUID uuid) throws OrmException;
@Query("WHERE key.groupId = ?")
ResultSet<AccountGroupInclude> byGroup(AccountGroup.Id id) throws OrmException;
ResultSet<AccountGroupIncludeByUuid> byGroup(AccountGroup.Id id) throws OrmException;
}

View File

@@ -15,20 +15,20 @@
package com.google.gerrit.reviewdb.server;
import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.AccountGroupIncludeAudit;
import com.google.gerrit.reviewdb.client.AccountGroupIncludeByUuidAudit;
import com.google.gwtorm.server.Access;
import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.PrimaryKey;
import com.google.gwtorm.server.Query;
import com.google.gwtorm.server.ResultSet;
public interface AccountGroupIncludeAuditAccess extends
Access<AccountGroupIncludeAudit, AccountGroupIncludeAudit.Key> {
public interface AccountGroupIncludeByUuidAuditAccess extends
Access<AccountGroupIncludeByUuidAudit, AccountGroupIncludeByUuidAudit.Key> {
@PrimaryKey("key")
AccountGroupIncludeAudit get(AccountGroupIncludeAudit.Key key)
AccountGroupIncludeByUuidAudit get(AccountGroupIncludeByUuidAudit.Key key)
throws OrmException;
@Query("WHERE key.groupId = ? AND key.includeId = ?")
ResultSet<AccountGroupIncludeAudit> byGroupInclude(AccountGroup.Id groupId,
AccountGroup.Id incGroupId) throws OrmException;
@Query("WHERE key.groupId = ? AND key.includeUUID = ?")
ResultSet<AccountGroupIncludeByUuidAudit> byGroupInclude(AccountGroup.Id groupId,
AccountGroup.UUID incGroupUUID) throws OrmException;
}

View File

@@ -70,12 +70,6 @@ public interface ReviewDb extends Schema {
@Relation(id = 13)
AccountGroupMemberAuditAccess accountGroupMembersAudit();
@Relation(id = 14)
AccountGroupIncludeAccess accountGroupIncludes();
@Relation(id = 15)
AccountGroupIncludeAuditAccess accountGroupIncludesAudit();
@Relation(id = 17)
AccountDiffPreferenceAccess accountDiffPreferences();
@@ -112,6 +106,12 @@ public interface ReviewDb extends Schema {
@Relation(id = 28)
SubmoduleSubscriptionAccess submoduleSubscriptions();
@Relation(id = 29)
AccountGroupIncludeByUuidAccess accountGroupIncludesByUuid();
@Relation(id = 30)
AccountGroupIncludeByUuidAuditAccess accountGroupIncludesByUuidAudit();
/** Create the next unique id for an {@link Account}. */
@Sequence(startWith = 1000000)
int nextAccountId() throws OrmException;