private static SchemaDetails _checkSchemaVersion(CswNbtResources CswNbtResources) { SchemaDetails Ret = new SchemaDetails(); CswSchemaScriptsProd CswSchemaScriptsProd = new CswSchemaScriptsProd(CswNbtResources); CswSchemaVersion CurrentVersion = CswSchemaScriptsProd.CurrentVersion(CswNbtResources); CswSchemaVersion LatestVersion = CswSchemaScriptsProd.LatestVersion; if (CurrentVersion < LatestVersion) { Ret.CorrectVersion = false; CswWebSvcReturnBase.ErrorMessage Error = new CswWebSvcReturnBase.ErrorMessage(); Error.Type = CswEnumErrorType.Error; Error.Message = "The current schema is not updated to the latest version. The application may not work correctly. Please contact your adminstrator."; Error.Detail = "The current schema is at version " + CurrentVersion + " and the latest version is version " + LatestVersion + "."; Ret.ErrorMessage = Error; } else { Ret.CorrectVersion = true; } return(Ret); }
}//_doUpdateOpThreadWrapper() /// <summary> /// CAUTION: in concurrent mode ( -maxconcurrentschemata > 0 ), this method will be multi-threaded /// </summary> /// <param name="CurrentAccessId"></param> /// <param name="CswNbtResources"></param> /// <param name="ResourcesInitHandler"></param> /// <param name="CswConsoleOutput"></param> private bool _doUpdateOp(string CurrentAccessId, CswNbtResources CswNbtResources, CswSchemaUpdater.ResourcesInitHandler ResourcesInitHandler, CswConsoleOutput CswConsoleOutput, bool SuppressRealTimeProgressTics, bool ContinueOnError) { bool ReturnVal = true; // Do the update on the current accessid CswSchemaScriptsProd CswSchemaScripts = null; //if( _UserArgs.ContainsKey( _ArgKey.Mode ) && _ArgVal_Test == _UserArgs[_ArgKey.Mode] ) //{ //// Use test cases //Int32 StartAtTestCase = 0; //if( _UserArgs.ContainsKey( _ArgKey.StartAtTestCase ) ) //{ // StartAtTestCase = CswConvert.ToInt32( _UserArgs[_ArgKey.StartAtTestCase] ); //} //Int32 EndAtTestCase = 0; //if( _UserArgs.ContainsKey( _ArgKey.EndAtTestCase ) ) //{ // EndAtTestCase = CswConvert.ToInt32( _UserArgs[_ArgKey.EndAtTestCase] ); //} //List<string> TestCasesToIgnore = new List<string>(); //if( _UserArgs.ContainsKey( _ArgKey.IgnoreTestCasesCsv ) ) //{ // CswCommaDelimitedString CswCommaDelimitedString = new CswCommaDelimitedString(); // CswCommaDelimitedString.FromString( _UserArgs[_ArgKey.IgnoreTestCasesCsv] ); // TestCasesToIgnore = CswCommaDelimitedString.ToList<string>(); //} //CswSchemaScripts = new CswSchemaScriptsTest( StartAtTestCase, EndAtTestCase, TestCasesToIgnore ); //} //else //{ // Use production scripts CswSchemaScripts = new CswSchemaScriptsProd(CswNbtResources); //} CswSchemaUpdater CswSchemaUpdater = new CswSchemaUpdater(CurrentAccessId, ResourcesInitHandler, CswSchemaScripts); if (false == _UserArgs.ContainsKey(_ArgKey.Describe)) { ReturnVal = _updateAccessId(CurrentAccessId, CswNbtResources, CswSchemaUpdater, CswConsoleOutput, SuppressRealTimeProgressTics, ContinueOnError); } else if (_UserArgs.ContainsKey(_ArgKey.Mode) && _ArgVal_Test == _UserArgs[_ArgKey.Mode]) { CswConsoleOutput.write("Ach. The iteration model for production scripts so woefully different than for test scripts that verily do I say unto the brother, uh, yay: it is easier for a camel to pass through the eye of a needle than is to give an inventory of production test scripts. Of course, since the production test scripts don't deploy the Description property of CswRequestDriver in as a rich a way as do the test scripts, it probably doesn't matter. See case 21739"); } else { _describe(CswNbtResources, CswSchemaUpdater, CswConsoleOutput); } return(ReturnVal); }
}//_runNonVersionScripts() private bool _updateAccessId(string AccessId, CswNbtResources CswNbtResources, CswSchemaUpdater CswSchemaUpdater, CswConsoleOutput CswConsoleOutput, bool SuppressRealTimeProgressTics, bool ContinueOnError) { CswSchemaUpdateThread CswSchemaUpdateThread = new CswSchemaUpdateThread(CswSchemaUpdater); CswConsoleOutput.write("Running Non-Versioned Pre-Scripts" + _Separator_NuLine + _Separator_NuLine); CswSchemaScriptsProd CswSchemaScriptsProd = new CswSchemaScriptsProd(CswNbtResources); bool UpdateSucceeded = _runNonVersionScripts(CswSchemaUpdater, CswSchemaScriptsProd.RunBeforeScripts, CswConsoleOutput); if (UpdateSucceeded) { CswSchemaVersion CurrentVersion = CswSchemaUpdater.CurrentVersion(CswNbtResources); // refresh current version in case it was altered CswNbtResources.ConfigVbls.refresh(); CurrentVersion = CswSchemaUpdater.CurrentVersion(CswNbtResources); CswConsoleOutput.write("Updating from " + CurrentVersion.ToString() + " to " + CswSchemaUpdater.LatestVersion.ToString() + _Separator_NuLine + _Separator_NuLine); for (int i = 0; ((UpdateSucceeded || ContinueOnError) && ((CurrentVersion != CswSchemaUpdater.LatestVersion) || (i < CswSchemaUpdater.UpdateDrivers.Count))); i++) { if (CurrentVersion < CswSchemaUpdater.MinimumVersion) { UpdateSucceeded = false; CswConsoleOutput.write("AccessId " + AccessId + ": "); CswConsoleOutput.write(" failed: Schema version (" + CurrentVersion.ToString() + ") is below minimum version (" + CswSchemaUpdater.MinimumVersion.ToString() + ")" + _Separator_NuLine); } else { CswSchemaVersion UpdateToVersion = CswSchemaUpdater.SchemaVersions[i]; string UpdateDescription = CswSchemaUpdater.getDriver(UpdateToVersion).SchemaVersion + ": " + CswSchemaUpdater.getDriver(UpdateToVersion).Description; CswSchemaUpdateThread.start(); if (false == SuppressRealTimeProgressTics) { CswConsoleOutput.write(UpdateDescription + ": "); } while (CswEnumSchemaUpdateState.Running == CswSchemaUpdateThread.UpdateState) { if (false == SuppressRealTimeProgressTics) { CswConsoleOutput.write("."); } Thread.Sleep(1000); } UpdateSucceeded = (CswEnumSchemaUpdateState.Succeeded == CswSchemaUpdateThread.UpdateState); if (UpdateSucceeded) { string Message = string.Empty; if (false == SuppressRealTimeProgressTics) { Message = " succeeded" + _Separator_NuLine; } else { Message = UpdateDescription + " succeeded" + _Separator_NuLine; } CswConsoleOutput.write(Message); } else { string Message = string.Empty; if (false == SuppressRealTimeProgressTics) { Message = " failed: " + CswSchemaUpdateThread.Message + _Separator_NuLine; } else { Message = UpdateDescription + " failed: " + CswSchemaUpdateThread.Message + _Separator_NuLine; } CswConsoleOutput.write(Message, ForceWrite: true, SuppressAccessId: false); } CswNbtResources.ClearCache(); CurrentVersion = CswSchemaUpdater.CurrentVersion(CswNbtResources); } } // for() } //if pre-scripts succeded if (UpdateSucceeded) { UpdateSucceeded = _runNonVersionScripts(CswSchemaUpdater, CswSchemaScriptsProd.RunAfterScripts, CswConsoleOutput); } return(UpdateSucceeded); }//_updateAccessId()