Java tutorial
package org.apache.maven.plugin.jira; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ import java.text.NumberFormat; import java.text.ParsePosition; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.maven.plugin.logging.Log; import org.apache.maven.wagon.proxy.ProxyInfo; /** * A helper class with common JIRA related functionality. * * @author Dennis Lundberg * @version $Id$ */ public class JiraHelper { private static final String PID = "?pid="; //MCHANGES-281 addd ? /** * Parse out the base URL for JIRA and the JIRA project id from the issue * management URL. * * @param issueManagementUrl The URL to the issue management system * @return A <code>Map</code> containing the URL and project id */ static Map<String, String> getJiraUrlAndProjectId(String issueManagementUrl) { String url = issueManagementUrl; if (url.endsWith("/")) { // MCHANGES-218 url = url.substring(0, url.lastIndexOf('/')); } // chop off the parameter part int pos = url.indexOf('?'); // and get the id while we're at it String id = ""; if (pos >= 0) { // project id id = url.substring(url.lastIndexOf('=') + 1); } String jiraUrl = url.substring(0, url.lastIndexOf('/')); if (jiraUrl.endsWith("secure")) { jiraUrl = jiraUrl.substring(0, jiraUrl.lastIndexOf('/')); } else { // If the issueManagement.url points to a component, then "browse" // will not be at the end - it might be in the middle somewhere. // Try to find it. final int index = jiraUrl.indexOf("/browse"); if (index != -1) { jiraUrl = jiraUrl.substring(0, index); } } HashMap<String, String> urlMap = new HashMap<String, String>(4); urlMap.put("url", jiraUrl); urlMap.put("id", id); return urlMap; } /** * Try to get a JIRA pid from the issue management URL. * * @param log Used to tell the user what happened * @param issueManagementUrl The URL to the issue management system * @param client The client used to connect to JIRA * @return The JIRA id for the project, or null if it can't be found */ public static String getPidFromJira(Log log, String issueManagementUrl, HttpClient client) { String jiraId = null; GetMethod gm = new GetMethod(issueManagementUrl); String projectPage; try { client.executeMethod(gm); log.debug("Successfully reached JIRA."); projectPage = gm.getResponseBodyAsString(); } catch (Exception e) { if (log.isDebugEnabled()) { log.error("Unable to reach the JIRA project page:", e); } else { log.error("Unable to reach the JIRA project page. Cause is: " + e.getLocalizedMessage()); } return null; } int pidIndex = projectPage.indexOf(PID); if (pidIndex == -1) { log.error("Unable to extract a JIRA pid from the page at the url " + issueManagementUrl); } else { NumberFormat nf = NumberFormat.getInstance(); Number pidNumber = nf.parse(projectPage, new ParsePosition(pidIndex + PID.length())); jiraId = Integer.toString(pidNumber.intValue()); log.debug("Found the pid " + jiraId + " at " + issueManagementUrl); } return jiraId; } /** * Check if the specified host is in the list of non proxy hosts. * <p/> * Method copied from org.apache.maven.wagon.proxy.ProxyUtils. Can be deleted when maven-changes-plugin * references a more recent version of maven-project * * @param proxy the proxy info object contains set of properties. * @param targetHost the target hostname * @return true if the hostname is in the list of non proxy hosts, false otherwise. */ public static boolean validateNonProxyHosts(ProxyInfo proxy, String targetHost) { String tHost = targetHost; if (tHost == null) { tHost = ""; } if (proxy == null) { return false; } String nonProxyHosts = proxy.getNonProxyHosts(); if (nonProxyHosts == null) { return false; } StringTokenizer tokenizer = new StringTokenizer(nonProxyHosts, "|"); while (tokenizer.hasMoreTokens()) { String pattern = tokenizer.nextToken(); pattern = pattern.replaceAll("\\.", "\\\\.").replaceAll("\\*", ".*"); if (tHost.matches(pattern)) { return true; } } return false; } private JiraHelper() { // utility class } /** * Parse out the base URL for JIRA and the JIRA project name from the issue * management URL. * The issue management URL is assumed to be of the format http(s)://host:port/browse/{projectname} * * @param issueManagementUrl The URL to the issue management system * @return A <code>Map</code> containing the URL and project name * @since 2.8 */ public static Map<String, String> getJiraUrlAndProjectName(String issueManagementUrl) { final int indexBrowse = issueManagementUrl.indexOf("/browse/"); String jiraUrl; String project; if (indexBrowse != -1) { jiraUrl = issueManagementUrl.substring(0, indexBrowse); final int indexBrowseEnd = indexBrowse + "/browse/".length(); final int indexProject = issueManagementUrl.indexOf("/", indexBrowseEnd); if (indexProject != -1) { //Project name has trailing '/' project = issueManagementUrl.substring(indexBrowseEnd, indexProject); } else { //Project name without trailing '/' project = issueManagementUrl.substring(indexBrowseEnd); } } else { throw new IllegalArgumentException("Invalid browse URL"); } HashMap<String, String> urlMap = new HashMap<String, String>(4); urlMap.put("url", jiraUrl); urlMap.put("project", project); return urlMap; } /** * @since 2.8 */ public static String getBaseUrl(String url) { int index = url.indexOf("/", 8); //Ignore http:// or https:// return url.substring(0, index); } }