001: /*
002: *
003: * Copyright (c) 2000-2001 Silvere Martin-Michiellot All Rights Reserved.
004: *
005: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
006: * royalty free, license to use, modify but not to redistribute this
007: * software in source and binary code form,
008: * provided that i) this copyright notice and license appear on all copies of
009: * the software; and ii) Licensee does not utilize the software in a manner
010: * which is disparaging to Silvere Martin-Michiellot.
011: *
012: * This software is provided "AS IS," without a warranty of any kind. ALL
013: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
014: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
015: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
016: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
017: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
018: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
019: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
020: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
024: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: * @Author: Silvere Martin-Michiellot
033: *
034: */
035:
036: package com.db.version;
037:
038: // This code is repackaged and enhanced after the calss Version from Mark Hale
039: // Site http://jsci.sourceforge.net/
040: // Email m.hale@qmul.ac.uk
041:
042: import java.io.*;
043: import java.net.*;
044: import java.util.ResourceBundle;
045:
046: /**
047: * The PackageProperties class contains information about the current and latest release.
048: * This information is not stored in the manifest but in a specific PackageProperties.properties file. You may also want to use the class java.lang.Package.
049: */
050: public final class PackageProperties extends Object implements
051: Serializable {
052:
053: /**
054: * Major version number.
055: */
056: public final int major;
057:
058: /**
059: * Minor version number.
060: */
061: public final int minor;
062:
063: /**
064: * Java platform required.
065: */
066: public final String platform;
067:
068: /**
069: * The URL for the home of this version.
070: */
071: public final String home;
072:
073: /**
074: * The list of authors who contributed to this version.
075: */
076: public final String authors;
077:
078: /**
079: * The email to contact the developers of the package.
080: */
081: public final String email;
082:
083: /**
084: * The description of the contents of this version.
085: */
086: public final String description;
087:
088: /**
089: * Gets the current version.
090: */
091: public static PackageProperties getCurrent() {
092:
093: ResourceBundle bundle = ResourceBundle
094: .getBundle("com.db.version.PackageProperties");
095: int major = Integer.parseInt(bundle.getString("version.major"));
096: int minor = Integer.parseInt(bundle.getString("version.minor"));
097: String platform = bundle.getString("version.platform");
098: String home = bundle.getString("version.home");
099: String email = bundle.getString("version.contactemail");
100: String description = bundle.getString("version.contents");
101: String authors = bundle.getString("version.authors");
102:
103: return new PackageProperties(major, minor, platform, home,
104: email, description, authors);
105:
106: }
107:
108: /**
109: * Retrieves the latest version from the home URL.
110: */
111: public static PackageProperties getLatest() throws IOException {
112:
113: PackageProperties latest = null;
114: try {
115: URL serurl = new URL(getCurrent().home + "version.ser");
116: ObjectInputStream in = new ObjectInputStream(serurl
117: .openStream());
118: latest = (PackageProperties) in.readObject();
119: in.close();
120: } catch (MalformedURLException murle) {
121: } catch (ClassNotFoundException cnfe) {
122: }
123:
124: return latest;
125:
126: }
127:
128: /**
129: * Constructs a version object.
130: */
131: private PackageProperties(int major, int minor, String platform,
132: String home, String contactemail, String contents,
133: String authors) {
134:
135: this .major = major;
136: this .minor = minor;
137: this .platform = platform;
138: this .home = home;
139: this .email = contactemail;
140: this .description = contents;
141: this .authors = authors;
142:
143: }
144:
145: /**
146: * Compares two versions for equality.
147: */
148: public boolean equals(Object o) {
149:
150: if (!(o instanceof PackageProperties))
151: return false;
152: PackageProperties ver = (PackageProperties) o;
153: return (major == ver.major) && (minor == ver.minor)
154: && platform.equals(ver.platform);
155:
156: }
157:
158: /**
159: * Returns the version number as a string.
160: */
161: public String toString() {
162:
163: return new StringBuffer().append(major).append('.').append(
164: minor).toString();
165:
166: }
167:
168: /**
169: * Returns true if this is later than another version.
170: */
171: public boolean isLater(PackageProperties ver) {
172:
173: return (major > ver.major)
174: || (major == ver.major && minor > ver.minor);
175:
176: }
177:
178: }
|