2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * Copyright (C) 2017 Amdocs
 
   7  * ================================================================================
 
   8  * Licensed under the Apache License, Version 2.0 (the "License");
 
   9  * you may not use this file except in compliance with the License.
 
  10  * You may obtain a copy of the License at
 
  12  *      http://www.apache.org/licenses/LICENSE-2.0
 
  14  * Unless required by applicable law or agreed to in writing, software
 
  15  * distributed under the License is distributed on an "AS IS" BASIS,
 
  16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  17  * See the License for the specific language governing permissions and
 
  18  * limitations under the License.
 
  19  * ============LICENSE_END=========================================================
 
  20  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 
  23 package org.openecomp.appc.listener;
 
  25 import java.util.Properties;
 
  28  * A class for instantiating Listener objects. It is primarily used to hold properties that start with the given prefix.
 
  29  * It also holds a class that implements {@see Listener} and will be used by the controller to spawn a new listener
 
  35 public class ListenerProperties {
 
  37     private String prefix;
 
  39     private Class<? extends Listener> listenerClass;
 
  41     private Properties props;
 
  44      * Creates a new listener object with the given prefix and properties. Any property starting with the prefix is
 
  45      * added to the internal properties object with the prefix removed. All other properties are ignored.
 
  46      * ListenerProperties constructor
 
  49      *            The prefix of the properties to load
 
  51      *            The properties object to load from.
 
  53     public ListenerProperties(String prefix, Properties allProps) {
 
  55         props = new Properties();
 
  57         String dottedPrefix = String.format("%s.", prefix);
 
  58         for (String key : allProps.stringPropertyNames()) {
 
  59             if (key.startsWith(dottedPrefix) && key.length() > dottedPrefix.length()) {
 
  60                 props.put(key.substring(dottedPrefix.length()), allProps.get(key));
 
  66      * @return The prefix of these properties
 
  68     public String getPrefix() {
 
  73      * Sets the listener class. Will be used by {@see Controller} to instantiate the Listener thread for this object
 
  76      *            The class to be created. Implements {@see Listener}
 
  78     public void setListenerClass(Class<? extends Listener> cls) {
 
  79         this.listenerClass = cls;
 
  83      * @return The class that will be used by {@see Controller} to instantiate the Listener thread for this object
 
  85     public Class<? extends Listener> getListenerClass() {
 
  90      * Returns a property matching a given KEYS
 
  93      *            The KEYS object who's value to return.
 
  94      * @return The value of the property or null if none exists
 
  96     public String getProperty(KEYS key) {
 
  97         return getProperty(key, null);
 
 101      * Returns a property matching a given string.
 
 104      *            The key who's value to return.
 
 105      * @return The value of the property or null if none exists
 
 107     public String getProperty(String key) {
 
 108         return getProperty(key, null);
 
 112      * Returns a property matching a given KEYS
 
 115      *            The KEYS object who's value to return.
 
 116      * @param defaultValue
 
 117      *            The value to return if the property is not found
 
 118      * @return The value of the property or null if none exists
 
 120     public String getProperty(KEYS key, String defaultValue) {
 
 121         return getProperty(key.getPropertySuffix(), defaultValue);
 
 125      * Returns a property matching a given string.
 
 128      *            The key who's value to return.
 
 129      * @param defaultValue
 
 130      *            The value to return if the property is not found
 
 131      * @return The value of the property or null if none exists
 
 133     public String getProperty(String key, String defaultValue) {
 
 134         return props.getProperty(key, defaultValue);
 
 138      * @return The properties object containing all properties
 
 140     public Properties getProperties() {
 
 145      * Reads the <i>prefix</i>.disabled property to determine if the listener is disabled and should not be run by the
 
 146      * controller. Defaults to false if property not set or value cannot be parsed.
 
 148      * @return true if the listener is disabled and should not be started. false if the listener should be start
 
 149      *         normally (default).
 
 151     public boolean isDisabled() {
 
 152         return Boolean.valueOf(getProperty(KEYS.DISABLED, "false"));
 
 156     public String toString() {
 
 157         return String.format("%s", prefix);
 
 162      * Set of common properties that will be used by most systems. Primarily relating to DMaaP and ThreadPools
 
 164      * @since Apr 25, 2016
 
 169          * Property to determine if the listener should be disabled. If not set, defaults to false
 
 171         DISABLED("disabled"),
 
 174          * Property for the message service type. Should be a lower case string. See MessageService.
 
 176         MESSAGE_SERVICE("service"),
 
 179          * A hostname or comma separated list (no spaces) of hostnames of servers in a cluster. Can have ports included
 
 183          * <li>server1.appc.openecomp.org</li>
 
 184          * <li>server1.appc.openecomp.org:3904</li>
 
 185          * <li>server1.appc.openecomp.org,server2.appc.openecomp.org</li>
 
 188         HOSTS("poolMembers"),
 
 191          * The topic that will be used for DMaaP read operations. Can only support a single topic.
 
 193         TOPIC_READ("topic.read"),
 
 196          * The topic or topics that will be used to write to. If multiple topics are provided, should be in a comma
 
 197          * seperated list with no spaces.<br>
 
 201          * <li>TOPIC-1,TOPIC-2,ANOTHER-TOPIC</li>
 
 204         TOPIC_WRITE("topic.write"),
 
 207          * The highland park filter to use on read requests. If you are reading and writing to the same topic this must
 
 208          * be provided. Filter should be in JSON format (not url escaped).
 
 210         TOPIC_READ_FILTER("topic.read.filter"),
 
 213          * The amount of time in seconds that the DMaaP polling connection should stay open for. Recommended to be set
 
 214          * high (around 60 seconds) as most clients will return immediately and not wait until the timeout is up to
 
 215          * return if they have data.
 
 217         TOPIC_READ_TIMEOUT("topic.read.timeout"),
 
 220          * The name of the client to use. Should be unique to the application.
 
 222         CLIENT_NAME("client.name"),
 
 225          * The id of the client to use. Should be unique for each instance of the application in an environment.
 
 227         CLIENT_ID("client.name.id"),
 
 230          * The User (DMaaP) to use for authentication. If a user is provided, you must include the
 
 231          * domain name (e.g. example<b>@example.com</b>).
 
 233         AUTH_USER_KEY("client.key"),
 
 236          * The password (DMaaP) to use for authentication.
 
 238         AUTH_SECRET_KEY("client.secret"),
 
 241          * The minimum amount of size of the queue. A client should request new messages once the queue has dropped
 
 244         THREADS_MIN_QUEUE("threads.queuesize.min"),
 
 247          * The maximum size of the queue. A client will request no new messages once this maximum size has been reached.
 
 249         THREADS_MAX_QUEUE("threads.queuesize.max"),
 
 252          * The minimum size of the worker threads pool. This is the pool each listener will use to launch longer running
 
 255         THREADS_MIN_POOL("threads.poolsize.min"),
 
 258          * The maximum size of the worker threads pool. This is the pool each listener will use to launch longer running
 
 261         THREADS_MAX_POOL("threads.poolsize.max");
 
 263         private String suffix;
 
 265         private KEYS(String val) {
 
 271          *            The prefix to prepend
 
 272          * @return a fully property name that corroponds to what is used in the properties file. Format is PREFIX.KEY
 
 274         public String getFullProp(String prefix) {
 
 275             return String.format("%s.%s", prefix, suffix);
 
 278         public String getPropertySuffix() {