All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ops4j.pax.web.deployer.internal.DeployerUtils Maven / Gradle / Ivy

Go to download

A fileInstall deployer that will automatically transform wars into bundles ready to be used by WAR extender.

There is a newer version: 9.0.18
Show newest version
/*
 * 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