package jdepend.client.report.util;
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 jdepend.framework.util.MathUtil;
import jdepend.model.Element;
import jdepend.model.Relation;
public final class IntensitySizeCalculator {
public static final int RelationIntensityLevel = 4;
public static final int RelationIntensityStep = 2;
public static final int ElementIntensityLevel = 4;
public static final int ElementIntensityStep = 6;
public static Map<Element, Integer> calElementSize(Collection<Element> elements) {
List<Float> elementBalances = new ArrayList<Float>();
for (Element element : elements) {
elementBalances.add(element.getBalance());
}
Collections.sort(elementBalances);
Map<Element, Integer> rtn = new HashMap<Element, Integer>();
for (Element element : elements) {
rtn.put(element, calElementSize(element.getBalance(), elementBalances));
}
return rtn;
}
public static Map<Relation, Integer> calRelationSize(Collection<Relation> relations) {
List<Float> relationIntensitys = new ArrayList<Float>();
for (Relation relation : relations) {
relationIntensitys.add(relation.getIntensity());
}
Collections.sort(relationIntensitys);
Map<Relation, Integer> rtn = new HashMap<Relation, Integer>();
for (Relation relation : relations) {
rtn.put(relation, calEdgeSize(relation.getIntensity(), relationIntensitys));
}
return rtn;
}
private static int calElementSize(Float current, List<Float> intensitys) {
int size = 1;
for (Float intensity : intensitys) {
if (MathUtil.compare(current, intensity) == 0) {
if (intensitys.size() <= ElementIntensityLevel) {
return size + 11;
} else {
return size / (intensitys.size() / ElementIntensityLevel + 1) + 12;
}
} else {
size += ElementIntensityStep;
}
}
return 0;
}
private static int calEdgeSize(Float current, List<Float> intensitys) {
int index = 1;
for (Float intensity : intensitys) {
if (MathUtil.compare(current, intensity) == 0) {
if (intensitys.size() <= RelationIntensityLevel) {
return index;
} else {
return index / (intensitys.size() / RelationIntensityLevel + 1) + RelationIntensityStep;
}
} else {
index += RelationIntensityStep;
}
}
return 0;
}
}