| /* |
| * 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.karaf.util; |
| |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| /** |
| * Contain various methods that are useful for deploying artifacts |
| */ |
| public final class DeployerUtils { |
| |
| /** Private constructors to avoid instantiation */ |
| private DeployerUtils() { } |
| |
| private static final String DEFAULT_VERSION = "0.0.0"; |
| |
| private static final Pattern ARTIFACT_MATCHER = Pattern.compile("(.+)(?:-(\\d+)(?:\\.(\\d+)(?:\\.(\\d+))?)?(?:[^a-zA-Z0-9](.*))?)(?:\\.([^\\.]+))", Pattern.DOTALL); |
| private static final Pattern FUZZY_MODIFIDER = Pattern.compile("(?:\\d+[.-])*(.*)", Pattern.DOTALL); |
| |
| /** |
| * Heuristic to compute the name and version of a file given it's name on disk |
| * |
| * @param url the name of the file |
| * @return the name and version of that file |
| */ |
| public static String[] extractNameVersionType(String url) { |
| Matcher m = ARTIFACT_MATCHER.matcher(url); |
| if (!m.matches()) { |
| return new String[] { url, DEFAULT_VERSION }; |
| } |
| else { |
| StringBuffer v = new StringBuffer(); |
| String d1 = m.group(1); |
| String d2 = m.group(2); |
| String d3 = m.group(3); |
| String d4 = m.group(4); |
| String d5 = m.group(5); |
| String d6 = m.group(6); |
| if (d2 != null) { |
| v.append(d2); |
| if (d3 != null) { |
| v.append('.'); |
| v.append(d3); |
| if (d4 != null) { |
| v.append('.'); |
| v.append(d4); |
| if (d5 != null) { |
| v.append("."); |
| cleanupModifier(v, d5); |
| } |
| } else if (d5 != null) { |
| v.append(".0."); |
| cleanupModifier(v, d5); |
| } |
| } else if (d5 != null) { |
| v.append(".0.0."); |
| cleanupModifier(v, d5); |
| } |
| } |
| return new String[] { d1, v.toString(), d6 }; |
| } |
| } |
| |
| private static void cleanupModifier(StringBuffer result, String modifier) { |
| Matcher m = FUZZY_MODIFIDER.matcher(modifier); |
| if (m.matches()) { |
| modifier = m.group(1); |
| } |
| for (int i = 0; i < modifier.length(); i++) { |
| char c = modifier.charAt(i); |
| if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '-') { |
| result.append(c); |
| } |
| } |
| } |
| |
| |
| } |