1313import java .nio .file .Paths ;
1414import java .nio .file .StandardCopyOption ;
1515import java .util .ArrayList ;
16+ import java .util .Collection ;
1617import java .util .Comparator ;
1718import java .util .List ;
1819import java .util .Set ;
3233import at .jku .cps .travart .core .formats .afm .parser .AFMVisitorImpl ;
3334import at .jku .cps .travart .core .formats .afm .parser .AFMParser .Feature_modelContext ;
3435import de .ovgu .featureide .fm .attributes .FMAttributesLibrary ;
36+ import de .ovgu .featureide .fm .core .base .IFeature ;
3537import de .ovgu .featureide .fm .core .base .IFeatureModel ;
3638import de .ovgu .featureide .fm .core .base .impl .DefaultFeatureModelFactory ;
3739import de .ovgu .featureide .fm .core .init .FMCoreLibrary ;
@@ -55,18 +57,23 @@ public class ParserMain {
5557 private static final String UVL_EXTENSION = "uvl" ;
5658 private static final String DIMACS_EXTENSION = "dimacs" ;
5759 private static final String ZIP_EXTENSION = "zip" ;
60+ private static final String CFR_EXTENSION = "cfr" ;
61+
62+ private static final Set <String > EXTENSIONS_TO_SKIP = Set .of (
63+ CFR_EXTENSION );
5864
5965 public static void main (String [] args ) throws IOException {
6066 FMCoreLibrary .getInstance ().install ();
6167 FMAttributesLibrary .getInstance ().install ();
62-
68+ if (args .length != 1 ) {
69+ System .out .println ("Expected number of arguments is 1. Found: " + args .length );
70+ return ;
71+ }
6372 PrintStream out = new PrintStream (
6473 new FileOutputStream ("log.txt" , false ), true );
6574 System .setOut (out );
6675 System .setErr (out );
67- translateFeatureModels ();
68- // filterAfm();
69-
76+ translateFeatureModels (args [0 ]);
7077 }
7178
7279 private static void deleteDirectoryStream (String path ) throws IOException {
@@ -78,8 +85,8 @@ private static void deleteDirectoryStream(String path) throws IOException {
7885 }
7986 }
8087
81- private static void translateFeatureModels () throws IOException {
82- String featureModelDir = "../feature-model-benchmark/feature_models/dsads/" ;
88+ private static void translateFeatureModels (String path ) throws IOException {
89+ String featureModelDir = path ;
8390
8491 List <File > featureModelFiles = new ArrayList <>();
8592 listf (featureModelDir , featureModelFiles ); // Fill list bah
@@ -168,11 +175,16 @@ private static void handleFile(String path, String originalPath, boolean zipResu
168175 return ;
169176 }
170177
178+ String extension = getFileExtension (path );
179+ String originalExtension = getFileExtension (originalPath );
180+
181+ if (EXTENSIONS_TO_SKIP .contains (extension )) { // Currently only skips clafer
182+ return ;
183+ }
184+
171185 String subPath = originalPath .split ("/original/" )[1 ];
172186 String subDirectoryUvlPath = "uvl" + File .separator + subPath .substring (0 , subPath .lastIndexOf ("/" ));
173187 String subDirectoryDimacsPath = "dimacs" + File .separator + subPath .substring (0 , subPath .lastIndexOf ("/" ));
174- String extension = getFileExtension (path );
175- String originalExtension = getFileExtension (originalPath );
176188 Files .createDirectories (Paths .get (subDirectoryUvlPath ));
177189 Files .createDirectories (Paths .get (subDirectoryDimacsPath ));
178190
@@ -198,6 +210,7 @@ private static void handleFile(String path, String originalPath, boolean zipResu
198210 return ;
199211 }
200212 }
213+ cleanFeatureIDENamesForUVL (model );
201214 if (!skipUvlExport ) {
202215 writeUvlModel (model , uvlPath .replace (".zip" , "" ));
203216 if (zipResult ) {
@@ -292,6 +305,8 @@ private static String getFileExtension(String path) {
292305 return path .substring (lastIndexOf + 1 );
293306 }
294307
308+
309+
295310 private static String process (final Tree t , final List <String > ruleNames ) {
296311 if (t .getChildCount () == 0 )
297312 return Utils .escapeWhitespace (Trees .getNodeText (t , ruleNames ), false );
@@ -344,4 +359,36 @@ private static Set<String> getListOfFilesInDir(String dir) {
344359 .map (File ::getPath )
345360 .collect (Collectors .toSet ());
346361 }
362+
363+
364+ // ------- Model cleaning
365+
366+ private static void cleanFeatureIDENamesForUVL (IFeatureModel sourceModel ) {
367+ Collection <IFeature > iterateCopy = new ArrayList <>();
368+ iterateCopy .addAll (sourceModel .getFeatures ());
369+ for (IFeature feat : iterateCopy ) {
370+ if (needsRenaming (feat .getName ())) {
371+ sourceModel .getRenamingsManager ().renameFeature (feat .getName (), getCleanFeatureNameForUVL (feat .getName ()));
372+ }
373+ }
374+ }
375+ public static final String [] FORBIDDEN_SYMBOLS = {"." , "(" , ")" , "/" , "{" , "}" , "[" , "]" , "\" " , "'" };
376+ public static final String [] REPLACEMENTS = {":" , "-" , "-" , "-" , "-" , "-" , "-" , "-" , "-" ,"-" };
377+
378+ private static boolean needsRenaming (String name ) {
379+ for (String forbidden : FORBIDDEN_SYMBOLS ) {
380+ if (name .contains (forbidden )) {
381+ return true ;
382+ }
383+ }
384+ return false ;
385+ }
386+
387+ private static String getCleanFeatureNameForUVL (String original ) {
388+ String updated = original ;
389+ for (int i = 0 ; i < FORBIDDEN_SYMBOLS .length ; i ++) {
390+ updated = updated .replace (FORBIDDEN_SYMBOLS [i ], REPLACEMENTS [i ]);
391+ }
392+ return updated ;
393+ }
347394}
0 commit comments