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