/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2023 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.policy.pdpx.main.startstop;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Properties;
+import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.onap.policy.common.endpoints.event.comm.TopicEndpointManager;
-import org.onap.policy.common.endpoints.event.comm.TopicSource;
+import org.onap.policy.common.endpoints.event.comm.client.BidirectionalTopicClient;
+import org.onap.policy.common.endpoints.event.comm.client.BidirectionalTopicClientException;
import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
-import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException;
-import org.onap.policy.common.endpoints.http.server.RestServer;
+import org.onap.policy.common.endpoints.http.client.HttpClient;
+import org.onap.policy.common.endpoints.http.client.HttpClientConfigException;
+import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
import org.onap.policy.common.endpoints.listeners.MessageTypeDispatcher;
+import org.onap.policy.common.endpoints.parameters.RestClientParameters;
import org.onap.policy.common.parameters.ParameterService;
import org.onap.policy.common.utils.services.ServiceManagerContainer;
import org.onap.policy.models.pdp.concepts.PdpStatus;
import org.onap.policy.pdpx.main.comm.listeners.XacmlPdpStateChangeListener;
import org.onap.policy.pdpx.main.comm.listeners.XacmlPdpUpdateListener;
import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterGroup;
-import org.onap.policy.pdpx.main.rest.XacmlPdpAafFilter;
import org.onap.policy.pdpx.main.rest.XacmlPdpApplicationManager;
import org.onap.policy.pdpx.main.rest.XacmlPdpRestController;
+import org.onap.policy.pdpx.main.rest.XacmlPdpServiceFilter;
import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(XacmlPdpActivator.class);
private static final String[] MSG_TYPE_NAMES = {"messageName"};
- private static final String TOPIC = "POLICY-PDP-PAP";
+ private static final String TOPIC = "policy-pdp-pap";
@Getter
@Setter
// The parameters of this policy xacml pdp activator
private final XacmlPdpParameterGroup xacmlPdpParameterGroup;
+ /**
+ * POLICY-PDP-PAP client.
+ */
+ private final BidirectionalTopicClient topicClient;
+
/**
* Listens for messages on the topic, decodes them into a {@link PdpStatus} message, and then
* dispatches them to appropriate listener.
* Instantiate the activator for policy xacml pdp as a complete service.
*
* @param xacmlPdpParameterGroup the parameters for the xacml pdp service
- * @param topicProperties properties used to configure the topics
*/
- public XacmlPdpActivator(final XacmlPdpParameterGroup xacmlPdpParameterGroup, Properties topicProperties) {
- LOGGER.info("Activator initializing using {} and {}", xacmlPdpParameterGroup, topicProperties);
+ public XacmlPdpActivator(final XacmlPdpParameterGroup xacmlPdpParameterGroup) {
+ LOGGER.info("Activator initializing using {}", xacmlPdpParameterGroup);
- TopicEndpointManager.getManager().addTopicSinks(topicProperties);
- TopicEndpointManager.getManager().addTopicSources(topicProperties);
+ RestClientParameters apiClientParams = xacmlPdpParameterGroup.getPolicyApiParameters();
+
+ TopicEndpointManager.getManager().addTopics(xacmlPdpParameterGroup.getTopicParameterGroup());
final XacmlPdpHearbeatPublisher heartbeat;
final TopicSinkClient sinkClient;
final XacmlState state;
- final RestServer restServer;
+ XacmlPdpRestServer restServer;
try {
- XacmlPdpApplicationManager appmgr =
- new XacmlPdpApplicationManager(Paths.get(xacmlPdpParameterGroup.getApplicationPath()));
+ HttpClient apiClient = HttpClientFactoryInstance.getClientFactory().build(apiClientParams);
+
+ var appmgr = new XacmlPdpApplicationManager(xacmlPdpParameterGroup.getApplicationParameters(),
+ apiClient);
XacmlPdpApplicationManager.setCurrent(appmgr);
- XacmlPdpStatisticsManager stats = new XacmlPdpStatisticsManager();
+ var stats = new XacmlPdpStatisticsManager();
XacmlPdpStatisticsManager.setCurrent(stats);
stats.setTotalPolicyTypesCount(appmgr.getPolicyTypeCount());
stats.setTotalPolicyCount(appmgr.getPolicyCount());
- state = new XacmlState(appmgr);
+ state = new XacmlState(appmgr, xacmlPdpParameterGroup.getPdpGroup(), xacmlPdpParameterGroup.getPdpType());
this.xacmlPdpParameterGroup = xacmlPdpParameterGroup;
this.msgDispatcher = new MessageTypeDispatcher(MSG_TYPE_NAMES);
- sinkClient = new TopicSinkClient(TOPIC);
- heartbeat = new XacmlPdpHearbeatPublisher(sinkClient, state);
+ topicClient = new BidirectionalTopicClient(TOPIC, TOPIC);
+ sinkClient = new TopicSinkClient(topicClient.getSink());
+
+ heartbeat = new XacmlPdpHearbeatPublisher(topicClient,
+ xacmlPdpParameterGroup.getProbeHeartbeatTopicSec() * 1000, state);
/*
* since the dispatcher isn't registered with the topic yet, we can go ahead
msgDispatcher.register(PdpMessageType.PDP_UPDATE.name(),
new XacmlPdpUpdateListener(sinkClient, state, heartbeat, appmgr));
- restServer = new RestServer(xacmlPdpParameterGroup.getRestServerParameters(), XacmlPdpAafFilter.class,
- XacmlPdpRestController.class);
+ XacmlPdpServiceFilter.disableApi();
- } catch (RuntimeException | TopicSinkClientException e) {
+ restServer = new XacmlPdpRestServer(xacmlPdpParameterGroup.getRestServerParameters(),
+ List.of(XacmlPdpServiceFilter.class), List.of(XacmlPdpRestController.class));
+
+ } catch (RuntimeException | HttpClientConfigException | BidirectionalTopicClientException e) {
throw new PolicyXacmlPdpRuntimeException(e.getMessage(), e);
}
heartbeat::start,
heartbeat::terminate);
- addAction("REST server",
+ // @formatter:on
+ addAction("REST Server",
restServer::start,
restServer::stop);
-
- // @formatter:on
}
/*
* Registers the dispatcher with the topic source(s).
*/
private void registerMsgDispatcher() {
- for (TopicSource source : TopicEndpointManager.getManager().getTopicSources(Arrays.asList(TOPIC))) {
- source.register(msgDispatcher);
- }
+ topicClient.getSource().register(msgDispatcher);
}
/**
* Unregisters the dispatcher from the topic source(s).
*/
private void unregisterMsgDispatcher() {
- for (TopicSource source : TopicEndpointManager.getManager().getTopicSources(Arrays.asList(TOPIC))) {
- source.unregister(msgDispatcher);
- }
+ topicClient.getSource().unregister(msgDispatcher);
+ }
+
+ /**
+ * Start the xacmlpdp rest controller.
+ */
+ public void enableApi() {
+ XacmlPdpServiceFilter.enableApi();
+ }
+
+ /**
+ * Stop the xacmlpdp rest controller.
+ */
+ public void disableApi() {
+ XacmlPdpServiceFilter.disableApi();
+ }
+
+ public boolean isApiEnabled() {
+ return XacmlPdpServiceFilter.isApiEnabled();
}
}