![JAR search and dependency download from the Maven repository](/logo.png)
com.microsoft.rest.v2.ExpandableStringEnum Maven / Gradle / Ivy
/**
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for
* license information.
*/
package com.microsoft.rest.v2;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* Base implementation for expandable, single string enums.
* @param a specific expandable enum type
*/
public abstract class ExpandableStringEnum> {
private static ConcurrentMap> valuesByName = null;
private String name;
private Class clazz;
private static String uniqueKey(Class> clazz, String name) {
if (clazz != null) {
return (clazz.getName() + "#" + name).toLowerCase();
} else {
throw new IllegalArgumentException();
}
}
@SuppressWarnings("unchecked")
protected T withNameValue(String name, T value, Class clazz) {
if (valuesByName == null) {
valuesByName = new ConcurrentHashMap();
}
this.name = name;
this.clazz = clazz;
((ConcurrentMap) valuesByName).put(uniqueKey(clazz, name), value);
return (T) this;
}
@SuppressWarnings("unchecked")
protected static > T fromString(String name, Class clazz) {
if (name == null) {
return null;
} else if (valuesByName != null) {
T value = (T) valuesByName.get(uniqueKey(clazz, name));
if (value != null) {
return value;
}
}
try {
T value = clazz.newInstance();
return value.withNameValue(name, value, clazz);
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
return null;
}
}
@SuppressWarnings("unchecked")
protected static > Collection values(Class clazz) {
// Make a copy of all values
Collection extends ExpandableStringEnum>> values = new ArrayList<>(valuesByName.values());
Collection list = new HashSet();
for (ExpandableStringEnum> value : values) {
if (value.getClass().isAssignableFrom(clazz)) {
list.add((T) value);
}
}
return list;
}
@Override
@JsonValue
public String toString() {
return this.name;
}
@Override
public int hashCode() {
return uniqueKey(this.clazz, this.name).hashCode();
}
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object obj) {
if (!clazz.isAssignableFrom(obj.getClass())) {
return false;
} else if (obj == this) {
return true;
} else if (this.name == null) {
return ((ExpandableStringEnum) obj).name == null;
} else {
return this.name.equals(((ExpandableStringEnum) obj).name);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy