diff options
Diffstat (limited to 'common/src/main/java/org')
5 files changed, 485 insertions, 0 deletions
diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/ControlLoopConstants.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/ControlLoopConstants.java new file mode 100644 index 000000000..aa8b720bc --- /dev/null +++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/ControlLoopConstants.java @@ -0,0 +1,32 @@ +/* + * ============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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.controlloop.common; + +/** + * Names of various items contained in the Registry. + */ +public class ControlLoopConstants { + + // Registry keys + public static final String REG_CLRUNTIME_ACTIVATOR = "object:activator/clruntime"; + + private ControlLoopConstants() { + super(); + } +} diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopException.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopException.java new file mode 100644 index 000000000..05b913b22 --- /dev/null +++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopException.java @@ -0,0 +1,94 @@ +/*- + * ============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.common.exception; + +import javax.ws.rs.core.Response; +import lombok.Getter; +import lombok.ToString; +import org.onap.policy.models.errors.concepts.ErrorResponse; +import org.onap.policy.models.errors.concepts.ErrorResponseInfo; +import org.onap.policy.models.errors.concepts.ErrorResponseUtils; + +/** + * This class is a base exception from which all control loop exceptions are sub classes. + */ +@Getter +@ToString +public class ControlLoopException extends Exception implements ErrorResponseInfo { + private static final long serialVersionUID = -8507246953751956974L; + + // The error response of the exception + private final ErrorResponse errorResponse = new ErrorResponse(); + + // The object on which the exception was thrown + private final transient Object object; + + /** + * Instantiates a new control loop exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + */ + public ControlLoopException(final Response.Status statusCode, final String message) { + this(statusCode, message, null); + } + + /** + * Instantiates a new control loop exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param object the object that the exception was thrown on + */ + public ControlLoopException(final Response.Status statusCode, final String message, final Object object) { + super(message); + errorResponse.setResponseCode(statusCode); + ErrorResponseUtils.getExceptionMessages(errorResponse, this); + this.object = object; + } + + /** + * Instantiates a new control loop exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param exception the exception that caused this exception + */ + public ControlLoopException(final Response.Status statusCode, final String message, final Exception exception) { + this(statusCode, message, exception, null); + } + + /** + * Instantiates a new exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param exception the exception that caused this exception + * @param object the object that the exception was thrown on + */ + public ControlLoopException(final Response.Status statusCode, final String message, final Exception exception, + final Object object) { + super(message, exception); + errorResponse.setResponseCode(statusCode); + ErrorResponseUtils.getExceptionMessages(errorResponse, this); + this.object = object; + } +} diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopRuntimeException.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopRuntimeException.java new file mode 100644 index 000000000..b110a4362 --- /dev/null +++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/exception/ControlLoopRuntimeException.java @@ -0,0 +1,107 @@ +/*- + * ============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.common.exception; + +import javax.ws.rs.core.Response; +import lombok.Getter; +import lombok.ToString; +import org.onap.policy.models.errors.concepts.ErrorResponse; +import org.onap.policy.models.errors.concepts.ErrorResponseInfo; +import org.onap.policy.models.errors.concepts.ErrorResponseUtils; + +/** + * This class is a base control loop run time exception from which all control loop run time exceptions are sub classes. + */ +@Getter +@ToString +public class ControlLoopRuntimeException extends RuntimeException implements ErrorResponseInfo { + private static final long serialVersionUID = -8507246953751956974L; + + // The error response of the exception + private final ErrorResponse errorResponse = new ErrorResponse(); + + // The object on which the exception was thrown + private final transient Object object; + + /** + * Instantiates a new control loop runtime exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + */ + public ControlLoopRuntimeException(final Response.Status statusCode, final String message) { + this(statusCode, message, null); + } + + /** + * Instantiates a new control loop runtime exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param object the object that the exception was thrown on + */ + public ControlLoopRuntimeException(final Response.Status statusCode, final String message, final Object object) { + super(message); + this.object = object; + errorResponse.setResponseCode(statusCode); + ErrorResponseUtils.getExceptionMessages(errorResponse, this); + } + + /** + * Instantiates a new control loop runtime exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param exception the exception that caused this control loop exception + */ + public ControlLoopRuntimeException(final Response.Status statusCode, final String message, + final Exception exception) { + this(statusCode, message, exception, null); + } + + /** + * Instantiates a new model runtime exception from a ControlLoopException instance. + * + * @param exception the exception that caused this control loop exception + */ + public ControlLoopRuntimeException(final ControlLoopException exception) { + super(exception.getMessage(), exception); + this.object = exception.getObject(); + errorResponse.setResponseCode(exception.getErrorResponse().getResponseCode()); + ErrorResponseUtils.getExceptionMessages(errorResponse, this); + } + + /** + * Instantiates a new control loop runtime exception. + * + * @param statusCode the return code for the exception + * @param message the message on the exception + * @param exception the exception that caused this control loop exception + * @param object the object that the exception was thrown on + */ + public ControlLoopRuntimeException(final Response.Status statusCode, final String message, + final Exception exception, final Object object) { + super(message, exception); + this.object = object; + errorResponse.setResponseCode(statusCode); + ErrorResponseUtils.getExceptionMessages(errorResponse, this); + } +} diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/handler/ControlLoopHandler.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/handler/ControlLoopHandler.java new file mode 100644 index 000000000..1bbe5662f --- /dev/null +++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/handler/ControlLoopHandler.java @@ -0,0 +1,110 @@ +/*- + * ============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.common.handler; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import lombok.Getter; +import lombok.NonNull; +import org.onap.policy.common.endpoints.event.comm.TopicSink; +import org.onap.policy.common.endpoints.listeners.MessageTypeDispatcher; +import org.onap.policy.common.utils.services.Registry; +import org.onap.policy.models.provider.PolicyModelsProviderParameters; + +/** + * Abstract class for handlers for sub components in the control loop system + * + * <p>Instances are effectively singletons that are started at system start. + */ +public abstract class ControlLoopHandler { + @Getter + private final PolicyModelsProviderParameters databaseProviderParameters; + + /** + * Create a handler. + * + * @param databaseProviderParameters the parameters for access to the database + */ + protected ControlLoopHandler(@NonNull PolicyModelsProviderParameters databaseProviderParameters) { + this.databaseProviderParameters = databaseProviderParameters; + + Registry.register(this.getClass().getName(), this); + } + + public void close() { + Registry.unregister(this.getClass().getName()); + } + + /** + * Get the provider classes that are used in instantiation. + * + * @return the provider classes + */ + public Set<Class<?>> getProviderClasses() { + // No REST interfaces are the default + return new HashSet<>(); + } + + /** + * Start any topic message listeners for this handler. + * + * @param msgDispatcher the message dispatcher with which to register the listener + */ + public void startAndRegisterListeners(MessageTypeDispatcher msgDispatcher) { + // Start and register listeners + } + + /** + * Start any topic message publishers for this handler. + * + * @param topicSinks the topic sinks on which the publisher can publish + */ + public void startAndRegisterPublishers(List<TopicSink> topicSinks) { + // Start and register publishers + } + + /** + * Stop any topic message publishers for this handler. + */ + public void stopAndUnregisterPublishers() { + // Stop and unregister publishers + } + + /** + * Stop any topic message listeners for this handler. + * + * @param msgDispatcher the message dispatcher from which to unregister the listener + */ + public void stopAndUnregisterListeners(MessageTypeDispatcher msgDispatcher) { + // Stop and unregister listeners + } + + /** + * Start any providers for this handler. + */ + public abstract void startProviders(); + + /** + * Stop any providers for this handler. + */ + public abstract void stopProviders(); +} diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/startstop/CommonCommandLineArguments.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/startstop/CommonCommandLineArguments.java new file mode 100644 index 000000000..3ef3d4cb0 --- /dev/null +++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/startstop/CommonCommandLineArguments.java @@ -0,0 +1,142 @@ +/*- + * ============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.common.startstop; + +import java.io.File; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.net.URL; +import javax.ws.rs.core.Response; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.lang3.StringUtils; +import org.onap.policy.clamp.controlloop.common.exception.ControlLoopException; +import org.onap.policy.common.utils.resources.ResourceUtils; + +/** + * This class reads and handles command line parameters. + * + */ +public class CommonCommandLineArguments { + private static final String FILE_MESSAGE_PREAMBLE = " file \""; + private static final int HELP_LINE_LENGTH = 120; + + /** + * Construct the options for the policy participant. + */ + public CommonCommandLineArguments(final Options options) { + //@formatter:off + options.addOption(Option.builder("h") + .longOpt("help") + .desc("outputs the usage of this command") + .required(false) + .type(Boolean.class) + .build()); + options.addOption(Option.builder("v") + .longOpt("version") + .desc("outputs the version of policy participant") + .required(false) + .type(Boolean.class) + .build()); + options.addOption(Option.builder("c") + .longOpt("config-file") + .desc("the full path to the configuration file to use, " + + "the configuration file must be a Json file containing the " + + "policy participant parameters") + .hasArg() + .argName("CONFIG_FILE") + .required(false) + .type(String.class) + .build()); + //@formatter:on + } + + /** + * Validate the command line options. + * + * @throws ControlLoopException on command argument validation errors + */ + public void validate(final String configurationFilePath) throws ControlLoopException { + validateReadableFile("policy participant configuration", configurationFilePath); + } + + /** + * Print version information for policy participant. + * + * @return the version string + */ + public String version() { + return ResourceUtils.getResourceAsString("version.txt"); + } + + /** + * Print help information for policy participant. + * + * @param mainClassName the main class name + * @return the help string + */ + public String help(final String mainClassName, final Options options) { + final HelpFormatter helpFormatter = new HelpFormatter(); + final StringWriter stringWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter(stringWriter); + + helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0, + 0, ""); + + return stringWriter.toString(); + } + + /** + * Validate readable file. + * + * @param fileTag the file tag + * @param fileName the file name + * @throws ControlLoopException on the file name passed as a parameter + */ + private void validateReadableFile(final String fileTag, final String fileName) throws ControlLoopException { + if (StringUtils.isEmpty(fileName)) { + throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE, + fileTag + " file was not specified as an argument"); + } + + // The file name refers to a resource on the local file system + final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); + if (fileUrl == null) { + throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE, + fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); + } + + final File theFile = new File(fileUrl.getPath()); + if (!theFile.exists()) { + throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE, + fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); + } + if (!theFile.isFile()) { + throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE, + fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file"); + } + if (!theFile.canRead()) { + throw new ControlLoopException(Response.Status.NOT_ACCEPTABLE, + fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is ureadable"); + } + } +} |