From 3f54136a63ca29ac2401c2b22a7a66b95faebae3 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Tue, 16 Jul 2019 16:10:25 -0400 Subject: Copy PapRestServer to policy/common Copied and renamed the class to RestServer. Also modified it to derive from ServiceManagerContainer. Added getName() method to HttpServletServer, which facilitated the refactoring. Renamed "controllers" to "providers". Change-Id: I905166e41063e3fe84e356fd6c4a91ca9d4cb8a6 Issue-ID: POLICY-1652 Signed-off-by: Jim Hahn --- .../endpoints/http/server/HttpServletServer.java | 6 + .../common/endpoints/http/server/RestServer.java | 140 +++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/RestServer.java (limited to 'policy-endpoints/src/main/java') diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/HttpServletServer.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/HttpServletServer.java index 73b1e544..0adf782c 100644 --- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/HttpServletServer.java +++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/HttpServletServer.java @@ -26,6 +26,12 @@ import org.onap.policy.common.capabilities.Startable; * Http Servlet Server interface. */ public interface HttpServletServer extends Startable { + /** + * Gets the server name. + * + * @return the server name + */ + String getName(); /** * Get the port. diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/RestServer.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/RestServer.java new file mode 100644 index 00000000..1f7a921a --- /dev/null +++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/RestServer.java @@ -0,0 +1,140 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2019 AT&T Intellectual Property. + * ================================================================================ + * 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.common.endpoints.http.server; + +import java.util.List; +import java.util.Properties; +import org.onap.policy.common.endpoints.http.server.aaf.AafAuthFilter; +import org.onap.policy.common.endpoints.parameters.RestServerParameters; +import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties; +import org.onap.policy.common.gson.GsonMessageBodyHandler; +import org.onap.policy.common.utils.services.ServiceManagerContainer; + +/** + * Class to manage life cycle of a rest server. + * + * @author Ram Krishna Verma (ram.krishna.verma@est.tech) + */ +public class RestServer extends ServiceManagerContainer { + + /** + * Factory used to access objects. May be overridden by junit tests. + */ + private static Factory factory = new Factory(); + + private final List servers; + + /** + * Constructs the object. + * + * @param restServerParameters the rest server parameters + * @param aafFilter class of object to use to filter AAF requests, or {@code null} + * @param jaxrsProviders classes providing the services + */ + public RestServer(final RestServerParameters restServerParameters, Class aafFilter, + Class... jaxrsProviders) { + + if (jaxrsProviders.length == 0) { + throw new IllegalArgumentException("no providers specified"); + } + + this.servers = factory.getServerFactory() + .build(getServerProperties(restServerParameters, getProviderClassNames(jaxrsProviders))); + + for (HttpServletServer server : this.servers) { + if (aafFilter != null && server.isAaf()) { + server.addFilterClass(null, aafFilter.getName()); + } + + addAction("REST " + server.getName(), server::start, server::stop); + } + } + + /** + * Creates the server properties object using restServerParameters. + * + * @param restServerParameters the rest server parameters + * @param names comma-separated list of classes providing the services + * + * @return the properties object + */ + private Properties getServerProperties(RestServerParameters restServerParameters, String names) { + final Properties props = new Properties(); + props.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, restServerParameters.getName()); + + final String svcpfx = + PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + restServerParameters.getName(); + + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, restServerParameters.getHost()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, + Integer.toString(restServerParameters.getPort())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX, names); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "false"); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SWAGGER_SUFFIX, "true"); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, + restServerParameters.getUserName()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, + restServerParameters.getPassword()); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, + String.valueOf(restServerParameters.isHttps())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_AAF_SUFFIX, + String.valueOf(restServerParameters.isAaf())); + props.setProperty(svcpfx + PolicyEndPointProperties.PROPERTY_HTTP_SERIALIZATION_PROVIDER, + GsonMessageBodyHandler.class.getName()); + return props; + } + + /** + * Gets the provider class names, as a comma-separated string. + * + * @param jaxrsProviders classes providing the services + * @return the provider class names + */ + private String getProviderClassNames(Class[] jaxrsProviders) { + StringBuilder names = new StringBuilder(); + + for (Class prov : jaxrsProviders) { + if (names.length() > 0) { + names.append(','); + } + + names.append(prov.getName()); + } + + return names.toString(); + } + + @Override + public String toString() { + return "RestServer [servers=" + servers + "]"; + } + + /** + * Factory used to access objects. + */ + public static class Factory { + + public HttpServletServerFactory getServerFactory() { + return HttpServletServerFactoryInstance.getServerFactory(); + } + } +} -- cgit 1.2.3-korg