| /** |
| * 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. |
| */ |
| |
| package org.apache.hadoop.hive.ant; |
| |
| import org.apache.tools.ant.AntClassLoader; |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.Task; |
| import org.apache.tools.ant.Project; |
| |
| import java.util.regex.Pattern; |
| import java.util.regex.Matcher; |
| import java.io.*; |
| |
| /** |
| * Implementation of the ant task <getversionpref property="nameoftheproperty" input="versionstring"/>. |
| * |
| * This ant task takes an input version string (e.g. 0.17.2) and set an ant property (whose name |
| * is specified in the property attribute) with the version prefix. For 0.17.2, the version prefix |
| * is 0.17. Similarly, for 0.18.0, the version prefix is 0.18. The version prefix is the first two |
| * components of the version string. |
| */ |
| public class GetVersionPref extends Task { |
| |
| /** |
| * The name of the property that gets the version prefix. |
| */ |
| protected String property; |
| |
| /** |
| * The input string that contains the version string. |
| */ |
| protected String input; |
| |
| public void setProperty(String property) { |
| this.property = property; |
| } |
| |
| public String getProperty() { |
| return property; |
| } |
| |
| public void setInput(String input) { |
| this.input = input; |
| } |
| |
| public String getInput() { |
| return input; |
| } |
| |
| /** |
| * Executes the ant task <getversionperf>. |
| * |
| * It extracts the version prefix using regular expressions on the version string. It then sets |
| * the property in the project with the extracted prefix. The property is set to an empty string |
| * in case no match is found for the prefix regular expression (which will happen in case the |
| * version string does not conform to the version format). |
| */ |
| @Override |
| public void execute() throws BuildException { |
| |
| if (property == null) { |
| throw new BuildException("No property specified"); |
| } |
| |
| if (input == null) { |
| throw new BuildException("No input stringspecified"); |
| } |
| |
| try { |
| Pattern p = Pattern.compile("^(\\d+\\.\\d+).*"); |
| Matcher m = p.matcher(input); |
| getProject().setProperty(property, m.matches() ? m.group(1) : ""); |
| } |
| catch (Exception e) { |
| throw new BuildException("Failed with: " + e.getMessage()); |
| } |
| } |
| } |