/******************************************************************************* * Copyright (c) 2014 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.cmd.utils; import org.apache.commons.lang.StringUtils; import org.eclipse.jubula.client.core.model.ProjectVersion; /** * This is a Util class which is used to create a {@link ProjectVersion} from a version string. * There are different formats possible * [majNum] * [majNum].[minNum] * [majNum].[minNum].[micNum] * [majNum].[minNum].[micNum]_[qualifier] * [qualifier] * @author BREDEX GmbH * */ public class VersionStringUtils { /** Separator between major and minor version numbers */ public static final char VERSION_SEPARATOR = '.'; /** Separator between version numbers and the Qualifier */ public static final char VERSION_QUALIFIER_SEPARATOR = '_'; /** * Exception for using with version strings. * @author BREDEX GmbH * */ public static class MalformedVersionException extends Exception { /** * @param string string to clarify the reason */ public MalformedVersionException(String string) { super(string); } // Nothing in here yet } /** * private constructor since this is a util class */ private VersionStringUtils() { //Utils class } /** * There are different formats possible<br> * [majNum]<br> * [majNum].[minNum]<br> * [majNum].[minNum].[micNum]<br> * [majNum].[minNum].[micNum]_[qualifier]<br> * [qualifier]<br> * @param version a string representation of a project version * @return the {@link ProjectVersion} for the corresponding string * @throws MalformedVersionException when the version is not of the wanted format */ public static ProjectVersion createProjectVersion(String version) throws MalformedVersionException { String[] tokens = StringUtils .splitByWholeSeparatorPreserveAllTokens(version, "_", 2); //$NON-NLS-1$ if (tokens.length == 1) { try { return createVersionsNumbers(tokens[0]); } catch (NumberFormatException nfe) { // It is only given a qualifier return new ProjectVersion(tokens[0]); } catch (MalformedVersionException nfe) { // It is only given a qualifier return new ProjectVersion(tokens[0]); } } else if (tokens.length == 2) { ProjectVersion projectNumbers = new ProjectVersion(null); if (StringUtils.isNotBlank(tokens[0])) { try { projectNumbers = createVersionsNumbers(tokens[0]); } catch (NumberFormatException e) { throw new MalformedVersionException("parsing the version:" //$NON-NLS-1$ + tokens[0] + " as numbers, was not possible"); //$NON-NLS-1$ } } String qualifier = tokens[1]; return new ProjectVersion(projectNumbers.getMajorNumber(), projectNumbers.getMinorNumber(), projectNumbers.getMicroNumber(), qualifier); } throw new MalformedVersionException("No version Token found"); //$NON-NLS-1$ } /** * * @param versionNumbers the number part of the project version * @return a {@link ProjectVersion} with the version numbers set * @throws NumberFormatException if one of the numbers is not an {@link Integer} * @throws MalformedVersionException */ private static ProjectVersion createVersionsNumbers(String versionNumbers) throws NumberFormatException, MalformedVersionException { String[] splittedString = versionNumbers.split("\\."); //$NON-NLS-1$ Integer major = null; Integer minor = null; Integer micro = null; switch (splittedString.length) { case 3: micro = Integer.parseInt(splittedString[2]); case 2: minor = Integer.parseInt(splittedString[1]); case 1: major = Integer.parseInt(splittedString[0]); break; default: throw new MalformedVersionException("Version has more than 3 numbers"); //$NON-NLS-1$ } return new ProjectVersion(major, minor, micro); } }