2  * ============LICENSE_START=======================================================
 
   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
 
  13  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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.
 
  21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 
  22  * ============LICENSE_END=========================================================
 
  25 package org.openecomp.appc.listener;
 
  27 import java.util.Properties;
 
  30  * A class for instantiating Listener objects. It is primarily used to hold properties that start with the given prefix.
 
  31  * It also holds a class that implements {@see Listener} and will be used by the controller to spawn a new listener
 
  37 public class ListenerProperties {
 
  39     private String prefix;
 
  41     private Class<? extends Listener> listenerClass;
 
  43     private Properties props;
 
  46      * Creates a new listener object with the given prefix and properties. Any property starting with the prefix is
 
  47      * added to the internal properties object with the prefix removed. All other properties are ignored.
 
  48      * ListenerProperties constructor
 
  51      *            The prefix of the properties to load
 
  53      *            The properties object to load from.
 
  55     public ListenerProperties(String prefix, Properties allProps) {
 
  57         props = new Properties();
 
  59         String dottedPrefix = String.format("%s.", prefix);
 
  60         for (String key : allProps.stringPropertyNames()) {
 
  61             if (key.startsWith(dottedPrefix) && key.length() > dottedPrefix.length()) {
 
  62                 props.put(key.substring(dottedPrefix.length()), allProps.get(key));
 
  68      * @return The prefix of these properties
 
  70     public String getPrefix() {
 
  75      * Sets the listener class. Will be used by {@see Controller} to instantiate the Listener thread for this object
 
  78      *            The class to be created. Implements {@see Listener}
 
  80     public void setListenerClass(Class<? extends Listener> cls) {
 
  81         this.listenerClass = cls;
 
  85      * @return The class that will be used by {@see Controller} to instantiate the Listener thread for this object
 
  87     public Class<? extends Listener> getListenerClass() {
 
  92      * Returns a property matching a given KEYS
 
  95      *            The KEYS object who's value to return.
 
  96      * @return The value of the property or null if none exists
 
  98     public String getProperty(KEYS key) {
 
  99         return getProperty(key, null);
 
 103      * Returns a property matching a given string.
 
 106      *            The key who's value to return.
 
 107      * @return The value of the property or null if none exists
 
 109     public String getProperty(String key) {
 
 110         return getProperty(key, null);
 
 114      * Returns a property matching a given KEYS
 
 117      *            The KEYS object who's value to return.
 
 118      * @param defaultValue
 
 119      *            The value to return if the property is not found
 
 120      * @return The value of the property or null if none exists
 
 122     public String getProperty(KEYS key, String defaultValue) {
 
 123         return getProperty(key.getPropertySuffix(), defaultValue);
 
 127      * Returns a property matching a given string.
 
 130      *            The key who's value to return.
 
 131      * @param defaultValue
 
 132      *            The value to return if the property is not found
 
 133      * @return The value of the property or null if none exists
 
 135     public String getProperty(String key, String defaultValue) {
 
 136         return props.getProperty(key, defaultValue);
 
 140      * @return The properties object containing all properties
 
 142     public Properties getProperties() {
 
 147      * Reads the <i>prefix</i>.disabled property to determine if the listener is disabled and should not be run by the
 
 148      * controller. Defaults to false if property not set or value cannot be parsed.
 
 150      * @return true if the listener is disabled and should not be started. false if the listener should be start
 
 151      *         normally (default).
 
 153     public boolean isDisabled() {
 
 154         return Boolean.valueOf(getProperty(KEYS.DISABLED, "false"));
 
 158     public String toString() {
 
 159         return String.format("%s", prefix);
 
 164      * Set of common properties that will be used by most systems. Primarily relating to DMaaP and ThreadPools
 
 166      * @since Apr 25, 2016
 
 171          * Property to determine if the listener should be disabled. If not set, defaults to false
 
 173         DISABLED("disabled"),
 
 176          * Property for the message service type. Should be a lower case string. See MessageService.
 
 178         MESSAGE_SERVICE("service"),
 
 181          * A hostname or comma separated list (no spaces) of hostnames of servers in a cluster. Can have ports included
 
 185          * <li>server1.appc.openecomp.org</li>
 
 186          * <li>server1.appc.openecomp.org:3904</li>
 
 187          * <li>server1.appc.openecomp.org,server2.appc.openecomp.org</li>
 
 190         HOSTS("poolMembers"),
 
 193          * The topic that will be used for DMaaP read operations. Can only support a single topic.
 
 195         TOPIC_READ("topic.read"),
 
 198          * The topic or topics that will be used to write to. If multiple topics are provided, should be in a comma
 
 199          * seperated list with no spaces.<br>
 
 203          * <li>TOPIC-1,TOPIC-2,ANOTHER-TOPIC</li>
 
 206         TOPIC_WRITE("topic.write"),
 
 209          * The highland park filter to use on read requests. If you are reading and writing to the same topic this must
 
 210          * be provided. Filter should be in JSON format (not url escaped).
 
 212         TOPIC_READ_FILTER("topic.read.filter"),
 
 215          * The amount of time in seconds that the DMaaP polling connection should stay open for. Recommended to be set
 
 216          * high (around 60 seconds) as most clients will return immediately and not wait until the timeout is up to
 
 217          * return if they have data.
 
 219         TOPIC_READ_TIMEOUT("topic.read.timeout"),
 
 222          * The name of the client to use. Should be unique to the application.
 
 224         CLIENT_NAME("client.name"),
 
 227          * The id of the client to use. Should be unique for each instance of the application in an environment.
 
 229         CLIENT_ID("client.name.id"),
 
 232          * The User (DMaaP) to use for authentication. If a user is provided, you must include the
 
 233          * domain name (e.g. example<b>@example.com</b>).
 
 235         AUTH_USER_KEY("client.key"),
 
 238          * The password (DMaaP) to use for authentication.
 
 240         AUTH_SECRET_KEY("client.secret"),
 
 243          * The minimum amount of size of the queue. A client should request new messages once the queue has dropped
 
 246         THREADS_MIN_QUEUE("threads.queuesize.min"),
 
 249          * The maximum size of the queue. A client will request no new messages once this maximum size has been reached.
 
 251         THREADS_MAX_QUEUE("threads.queuesize.max"),
 
 254          * The minimum size of the worker threads pool. This is the pool each listener will use to launch longer running
 
 257         THREADS_MIN_POOL("threads.poolsize.min"),
 
 260          * The maximum size of the worker threads pool. This is the pool each listener will use to launch longer running
 
 263         THREADS_MAX_POOL("threads.poolsize.max");
 
 265         private String suffix;
 
 267         private KEYS(String val) {
 
 273          *            The prefix to prepend
 
 274          * @return a fully property name that corroponds to what is used in the properties file. Format is PREFIX.KEY
 
 276         public String getFullProp(String prefix) {
 
 277             return String.format("%s.%s", prefix, suffix);
 
 280         public String getPropertySuffix() {