/* * Copyright 1999-2018 Alibaba Group Holding Ltd. * * Licensed 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.alibaba.csp.sentinel.dashboard.util; import java.util.Optional; import com.alibaba.csp.sentinel.util.StringUtil; import com.alibaba.csp.sentinel.dashboard.datasource.entity.SentinelVersion; /** * Util class for parsing version. * * @author Eric Zhao * @since 0.2.1 */ public final class VersionUtils { /** * Parse version of Sentinel from raw string. * * @param verStr version string * @return parsed {@link SentinelVersion} if the version is valid; empty if * there is something wrong with the format */ public static Optional parseVersion(String verStr) { if (StringUtil.isBlank(verStr)) { return Optional.empty(); } try { String versionFull = verStr; SentinelVersion version = new SentinelVersion(); // postfix int index = versionFull.indexOf("-"); if (index == 0) { // Start with "-" return Optional.empty(); } if (index == versionFull.length() - 1) { // End with "-" } else if (index > 0) { version.setPostfix(versionFull.substring(index + 1)); } if (index >= 0) { versionFull = versionFull.substring(0, index); } // x.x.x int segment = 0; int[] ver = new int[3]; while (segment < ver.length) { index = versionFull.indexOf('.'); if (index < 0) { if (versionFull.length() > 0) { ver[segment] = Integer.valueOf(versionFull); } break; } ver[segment] = Integer.valueOf(versionFull.substring(0, index)); versionFull = versionFull.substring(index + 1); segment ++; } if (ver[0] < 1) { // Wrong format, return empty. return Optional.empty(); } else { return Optional.of(version .setMajorVersion(ver[0]) .setMinorVersion(ver[1]) .setFixVersion(ver[2])); } } catch (Exception ex) { // Parse fail, return empty. return Optional.empty(); } } private VersionUtils() {} }