package org.styloot.hobo; import java.util.*; public class Feature implements Comparable<Feature> { public final String name; private final int id; private static int currentId; private Feature(String nm) { name = nm; id = currentId; currentId += 1; } public int getId() { return id; } public static Feature getFeature(String nm) { if (!features.containsKey(nm)) { features.put(nm, new Feature(nm)); } return features.get(nm); } public static Feature[] getFeatures(String[] features) { if (features == null) return null; Feature[] result = new Feature[features.length]; for (int i=0;i<features.length;i++) { result[i] = getFeature(features[i]); } Arrays.sort(result); return result; } public static Feature[] getFeatures(Collection<String> features) { if (features == null) return null; return getFeatures(features.toArray(new String[0])); } public String toString() { return name; } public int hashCode() { return name.hashCode(); } public int compareTo(Feature o) { return (id - o.id); } public boolean equals(Object o) { return (id == ((Feature)o).id); } public static int count() { return features.size(); } private static Map<String,Feature> features = new HashMap<String,Feature>(); }