/******************************************************************************* * Copyright (c) 2012 Zend Technologies Ltd. * 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 *******************************************************************************/ package org.zend.webapi.core.connection.data.values; import java.text.MessageFormat; import java.util.regex.Pattern; /** * Zend Server version. * * @author Wojciech Galanciak, 2012 * */ public class ZendServerVersion implements Comparable<ZendServerVersion> { private static String VERSION_TOKEN_SEPARATOR = "."; //$NON-NLS-1$ private static String VERSION_FORMAT_STRING = MessageFormat.format("'{0}'{0}'{1}'{0}'{2}'", VERSION_TOKEN_SEPARATOR); //$NON-NLS-1$ public final static ZendServerVersion V5_0_0 = new ZendServerVersion(5, 0, 0); public final static ZendServerVersion v5_5_0 = new ZendServerVersion(5, 5, 0); public final static ZendServerVersion v5_6_0 = new ZendServerVersion(5, 6, 0); public final static ZendServerVersion v6_0_0 = new ZendServerVersion(6, 0, 0); public final static ZendServerVersion v6_0_X = new ZendServerVersion(6, 0, -1); public final static ZendServerVersion v6_2_x = new ZendServerVersion(6, 2, -1); public final static ZendServerVersion v6_X_X = new ZendServerVersion(6, -1, -1); public final static ZendServerVersion UNKNOWN = new ZendServerVersion(-1, -1, -1); private int major; private int minor; private int build; private ZendServerVersion(int major, int minor, int build) { this.major = major; this.minor = minor; this.build = build; } public String getName() { return MessageFormat.format(VERSION_FORMAT_STRING, major, minor, build); } public int getMajor() { return major; } public int getMinor() { return minor; } public int getBuild() { return build; } public int compareTo(ZendServerVersion v) { if (getMajor() < v.getMajor()) { return -1; } if (getMajor() > v.getMajor()) { return 1; } if (getMinor() != -1 && v.getMinor() != -1) { if (getMinor() < v.getMinor()) { return -1; } if (getMinor() > v.getMinor()) { return 1; } } if (getBuild() != -1 && v.getBuild() != -1) { if (getBuild() < v.getBuild()) { return -1; } if (getBuild() > v.getBuild()) { return 1; } } return 0; } public static ZendServerVersion byName(String name) { return byName(name, VERSION_TOKEN_SEPARATOR); } public static ZendServerVersion byName(String name, String separator) { if (name == null) { return UNKNOWN; } int[] parsedValues = parse(name, separator); int major = parsedValues[0]; int minor = parsedValues[1]; int build = parsedValues[2]; return new ZendServerVersion(major, minor, build); } private static int[] parse(String name, String separator) { String[] segments = name.split(Pattern.quote(separator)); int[] result = new int[3]; for (int i = 0; i < result.length; i++) { if (segments.length > i) { result[i] = Integer.valueOf(segments[i]); } else { result[i] = -1; } } return result; } }