Files
gerrit/java/com/google/gwtorm/client/IntKey.java
Dave Borowitz c58702ac79 Copy gwtorm dependencies into core repo
This is the minimal set of files from gwtorm that are still needed by
Gerrit core. The long term plan is to migrate away from these, for
example by revamping our exception hierarchy (I9c8fac5f) and converting
the legacy mutable gwtorm-based types to immutable AutoValues.

In the short term, copying these files into core allows us to remove a
bunch of unused class files from the war, and prevents new dependencies
from creeping in. This change should be viewed as a starting point of
the larger project to eliminate gwtorm, not an end in itself.

Files copied from:
https://gerrit.googlesource.com/gwtorm/+/de62a8902ade3239e4a2db105bb24e4561e34df3

The whole gwtorm repo is under the same AOSP umbrella as Gerrit core, so
it's all under the same CLA and can be copied between repos on the
Gerrit hosts without any change to the license.

Change-Id: I0f09ed399180bc132fb0a28be07944b4aa9fe4a0
2019-04-09 10:41:45 +09:00

81 lines
2.2 KiB
Java

// Copyright 2008 Google Inc.
//
// 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.gwtorm.client;
import java.io.Serializable;
/**
* Abstract key type using a single integer value.
*
* <p>Applications should subclass this type to create their own entity-specific key classes.
*
* @param <P> the parent key type. Use {@link Key} if no parent key is needed.
*/
@SuppressWarnings("serial")
public abstract class IntKey<P extends Key<?>> implements Key<P>, Serializable {
/** @return id of the entity instance. */
public abstract int get();
/** @param newValue the new value of this key. */
protected abstract void set(int newValue);
/** @return the parent key instance; null if this is a root level key. */
@Override
public P getParentKey() {
return null;
}
@Override
public int hashCode() {
int hc = get();
if (getParentKey() != null) {
hc *= 31;
hc += getParentKey().hashCode();
}
return hc;
}
@Override
public boolean equals(final Object b) {
if (b == null || b.getClass() != getClass()) {
return false;
}
final IntKey<P> q = cast(b);
return get() == q.get() && KeyUtil.eq(getParentKey(), q.getParentKey());
}
@Override
public String toString() {
final StringBuffer r = new StringBuffer();
if (getParentKey() != null) {
r.append(getParentKey().toString());
r.append(',');
}
r.append(get());
return r.toString();
}
@Override
public void fromString(final String in) {
set(Integer.parseInt(KeyUtil.parseFromString(getParentKey(), in)));
}
@SuppressWarnings("unchecked")
private static <A extends Key<?>> IntKey<A> cast(final Object b) {
return (IntKey<A>) b;
}
}