EMMA Coverage Report (generated Fri Feb 14 08:28:31 UTC 2014)
[all classes][org.qedeq.base.io]

COVERAGE SUMMARY FOR SOURCE FILE [Version.java]

nameclass, %method, %block, %line, %
Version.java100% (1/1)100% (14/14)100% (235/235)100% (45/45)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Version100% (1/1)100% (14/14)100% (235/235)100% (45/45)
Version (String): void 100% (1/1)100% (61/61)100% (13/13)
bigger (String, String): boolean 100% (1/1)100% (10/10)100% (1/1)
compareTo (Object): int 100% (1/1)100% (52/52)100% (16/16)
equals (Object): boolean 100% (1/1)100% (9/9)100% (1/1)
equals (String): boolean 100% (1/1)100% (13/13)100% (5/5)
equals (String, String): boolean 100% (1/1)100% (10/10)100% (1/1)
getMajor (): int 100% (1/1)100% (3/3)100% (1/1)
getMinor (): int 100% (1/1)100% (3/3)100% (1/1)
getPatch (): int 100% (1/1)100% (3/3)100% (1/1)
hashCode (): int 100% (1/1)100% (9/9)100% (1/1)
isBigger (Version): boolean 100% (1/1)100% (9/9)100% (1/1)
isLess (Version): boolean 100% (1/1)100% (9/9)100% (1/1)
less (String, String): boolean 100% (1/1)100% (10/10)100% (1/1)
toString (): String 100% (1/1)100% (34/34)100% (1/1)

1/* This file is part of the project "Hilbert II" - http://www.qedeq.org
2 *
3 * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4 *
5 * "Hilbert II" is free software; you can redistribute
6 * it and/or modify it under the terms of the GNU General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15 
16package org.qedeq.base.io;
17 
18 
19/**
20 * A version number implementation oriented at the standard:
21 * <a href="http://semver.org/">http://semver.org</a>.
22 *
23 * @author  Michael Meyling
24 */
25public final class Version implements Comparable {
26 
27    /** Major version number. */
28    private final int major;
29 
30    /** Minor version number. */
31    private final int minor;
32 
33    /** Patch version number. */
34    private final int patch;
35 
36    /**
37     * Constructs version object. You must give a version string in a form like
38     *  <em>a</em>.<em>b</em>.<em>c</em> where a, b and c are non negative integers.
39     * These numbers are called <em>Major</em> <em>Minor</em> and <em>Patch</em>.
40     *
41     * @param   version     Version string.
42     * @throws  IllegalArgumentException    Version string has wrong format.
43     * @throws  NullPointerException        No null pointer as argument accepted.
44     */
45    public Version(final String version) {
46        final TextInput text = new TextInput(version);
47        major = text.readNonNegativeInt();
48        if (!".".equals(text.readString(1))) {
49            throw new IllegalArgumentException("version number must have two digits");
50        }
51        minor = text.readNonNegativeInt();
52        if (!".".equals(text.readString(1))) {
53            throw new IllegalArgumentException("version number must have two digits");
54        }
55        patch = text.readNonNegativeInt();
56        text.skipWhiteSpace();
57        if (!text.isEmpty()) {
58            throw new IllegalArgumentException("version number to long: " + text.readString(100));
59        }
60    }
61 
62    /**
63     * Get major version number.
64     *
65     * @return  Major version number.
66     */
67    public int getMajor() {
68        return major;
69    }
70 
71    /**
72     * Get minor version number.
73     *
74     * @return  Minor version number.
75     */
76    public int getMinor() {
77        return minor;
78    }
79 
80    /**
81     * Get patch number.
82     *
83     * @return  Patch version number.
84     */
85    public int getPatch() {
86        return patch;
87    }
88 
89    public int compareTo(final Object o) {
90        if (!(o instanceof Version)) {
91            return -1;
92        }
93        final Version other = (Version) o;
94        if (major < other.major) {
95            return -1;
96        } else if (major > other.major) {
97            return 1;
98        }
99        if (minor < other.minor) {
100            return -1;
101        } else if (minor > other.minor) {
102            return 1;
103        }
104        if (patch < other.patch) {
105            return -1;
106        } else if (patch > other.patch) {
107            return 1;
108        }
109        return 0;
110    }
111 
112    public int hashCode() {
113        return major ^ minor ^ patch;
114    }
115 
116    public boolean equals(final Object o) {
117        return 0 == compareTo(o);
118    }
119 
120    /**
121     * Notes the given string the same version?
122     *
123     * @param   version String version number.
124     * @return  Are both versions equal?
125     */
126    public boolean equals(final String version) {
127        Version compare = null;
128        try {
129            compare = new Version(version);
130        } catch (RuntimeException e) {
131            // ignore
132        }
133        return equals(compare);
134    }
135 
136    public String toString() {
137        return major + "." + (minor < 10 ? "0" : "") + minor
138            + "." + (patch < 10 ? "0" : "") + patch;
139    }
140 
141    /**
142     * Is this version number less than the given other?
143     *
144     * @param   other   Compare with this number.
145     * @return  Less?
146     */
147    public boolean isLess(final Version other) {
148        return 0 > compareTo(other);
149    }
150 
151    /**
152     * Is this version number bigger than the given other?
153     *
154     * @param   other   Compare with this number.
155     * @return  Bigger?
156     */
157    public boolean isBigger(final Version other) {
158        return 0 < compareTo(other);
159    }
160 
161    /**
162     * Is <code>version1</code> &lt; <code>version2</code>?
163     *
164     * @param   version1    First operand. Must be valid version pattern.
165     * @param   version2    Second operand. Must be valid version pattern.
166     * @return  Less?
167     * @throws  IllegalArgumentException    No valid version pattern.
168     * @throws  NullPointerException        No null pointer as argument accepted.
169     */
170    public static boolean less(final String version1, final String version2) {
171        return (new Version(version1)).isLess(new Version(version2));
172    }
173 
174    /**
175     * Is <code>version1</code> &gt; <code>version2</code>?
176     *
177     * @param   version1    First operand. Must be valid version pattern.
178     * @param   version2    Second operand. Must be valid version pattern.
179     * @return  Less?
180     * @throws  IllegalArgumentException    No valid version pattern.
181     * @throws  NullPointerException        No null pointer as argument accepted.
182     */
183    public static boolean bigger(final String version1, final String version2) {
184        return (new Version(version1)).isBigger(new Version(version2));
185    }
186 
187    /**
188     * Is <code>version1</code> == <code>version2</code>?
189     *
190     * @param   version1    First operand. Must be valid version pattern.
191     * @param   version2    Second operand. Must be valid version pattern.
192     * @return  Less?
193     * @throws  IllegalArgumentException    No valid version pattern.
194     * @throws  NullPointerException        No null pointer as argument accepted.
195     */
196    public static boolean equals(final String version1, final String version2) {
197        return (new Version(version1)).equals(new Version(version2));
198    }
199 
200}

[all classes][org.qedeq.base.io]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov