/******************************************************************************* * ============LICENSE_START======================================================= * org.onap.dmaap * ================================================================================ * Copyright © 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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========================================================= * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * *******************************************************************************/ package com.att.dmf.mr.metrics.publisher; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.http.HttpHost; /** * * @author anowarul.islam * */ public class CambriaPublisherUtility { public static final String kBasePath = "/events/"; public static final int kStdCambriaServicePort = 3904; /** * * Translates a string into application/x-www-form-urlencoded * format using a specific encoding scheme. * @param s * @return * */ public static String escape ( String s ) { try { return URLEncoder.encode ( s, "UTF-8"); } catch ( UnsupportedEncodingException e ) { throw new RuntimeException ( e ); } } /** * * building url * @param rawTopic * @return */ public static String makeUrl ( String rawTopic ) { final String cleanTopic = escape ( rawTopic ); final StringBuffer url = new StringBuffer(). append ( CambriaPublisherUtility.kBasePath ). append ( cleanTopic ); return url.toString (); } /** * * building consumerUrl * @param topic * @param rawConsumerGroup * @param rawConsumerId * @return */ public static String makeConsumerUrl ( String topic, String rawConsumerGroup, String rawConsumerId ) { final String cleanConsumerGroup = escape ( rawConsumerGroup ); final String cleanConsumerId = escape ( rawConsumerId ); return CambriaPublisherUtility.kBasePath + topic + "/" + cleanConsumerGroup + "/" + cleanConsumerId; } /** * Create a list of HttpHosts from an input list of strings. Input strings have * host[:port] as format. If the port section is not provided, the default port is used. * * @param hosts * @return a list of hosts */ public static List createHostsList(Collection hosts) { final ArrayList convertedHosts = new ArrayList<>(); for ( String host : hosts ) { if ( host.length () == 0 ) continue; convertedHosts.add ( hostForString ( host ) ); } return convertedHosts; } /** * Return an HttpHost from an input string. Input string has * host[:port] as format. If the port section is not provided, the default port is used. * * @param hosts * @return a list of hosts * if host.length<1 throws IllegalArgumentException * */ public static HttpHost hostForString ( String host ) { if ( host.length() < 1 ) throw new IllegalArgumentException ( "An empty host entry is invalid." ); String hostPart = host; int port = kStdCambriaServicePort; final int colon = host.indexOf ( ':' ); if ( colon == 0 ) throw new IllegalArgumentException ( "Host entry '" + host + "' is invalid." ); if ( colon > 0 ) { hostPart = host.substring ( 0, colon ).trim(); final String portPart = host.substring ( colon + 1 ).trim(); if ( portPart.length () > 0 ) { try { port = Integer.parseInt ( portPart ); } catch ( NumberFormatException x ) { throw new IllegalArgumentException ( "Host entry '" + host + "' is invalid.", x ); } } // else: use default port on "foo:" } return new HttpHost ( hostPart, port ); } }