blob: fa0ac94d06e2ad6f10125510e7539fecd5b5f646 [file] [log] [blame]
package org.eclipse.emf.refactor.refactoring.analyzer.core;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.emf.refactor.smells.core.ModelSmell;
/**
* Data class representing the result of comparing two ResultModels during a quantitative analysis.
* The data is comprise of Maps containing counts of smell occurences which can be compared.
*
* @author Matthias Burhenne
*
*/
public class CompareResult {
private final HashMap<ModelSmell, Integer> occurencesInOriginalModel;
private final HashMap<ModelSmell, Integer> occurencesInChangedModel;
CompareResult(HashMap<ModelSmell, Integer> occurencesInOriginalModel, HashMap<ModelSmell, Integer> occurencesInChangedModel){
this.occurencesInOriginalModel = sort(occurencesInOriginalModel);
this.occurencesInChangedModel = occurencesInChangedModel;
}
private HashMap<ModelSmell, Integer> sort(HashMap<ModelSmell, Integer> map) {
ModelSmell[] smells = new ModelSmell[0];
smells = map.keySet().toArray(smells);
for(int i = 0; i < smells.length; i++) {
for(int j = 0; j < smells.length; j++) {
if(map.get(smells[i]) > map.get(smells[j])) {
ModelSmell temp = smells[i];
smells[i] = smells[j];
smells[j] = temp;
}
}
}
HashMap<ModelSmell, Integer> result = new HashMap<ModelSmell, Integer>();
for (ModelSmell smell : smells) {
result.put(smell, map.get(smell));
}
return result;
}
/**
* Getter for the field occurencesInOriginalModel
*
* @return - Map<ModelSmell, Integer>
*/
public HashMap<ModelSmell, Integer> getOccurencesInOriginalModel() {
return occurencesInOriginalModel;
}
/**
* Getter for the field occurencesInChangedModel
*
* @return - Map<ModelSmell, Integer>
*/
public HashMap<ModelSmell, Integer> getOccurencesInChangedModel() {
return occurencesInChangedModel;
}
public int getTotalNumberInOriginalModel() {
int number = 0;
for(ModelSmell smell : occurencesInOriginalModel.keySet()){
Integer numberInOriginal = occurencesInOriginalModel.get(smell);
number += numberInOriginal;
}
return number;
}
public int getTotalNumberInChangedModel() {
int number = 0;
for(ModelSmell smell : occurencesInChangedModel.keySet()){
Integer numberInOriginal = occurencesInChangedModel.get(smell);
number += numberInOriginal;
}
return number;
}
/**
* Compares the numbers of occurences in the original model and the changed model
* and returns the differences as a map
*
* @return - Map<ModelSmell, Integer>
*/
public Map<ModelSmell, Integer> getDifferences(){
HashMap<ModelSmell, Integer> result = new HashMap<ModelSmell, Integer>();
for(ModelSmell smell : occurencesInOriginalModel.keySet()){
Integer numberInOriginal = occurencesInOriginalModel.get(smell);
Integer numberInChanged = occurencesInChangedModel.get(smell);
if(numberInChanged != null){
result.put(smell, numberInChanged - numberInOriginal);
}else{
result.put(smell, 0 - numberInOriginal);
}
}
return result;
}
}