package com.gmail.dpierron.calibre.datamodel;
import com.gmail.dpierron.tools.Helper;
import java.util.List;
public class Tag implements SplitableByLetter, Comparable<Tag> {
private final String id;
private final String name;
private String[] partsOfTag;
// Flags
// NOTE: Using byte plus bit settings is more memory efficient than using boolean types
private final static byte FLAG_ALL_CLEAR = 0;
private final static byte FLAG_DONE = 0x01;
private final static byte FLAG_REFERENCED = 0x02;
private byte flags = FLAG_ALL_CLEAR;
public Tag(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String toString() {
return getName();
}
public String getTitleToSplitByLetter() {
return getName();
}
public String[] getPartsOfTag(String splitTagsOn) {
if (partsOfTag == null) {
List<String> parts = Helper.tokenize(getName(), splitTagsOn);
partsOfTag = new String[parts.size()];
int[] partsOfTagHash = new int[partsOfTag.length];
for (int i = 0; i < parts.size(); i++) {
String part = parts.get(i);
partsOfTag[i] = part;
partsOfTagHash[i] = (part == null ? -1 : part.hashCode());
}
}
return partsOfTag;
}
public int compareTo(Tag o) {
if (o == null)
return 1;
return Helper.trueStringCompare(getId(), o.getId());
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof Tag) {
return (Helper.checkedCompare(((Tag) obj).getId(), getId()) == 0);
} else
return super.equals(obj);
}
public void setDone() {
flags |= FLAG_DONE;
}
public boolean isDone () {
return ((flags & FLAG_DONE) != 0);
}
public void setReferenced() {
flags |= FLAG_REFERENCED;
}
public boolean isReferenced () {
return ((flags & FLAG_REFERENCED) != 0);
}
}