package com.netflix.eureka.registry; import com.netflix.appinfo.EurekaAccept; import com.netflix.eureka.Version; import javax.annotation.Nullable; import java.util.Arrays; public class Key { public enum KeyType { JSON, XML } /** * An enum to define the entity that is stored in this cache for this key. */ public enum EntityType { Application, VIP, SVIP } private final String entityName; private final String[] regions; private final KeyType requestType; private final Version requestVersion; private final String hashKey; private final EntityType entityType; private final EurekaAccept eurekaAccept; public Key(EntityType entityType, String entityName, KeyType type, Version v, EurekaAccept eurekaAccept) { this(entityType, entityName, type, v, eurekaAccept, null); } public Key(EntityType entityType, String entityName, KeyType type, Version v, EurekaAccept eurekaAccept, @Nullable String[] regions) { this.regions = regions; this.entityType = entityType; this.entityName = entityName; this.requestType = type; this.requestVersion = v; this.eurekaAccept = eurekaAccept; hashKey = this.entityType + this.entityName + (null != this.regions ? Arrays.toString(this.regions) : "") + requestType.name() + requestVersion.name() + this.eurekaAccept.name(); } public String getName() { return entityName; } public String getHashKey() { return hashKey; } public KeyType getType() { return requestType; } public Version getVersion() { return requestVersion; } public EurekaAccept getEurekaAccept() { return eurekaAccept; } public EntityType getEntityType() { return entityType; } public boolean hasRegions() { return null != regions && regions.length != 0; } public String[] getRegions() { return regions; } public Key cloneWithoutRegions() { return new Key(entityType, entityName, requestType, requestVersion, eurekaAccept); } @Override public int hashCode() { String hashKey = getHashKey(); return hashKey.hashCode(); } @Override public boolean equals(Object other) { if (other instanceof Key) { return getHashKey().equals(((Key) other).getHashKey()); } else { return false; } } public String toStringCompact() { StringBuilder sb = new StringBuilder(); sb.append("{name=").append(entityName).append(", type=").append(entityType).append(", format=").append(requestType); if(regions != null) { sb.append(", regions=").append(Arrays.toString(regions)); } sb.append('}'); return sb.toString(); } }