MainModel.cs CampusAppWP8::MainModel< T > CampusAppWP8 System::Net //----------------------------------------------------------------------------- //<copyrightfile="MainModel.cs"company="BTU/IIT"> //Companycopyrighttag. //</copyright> //<author>fiedlchr</author> //<sience>05.07.2013</sience> //----------------------------------------------------------------------------- namespaceCampusAppWP8 { usingSystem; usingSystem.IO; usingSystem.Net; usingSystem.Text; usingCampusAppWP8.Utility; publicabstractclassMainModel<T>:IDisposable { privateModelTypemodelType; privateTmodel=default(T); privateCampusAppWP8.Utility.Filefile=null; privateHttpRequestapi=null; privatestringfileName=string.Empty; privateUrihttpApiUri=null; publicMainModel(ModelTypemodelType,stringfileName,stringurl) { this.modelType=modelType; if((url!=null)&&(url.Equals(string.Empty)==false)) { this.httpApiUri=newUri(url,UriKind.Absolute); } this.fileName=fileName; if((this.IsFile()==true) &&(fileName.Equals(string.Empty)==false)) { this.InitFile(CampusAppWP8.Utility.File.IOTypeRead.ReadSync,CampusAppWP8.Utility.File.IOTypeWrite.WriteAsync); } if((this.IsHttpApi()==true) &&(url.Equals(string.Empty)==false)) { this.InitHttpApi(); } } ~MainModel() { this.SaveData(); } publicdelegatevoidOnLoading(); publicdelegatevoidOnLoaded(); publicdelegatevoidOnSaving(); publicdelegatevoidOnSaved(); publicdelegateboolIsModelUpToDate(Tmodel); publicdelegateboolIsFileUpToDate(Tmodel,FileInfofileInfo); publiceventOnLoadingonLoading=null; publiceventOnLoadedonLoaded=null; publiceventOnSavingonSaving=null; publiceventOnSavedonSaved=null; publiceventIsFileUpToDateisFileUpToDate=null; publiceventIsModelUpToDateisModelUpToDate=null; publicenumModelType { INVALID=0, File=1, Feed=2, FileAndFeed=3 } publicTModel { get { returnthis.model; } set { this.model=value; } } publicvoidDispose() { this.SaveData(); } publicvoidForceWebUpdate() { if(this.api!=null) { if(this.onLoading!=null) { this.onLoading(); } this.api.HttpGet(this.httpApiUri,this.OnLoadDataComplete); } } publicvoidLoadData() { boolloadFromFile=true; if(this.onLoading!=null) { this.onLoading(); } if(((this.isModelUpToDate==null) ||(this.isModelUpToDate(this.model)==false)) &&((this.file!=null)||this.api!=null)) { if(this.file!=null) { if((this.file.Exist()==false) ||(this.file.GetFileInfo().Length==0)) { loadFromFile=false; } if(((this.isFileUpToDate!=null)&&(this.isFileUpToDate(this.model,this.file.GetFileInfo())==false)) ||(this.isFileUpToDate==null)) { loadFromFile=false; } } else { loadFromFile=false; } if(this.api==null) { loadFromFile=true; } if(loadFromFile==false) { this.api.HttpGet(this.httpApiUri,this.OnLoadDataComplete); } else { stringdata=this.file.ReadFile(); if(data!=null&&!data.Equals(string.Empty)) { this.DeserializeModel(Encoding.UTF8.GetBytes(data)); } } } if(loadFromFile==true) { if(this.onLoaded!=null) { this.onLoaded(); } } } publicvoidSaveData() { if((this.file!=null) &&((this.isFileUpToDate==null)||(this.isFileUpToDate(this.model,this.file.GetFileInfo())==false))) { if(this.onSaving!=null) { this.onSaving(); } byte[]data=this.SerializeModel(); this.file.WriteFile(data); if(this.onSaved!=null) { this.onSaved(); } } } publicModelTypeGetModelType() { returnthis.modelType; } publicTGetModel() { returnthis.model; } protectedabstractboolDeserializeModel(byte[]modelData); protectedabstractbyte[]SerializeModel(); protectedboolIsFile() { boolretValue=false; if((this.modelType&ModelType.File)!=0) { retValue=true; } returnretValue; } protectedboolIsHttpApi() { boolretValue=false; if((this.modelType&ModelType.Feed)!=0) { retValue=true; } returnretValue; } privatevoidInitFile(CampusAppWP8.Utility.File.IOTypeReadreadType=CampusAppWP8.Utility.File.IOTypeRead.ReadSync,CampusAppWP8.Utility.File.IOTypeWritewriteType=CampusAppWP8.Utility.File.IOTypeWrite.WriteAsync) { if((this.IsFile()==true) &&(this.file==null)) { this.file=newCampusAppWP8.Utility.File(this.fileName,readType,writeType); } } privatevoidInitHttpApi() { if((this.IsHttpApi()==true) &&(this.api==null)) { this.api=newHttpRequest(); } } privatevoidOnLoadDataComplete(objectsender,DownloadStringCompletedEventArgse) { ExceptiondownloadError=e.Error; if(downloadError!=null) { return; } stringdownloadResult=e.Result; if(downloadResult!=null&&!downloadResult.Equals(string.Empty)) { this.DeserializeModel(Encoding.UTF8.GetBytes(downloadResult)); } if(this.onLoaded!=null) { this.onLoaded(); } } } }