public String toString() {
        if (version == null) {
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < orderedVersionNumbers.size(); i++) {
                Integer curVersionNumber = (Integer) orderedVersionNumbers.get(i);
                result.append(curVersionNumber.intValue());
                if (i < (orderedVersionNumbers.size() - 1)) {
                    result.append(".");
                }
            }
            if (versionPartSuffix != null) {
                result.append(versionPartSuffix);
            }
            if (betaNumber != -1) {
                result.append("b");
                result.append(betaNumber);
            } else if (releaseCandidateNumber != -1) {
                result.append("rc");
                result.append(releaseCandidateNumber);
            }
            if (updateMarker != null) {
                result.append("_");
                result.append(updateMarker);
            }
            if (qualifiers.size() > 0) {
                for (String qualifier : qualifiers) {
                    result.append("-");
                    result.append(qualifier);
                }
            }
            version = result.toString();
        }
        return version;
    }