1 /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">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 16 package org.qedeq.base.io; 17 18 import java.util.Iterator; 19 import java.util.Set; 20 import java.util.TreeSet; 21 22 23 /** 24 * A set of version numbers. 25 * 26 * @author Michael Meyling 27 */ 28 public final class VersionSet { 29 30 /** Set that contains our versions. */ 31 private final Set set; 32 33 /** 34 * Constructs version set object. You must give a version string in a form like 35 * <em>a</em>.<em>b</em>.<em>c</em> where a, b and c are non negative integers. 36 * These numbers are called <em>Major</em> <em>Minor</em> and <em>Patch</em>. 37 * 38 * @param version Version string. 39 * @throws IllegalArgumentException Version string has wrong format. 40 * @throws NullPointerException No null pointer as argument accepted. 41 */ 42 public VersionSet(final String version) { 43 set = new TreeSet(); 44 add(version); 45 } 46 47 /** 48 * Constructs version set object. 49 */ 50 public VersionSet() { 51 set = new TreeSet(); 52 } 53 54 /** 55 * Does the set contain given version number. 56 * 57 * @param version Version string. If it has not the correct form, false is returned. 58 * @return Is given version in set? 59 */ 60 public boolean contains(final String version) { 61 Version v = null; 62 try { 63 v = new Version(version); 64 } catch (RuntimeException e) { 65 return false; 66 } 67 return set.contains(v); 68 } 69 70 /** 71 * Does the set contain given version number. 72 * 73 * @param version Version to check for. 74 * @return Is given version in set? 75 */ 76 public boolean contains(final Version version) { 77 return set.contains(version); 78 } 79 80 /** 81 * Add version number. 82 * 83 * @param version Version string. 84 * @throws IllegalArgumentException Version string has wrong format. 85 * @throws NullPointerException No null pointer as argument accepted. 86 */ 87 public void add(final String version) { 88 add(new Version(version)); 89 } 90 91 /** 92 * Add version number. 93 * 94 * @param version Version string. 95 */ 96 public void add(final Version version) { 97 set.add(version); 98 } 99 100 /** 101 * Add contents of another version set. 102 * 103 * @param versions Other version set. 104 * @return Did current set change? 105 */ 106 public boolean addAll(final VersionSet versions) { 107 return set.addAll(versions.set); 108 } 109 110 /** 111 * Is this set empty? 112 * 113 * @return Is set empty? 114 */ 115 public boolean isEmpty() { 116 return set.isEmpty(); 117 } 118 119 /** 120 * Removes all of the elements from this set. 121 */ 122 public void clear() { 123 set.clear(); 124 } 125 126 /** 127 * Returns an iterator over the elements in this set. The elements are 128 * returned in ascending order. 129 * 130 * @return Iterator. 131 */ 132 public Iterator iterator() { 133 return set.iterator(); 134 } 135 136 public int hashCode() { 137 return set.hashCode(); 138 } 139 140 public boolean equals(final Object o) { 141 if (!(o instanceof VersionSet)) { 142 return false; 143 } 144 return set.equals(((VersionSet) o).set); 145 } 146 147 public String toString() { 148 final StringBuffer buffer = new StringBuffer(30); 149 buffer.append("{"); 150 Iterator e = set.iterator(); 151 boolean notFirst = false; 152 while (e.hasNext()) { 153 if (notFirst) { 154 buffer.append(", "); 155 } else { 156 notFirst = true; 157 } 158 buffer.append(String.valueOf(e.next())); 159 } 160 buffer.append("}"); 161 return buffer.toString(); 162 } 163 164 }