001package co.codewizards.cloudstore.core.version; 002 003import static co.codewizards.cloudstore.core.objectfactory.ObjectFactoryUtil.*; 004import static java.util.Objects.*; 005 006import co.codewizards.cloudstore.core.dto.VersionInfoDto; 007 008public class VersionCompatibilityValidator { 009 010 protected VersionCompatibilityValidator() { 011 } 012 013 public static VersionCompatibilityValidator getInstance() { 014 return createObject(VersionCompatibilityValidator.class); 015 } 016 017 public void validate(final VersionInfoDto clientVersionInfoDto, final VersionInfoDto serverVersionInfoDto) 018 throws VersionCompatibilityException { 019 requireNonNull(clientVersionInfoDto, "clientVersionInfoDto"); 020 requireNonNull(serverVersionInfoDto, "serverVersionInfoDto"); 021 022 final Version clientVersion = requireNonNull(clientVersionInfoDto.getLocalVersion(), "clientVersionInfoDto.localVersion"); 023 final Version minimumServerVersion = requireNonNull(clientVersionInfoDto.getMinimumRemoteVersion(), "clientVersionInfoDto.minimumRemoteVersion"); 024 025 final Version serverVersion = requireNonNull(serverVersionInfoDto.getLocalVersion(), "serverVersionInfoDto.localVersion"); 026 final Version minimumClientVersion = requireNonNull(serverVersionInfoDto.getMinimumRemoteVersion(), "serverVersionInfoDto.minimumRemoteVersion"); 027 028 if (serverVersion.compareTo(minimumServerVersion) < 0) 029 throw new ServerTooOldException(clientVersionInfoDto, serverVersionInfoDto, 030 String.format("The server version is %s, but the client requires at least server version %s!", 031 serverVersion, minimumServerVersion)); 032 033 if (clientVersion.compareTo(minimumClientVersion) < 0) 034 throw new ClientTooOldException(clientVersionInfoDto, serverVersionInfoDto, 035 String.format("The client version is %s, but the server requires at least client version %s!", 036 clientVersion, minimumClientVersion)); 037 } 038}