Skip to content

Commit 530fa31

Browse files
committed
Expose interface to get SRM predictions
1 parent 9b6292e commit 530fa31

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

swan-pipeline/src/main/java/de/fraunhofer/iem/swan/SwanPipeline.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class SwanPipeline {
2626

2727
private static final Logger logger = LoggerFactory.getLogger(SwanPipeline.class);
2828
public static SwanOptions options;
29+
private ModelEvaluator modelEvaluator;
2930

3031
public SwanPipeline(SwanOptions options) {
3132
SwanPipeline.options = options;
@@ -64,10 +65,14 @@ public void run() throws IOException, InterruptedException {
6465
IFeatureSet featureSet = featureSetSelector.select(dataset, options);
6566

6667
//Train and evaluate model for SRM and CWE categories
67-
ModelEvaluator modelEvaluator = new ModelEvaluator(featureSet, options, dataset.getTestMethods());
68+
modelEvaluator = new ModelEvaluator(featureSet, options, dataset.getTestMethods());
6869
modelEvaluator.trainModel();
6970

7071
long analysisTime = System.currentTimeMillis() - startAnalysisTime;
7172
logger.info("Total runtime {} minutes", analysisTime / 60000);
7273
}
74+
75+
public ModelEvaluator getModelEvaluator() {
76+
return modelEvaluator;
77+
}
7378
}

swan-pipeline/src/main/java/de/fraunhofer/iem/swan/model/ModelEvaluator.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
import de.fraunhofer.iem.swan.features.IFeatureSet;
66
import de.fraunhofer.iem.swan.features.MekaFeatureSet;
77
import de.fraunhofer.iem.swan.features.WekaFeatureSet;
8+
import de.fraunhofer.iem.swan.io.dataset.SrmList;
9+
import de.fraunhofer.iem.swan.io.dataset.SrmListUtils;
810
import de.fraunhofer.iem.swan.model.toolkit.MLPlan;
911
import de.fraunhofer.iem.swan.model.toolkit.Meka;
1012
import de.fraunhofer.iem.swan.model.toolkit.Weka;
1113
import org.slf4j.Logger;
1214
import org.slf4j.LoggerFactory;
15+
16+
import java.io.File;
17+
import java.io.IOException;
1318
import java.util.Set;
1419

1520
/**
@@ -34,12 +39,14 @@ public enum Phase {
3439
private IFeatureSet features;
3540
private SwanOptions options;
3641
private Set<Method> methods;
42+
private SrmList predictedSrmList;
3743
private static final Logger logger = LoggerFactory.getLogger(ModelEvaluator.class);
3844

3945
public ModelEvaluator(IFeatureSet features, SwanOptions options, Set<Method> methods) {
4046
this.features = features;
4147
this.options = options;
4248
this.methods = methods;
49+
predictedSrmList = new SrmList();
4350
}
4451

4552
/**
@@ -53,8 +60,8 @@ public void trainModel() {
5360

5461
case MEKA:
5562
logger.info("Evaluating model with MEKA");
56-
Meka meka = new Meka((MekaFeatureSet)features, options, methods);
57-
meka.trainModel();
63+
Meka meka = new Meka((MekaFeatureSet) features, options, methods);
64+
processResults(meka.trainModel());
5865
break;
5966
case WEKA:
6067
logger.info("Evaluating model with WEKA");
@@ -64,8 +71,28 @@ public void trainModel() {
6471
case MLPLAN:
6572
logger.info("Evaluating model with ML-PLAN");
6673
MLPlan mlPlan = new MLPlan();
67-
mlPlan.evaluateDataset(((WekaFeatureSet)features).getInstances().get("train"));
74+
mlPlan.evaluateDataset(((WekaFeatureSet) features).getInstances().get("train"));
6875
break;
6976
}
7077
}
78+
79+
public void processResults(SrmList srmList) {
80+
81+
if (srmList != null)
82+
predictedSrmList = srmList;
83+
84+
predictedSrmList.removeUnclassifiedMethods();
85+
logger.info("{} SRMs detected", predictedSrmList.getMethods().size());
86+
87+
try {
88+
if (!options.getOutputDir().isEmpty())
89+
SrmListUtils.exportFile(predictedSrmList, options.getOutputDir() + File.separator + "swan-srm-cwe-list.json");
90+
} catch (IOException e) {
91+
e.printStackTrace();
92+
}
93+
}
94+
95+
public SrmList getPredictedSrmList() {
96+
return predictedSrmList;
97+
}
7198
}

0 commit comments

Comments
 (0)