aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-24 12:59:22 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-24 12:59:22 +0200
commit902f5d6d68ed52d92c089a65823ff49599cd3014 (patch)
tree4dc34d4286eade21d7ae63bf118da8a37187b94f /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels
parent6ceea3e717c6a365ef05c9f3bfd6ee62145a9a5e (diff)
parent53db041e636bb3802dbe3cb911de6ef6ef41446c (diff)
downloadTango-902f5d6d68ed52d92c089a65823ff49599cd3014.tar.gz
Tango-902f5d6d68ed52d92c089a65823ff49599cd3014.zip
MERGE!
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs20
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs81
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs175
4 files changed, 233 insertions, 46 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
new file mode 100644
index 000000000..ba3521009
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Integration.Services;
+using Tango.SharedUI;
+
+namespace Tango.MachineStudio.Synchronization.ViewModels
+{
+ public class DirectSynchronizationViewVM : ViewModel
+ {
+ public ExternalBridgeScanner Scanner { get; set; }
+
+ public DirectSynchronizationViewVM(ExternalBridgeScanner scanner)
+ {
+ Scanner = scanner;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs
index 773080813..9c805cca4 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs
@@ -46,20 +46,21 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
BrowseMasterDBCommand = new RelayCommand(BrowseMasterDB, (x) => !_isWorking);
BrowseSlaveDBCommand = new RelayCommand(BrowseSlaveDB, (x) => !_isWorking);
- CompareCommand = new RelayCommand(Compare, (x) => _masterDBFile != null && _slaveDBFile != null && !_isWorking);
+ CompareCommand = new RelayCommand(Compare, (x) => MasterDBFile != null && SlaveDBFile != null && !_isWorking);
CommitCommand = new RelayCommand(Commit, (x) => SelectedDifference != null && !_isWorking);
CommitAllCommand = new RelayCommand(CommitAll, (x) => Differences.Count > 0 && !_isWorking);
+ CleanCommand = new RelayCommand(CleanSlave, (x) => !_isWorking && SlaveDBFile != null);
if (File.Exists(SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile))
{
- _masterDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile;
- MasterDBName = Path.GetFileName(_masterDBFile);
+ MasterDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile;
+ MasterDBName = Path.GetFileName(MasterDBFile);
}
if (File.Exists(SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile))
{
- _slaveDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile;
- SlaveDBName = Path.GetFileName(_slaveDBFile);
+ SlaveDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile;
+ SlaveDBName = Path.GetFileName(SlaveDBFile);
}
}
@@ -96,6 +97,11 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
/// Gets or sets the commit all command.
/// </summary>
public RelayCommand CommitAllCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the clean command.
+ /// </summary>
+ public RelayCommand CleanCommand { get; set; }
#endregion
#region Properties
@@ -140,13 +146,68 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
set { _slaveDBName = value; RaisePropertyChanged(nameof(SlaveDBName)); }
}
+ /// <summary>
+ /// Gets or sets the slave database file.
+ /// </summary>
+ public String SlaveDBFile
+ {
+ get { return _slaveDBFile; }
+ set { _slaveDBFile = value; RaisePropertyChangedAuto(); }
+ }
+
+ /// <summary>
+ /// Gets or sets the master database file.
+ /// </summary>
+ public String MasterDBFile
+ {
+ get { return _masterDBFile; }
+ set { _masterDBFile = value; RaisePropertyChangedAuto(); }
+ }
+
#endregion
#region Private Methods
+ private async void CleanSlave()
+ {
+ if (_notification.ShowQuestion("Are you sure you want to erase all data on slave database?"))
+ {
+ using (_notification.PushTaskItem("Clearing database..."))
+ {
+ try
+ {
+ _isWorking = true;
+ await Task.Factory.StartNew(() =>
+ {
+ SQLiteDataBase localDB = new SQLiteDataBase(SlaveDBFile);
+ localDB.LoadTables();
+ localDB.ClearDataBase();
+ try
+ {
+ localDB.Dispose();
+ }
+ catch { }
+ });
+
+ Differences.Clear();
+ }
+ catch (Exception ex)
+ {
+ ShowError(LogManager.Log(ex).Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ InvalidateRelayCommands();
+ SelectedDifference = null;
+ }
+ }
+ }
+ }
+
private void Compare()
{
- _comparer = new LocalDBComparer(new SQLiteDataBase(_masterDBFile), new SQLiteDataBase(_slaveDBFile));
+ _comparer = new LocalDBComparer(new SQLiteDataBase(MasterDBFile), new SQLiteDataBase(SlaveDBFile));
Task.Factory.StartNew(() =>
{
@@ -179,8 +240,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
SelectedDifference = null;
InvalidateRelayCommands();
- SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile = _masterDBFile;
- SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile = _slaveDBFile;
+ SettingsManager.Default.MachineStudio.SynchronizationModule.LocalMasterDBFile = MasterDBFile;
+ SettingsManager.Default.MachineStudio.SynchronizationModule.LocalSlaveDBFile = SlaveDBFile;
SettingsManager.SaveDefaultSettings();
}
}
@@ -258,7 +319,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
String file = BrowseForFilePath();
if (file != null)
{
- _slaveDBFile = file;
+ SlaveDBFile = file;
SlaveDBName = Path.GetFileName(file);
InvalidateRelayCommands();
}
@@ -269,7 +330,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
String file = BrowseForFilePath();
if (file != null)
{
- _masterDBFile = file;
+ MasterDBFile = file;
MasterDBName = Path.GetFileName(file);
InvalidateRelayCommands();
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
index 8eb68a383..0fe510f36 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs
@@ -19,10 +19,13 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
StartLocalSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.LocalSynchronizationView); });
StartRemoteSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.RemoteSynchronizationView); });
+ StartDirectRemoteSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.DirectSynchronizationView); });
}
public RelayCommand StartLocalSyncCommand { get; set; }
public RelayCommand StartRemoteSyncCommand { get; set; }
+
+ public RelayCommand StartDirectRemoteSyncCommand { get; set; }
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs
index 5709c30b6..e14b0ffb9 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs
@@ -2,29 +2,37 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Data.Entity.Validation;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Tango.Core.Commands;
+using Tango.DAL.Local.DB;
+using Tango.DAL.Observables;
using Tango.DAL.Remote.DB;
+using Tango.Logging;
using Tango.MachineStudio.Common.Notifications;
+using Tango.MachineStudio.Common.StudioApplication;
using Tango.MachineStudio.Synchronization.Navigation;
using Tango.Settings;
using Tango.SharedUI;
using Tango.Synchronization;
+using Tango.Synchronization.Local;
using Tango.Synchronization.Remote;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
- public class RemoteSynchronizationViewVM : ViewModel
+ public class RemoteSynchronizationViewVM : ViewModel, IShutdownRequestBlocker
{
private SyncNavigationManager _navigation;
private String _slaveDBFile;
- private RemoteDBComparer _comparer;
private INotificationProvider _notification;
private bool _isWorking;
+ private RemoteDBComparer _comparer;
+ private RemoteDB _remoteDB;
+ private LocalDB _localDB;
#region Constructors
@@ -43,14 +51,15 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
Differences = new ObservableCollection<Diff>();
BrowseSlaveDBCommand = new RelayCommand(BrowseSlaveDB, (x) => !_isWorking);
- CompareCommand = new RelayCommand(Compare, (x) => _slaveDBFile != null && !_isWorking);
- CommitCommand = new RelayCommand(Commit, (x) => SelectedDifference != null && !_isWorking);
- CommitAllCommand = new RelayCommand(CommitAll, (x) => Differences.Count > 0 && !_isWorking);
+ CompareCommand = new RelayCommand(Compare, (x) => SlaveDBFile != null && !_isWorking && SelectedMachine != null);
+ CommitCommand = new RelayCommand(Commit, (x) => SelectedDifference != null && !_isWorking && SelectedMachine != null);
+ CommitAllCommand = new RelayCommand(CommitAll, (x) => Differences.Count > 0 && !_isWorking && SelectedMachine != null);
+ CleanCommand = new RelayCommand(CleanSlave, (x) => !_isWorking && SlaveDBFile != null);
if (File.Exists(SettingsManager.Default.MachineStudio.SynchronizationModule.RemoteSQLiteFile))
{
- _slaveDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.RemoteSQLiteFile;
- SlaveDBName = Path.GetFileName(_slaveDBFile);
+ SlaveDBFile = SettingsManager.Default.MachineStudio.SynchronizationModule.RemoteSQLiteFile;
+ SlaveDBName = Path.GetFileName(SlaveDBFile);
}
}
@@ -64,6 +73,11 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
public RelayCommand BackCommand { get; set; }
/// <summary>
+ /// Gets or sets the browse master database command.
+ /// </summary>
+ public RelayCommand BrowseMasterDBCommand { get; set; }
+
+ /// <summary>
/// Gets or sets the browse slave database command.
/// </summary>
public RelayCommand BrowseSlaveDBCommand { get; set; }
@@ -82,6 +96,12 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
/// Gets or sets the commit all command.
/// </summary>
public RelayCommand CommitAllCommand { get; set; }
+
+ /// <summary>
+ /// Gets or sets the clean command.
+ /// </summary>
+ public RelayCommand CleanCommand { get; set; }
+
#endregion
#region Properties
@@ -116,51 +136,109 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
set { _slaveDBName = value; RaisePropertyChanged(nameof(SlaveDBName)); }
}
+ private Machine _selectedMachine;
+ /// <summary>
+ /// Gets or sets the selected machine.
+ /// </summary>
+ public Machine SelectedMachine
+ {
+ get { return _selectedMachine; }
+ set { _selectedMachine = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
+ }
+
+ /// <summary>
+ /// Gets or sets the slave database file.
+ /// </summary>
+ public String SlaveDBFile
+ {
+ get { return _slaveDBFile; }
+ set { _slaveDBFile = value; RaisePropertyChangedAuto(); }
+ }
#endregion
#region Private Methods
- private void Compare()
+ private async void CleanSlave()
{
- Task.Factory.StartNew(() =>
+ if (_notification.ShowQuestion("Are you sure you want to erase all data on slave database?"))
{
- using (RemoteDB remoteDB = new RemoteDB(SettingsManager.Default.DataBase.SQLServerAddress, false))
+ using (_notification.PushTaskItem("Clearing database..."))
{
- _comparer = new RemoteDBComparer(remoteDB, new DAL.Local.DB.LocalDB(_slaveDBFile), "1111");
-
- using (_notification.PushTaskItem("Comparing Databases..."))
+ try
{
- try
+ _isWorking = true;
+ await Task.Factory.StartNew(() =>
{
- _isWorking = true;
- InvalidateRelayCommands();
- Thread.Sleep(1500);
- var diffs = _comparer.Compare();
- Differences = new ObservableCollection<Diff>(diffs);
-
- if (diffs.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() > 0)
- {
- ShowInfo("Found " + Differences.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() + " differences.");
- }
- else
+ SQLiteDataBase localDB = new SQLiteDataBase(SlaveDBFile);
+ localDB.LoadTables();
+ localDB.ClearDataBase();
+ try
{
- ShowInfo("The master and slave databases are synchronized.");
+ localDB.Dispose();
}
+ catch{ }
+ });
+
+ Differences.Clear();
+ }
+ catch (Exception ex)
+ {
+ ShowError(LogManager.Log(ex).Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ InvalidateRelayCommands();
+ SelectedDifference = null;
+ }
+ }
+ }
+ }
+
+ private void Compare()
+ {
+ Task.Factory.StartNew(() =>
+ {
+ using (_notification.PushTaskItem("Comparing Databases..."))
+ {
+ try
+ {
+ if (_comparer != null)
+ {
+ _comparer.Dispose();
}
- catch (Exception ex)
+
+ _remoteDB = RemoteDB.CreateDefault();
+ _localDB = new LocalDB(SlaveDBFile);
+ _comparer = new RemoteDBComparer(_remoteDB, _localDB, SelectedMachine.SerialNumber);
+ _isWorking = true;
+ InvalidateRelayCommands();
+ Thread.Sleep(1500);
+ var diffs = _comparer.Compare();
+ Differences = new ObservableCollection<Diff>(diffs);
+
+ if (diffs.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() > 0)
{
- ShowError(ex.Message);
+ ShowInfo("Found " + Differences.Where(x => x.Action != DiffAction.ReplaceTableDataInSlave).Count() + " differences.");
}
- finally
+ else
{
- _isWorking = false;
- SelectedDifference = null;
- InvalidateRelayCommands();
-
- SettingsManager.Default.MachineStudio.SynchronizationModule.RemoteSQLiteFile = _slaveDBFile;
- SettingsManager.SaveDefaultSettings();
+ ShowInfo("The master and slave databases are synchronized.");
}
}
+ catch (Exception ex)
+ {
+ ShowError(ex.Message);
+ }
+ finally
+ {
+ _isWorking = false;
+ SelectedDifference = null;
+ InvalidateRelayCommands();
+
+ SettingsManager.Default.MachineStudio.SynchronizationModule.RemoteSQLiteFile = SlaveDBFile;
+ SettingsManager.SaveDefaultSettings();
+ }
}
});
}
@@ -177,6 +255,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
InvalidateRelayCommands();
Thread.Sleep(1500);
SelectedDifference.Commit();
+ _remoteDB.SaveChanges();
+ _localDB.SaveChanges();
InvokeUINow(() => Differences.Remove(SelectedDifference));
}
@@ -216,6 +296,20 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
i--;
}
}
+
+ _remoteDB.SaveChanges();
+ _localDB.SaveChanges();
+ }
+ catch (DbEntityValidationException ex)
+ {
+ String message = "The following validation errors occurred while trying to update the database." + Environment.NewLine + Environment.NewLine;
+
+ foreach (var error in ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).ToList())
+ {
+ message += error.ErrorMessage + Environment.NewLine;
+ }
+
+ ShowError(message);
}
catch (Exception ex)
{
@@ -236,7 +330,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
String file = BrowseForFilePath();
if (file != null)
{
- _slaveDBFile = file;
+ SlaveDBFile = file;
SlaveDBName = Path.GetFileName(file);
InvalidateRelayCommands();
}
@@ -264,6 +358,15 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
InvokeUINow(() => _notification.ShowInfo(message));
}
+ public Task<bool> OnShutdownRequest()
+ {
+ if (_comparer != null)
+ {
+ _comparer.Dispose();
+ }
+ return Task.FromResult(true);
+ }
+
#endregion
}
}