private bool CheckTarget(SyncTool syncPeer) { if (ReferenceEquals(syncPeer.Serializer, _serializer)) { return(false); } else { return(true); } }
private bool CheckSyncContext(SyncTool syncPeer) { if (!ReferenceEquals(syncPeer.SyncSerializer, _syncSerializer)) { return(false); } else { return(true); } }
internal void StartAnalyzing(SyncTool syncTool) { if (!_initialized) { throw new SyncException("Syncpool is not initialized!"); } if (!CheckSyncContext(syncTool)) { throw new SyncException("SyncPool is not compatible with SyncPeer! Both of them use a different SyncSerializer!"); } if (!CheckTarget(syncTool)) { throw new SyncException("Synchronising form source to source is not valid!"); } foreach (SyncContainer c in _pooledObjects.Values) { c.TargetSerializer = syncTool.Serializer; c.Analyze(); } }
internal void StartSynchronizing(SyncTool syncPeer) { if (!_initialized) { throw new SyncException("Syncpool is not initialized!"); } if (!CheckSyncContext(syncPeer)) { throw new SyncException("SyncPool is not compatible with SyncPeer!"); } if (!CheckTarget(syncPeer)) { throw new SyncException("Synchronising form source to source is not valid!"); } _syncSerializer.Connector.BeginTransaction(); syncPeer.Serializer.Connector.BeginTransaction(); SyncContainer lastContainer = null; try { foreach (SyncContainer c in _pooledObjects.Values) { lastContainer = c; c.Synchronize(); } _syncSerializer.Connector.Commit(); syncPeer.Serializer.Connector.Commit(); } catch (Exception ex) { ResetSynchronizedState(); if (!OnSynchronizeEvent(new SynchronizeEventArgs())) { throw new Exception("Synchronizing failed at: " + lastContainer, ex); } } }
private void analyzeButton_Click(object sender, EventArgs e) { if (analyzeButton.BackColor ==System.Drawing.SystemColors.Info) { analyzeButton.BackColor = System.Drawing.SystemColors.Control; } analyzeButton.Text = "Analyzing"; if (download == true) { //Nur die Basistabellen sollen synchronisiert werden FreeSyncPoolBuilder poolBuilder = new FreeSyncPoolBuilder(repositorySerializer, syncDBSerializer); //***Analysis ist ein Speizialfall, da nur projektspezifische Daten übertrageb werden sollen //Ermittle alle Projekte aus Userprofilen, die auf dem Handy gespeichert sind DbConnection mobConn = mobileDBSerializer.CreateConnection(); mobConn.Open(); DbCommand com = mobConn.CreateCommand(); com.CommandText = "Select ProjectID From UserProfile"; DbDataReader reader = com.ExecuteReader(); List<int> projects=new List<int>(); while (reader.Read()) { projects.Add(reader.GetInt32(0)); } foreach (int project in projects) { String s = @"SELECT * FROM [DiversityCollection].[dbo].[AnalysisProjectList] ("+project+")"; IList<ISerializableObject> list = repositorySerializer.Connector.LoadList(typeof(Analysis),s); poolBuilder.Add(list); } //******* poolBuilder.Load(typeof(AnalysisTaxonomicGroup)); //poolBuilder.Load(typeof(Collection)); poolBuilder.Load(typeof(Property)); poolBuilder.Load(typeof(CollEventImageType_Enum)); poolBuilder.Load(typeof(CollSpecimenImageType_Enum)); poolBuilder.Load(typeof(CollTaxonomicGroup_Enum)); poolBuilder.Load(typeof(LocalisationSystem)); poolBuilder.Load(typeof(CollCircumstances_Enum)); poolBuilder.Load(typeof(CollUnitRelationType_Enum)); //poolBuilder.Load(typeof(CollEventSeriesImageType_Enum)); poolBuilder.Load(typeof(CollIdentificationCategory_Enum)); //poolBuilder.Load(typeof(CollTypeStatus_Enum)); //poolBuilder.Load(typeof(CollIdentificationQualifier_Enum)); //poolBuilder.Load(typeof(CollLabelTranscriptionState_Enum)); //poolBuilder.Load(typeof(CollLabelType_Enum)); //poolBuilder.Load(typeof(CollMaterialCategory_Enum)); //****** usedTypes.Add(typeof(Analysis)); usedTypes.Add(typeof(AnalysisTaxonomicGroup)); //usedTypes.Add(typeof(Collection)); usedTypes.Add(typeof(Property)); usedTypes.Add(typeof(CollEventImageType_Enum)); usedTypes.Add(typeof(CollSpecimenImageType_Enum)); usedTypes.Add(typeof(CollTaxonomicGroup_Enum)); usedTypes.Add(typeof(LocalisationSystem)); usedTypes.Add(typeof(CollCircumstances_Enum)); usedTypes.Add(typeof(CollUnitRelationType_Enum)); //usedTypes.Add(typeof(CollEventSeriesImageType_Enum)); usedTypes.Add(typeof(CollIdentificationCategory_Enum)); //usedTypes.Add(typeof(CollTypeStatus_Enum)); //usedTypes.Add(typeof(CollIdentificationQualifier_Enum)); //usedTypes.Add(typeof(CollLabelTranscriptionState_Enum)); //usedTypes.Add(typeof(CollLabelType_Enum)); //usedTypes.Add(typeof(CollMaterialCategory_Enum)); this.repositorySyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(repositorySerializer, syncDBSerializer, usedTypes); this.mobileDBSyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(mobileDBSerializer, syncDBSerializer, usedTypes); //this.SyncPool = poolBuilder.buildPool(); this.SyncPool=repositorySyncTool.CreateSyncPool(); this.mobileDBSyncTool.Analyze(SyncPool); } else { usedTypes.Clear(); //usedTypes.Add(typeof(CollectionSpecimen)); //usedTypes.Add(typeof(CollectionEvent)); //usedTypes.Add(typeof(CollectionEventSeries)); //usedTypes.Add(typeof(CollectionEventProperty)); //usedTypes.Add(typeof(CollectionEventLocalisation)); //usedTypes.Add(typeof(LocalisationSystem)); //usedTypes.Add(typeof(CollectionAgent)); //usedTypes.Add(typeof(CollectionSpecimenPart)); //usedTypes.Add(typeof(CollectionProject)); usedTypes.Add(typeof(IdentificationUnit)); IRestriction r = RestrictionFactory.SqlRestriction(typeof(IdentificationUnit), "0=0"); IRestriction r1 = RestrictionFactory.Gt(typeof(IdentificationUnit), "_IdentificationUnitID", 0); //usedTypes.Add(typeof(Identification)); //usedTypes.Add(typeof(IdentificationUnitAnalysis)); //usedTypes.Add(typeof(Analysis)); //usedTypes.Add(typeof(Property)); //usedTypes.Add(typeof(CollectionEventProperty)); //usedTypes.Add(typeof(CollTaxonomicGroup_Enum)); IList < ISerializableObject > list = mobileDBSerializer.Connector.LoadList(typeof(CollectionSpecimen), r1); this.repositorySyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(repositorySerializer, syncDBSerializer, divMobiTypes); this.mobileDBSyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(mobileDBSerializer, syncDBSerializer, divMobiTypes); this.SyncPool = this.mobileDBSyncTool.CreateSyncPool(r1); this.repositorySyncTool.Analyze(SyncPool); } analyzeButton.Text = "Complete"; analyzeButton.BackColor = System.Drawing.SystemColors.Info; tabControlAnalysis.Enabled = true; // Listboxen mit den Analysen befüllen conflicted =(List<SyncContainer>)SyncPool.GetSyncContainer<ConflictState>(); listBoxConflicts.Items.Clear(); foreach (SyncContainer sc in conflicted) { listBoxConflicts.Items.Add(sc); } conflictResolved=(List<SyncContainer>)SyncPool.GetSyncContainer<ConflictResolvedState>(); listBoxConflictResolved.Items.Clear(); foreach (SyncContainer sc in conflictResolved) { listBoxConflictResolved.Items.Add(sc); } synchronized = (List<SyncContainer>)SyncPool.GetSyncContainer<SynchronizedState>(); listBoxSynchronized.Items.Clear(); foreach (SyncContainer sc in synchronized) { listBoxSynchronized.Items.Add(sc); } insert = (List<SyncContainer>)SyncPool.GetSyncContainer<InsertState>(); listBoxInsert.Items.Clear(); foreach (SyncContainer sc in insert) { listBoxInsert.Items.Add(sc); } update = (List<SyncContainer>)SyncPool.GetSyncContainer<UpdateState>(); listBoxUpdate.Items.Clear(); foreach (SyncContainer sc in update) { listBoxUpdate.Items.Add(sc); } ignore = (List<SyncContainer>)SyncPool.GetSyncContainer<IgnoreState>(); listBoxIgnore.Items.Clear(); foreach (SyncContainer sc in ignore) { listBoxIgnore.Items.Add(sc); } truncate = (List<SyncContainer>)SyncPool.GetSyncContainer<TruncateState>(); listBoxTruncate.Items.Clear(); foreach (SyncContainer sc in truncate) { listBoxTruncate.Items.Add(sc); } delete = (List<SyncContainer>)SyncPool.GetSyncContainer<DeletedState>(); listBoxDelete.Items.Clear(); foreach (SyncContainer sc in delete) { listBoxDelete.Items.Add(sc); } premature = (List<SyncContainer>)SyncPool.GetSyncContainer<PrematureState>(); listBoxPremature.Items.Clear(); foreach (SyncContainer sc in premature) { listBoxPremature.Items.Add(sc); } buttonSynchronize.Enabled = true; buttonSynchronize.BackColor = System.Drawing.SystemColors.Control; }
private void analyzeButton_Click(object sender, EventArgs e) { if (analyzeButton.BackColor == System.Drawing.SystemColors.Info) { analyzeButton.BackColor = System.Drawing.SystemColors.Control; } analyzeButton.Text = "Analyzing"; if (download == true) { //Nur die Basistabellen sollen synchronisiert werden FreeSyncPoolBuilder poolBuilder = new FreeSyncPoolBuilder(repositorySerializer, syncDBSerializer); //***Analysis ist ein Speizialfall, da nur projektspezifische Daten übertrageb werden sollen //Ermittle alle Projekte aus Userprofilen, die auf dem Handy gespeichert sind DbConnection mobConn = mobileDBSerializer.CreateConnection(); mobConn.Open(); DbCommand com = mobConn.CreateCommand(); com.CommandText = "Select ProjectID From UserProfile"; DbDataReader reader = com.ExecuteReader(); List <int> projects = new List <int>(); while (reader.Read()) { projects.Add(reader.GetInt32(0)); } foreach (int project in projects) { String s = @"SELECT * FROM [DiversityCollection].[dbo].[AnalysisProjectList] (" + project + ")"; IList <ISerializableObject> list = repositorySerializer.Connector.LoadList(typeof(Analysis), s); poolBuilder.Add(list); } //******* poolBuilder.Load(typeof(AnalysisTaxonomicGroup)); //poolBuilder.Load(typeof(Collection)); poolBuilder.Load(typeof(Property)); poolBuilder.Load(typeof(CollEventImageType_Enum)); poolBuilder.Load(typeof(CollSpecimenImageType_Enum)); poolBuilder.Load(typeof(CollTaxonomicGroup_Enum)); poolBuilder.Load(typeof(LocalisationSystem)); poolBuilder.Load(typeof(CollCircumstances_Enum)); poolBuilder.Load(typeof(CollUnitRelationType_Enum)); //poolBuilder.Load(typeof(CollEventSeriesImageType_Enum)); poolBuilder.Load(typeof(CollIdentificationCategory_Enum)); //poolBuilder.Load(typeof(CollTypeStatus_Enum)); //poolBuilder.Load(typeof(CollIdentificationQualifier_Enum)); //poolBuilder.Load(typeof(CollLabelTranscriptionState_Enum)); //poolBuilder.Load(typeof(CollLabelType_Enum)); //poolBuilder.Load(typeof(CollMaterialCategory_Enum)); //****** usedTypes.Add(typeof(Analysis)); usedTypes.Add(typeof(AnalysisTaxonomicGroup)); //usedTypes.Add(typeof(Collection)); usedTypes.Add(typeof(Property)); usedTypes.Add(typeof(CollEventImageType_Enum)); usedTypes.Add(typeof(CollSpecimenImageType_Enum)); usedTypes.Add(typeof(CollTaxonomicGroup_Enum)); usedTypes.Add(typeof(LocalisationSystem)); usedTypes.Add(typeof(CollCircumstances_Enum)); usedTypes.Add(typeof(CollUnitRelationType_Enum)); //usedTypes.Add(typeof(CollEventSeriesImageType_Enum)); usedTypes.Add(typeof(CollIdentificationCategory_Enum)); //usedTypes.Add(typeof(CollTypeStatus_Enum)); //usedTypes.Add(typeof(CollIdentificationQualifier_Enum)); //usedTypes.Add(typeof(CollLabelTranscriptionState_Enum)); //usedTypes.Add(typeof(CollLabelType_Enum)); //usedTypes.Add(typeof(CollMaterialCategory_Enum)); this.repositorySyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(repositorySerializer, syncDBSerializer, usedTypes); this.mobileDBSyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(mobileDBSerializer, syncDBSerializer, usedTypes); //this.SyncPool = poolBuilder.buildPool(); this.SyncPool = repositorySyncTool.CreateSyncPool(); this.mobileDBSyncTool.Analyze(SyncPool); } else { usedTypes.Clear(); //usedTypes.Add(typeof(CollectionSpecimen)); //usedTypes.Add(typeof(CollectionEvent)); //usedTypes.Add(typeof(CollectionEventSeries)); //usedTypes.Add(typeof(CollectionEventProperty)); //usedTypes.Add(typeof(CollectionEventLocalisation)); //usedTypes.Add(typeof(LocalisationSystem)); //usedTypes.Add(typeof(CollectionAgent)); //usedTypes.Add(typeof(CollectionSpecimenPart)); //usedTypes.Add(typeof(CollectionProject)); usedTypes.Add(typeof(IdentificationUnit)); IRestriction r = RestrictionFactory.SqlRestriction(typeof(IdentificationUnit), "0=0"); IRestriction r1 = RestrictionFactory.Gt(typeof(IdentificationUnit), "_IdentificationUnitID", 0); //usedTypes.Add(typeof(Identification)); //usedTypes.Add(typeof(IdentificationUnitAnalysis)); //usedTypes.Add(typeof(Analysis)); //usedTypes.Add(typeof(Property)); //usedTypes.Add(typeof(CollectionEventProperty)); //usedTypes.Add(typeof(CollTaxonomicGroup_Enum)); IList <ISerializableObject> list = mobileDBSerializer.Connector.LoadList(typeof(CollectionSpecimen), r1); this.repositorySyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(repositorySerializer, syncDBSerializer, divMobiTypes); this.mobileDBSyncTool = new UBT.AI4.Bio.DivMobi.SyncTool.SyncTool.SyncTool(mobileDBSerializer, syncDBSerializer, divMobiTypes); this.SyncPool = this.mobileDBSyncTool.CreateSyncPool(r1); this.repositorySyncTool.Analyze(SyncPool); } analyzeButton.Text = "Complete"; analyzeButton.BackColor = System.Drawing.SystemColors.Info; tabControlAnalysis.Enabled = true; // Listboxen mit den Analysen befüllen conflicted = (List <SyncContainer>)SyncPool.GetSyncContainer <ConflictState>(); listBoxConflicts.Items.Clear(); foreach (SyncContainer sc in conflicted) { listBoxConflicts.Items.Add(sc); } conflictResolved = (List <SyncContainer>)SyncPool.GetSyncContainer <ConflictResolvedState>(); listBoxConflictResolved.Items.Clear(); foreach (SyncContainer sc in conflictResolved) { listBoxConflictResolved.Items.Add(sc); } synchronized = (List <SyncContainer>)SyncPool.GetSyncContainer <SynchronizedState>(); listBoxSynchronized.Items.Clear(); foreach (SyncContainer sc in synchronized) { listBoxSynchronized.Items.Add(sc); } insert = (List <SyncContainer>)SyncPool.GetSyncContainer <InsertState>(); listBoxInsert.Items.Clear(); foreach (SyncContainer sc in insert) { listBoxInsert.Items.Add(sc); } update = (List <SyncContainer>)SyncPool.GetSyncContainer <UpdateState>(); listBoxUpdate.Items.Clear(); foreach (SyncContainer sc in update) { listBoxUpdate.Items.Add(sc); } ignore = (List <SyncContainer>)SyncPool.GetSyncContainer <IgnoreState>(); listBoxIgnore.Items.Clear(); foreach (SyncContainer sc in ignore) { listBoxIgnore.Items.Add(sc); } truncate = (List <SyncContainer>)SyncPool.GetSyncContainer <TruncateState>(); listBoxTruncate.Items.Clear(); foreach (SyncContainer sc in truncate) { listBoxTruncate.Items.Add(sc); } delete = (List <SyncContainer>)SyncPool.GetSyncContainer <DeletedState>(); listBoxDelete.Items.Clear(); foreach (SyncContainer sc in delete) { listBoxDelete.Items.Add(sc); } premature = (List <SyncContainer>)SyncPool.GetSyncContainer <PrematureState>(); listBoxPremature.Items.Clear(); foreach (SyncContainer sc in premature) { listBoxPremature.Items.Add(sc); } buttonSynchronize.Enabled = true; buttonSynchronize.BackColor = System.Drawing.SystemColors.Control; }