public SearchableTag(String id, String name, boolean leaf, boolean complete) {
this.id = id;
this.name = name;
- this.complete = complete;
+ this.complete = leaf || complete;
setLeaf(leaf);
if (parent != null) {
return parent.getFqName() + " / " + name;
}
-
- return name;
+
+ return "" + name;
}
/**
* {@link BasicSearchable#fillTag(SearchableTag)} operation from a
* {@link BasicSearchable}, in order to gain (more?) subtag children.
* <p>
- * This method does not make sense for leaf tags.
+ * Leaf tags are always considered complete.
*
* @return TRUE if it is complete
*/
* {@link BasicSearchable#fillTag(SearchableTag)} operation from a
* {@link BasicSearchable}, in order to gain (more?) subtag children.
* <p>
- * This method does not make sense for leaf tags.
+ * Leaf tags are always considered complete.
*
* @param complete
* TRUE if it is complete
*/
public void setComplete(boolean complete) {
- this.complete = complete;
+ this.complete = isLeaf() || complete;
}
/**
*/
public void setLeaf(boolean leaf) {
pages = leaf ? -1 : -2;
+ if (leaf) {
+ complete = true;
+ }
}
/**
* the tag to add
*/
public void add(SearchableTag tag) {
+ if (tag == null) {
+ throw new NullPointerException("tag");
+ }
+
+ for (SearchableTag p = this; p != null; p = p.parent) {
+ if (p.equals(tag)) {
+ throw new IllegalArgumentException(
+ "Tags do not allow recursion");
+ }
+ }
+ for (SearchableTag p = tag; p != null; p = p.parent) {
+ if (p.equals(this)) {
+ throw new IllegalArgumentException(
+ "Tags do not allow recursion");
+ }
+ }
+
children.add(tag);
tag.parent = this;
}
return rep;
}
+
+ @Override
+ public int hashCode() {
+ return getFqName().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object otherObj) {
+ if (otherObj instanceof SearchableTag) {
+ SearchableTag other = (SearchableTag) otherObj;
+ if ((id == null && other.id == null)
+ || (id != null && id.equals(other.id))) {
+ if (getFqName().equals(other.getFqName())) {
+ if ((parent == null && other.parent == null)
+ || (parent != null && parent.equals(other.parent))) {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
}