Version.java 4.16 KB
/*
 * Decompiled with CFR 0_118.
 */
package com.day.jcr.vault.packaging;

import com.day.jcr.vault.util.Text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
@Deprecated
public class Version
implements Comparable<Version> {
    public static final Version EMPTY = new Version("", new String[0]);
    private final String str;
    private final String[] segments;

    public Version(String str) {
        this(str, Text.explode(str, 46));
    }

    public Version(String[] segments) {
        this(Text.implode(segments, "."), segments);
    }

    public static Version create(String str) {
        if (str == null || str.length() == 0) {
            return EMPTY;
        }
        return new Version(str, Text.explode(str, 46));
    }

    public static Version create(String[] segments) {
        if (segments == null || segments.length == 0) {
            return EMPTY;
        }
        return new Version(Text.implode(segments, "."), segments);
    }

    private Version(String str, String[] segments) {
        if (str == null) {
            throw new NullPointerException("Version String must not be null.");
        }
        this.str = str;
        this.segments = segments;
    }

    public int hashCode() {
        return this.str.hashCode();
    }

    public boolean equals(Object o) {
        return this == o || o instanceof Version && this.str.equals(((Version)o).str);
    }

    public String toString() {
        return this.str;
    }

    public String[] getNormalizedSegments() {
        return this.segments;
    }

    @Override
    public int compareTo(Version o) {
        String[] oSegs = o.getNormalizedSegments();
        for (int i = 0; i < Math.min(this.segments.length, oSegs.length); ++i) {
            String s1 = this.segments[i];
            String s2 = oSegs[i];
            if (s1.equals(s2)) continue;
            try {
                int v1 = Integer.parseInt(this.segments[i]);
                int v2 = Integer.parseInt(oSegs[i]);
                if (v1 != v2) {
                    return v1 - v2;
                }
            }
            catch (NumberFormatException e) {
                // empty catch block
            }
            String[] ss1 = Text.explode(s1, 45);
            String[] ss2 = Text.explode(s2, 45);
            for (int j = 0; j < Math.min(ss1.length, ss2.length); ++j) {
                int c;
                String c1 = ss1[j];
                String c2 = ss2[j];
                try {
                    int v1 = Integer.parseInt(c1);
                    int v2 = Integer.parseInt(c2);
                    if (v1 != v2) {
                        return v1 - v2;
                    }
                }
                catch (NumberFormatException e) {
                    // empty catch block
                }
                if ((c = c1.compareTo(c2)) == 0) continue;
                return c;
            }
            int c = ss1.length - ss2.length;
            if (c == 0) continue;
            return - c;
        }
        return this.segments.length - oSegs.length;
    }

    public int osgiCompareTo(Version o) {
        ArrayList<String> segs0 = new ArrayList<String>();
        ArrayList<String> segs1 = new ArrayList<String>();
        for (String s2 : this.segments) {
            segs0.addAll(Arrays.asList(Text.explode(s2, 45)));
        }
        for (String s2 : o.getNormalizedSegments()) {
            segs1.addAll(Arrays.asList(Text.explode(s2, 45)));
        }
        int len = Math.min(segs0.size(), segs1.size());
        for (int i = 0; i < len; ++i) {
            String s22;
            String s1 = (String)segs0.get(i);
            int c = s1.compareTo(s22 = (String)segs1.get(i));
            if (c == 0) continue;
            try {
                int v1 = Integer.parseInt(s1);
                int v2 = Integer.parseInt(s22);
                if (v1 != v2) {
                    return v1 - v2;
                }
            }
            catch (NumberFormatException e) {
                // empty catch block
            }
            return c;
        }
        return segs0.size() - segs1.size();
    }
}