summaryrefslogtreecommitdiffstats
path: root/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/event/impl/enevent/ApexEvent2EnEventConverter.java
blob: 90a19fff2294fb8f9fb1ba530b88d4b6618df4b9 (plain)
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
139
140
141
142
143
/*-
 * ============LICENSE_START=======================================================
 *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * SPDX-License-Identifier: Apache-2.0
 * ============LICENSE_END=========================================================
 */

package org.onap.policy.apex.service.engine.event.impl.enevent;

import java.util.ArrayList;
import java.util.List;

import org.onap.policy.apex.service.engine.event.ApexEvent;
import org.onap.policy.apex.service.engine.event.ApexEventConverter;
import org.onap.policy.apex.service.engine.event.ApexEventException;
import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException;
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;

import org.onap.policy.apex.core.engine.engine.ApexEngine;
import org.onap.policy.apex.core.engine.event.EnEvent;
import org.onap.policy.apex.model.basicmodel.concepts.ApexException;
import org.onap.policy.apex.model.basicmodel.service.ModelService;
import org.onap.policy.apex.model.eventmodel.concepts.AxEvent;
import org.onap.policy.apex.model.eventmodel.concepts.AxEvents;

/**
 * The Class ApexEvent2EnEventConverter converts externally facing {@link ApexEvent} instances to
 * and from instances of {@link EnEvent} that are used internally in the Apex engine core.
 *
 * @author Liam Fallon (liam.fallon@ericsson.com)
 */
public final class ApexEvent2EnEventConverter implements ApexEventConverter {
    private static final XLogger LOGGER = XLoggerFactory.getXLogger(ApexEvent2EnEventConverter.class);

    // The Apex engine with its event definitions
    private final ApexEngine apexEngine;

    /**
     * Set up the event converter.
     *
     * @param apexEngine The engine to use to create events to be converted
     */
    public ApexEvent2EnEventConverter(final ApexEngine apexEngine) {
        this.apexEngine = apexEngine;
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * org.onap.policy.apex.service.engine.event.ApexEventConverter#toApexEvent(java.lang.String,
     * java.lang.Object)
     */
    @Override
    public List<ApexEvent> toApexEvent(final String eventName, final Object event) throws ApexException {
        // Check the Engine event
        if (event == null) {
            LOGGER.warn("event processing failed, engine event is null");
            throw new ApexEventException("event processing failed, engine event is null");
        }

        // Cast the event to an Engine event event, if our conversion is correctly configured, this
        // cast should always work
        EnEvent enEvent = null;
        try {
            enEvent = (EnEvent) event;
        } catch (final Exception e) {
            final String errorMessage = "error transferring event \"" + event + "\" to the Apex engine";
            LOGGER.debug(errorMessage, e);
            throw new ApexEventRuntimeException(errorMessage, e);
        }

        // Create the Apex event
        final AxEvent axEvent = enEvent.getAxEvent();
        final ApexEvent apexEvent = new ApexEvent(axEvent.getKey().getName(), axEvent.getKey().getVersion(),
                axEvent.getNameSpace(), axEvent.getSource(), axEvent.getTarget());

        // Copy the ExecutionID from the EnEvent into the ApexEvent
        apexEvent.setExecutionID(enEvent.getExecutionID());

        // Copy he exception message to the Apex event if it is set
        if (enEvent.getExceptionMessage() != null) {
            apexEvent.setExceptionMessage(enEvent.getExceptionMessage());
        }

        // Set the data on the apex event
        apexEvent.putAll(enEvent);

        // Return the event in a single element
        final ArrayList<ApexEvent> eventList = new ArrayList<ApexEvent>();
        eventList.add(apexEvent);
        return eventList;
    }

    /*
     * (non-Javadoc)
     *
     * @see
     * org.onap.policy.apex.service.engine.event.ApexEventConverter#fromApexEvent(org.onap.policy.
     * apex.service.engine.event.ApexEvent)
     */
    @Override
    public EnEvent fromApexEvent(final ApexEvent apexEvent) throws ApexException {
        // Check the Apex model
        if (apexEngine == null) {
            LOGGER.warn("event processing failed, apex engine is null");
            throw new ApexEventException("event processing failed, apex engine is null");
        }

        // Get the event definition
        final AxEvent eventDefinition = ModelService.getModel(AxEvents.class).get(apexEvent.getName());
        if (eventDefinition == null) {
            LOGGER.warn("event processing failed, event \"" + apexEvent.getName() + "\" not found in apex model");
            throw new ApexEventException(
                    "event processing failed, event \"" + apexEvent.getName() + "\" not found in apex model");
        }

        // Create the internal engine event
        final EnEvent enEvent = apexEngine.createEvent(eventDefinition.getKey());

        // Set the data on the engine event
        enEvent.putAll(apexEvent);

        // copy the ExecutionID from the ApexEvent into the EnEvent
        enEvent.setExecutionID(apexEvent.getExecutionID());

        return enEvent;
    }
}