package models.database.HotDatabase; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import models.Tag; import models.database.ITagDatabase; import models.helpers.ICleanup; public class HotTagDatabase implements ITagDatabase, ICleanup<Tag> { private final Map<String, Tag> tags = new HashMap<String, Tag>(); public Collection<Tag> all() { return this.tags.values(); } public Tag get(String name) { Tag tag = this.tags.get(name); if (tag == null) { try { tag = new Tag(name, this); this.tags.put(name, tag); } catch (IllegalArgumentException ex) { // this tag's name wasn't valid, make sure it conforms to Tag.tagRegex } } return tag; } public List<String> suggestTagNames(String start) { List<String> tagNames = new ArrayList<String>(); for (Tag tag : this.all()) { if (start == null || tag.getName().startsWith(start.toLowerCase())) { tagNames.add(tag.getName()); } } Collections.sort(tagNames); return tagNames; } public void clear() { this.tags.clear(); } /** * Remove all references to the <code>Tag</code> when it's being deleted * (Callback method). * * @see models.helpers.ICleanup#cleanUp(java.lang.Object) */ public void cleanUp(Tag tag) { this.tags.remove(tag.getName()); } }