001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.model;
003
004/**
005 * An object that is identified amongst objects of the same class by a {@link String} key.
006 */
007public class KeyIndexedObject {
008  private final String key;
009
010  protected KeyIndexedObject(final String key) {
011    if (key == null) {
012      throw new IllegalArgumentException();
013    }
014    this.key = key;
015  }
016
017  /**
018   * @return the unique key that identifies this object among other instances of the same class
019   */
020  public String getKey() {
021    return key;
022  }
023
024  /* (non-Javadoc)
025   * @see java.lang.Object#hashCode()
026   */
027  @Override
028  public int hashCode() {
029    final int prime = 31;
030    return prime * (prime + getClass().getName().hashCode()) + key.hashCode();
031  }
032
033  /* (non-Javadoc)
034   * @see java.lang.Object#equals(java.lang.Object)
035   */
036  @Override
037  public boolean equals(Object obj) {
038    if (this == obj) {
039      return true;
040    }
041    if (obj == null) {
042      return false;
043    }
044    if (getClass() != obj.getClass()) {
045      return false;
046    }
047    KeyIndexedObject other = (KeyIndexedObject) obj;
048    if (!key.equals(other.key)) {
049      return false;
050    }
051    return true;
052  }
053
054}