package husacct.define.domain.module;
import husacct.define.domain.module.modules.Component;
import husacct.define.domain.module.modules.ExternalLibrary;
import husacct.define.domain.module.modules.Facade;
import husacct.define.domain.module.modules.Layer;
import java.util.Comparator;
public class ModuleComparator implements Comparator<Object> {
@Override
public int compare(Object emp1, Object emp2) {
int compareReturn = 0;
if(emp1 instanceof Layer && emp2 instanceof Layer) {
int level1 = ((Layer)emp1).getHierarchicalLevel();
int level2 = ((Layer)emp2).getHierarchicalLevel();
compareReturn = this.compareInts(level1, level2);
} else if(emp1 instanceof Layer) {
compareReturn = -1;
} else if(emp2 instanceof Layer) {
compareReturn = 1;
} else if(((ModuleStrategy) emp1).getparent() instanceof Component &&
((ModuleStrategy) emp2).getparent() instanceof Component) {
compareReturn= compareComponents(emp1,emp2);
} else {
long moduleid1 = ((ModuleStrategy)emp1).getId();
long moduleid2 = ((ModuleStrategy)emp2).getId();
compareReturn = this.compareLongs(moduleid1, moduleid2);
}
if(emp1 instanceof Facade) {
compareReturn = -1;
} else if(emp2 instanceof Facade) {
compareReturn = 1;
}
if(emp1 instanceof ExternalLibrary) {
compareReturn = 1;
} else if(emp2 instanceof ExternalLibrary) {
compareReturn = -1;
}
return compareReturn;
}
private int compareInts(int int1, int int2) {
if(int1 > int2) {
return 1;
} else if(int1 < int2) {
return -1;
} else {
return 0;
}
}
private int compareLongs(long long1, long long2) {
if(long1 > long2) {
return 1;
} else if(long1 < long2) {
return -1;
} else {
return 0;
}
}
private int compareComponents(Object emp1, Object emp2) {
long long1 = ((ModuleStrategy)emp1).getId();
long long2 = ((ModuleStrategy)emp1).getId();
if(emp1 instanceof Facade || emp2 instanceof Facade){
return 1;
}else if(long1 > long2) {
return 1;
} else if(long1 < long2) {
return -1;
} else {
return 0;
}
}
}