55import de .fraunhofer .iem .swan .features .IFeatureSet ;
66import de .fraunhofer .iem .swan .features .MekaFeatureSet ;
77import de .fraunhofer .iem .swan .features .WekaFeatureSet ;
8+ import de .fraunhofer .iem .swan .io .dataset .SrmList ;
9+ import de .fraunhofer .iem .swan .io .dataset .SrmListUtils ;
810import de .fraunhofer .iem .swan .model .toolkit .MLPlan ;
911import de .fraunhofer .iem .swan .model .toolkit .Meka ;
1012import de .fraunhofer .iem .swan .model .toolkit .Weka ;
1113import org .slf4j .Logger ;
1214import org .slf4j .LoggerFactory ;
15+
16+ import java .io .File ;
17+ import java .io .IOException ;
1318import 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