Second part of onap rename
[appc.git] / appc-event-listener / appc-event-listener-bundle / src / main / java / org / onap / appc / listener / AppcEventListenerActivator.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * =============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * 
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.appc.listener;
26
27 import org.onap.appc.configuration.Configuration;
28 import org.onap.appc.configuration.ConfigurationFactory;
29 import org.onap.appc.listener.impl.ControllerImpl;
30
31 import com.att.eelf.configuration.EELFLogger;
32 import com.att.eelf.configuration.EELFManager;
33 import org.osgi.framework.BundleActivator;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36
37 import java.util.HashSet;
38 import java.util.Properties;
39 import java.util.Set;
40
41 /**
42  * This activator is used to initialize and terminate the dmaap listener controller and pool(s)
43  * <p>
44  * The DMaaP listener is responsible for listening to a topic on the Universal Event Bus and reading in messages that
45  * conform to the DCAE message format for APPC. These messages will then be parsed and passed along to the APPC Provider
46  * to take action on. The listener will also send messages out on DMaaP during critical phases. The messages sent out
47  * will have a status of:
48  * <ul>
49  * <li><i>PENDING</i> - The listener has read the message off of DMaaP and has put it in the queue to be processed</li>
50  * <li><i>ACTIVE</i> - The listener has begun actually processing the request and is waiting on the appc provider to
51  * complete the request</li>
52  * <li><i>SUCCESS</i> or <i>FAILURE</i> - The listener has gotten a response back from the appc provider. If it is a
53  * FAILURE, a message should also be included</li>
54  * </ul>
55  * </p>
56  * <p>
57  * Activation of the bundle will provision 1 controller that in turn will provision 1 (or in the future more) listener
58  * to interact with DMaaP. Each listener will have a queue of messages read off of DMaaP and a thread pool of workers to
59  * process them. This worker is responsible for contacting appc provider to perform the action
60  * </p>
61  * <p>
62  * When the bundle is deactivated, the stopNow() method is called and the thread pool is emptied and all remaining jobs
63  * are orphaned. Alternatively stop() could be called which would allow all remaining jobs in the queue to complete at
64  * the cost of longer run time.
65  * </p>
66  * 
67  * @since Aug 30, 2015
68  * @version $Id$
69  */
70 public class AppcEventListenerActivator implements BundleActivator {
71
72     /**
73      * The bundle registration
74      */
75     private ServiceRegistration registration = null;
76
77     /**
78      * The configuration object
79      */
80     private Configuration configuration;
81
82     /**
83      * The bundle context
84      */
85     private static BundleContext context;
86
87     /**
88      * The reference to the actual implementation object that implements the services
89      */
90     private Controller adapter;
91
92     /**
93      * The logger to be used
94      */
95     private final EELFLogger LOG = EELFManager.getInstance().getLogger(AppcEventListenerActivator.class);
96
97     /**
98      * Called when this bundle is started so the Framework can perform the bundle-specific activities necessary to start
99      * this bundle. This method can be used to register services or to allocate any resources that this bundle needs.
100      * <p>
101      * This method must complete and return to its caller in a timely manner.
102      * </p>
103      *
104      * @param ctx
105      *            The execution context of the bundle being started.
106      * @throws java.lang.Exception
107      *             If this method throws an exception, this bundle is marked as stopped and the Framework will remove
108      *             this bundle's listeners, unregister all services registered by this bundle, and release all services
109      *             used by this bundle.
110      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
111      */
112     @Override
113     public void start(BundleContext ctx) throws Exception {
114         LOG.info("Starting Bundle " + getName());
115
116         context = ctx;
117
118         configuration = ConfigurationFactory.getConfiguration();
119
120         Properties props = configuration.getProperties();
121
122         Set<ListenerProperties> listeners = new HashSet<>();
123
124         // Configure event listener for the demo use case
125         ListenerProperties demoProps = new ListenerProperties("appc.demo", props);
126         demoProps.setListenerClass(org.onap.appc.listener.demo.impl.ListenerImpl.class);
127         listeners.add(demoProps);
128
129         // ===========================================================================
130
131         ListenerProperties clLCMProps = new ListenerProperties("appc.LCM", props);
132         clLCMProps.setListenerClass(org.onap.appc.listener.LCM.impl.ListenerImpl.class);
133         listeners.add(clLCMProps);
134
135         // Configure the OAM properties
136         String oamPropKeyPrefix = "appc.OAM";
137         ListenerProperties oamProps  = new ListenerProperties(oamPropKeyPrefix, props);
138         if (isAppcOamPropsListenerEnabled(oamProps)) {
139             oamProps.setListenerClass(org.onap.appc.listener.LCM.impl.ListenerImpl.class);
140             listeners.add(oamProps);
141         } else {
142             LOG.warn(String.format("The listener %s is disabled and will not be run", oamPropKeyPrefix));
143         }
144
145         adapter = new ControllerImpl(listeners);
146         if (ctx != null && registration == null) {
147             LOG.info("Registering service DMaaP Controller");
148             registration = ctx.registerService(Controller.class, adapter, null);
149         }
150         adapter.start();
151
152         LOG.info("DMaaP Listener started successfully");
153     }
154
155     /**
156      * Called when this bundle is stopped so the Framework can perform the bundle-specific activities necessary to stop
157      * the bundle. In general, this method should undo the work that the BundleActivator.start method started. There
158      * should be no active threads that were started by this bundle when this bundle returns. A stopped bundle must not
159      * call any Framework objects.
160      * <p>
161      * This method must complete and return to its caller in a timely manner.
162      * </p>
163      *
164      * @param ctx
165      *            The execution context of the bundle being stopped.
166      * @throws java.lang.Exception
167      *             If this method throws an exception, the bundle is still marked as stopped, and the Framework will
168      *             remove the bundle's listeners, unregister all services registered by the bundle, and release all
169      *             services used by the bundle. *
170      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
171      */
172     @Override
173     public void stop(BundleContext ctx) throws Exception {
174         boolean stopNow = true;
175         LOG.info("Stopping DMaaP Listener. StopNow=" + stopNow);
176         adapter.stop(stopNow);
177         if (registration != null) {
178             registration.unregister();
179             registration = null;
180         }
181         LOG.info("DMaaP Listener stopped successfully");
182     }
183
184     public String getName() {
185         return "DMaaP Listener";
186     }
187
188     /**
189      * Check if AppcOam props disable listener or not
190      *
191      * @param listenerProperties of ListenerProperties objext
192      * @return false only if AppcOam disabled key is defined and equal to true. Otherwise, return true.
193      */
194     private boolean isAppcOamPropsListenerEnabled(ListenerProperties listenerProperties) {
195         final Properties appcOamProperties = listenerProperties.getProperties();
196
197         return appcOamProperties == null
198                 || !Boolean.parseBoolean(appcOamProperties.getProperty(
199                         ListenerProperties.KEYS.DISABLED.getPropertySuffix()));
200     }
201 }