summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/hastabel2idp/HastabelResult.java')
-rw-r--r--src/hastabel2idp/HastabelResult.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/hastabel2idp/HastabelResult.java b/src/hastabel2idp/HastabelResult.java
new file mode 100644
index 0000000..7b40e2d
--- /dev/null
+++ b/src/hastabel2idp/HastabelResult.java
@@ -0,0 +1,132 @@
+package hastabel2idp;
+
+import hastabel2idp.OutputFile;
+
+import hastabel.lang.Type;
+
+import java.util.List;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class HastabelResult
+{
+ private final OutputFile model, level;
+
+ public HastabelResult (final Parameters params)
+ {
+ model =
+ OutputFile.new_output_file
+ (
+ params.get_output_dir()
+ + "99_"
+ + params.get_property_name()
+ + ".sol.mod"
+ );
+
+ level =
+ OutputFile.new_output_file
+ (
+ params.get_output_dir()
+ + "99_"
+ + params.get_property_name()
+ + ".sol.lvl"
+ );
+ }
+
+ public void add_solution
+ (
+ final String predicate,
+ final List<Type> signature,
+ final String idp_solution
+ )
+ {
+ add_solution_to_level(predicate, signature);
+ add_solution_to_model(predicate, idp_solution);
+ level.write(predicate);
+ }
+
+ private void add_solution_to_level
+ (
+ final String predicate,
+ final List<Type> signature
+ )
+ {
+ boolean is_first;
+
+ is_first = true;
+
+ level.write("add_predicate ");
+ level.write(predicate);
+ level.write("(");
+
+ for (final Type type: signature)
+ {
+ if (is_first)
+ {
+ is_first = false;
+ }
+ else
+ {
+ level.write(", ");
+ }
+
+ level.write(type.get_name());
+ }
+
+ level.write(")");
+ level.insert_newline();
+ }
+
+ private void add_solution_to_model
+ (
+ final String predicate,
+ final String idp_solution
+ )
+ {
+ final Pattern pattern;
+ final Matcher matcher;
+
+ pattern = Pattern.compile(predicate + " = \\{(.*)\\}");
+ matcher = pattern.matcher(idp_solution);
+
+ if (matcher.find())
+ {
+ final String[] solutions;
+
+ solutions = matcher.group(1).split(";");
+
+ System.out.println("# " + solutions.length + " solutions found.");
+
+ for (final String solution: solutions)
+ {
+ boolean is_first;
+
+ is_first = true;
+
+ model.write(predicate);
+ model.write("(");
+
+ for (final String param: solution.split(","))
+ {
+ if (is_first)
+ {
+ is_first = false;
+ }
+ else
+ {
+ model.write(", ");
+ }
+ model.write(param.trim());
+ }
+
+ model.write(")");
+ model.insert_newline();
+ }
+ }
+ else
+ {
+ System.out.println("# No solutions found.");
+ }
+ }
+}