aboutsummaryrefslogtreecommitdiffstats
path: root/participant/participant-impl/participant-impl-dcae/src/main/java/org/onap/policy/clamp/controlloop/participant/dcae/main/handler/DcaeProvider.java
blob: afaf1c7541f9f8993cc4fe237fb110b384a9cd69 (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
/*-
 * ============LICENSE_START=======================================================
 * Copyright (C) 2021 Nordix Foundation.
 * ================================================================================
 * 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.clamp.controlloop.participant.dcae.main.handler;

import java.io.Closeable;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import lombok.Getter;
import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException;
import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
import org.onap.policy.clamp.controlloop.models.controlloop.concepts.Participant;
import org.onap.policy.clamp.controlloop.models.messages.rest.TypedSimpleResponse;
import org.onap.policy.clamp.controlloop.participant.dcae.main.parameters.ParticipantDcaeParameters;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryApi;
import org.onap.policy.clamp.controlloop.participant.intermediary.api.ParticipantIntermediaryFactory;

/**
 * This provider class dcae of participants and control loop elements.
 */
public class DcaeProvider implements Closeable {
    @Getter
    private final ParticipantIntermediaryApi intermediaryApi;

    private final ControlLoopElementHandler clElementHandler;

    /**
     * Create a participant dcae provider.
     *
     * @throws ControlLoopRuntimeException on errors creating the provider
     */
    public DcaeProvider(ParticipantDcaeParameters parameters) throws ControlLoopRuntimeException {
        intermediaryApi = new ParticipantIntermediaryFactory().createApiImplementation();
        intermediaryApi.init(parameters.getIntermediaryParameters());
        clElementHandler = new ControlLoopElementHandler(parameters.getClampClientParameters(),
                parameters.getConsulClientParameters());
        intermediaryApi.registerControlLoopElementListener(clElementHandler);
    }

    @Override
    public void close() throws IOException {
        intermediaryApi.close();
        clElementHandler.close();
    }

    /**
     * Get the control loops.
     *
     * @param name the controlLoop, null to get all
     * @param version the controlLoop, null to get all
     * @return the control loops
     * @throws ControlLoopException on errors getting the control loops
     */
    public ControlLoops getControlLoops(String name, String version) throws ControlLoopException {
        return intermediaryApi.getControlLoops(name, version);
    }

    /**
     * Get the dcae control loop elements.
     *
     * @param name the controlLoopElement, null to get all
     * @param version the controlLoopElement, null to get all
     * @return the control loop elements
     * @throws ControlLoopException on errors getting the control loop elements
     */
    public Map<UUID, ControlLoopElement> getControlLoopElements(String name, String version)
            throws ControlLoopException {
        return intermediaryApi.getControlLoopElements(name, version);
    }

    /**
     * Update the given control loop element in the dcae.
     *
     * @param element the control loop element to update
     * @return response simple response returned
     * @throws ControlLoopException on errors updating the control loop element
     */
    public TypedSimpleResponse<ControlLoopElement> updateControlLoopElement(ControlLoopElement element)
            throws ControlLoopException {
        TypedSimpleResponse<ControlLoopElement> response = new TypedSimpleResponse<>();
        response.setResponse(intermediaryApi.updateControlLoopElementState(element.getId(),
                element.getOrderedState(), element.getState()));
        return response;
    }

    /**
     * Get the current dcae participants.
     *
     * @param name the participant, null to get all
     * @param version the participant, null to get all
     * @return the list of participants
     * @throws ControlLoopException on errors getting the participants
     */
    public List<Participant> getParticipants(String name, String version) throws ControlLoopException {
        return intermediaryApi.getParticipants(name, version);
    }

    /**
     * Update a dcae participant.
     *
     * @param participant the participant to update
     * @return TypedSimpleResponse simple response
     * @throws ControlLoopException on errors updating the participant
     */

    public TypedSimpleResponse<Participant> updateParticipant(Participant participant) throws ControlLoopException {
        TypedSimpleResponse<Participant> response = new TypedSimpleResponse<>();
        response.setResponse(
                intermediaryApi.updateParticipantState(participant.getDefinition(), participant.getParticipantState()));
        return response;
    }
}