View Javadoc

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 }