55df01b406f4eeafb7e3d1d7efc3eb9fced7eea5
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.context.impl.distribution;
22
23 import org.onap.policy.apex.context.ContextException;
24 import org.onap.policy.apex.context.Distributor;
25 import org.onap.policy.apex.context.parameters.ContextParameterConstants;
26 import org.onap.policy.apex.context.parameters.DistributorParameters;
27 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
28 import org.onap.policy.apex.model.utilities.Assertions;
29 import org.onap.policy.common.parameters.ParameterService;
30 import org.slf4j.ext.XLogger;
31 import org.slf4j.ext.XLoggerFactory;
32
33 /**
34  * This class returns a context distributor for the particular type of distribution mechanism configured for use.
35  *
36  * @author Liam Fallon (liam.fallon@ericsson.com)
37  */
38 public class DistributorFactory {
39     // Get a reference to the logger
40     private static final XLogger LOGGER = XLoggerFactory.getXLogger(DistributorFactory.class);
41
42     /**
43      * Get a context distributor for a given context set key.
44      *
45      * @param key The key for the distributor
46      * @return a context distributor
47      * @throws ContextException on context distributor creation errors
48      */
49     public Distributor getDistributor(final AxArtifactKey key) throws ContextException {
50         LOGGER.entry("Distributor factory, key=" + key);
51
52         Assertions.argumentOfClassNotNull(key, ContextException.class, "Parameter \"key\" may not be null");
53
54         // Get the class for the distributor using reflection
55         final DistributorParameters distributorParameters = ParameterService
56                         .get(ContextParameterConstants.DISTRIBUTOR_GROUP_NAME);
57         final String pluginClass = distributorParameters.getPluginClass();
58         Object contextDistributorObject = null;
59         try {
60             contextDistributorObject = Class.forName(pluginClass).newInstance();
61         } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
62             LOGGER.error("Apex context distributor class not found for context distributor plugin \"" + pluginClass
63                             + "\"", e);
64             throw new ContextException("Apex context distributor class not found for context distributor plugin \""
65                             + pluginClass + "\"", e);
66         }
67
68         // Check the class is a distributor
69         if (!(contextDistributorObject instanceof Distributor)) {
70             final String returnString = "Specified Apex context distributor plugin class \"" + pluginClass
71                             + "\" does not implement the ContextDistributor interface";
72             LOGGER.error(returnString);
73             throw new ContextException(returnString);
74         }
75
76         // The context Distributor to return
77         final Distributor contextDistributor = (Distributor) contextDistributorObject;
78
79         // Lock and load the context distributor
80         contextDistributor.init(key);
81
82         LOGGER.exit("Distributor factory, key=" + key + ", selected distributor of class "
83                         + contextDistributor.getClass());
84         return contextDistributor;
85     }
86 }