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}