www.gusucode.com > appdesigner工具箱matlab源码程序 > appdesigner/+appdesigner/+internal/+serialization/+app/getAppCompatibilityData.m

    function compatibilityStruct = getAppCompatibilityData(loadedAppData)
% Returns compatibility data as a struct with properties for CurrentVersion,
% LoadedVersion and Compatibility Type for a loaded app. loadedVer is a
% character vector of a version:
%   9.0.0.348333 (R2016b) Prerelease
%

% Copyright 2016 The MathWorks, Inc.

import appdesigner.internal.serialization.app.*;

thisVersion = AppVersion;
currentAppVersion = getRelease(thisVersion.FullVersion);

loadedVer = getSavedVersion(loadedAppData);
minSupportedVer = getMinimumSupportedVersion(loadedAppData);

compatibilityStruct.CurrentVersion = currentAppVersion;
compatibilityStruct.LoadedVersion = loadedVer;
compatibilityStruct.CompatibilityType =  getCompatibilityType(currentAppVersion, loadedVer, minSupportedVer);
end


function type = getCompatibilityType(currentVer, loadedVer, minSupportedVer)
% calculates the compatibility type for from the version information saved
% on in appdata

import appdesigner.internal.serialization.app.CompatibilityTypes;


if (isEarlierRelease(minSupportedVer, currentVer))
    % opening an unsupported version
    type = CompatibilityTypes.UNSUPPORTED;
elseif (strcmp(loadedVer, currentVer))
    % opening in the same version
    type = CompatibilityTypes.SAME;
elseif(isEarlierRelease(currentVer, loadedVer))
    % opening in a past version
    type = CompatibilityTypes.BACKWARD;
else
    % opening in a future version
    type = CompatibilityTypes.FORWARD;
end
end

function isEarlier = isEarlierRelease(thisRelease, releaseToCheck)
% Compares to releases to see if the releaseToCheck is from an earlier
% release comapred to thisRelease. Returns an boolean if it is an earlier
% relase.

yearToCheck = getReleaseYear(releaseToCheck);
thisYear = getReleaseYear(thisRelease);

if yearToCheck == thisYear
    isEarlier = getReleaseLetter(releaseToCheck) < getReleaseLetter(thisRelease);
else
    isEarlier = yearToCheck < thisYear;
end
end

function ab = getReleaseLetter(release)
% extracts the letter part of the release (e.g. a or b)

ab = cell2mat( regexp(release, '\d{4,}([ab])', 'tokens', 'once') );
end

function year = getReleaseYear(release)
% extracts the year part from a relase (e.g. 2016) and returns a numeric

year = cell2mat( regexp(release, '(\d{4,})[ab]', 'tokens', 'once') );
year = str2double(year);
end

function release = getRelease(fullVersion)
% extracts the release verison from a string (e.g. R2016a)

release = cell2mat( regexpi(fullVersion, '(R?\d{4,}[ab])', 'tokens', 'once') );
end

function loadedVer = getSavedVersion(appData)
% extracts the saved version from the loaded appData

loadedVer = getRelease(appData.ToolboxVer);
if ~isequal(loadedVer(1), 'R')
    loadedVer = ['R' loadedVer];
end
end

function minVer = getMinimumSupportedVersion(appData)
% gets the MinimumSupportedVersion from loaded App Data

if (isprop(appData, 'MinimumSupportedVersion'))
    % get the minimum supported version from the saved app data
    minVer = getRelease(appData.MinimumSupportedVersion);
else
    % set to the minimum released App Designer version
    minVer = getMinimumVersion();
end
end

function release = getMinimumVersion()
% returns the absolute minimum version of App Designer (first release)

release = 'R2016a';
end