Java tutorial
/* * Copyright 2016 LinkedIn Corp. * * 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. */ package azkaban.webapp.servlet; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import azkaban.utils.Props; public final class ExternalAnalyzerUtils { private static final Logger LOGGER = Logger.getLogger(ExternalAnalyzerUtils.class.getName()); public static final String EXECUTION_EXTERNAL_LINK_URL = "execution.external.link.url"; public static final String EXECUTION_EXTERNAL_LINK_LABEL = "execution.external.link.label"; private ExternalAnalyzerUtils() { } /** * Gets an external analyzer URL if configured in 'azkaban.properties'. * * @param props The props to be set to get the external analyzer URL. * * @param req The <code>HttpServletRequest</code> requesting the page. * * @return Returns an external analyzer URL. */ public static String getExternalAnalyzer(Props props, HttpServletRequest req) { String url = props.getString(EXECUTION_EXTERNAL_LINK_URL, ""); int index = url.indexOf('%'); if (StringUtils.isNotEmpty(url) && index != -1) { String pattern = url.substring(url.indexOf('%'), url.length()); switch (pattern) { case "%url": return buildExternalAnalyzerURL(req, url, pattern); default: LOGGER.error("Pattern configured is not supported. " + "Please check the comments section in 'azkaban.properties' " + "for supported patterns."); return ""; } } LOGGER.debug("An optional external analyzer is not configured."); return ""; } private static String buildExternalAnalyzerURL(HttpServletRequest req, String url, String pattern) { StringBuilder builder = new StringBuilder(); builder.append(req.getRequestURL()); builder.append("?"); builder.append(req.getQueryString()); String flowExecutionURL = builder.toString(); String encodedFlowExecUrl = ""; try { encodedFlowExecUrl = URLEncoder.encode(flowExecutionURL, "UTF-8"); } catch (UnsupportedEncodingException e) { LOGGER.error("Specified encoding is not supported", e); } return url.replaceFirst(pattern, encodedFlowExecUrl); } }