package com.kenai.redminenb.util;
import com.taskadapter.redmineapi.bean.Project;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
public class NestedProject implements Comparable<NestedProject>{
private NestedProject parent;
private Project project;
public NestedProject(NestedProject parent, Project project) {
this.parent = parent;
this.project = project;
}
public NestedProject(Project project) {
this.parent = null;
this.project = project;
}
public NestedProject getParent() {
return parent;
}
public void setParent(NestedProject parent) {
this.parent = parent;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
@Override
public int hashCode() {
int hash = 7;
hash = 79 * hash + Objects.hashCode(this.project);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final NestedProject other = (NestedProject) obj;
if (!Objects.equals(this.project, other.project)) {
return false;
}
return true;
}
@Override
public int compareTo(NestedProject o) {
List<NestedProject> chain1 = new ArrayList<>();
List<NestedProject> chain2 = new ArrayList<>();
for(NestedProject np = this; np != null; np = np.getParent()) {
chain1.add(np);
}
for(NestedProject np = o; np != null; np = np.getParent()) {
chain2.add(np);
}
Collections.reverse(chain1);
Collections.reverse(chain2);
for(int i = 0; i < Math.max(chain1.size(), chain2.size()); i++) {
String s1 = "";
String s2 = "";
try {
if (i < chain1.size()
&& chain1.get(i).getProject().getName() != null) {
s1 = chain1.get(i).getProject().getName();
}
} catch (RuntimeException ex) {
}
try {
if (i < chain2.size()
&& chain2.get(i).getProject().getName() != null) {
s2 = chain2.get(i).getProject().getName();
}
} catch (RuntimeException ex) {
}
int stringResult = s1.compareToIgnoreCase(s2);
if(stringResult != 0) {
return stringResult;
}
}
return 0;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (NestedProject parent = this.getParent(); parent != null; parent = parent.getParent()) {
sb.append("\u00BB ");
}
sb.append(this.getProject().getName());
return sb.toString();
}
}