aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java')
-rw-r--r--subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java b/subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java
new file mode 100644
index 00000000..0f7c7b01
--- /dev/null
+++ b/subprojects/viatra-runtime-localsearch/src/main/java/tools/refinery/viatra/runtime/localsearch/ExecutionLoggerAdapter.java
@@ -0,0 +1,85 @@
1/*******************************************************************************
2 * Copyright (c) 2010-2018, Zoltan Ujhelyi, IncQuery Labs Ltd.
3 * This program and the accompanying materials are made available under the
4 * terms of the Eclipse Public License v. 2.0 which is available at
5 * http://www.eclipse.org/legal/epl-v20.html.
6 *
7 * SPDX-License-Identifier: EPL-2.0
8 *******************************************************************************/
9package tools.refinery.viatra.runtime.localsearch;
10
11import java.util.Optional;
12import java.util.function.Consumer;
13
14import tools.refinery.viatra.runtime.localsearch.matcher.ILocalSearchAdapter;
15import tools.refinery.viatra.runtime.localsearch.matcher.LocalSearchMatcher;
16import tools.refinery.viatra.runtime.localsearch.operations.IPatternMatcherOperation;
17import tools.refinery.viatra.runtime.localsearch.operations.ISearchOperation;
18import tools.refinery.viatra.runtime.localsearch.operations.check.nobase.ScopeCheck;
19import tools.refinery.viatra.runtime.localsearch.plan.SearchPlan;
20
21/**
22 * @since 2.0
23 */
24public final class ExecutionLoggerAdapter implements ILocalSearchAdapter {
25
26 volatile String indentation = "";
27 private final Consumer<String> outputConsumer;
28
29 public ExecutionLoggerAdapter(Consumer<String> outputConsumer) {
30 this.outputConsumer = outputConsumer;
31 }
32
33 private void logMessage(String message) {
34 outputConsumer.accept(message);
35 }
36
37 private void logMessage(String message, Object...args) {
38 outputConsumer.accept(String.format(message, args));
39 }
40
41 @Override
42 public void patternMatchingStarted(LocalSearchMatcher lsMatcher) {
43 logMessage(indentation + "[ START] " + lsMatcher.getQuerySpecification().getFullyQualifiedName());
44 }
45
46 @Override
47 public void noMoreMatchesAvailable(LocalSearchMatcher lsMatcher) {
48 logMessage(indentation + "[FINISH] " + lsMatcher.getQuerySpecification().getFullyQualifiedName());
49 }
50
51 @Override
52 public void planChanged(Optional<SearchPlan> oldPlan, Optional<SearchPlan> newPlan) {
53 logMessage(indentation + "[ PLAN] " + newPlan.map(p -> p.getSourceBody().getPattern().getFullyQualifiedName()).orElse(""));
54 logMessage(indentation + newPlan.map(SearchPlan::toString).map(s -> s.replace("\n", "\n" + indentation)).orElse(""));
55 }
56
57 @Override
58 public void operationSelected(SearchPlan plan, ISearchOperation operation, MatchingFrame frame, boolean isBacktrack) {
59 String category = isBacktrack ? "[ BACK] " : "[SELECT] ";
60 logMessage(indentation + category + operation.toString());
61 if (operation instanceof IPatternMatcherOperation) {
62 indentation = indentation + "\t";
63 }
64 }
65
66 @Override
67 public void operationExecuted(SearchPlan plan, ISearchOperation operation, MatchingFrame frame,
68 boolean isSuccessful) {
69 if (operation instanceof ScopeCheck) return;
70 if (operation instanceof IPatternMatcherOperation && indentation.length() > 0) {
71 indentation = indentation.substring(1);
72 }
73 logMessage(indentation + "[ %s] %s %s", isSuccessful ? "OK" : "NO", operation.toString(), frame.toString());
74 }
75
76 @Override
77 public void matchFound(SearchPlan plan, MatchingFrame frame) {
78 logMessage(indentation + "[ MATCH] " + plan.getSourceBody().getPattern().getFullyQualifiedName() + " " + frame.toString());
79 }
80
81 @Override
82 public void duplicateMatchFound(MatchingFrame frame) {
83 logMessage(indentation + "[ DUPL.] " + frame.toString());
84 }
85} \ No newline at end of file