aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/internal/engine/LifecycleProvider.java
blob: 8bbf2a66c7ed55649e5a7207047162a8853519ee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*******************************************************************************
 * Copyright (c) 2010-2013, Abel Hegedus, Istvan Rath and Daniel Varro
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-v20.html.
 * 
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/
package tools.refinery.viatra.runtime.internal.engine;

import java.util.ArrayList;

import org.apache.log4j.Logger;
import tools.refinery.viatra.runtime.api.AdvancedViatraQueryEngine;
import tools.refinery.viatra.runtime.api.IPatternMatch;
import tools.refinery.viatra.runtime.api.ViatraQueryEngineLifecycleListener;
import tools.refinery.viatra.runtime.api.ViatraQueryMatcher;

public final class LifecycleProvider extends ListenerContainer<ViatraQueryEngineLifecycleListener> implements ViatraQueryEngineLifecycleListener{

        private final Logger logger;

        /**
         * @param queryEngine
         */
        public LifecycleProvider(AdvancedViatraQueryEngine queryEngine, Logger logger) {
            this.logger = logger;
        }

        @Override
        protected void listenerAdded(ViatraQueryEngineLifecycleListener listener) {
            logger.debug("Lifecycle listener " + listener + " added to engine.");
        }

        @Override
        protected void listenerRemoved(ViatraQueryEngineLifecycleListener listener) {
            logger.debug("Lifecycle listener " + listener + " removed from engine.");
        }

//        public void propagateEventToListeners(Predicate<ViatraQueryEngineLifecycleListener> function) {
//            if (!listeners.isEmpty()) {
//                for (ViatraQueryEngineLifecycleListener listener : new ArrayList<ViatraQueryEngineLifecycleListener>(listeners)) {
//                    try {
//                        function.apply(listener);
//                    } catch (Exception ex) {
//                        logger.error(
//                                "VIATRA Query encountered an error in delivering notification to listener "
//                                        + listener + ".", ex);
//                    }
//                }
//            }
//        }
        
        @Override
        public void matcherInstantiated(final ViatraQueryMatcher<? extends IPatternMatch> matcher) {
            if (!listeners.isEmpty()) {
                for (ViatraQueryEngineLifecycleListener listener : new ArrayList<ViatraQueryEngineLifecycleListener>(listeners)) {
                    try {
                        listener.matcherInstantiated(matcher);
                    } catch (Exception ex) {
                        logger.error(
                                "VIATRA Query encountered an error in delivering matcher initialization notification to listener "
                                        + listener + ".", ex);
                    }
                }
            }
//            propagateEventToListeners(new Predicate<ViatraQueryEngineLifecycleListener>() {
//               public boolean apply(ViatraQueryEngineLifecycleListener listener) {
//                   listener.matcherInstantiated(matcher);
//                   return true;
//               }
//            });
        }

        @Override
        public void engineBecameTainted(String description, Throwable t) {
            if (!listeners.isEmpty()) {
                for (ViatraQueryEngineLifecycleListener listener : new ArrayList<ViatraQueryEngineLifecycleListener>(listeners)) {
                    try {
                        listener.engineBecameTainted(description, t);
                    } catch (Exception ex) {
                        logger.error(
                                "VIATRA Query encountered an error in delivering engine tainted notification to listener "
                                        + listener + ".", ex);
                    }
                }
            }
//            propagateEventToListeners(new Predicate<ViatraQueryEngineLifecycleListener>() {
//                public boolean apply(ViatraQueryEngineLifecycleListener listener) {
//                    listener.engineBecameTainted();
//                    return true;
//                }
//             });
        }

        @Override
        public void engineWiped() {
            if (!listeners.isEmpty()) {
                for (ViatraQueryEngineLifecycleListener listener : new ArrayList<ViatraQueryEngineLifecycleListener>(listeners)) {
                    try {
                        listener.engineWiped();
                    } catch (Exception ex) {
                        logger.error(
                                "VIATRA Query encountered an error in delivering engine wiped notification to listener "
                                        + listener + ".", ex);
                    }
                }
            }
//            propagateEventToListeners(new Predicate<ViatraQueryEngineLifecycleListener>() {
//                public boolean apply(ViatraQueryEngineLifecycleListener listener) {
//                    listener.engineWiped();
//                    return true;
//                }
//             });
        }

        @Override
        public void engineDisposed() {
            if (!listeners.isEmpty()) {
                for (ViatraQueryEngineLifecycleListener listener : new ArrayList<ViatraQueryEngineLifecycleListener>(listeners)) {
                    try {
                        listener.engineDisposed();
                    } catch (Exception ex) {
                        logger.error(
                                "VIATRA Query encountered an error in delivering engine disposed notification to listener "
                                        + listener + ".", ex);
                    }
                }
            }
//            propagateEventToListeners(new Predicate<ViatraQueryEngineLifecycleListener>() {
//                public boolean apply(ViatraQueryEngineLifecycleListener listener) {
//                    listener.engineDisposed();
//                    return true;
//                }
//             });
        }
        
    }