001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002-2006, GeoTools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.data.postgis;
017:
018: import java.io.IOException;
019:
020: import org.geotools.data.DataSourceException;
021:
022: /**
023: * Simple struct used to specify with revision must be extracted, and eventually
024: * from which branch (even if at the moment we don't have branches around).
025: *
026: * @author aaime
027: * @since 2.4
028: *
029: */
030: class RevisionInfo {
031: long revision;
032:
033: String version;
034:
035: /**
036: * RevisionInfo for the last revision in "trunk"
037: */
038: public RevisionInfo() {
039: revision = Long.MAX_VALUE;
040: }
041:
042: public RevisionInfo(long revision) {
043: this .revision = revision;
044: }
045:
046: /**
047: * Parses a version specification into a RevisionInfo object
048: *
049: * @param version
050: * @throws IOException
051: */
052: public RevisionInfo(String version) throws IOException {
053: this .version = version;
054: if (version == null || version.trim().equals("")
055: || version.trim().equals("CURRENT")
056: || version.trim().equals("LAST")) {
057: revision = Long.MAX_VALUE;
058: this .version = "LAST";
059: } else if (version.trim().equals("FIRST")) {
060: revision = 1;
061: this .version = "FIRST";
062: } else {
063: try {
064: revision = Long.parseLong(version);
065: } catch (NumberFormatException e) {
066: throw new DataSourceException(
067: "Unsupported revision format '" + version + "'",
068: e);
069: }
070: }
071: }
072:
073: public boolean isLast() {
074: return revision == Long.MAX_VALUE;
075: }
076:
077: public boolean isFirst() {
078: return revision == 1;
079: }
080:
081: /**
082: * Returns the version in canonical form, that is, revision or "" if it's
083: * the last revision
084: *
085: * @return
086: */
087: public String getCanonicalVersion() {
088: if (isLast())
089: return "LAST";
090: else if (isFirst())
091: return "FIRST";
092: else
093: return String.valueOf(revision);
094: }
095:
096: /**
097: * Returns the original version used to create this revision info
098: *
099: * @return
100: */
101: public String getVersion() {
102: return version;
103: }
104:
105: public String toString() {
106: return getCanonicalVersion();
107: }
108: }
|