//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//

package com.cloud.maint;

public class Version {
    /**
     * Compares two version strings and see which one is higher version.
     * @param ver1
     * @param ver2
     * @return positive if ver1 is higher.  negative if ver1 is lower; zero if the same.
     */
    public static int compare(String ver1, String ver2) {
        String[] tokens1 = ver1.split("[.]");
        String[] tokens2 = ver2.split("[.]");
//        assert(tokens1.length <= tokens2.length);

        int compareLength = Math.min(tokens1.length, tokens2.length);
        for (int i = 0; i < compareLength; i++) {
            long version1 = Long.parseLong(tokens1[i]);
            long version2 = Long.parseLong(tokens2[i]);
            if (version1 != version2) {
                return version1 < version2 ? -1 : 1;
            }
        }

        if (tokens1.length > tokens2.length) {
            return 1;
        } else if (tokens1.length < tokens2.length) {
            return -1;
        }

        return 0;
    }

    public static String trimToPatch(String version) {
        int index = version.indexOf("-");

        if (index > 0)
            version = version.substring(0, index);

        String[] tokens = version.split("[.]");

        if (tokens.length < 3)
            return "0";
        return tokens[0] + "." + tokens[1] + "." + tokens[2];
    }

    public static String trimRouterVersion(String version) {
        String[] tokens = version.split(" ");
        if (tokens.length >= 3) {
            return tokens[2];
        }
        return "0";
    }

    public static void main(String[] args) {
        System.out.println("Result is " + compare(args[0], args[1]));
    }

}

@@ -2284,16 +2284,59 @@
 gth %3E= 3
+ && tokens%5B2%5D.matches(%22%5B0-9%5D+(%5C%5C.%5B0-9%5D+)*%22)
 ) %7B%0A    

Add check to ensure VR template version matches digit.digit.digit format. Returns version as 0 otherwise