org.ops4j.pax.web.deployer.internal.DeployerUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pax-web-deployer Show documentation
Show all versions of pax-web-deployer Show documentation
A fileInstall deployer that will automatically transform wars into bundles ready to be used by WAR extender.
/*
* 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.ops4j.pax.web.deployer.internal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Contain various methods that are useful for deploying artifacts
*
* @author gnodet
*/
public final class 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);
/** Private constructors to avoid instantiation */
private DeployerUtils() {
}
/**
* 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.split("\\.")[0], DEFAULT_VERSION };
} else {
//CHECKSTYLE:OFF
StringBuilder v = new StringBuilder();
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);
}
}
//CHECKSTYLE:ON
return new String[] { d1, v.toString(), d6 };
}
}
private static void cleanupModifier(StringBuilder result, String mod) {
Matcher m = FUZZY_MODIFIDER.matcher(mod);
String modifier = mod;
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);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy