Skip to content

Commit d85f323

Browse files
committed
Update CLI options default values and add new options
1 parent 98da304 commit d85f323

File tree

3 files changed

+51
-21
lines changed

3 files changed

+51
-21
lines changed

swan-pipeline/src/main/java/de/fraunhofer/iem/swan/cli/CliRunner.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import picocli.CommandLine;
44

5+
import java.util.ArrayList;
56
import java.util.Collections;
67
import java.util.List;
78
import java.util.concurrent.Callable;
@@ -11,16 +12,19 @@
1112
public class CliRunner implements Callable<Integer> {
1213

1314
@CommandLine.Option(names = {"-test", "--test-data"}, description = {"Path of test JARs or class files"})
14-
private String testDataDir = "/input/test-data";
15+
private String testDataDir = "";
1516

1617
@CommandLine.Option(names = {"-train", "--train-data"}, description = {"Path of training JARs or class files"})
17-
private String trainDataDir = "/input/train-data";
18+
private String trainDataDir = "";
1819

1920
@CommandLine.Option(names = {"-d", "--dataset"}, description = {"Path to JSON dataset file"})
20-
private String datasetJson = "/input/dataset/swan-dataset.json";
21+
private String datasetJson = "/dataset/swan-dataset.json";
22+
23+
@CommandLine.Option(names = {"-in", "--train-instances"}, description = {"Path to ARFF files that contain training instances"})
24+
private List<String> instancesArff = new ArrayList<>();
2125

2226
@CommandLine.Option(names = {"-o", "--output"}, description = {"Directory to save output files"})
23-
private String outputDir = "/swan-output";
27+
private String outputDir = "";
2428

2529
@CommandLine.Option(names = {"-f", "--feature"}, description = {"Select one or more feature sets: all, code, doc-auto or doc-manual"})
2630
private List<String> featureSet = Collections.singletonList("code");
@@ -52,9 +56,7 @@ public class CliRunner implements Callable<Integer> {
5256
@CommandLine.Option(names = {"-pt", "--prediction-threshold"}, description = {"Threshold for predicting categories"})
5357
private double predictionThreshold = 0.5;
5458

55-
56-
@Override
57-
public Integer call() throws Exception {
59+
public SwanOptions initializeOptions(){
5860

5961
SwanOptions options = new SwanOptions(testDataDir,
6062
trainDataDir,
@@ -70,7 +72,14 @@ public Integer call() throws Exception {
7072
split,
7173
phase);
7274
options.setPredictionThreshold(predictionThreshold);
75+
options.setInstances(instancesArff);
76+
77+
return options;
78+
}
79+
80+
@Override
81+
public Integer call() throws Exception {
7382

74-
return new SwanCli().run(options);
83+
return new SwanCli().run(initializeOptions());
7584
}
7685
}

swan-pipeline/src/main/java/de/fraunhofer/iem/swan/cli/SwanCli.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66

7+
import java.util.ArrayList;
78
import java.util.Arrays;
9+
import java.util.List;
810
import java.util.concurrent.CancellationException;
911

1012
/**
@@ -13,39 +15,44 @@
1315
public class SwanCli {
1416

1517
private static final Logger logger = LoggerFactory.getLogger(SwanCli.class);
18+
private SwanPipeline swanPipeline;
1619

1720
public Integer run(SwanOptions options) throws Exception {
1821

1922
FileUtility fileUtility = new FileUtility();
2023

21-
if (options.getDatasetJson().contentEquals("/input/dataset/swan-dataset.json")) {
24+
if (options.getDatasetJson().contentEquals("/dataset/swan-dataset.json")) {
2225
options.setDatasetJson(fileUtility.getResourceFile(options.getDatasetJson()).getAbsolutePath());
2326
}
2427

25-
if (options.getTrainDataDir().contentEquals("/input/train-data")) {
26-
options.setTrainDataDir(fileUtility.getResourceDirectory("/input/train-data").getAbsolutePath());
27-
}
28-
29-
if (options.getTestDataDir().contentEquals("/input/test-data")) {
30-
options.setTestDataDir(fileUtility.getResourceDirectory("/input/test-data").getAbsolutePath());
31-
}
32-
33-
if(options.getSrmClasses().contains("all")){
28+
if (options.getSrmClasses().contains("all")) {
3429
options.setSrmClasses(Arrays.asList("source", "sink", "sanitizer", "authentication"));
3530
}
3631

37-
if(options.getCweClasses().contains("all")){
32+
if (options.getCweClasses().contains("all")) {
3833
options.setCweClasses(Arrays.asList("cwe078", "cwe079", "cwe089", "cwe306", "cwe601", "cwe862", "cwe863"));
3934
}
4035

41-
if(options.getFeatureSet().contains("all")){
36+
if (options.getFeatureSet().contains("all")) {
4237
options.setFeatureSet(Arrays.asList("code", "doc-manual", "doc-auto"));
4338
}
4439

40+
if (options.getInstances().isEmpty()) {
41+
42+
List<String> instances = new ArrayList<>();
43+
44+
for (String feature : options.getFeatureSet()){
45+
String filepath = "/dataset/" + options.getToolkit() + "-" + feature + "-instances.arff";
46+
instances.add(fileUtility.getResourceFile(filepath).getAbsolutePath());
47+
}
48+
49+
options.setInstances(instances);
50+
}
51+
4552
logger.info("SWAN options: {}", options);
4653

4754
try {
48-
SwanPipeline swanPipeline = new SwanPipeline(options);
55+
swanPipeline = new SwanPipeline(options);
4956
swanPipeline.run();
5057

5158
return 0;
@@ -60,4 +67,8 @@ public Integer run(SwanOptions options) throws Exception {
6067
fileUtility.dispose();
6168
}
6269
}
70+
71+
public SwanPipeline getSwanPipeline() {
72+
return swanPipeline;
73+
}
6374
}

swan-pipeline/src/main/java/de/fraunhofer/iem/swan/cli/SwanOptions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class SwanOptions {
2424
private double trainTestSplit;
2525
private String phase;
2626
private double predictionThreshold;
27+
private List<String> instancesArff;
2728

2829
public SwanOptions(String testDataDir, String trainDataDir, String datasetJson, String outputDir,
2930
List<String> featureSet, String toolkit, List<String> srmClasses,
@@ -177,12 +178,21 @@ public void setPredictionThreshold(double predictionThreshold) {
177178
this.predictionThreshold = predictionThreshold;
178179
}
179180

181+
public List<String> getInstances() {
182+
return instancesArff;
183+
}
184+
185+
public void setInstances(List<String> instancesArff) {
186+
this.instancesArff = instancesArff;
187+
}
188+
180189
@Override
181190
public String toString() {
182191
return "SwanOptions{" +
183192
"testData='" + testDataDir + '\'' +
184193
", trainData='" + trainDataDir + '\'' +
185194
", datasetJson='" + datasetJson + '\'' +
195+
", instances='" + instancesArff + '\'' +
186196
", outputDir='" + outputDir + '\'' +
187197
", featureSet='" + featureSet + '\'' +
188198
", learningMode='" + toolkit + '\'' +

0 commit comments

Comments
 (0)