aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-02-20 16:45:00 +0200
committerAvi Levkovich <avi@twine-s.com>2018-02-20 16:45:00 +0200
commit6c208c90bc45aff4a7fa214356a42fe7757c5e6f (patch)
tree0d77bc6a0ecfbb53cf42c5462ee19212197ee1bd /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization
parentb0823127f152fe97a6e8fce29e427c7f3db9cf5a (diff)
parent1a573aaa346ec4b8bd58a0e35ab9df571a09b855 (diff)
downloadTango-6c208c90bc45aff4a7fa214356a42fe7757c5e6f.tar.gz
Tango-6c208c90bc45aff4a7fa214356a42fe7757c5e6f.zip
MERGE
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/AutoComplete/MachinesProvider.cs11
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/SyncNavigationManager.cs7
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/SynchronizationModule.cs54
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj4
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs53
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/LocalSynchronizationViewVM.cs53
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs42
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MenuViewVM.cs17
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/RemoteSynchronizationViewVM.cs55
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml122
11 files changed, 294 insertions, 127 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/AutoComplete/MachinesProvider.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/AutoComplete/MachinesProvider.cs
index 887cb842d..e9d205bed 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/AutoComplete/MachinesProvider.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/AutoComplete/MachinesProvider.cs
@@ -5,12 +5,21 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.AutoComplete.Editors;
-using Tango.DAL.Observables;
+using Tango.Integration.Observables;
namespace Tango.MachineStudio.Synchronization.AutoComplete
{
+ /// <summary>
+ /// Represents an auto-complete machines suggestions provider.
+ /// </summary>
+ /// <seealso cref="Tango.AutoComplete.Editors.ISuggestionProvider" />
public class MachinesProvider : ISuggestionProvider
{
+ /// <summary>
+ /// Gets the suggestions.
+ /// </summary>
+ /// <param name="filter">The filter.</param>
+ /// <returns></returns>
public IEnumerable GetSuggestions(string filter)
{
return ObservablesEntitiesAdapter.Instance.Machines.Where(x => x.SerialNumber.StartsWith(filter, StringComparison.CurrentCultureIgnoreCase)).ToList();
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
index d4212475c..4e846e963 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/NavigationView.cs
@@ -6,6 +6,9 @@ using System.Threading.Tasks;
namespace Tango.MachineStudio.Synchronization.Navigation
{
+ /// <summary>
+ /// Represents the available views to navigate to within the synchronization module.
+ /// </summary>
public enum NavigationView
{
MenuView,
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/SyncNavigationManager.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/SyncNavigationManager.cs
index 847fa2456..8c06418e6 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/SyncNavigationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Navigation/SyncNavigationManager.cs
@@ -7,8 +7,15 @@ using Tango.MachineStudio.Synchronization.Views;
namespace Tango.MachineStudio.Synchronization.Navigation
{
+ /// <summary>
+ /// Represents the synchronization module views navigation manager.
+ /// </summary>
public class SyncNavigationManager
{
+ /// <summary>
+ /// Navigate to the specified view.
+ /// </summary>
+ /// <param name="view">The view.</param>
public void NavigateTo(NavigationView view)
{
MainView.Instance.TransitionControl.AutoNavigate(view.ToString());
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/SynchronizationModule.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/SynchronizationModule.cs
index 039b9faf6..5292c6048 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/SynchronizationModule.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/SynchronizationModule.cs
@@ -5,42 +5,50 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;
-using Tango.DAL.Observables;
+using Tango.Integration.Observables;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Synchronization.Views;
using Tango.SharedUI.Helpers;
namespace Tango.MachineStudio.Synchronization
{
- public class SynchronizationModule : IStudioModule
+ /// <summary>
+ /// Represents a Machine Studio module capable of comparing and synchronizing machines data against Twine remote database.
+ /// </summary>
+ /// <seealso cref="Tango.MachineStudio.Common.IStudioModule" />
+ public class SynchronizationModule : StudioModuleBase
{
- private bool _isInitialized;
+ /// <summary>
+ /// Gets the module name.
+ /// </summary>
+ public override string Name => "Synchronization";
- public string Name => "Synchronization";
+ /// <summary>
+ /// Gets the module description.
+ /// </summary>
+ public override string Description => "Perform local to local or remote to local database synchronization.";
- public string Description => "Perform local to local or remote to local database synchronization.";
+ /// <summary>
+ /// Gets the module cover image.
+ /// </summary>
+ public override BitmapSource Image => ResourceHelper.GetImageFromResources("Images/synchronization.jpg");
- public BitmapSource Image => ResourceHelper.GetImageFromResources("Images/synchronization.jpg");
+ /// <summary>
+ /// Gets the module entry point view.
+ /// </summary>
+ public override FrameworkElement MainView => new MainView();
- public FrameworkElement MainView => new MainView();
+ /// <summary>
+ /// Gets the permission required to see and load this module.
+ /// </summary>
+ public override Permissions Permission => Permissions.RunSynchronizationModule;
- public bool IsInitialized => _isInitialized;
-
- public Permissions Permission => Permissions.RunSynchronizationModule;
-
- public void Dispose()
- {
- //Dispose...
- }
-
- public void Initialize()
+ /// <summary>
+ /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+ /// </summary>
+ public override void Dispose()
{
- if (!_isInitialized)
- {
- //Initialize..
-
- _isInitialized = true;
- }
+
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
index 3c03f1e48..2a95dc082 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Tango.MachineStudio.Synchronization.csproj
@@ -193,10 +193,6 @@
<Project>{0e0eef3e-8f4e-4f23-9d19-479fd8d76c12}</Project>
<Name>Tango.DAL.Local</Name>
</ProjectReference>
- <ProjectReference Include="..\..\..\Tango.DAL.Observables\Tango.DAL.Observables.csproj">
- <Project>{0ecd6da8-7aa6-48d9-8b65-279d176ad9af}</Project>
- <Name>Tango.DAL.Observables</Name>
- </ProjectReference>
<ProjectReference Include="..\..\..\Tango.DAL.Remote\Tango.DAL.Remote.csproj">
<Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project>
<Name>Tango.DAL.Remote</Name>
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
index 3f8772f0e..070beefa6 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs
@@ -1,4 +1,5 @@
using Google.Protobuf;
+using Microsoft.Practices.ServiceLocation;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -10,7 +11,7 @@ using System.Threading;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.Core.Helpers;
-using Tango.DAL.Observables;
+using Tango.Integration.Observables;
using Tango.Integration.Services;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.StudioApplication;
@@ -23,6 +24,10 @@ using Tango.Synchronization.Remote;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
+ /// <summary>
+ /// Represents the 'Direct Synchronization' view model.
+ /// </summary>
+ /// <seealso cref="Tango.SharedUI.ViewModel" />
public class DirectSynchronizationViewVM : ViewModel
{
private SyncNavigationManager _navigation;
@@ -31,9 +36,16 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
private LocalDBComparer _comparer;
private INotificationProvider _notification;
private String _comparedSerialNumber;
+ private MainViewVM _mainView;
- public IStudioApplicationManager ApplicationManager { get; set; }
+ #region Constructors
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DirectSynchronizationViewVM"/> class.
+ /// </summary>
+ /// <param name="applicationManager">The application manager.</param>
+ /// <param name="navigation">The navigation.</param>
+ /// <param name="notification">The notification.</param>
public DirectSynchronizationViewVM(IStudioApplicationManager applicationManager, SyncNavigationManager navigation, INotificationProvider notification)
{
ApplicationManager = applicationManager;
@@ -49,6 +61,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
CommitAllCommand = new RelayCommand(Synchronize, (x) => Differences.Count > 0 && !IsWorking && SelectedMachine != null);
}
+ #endregion
+
#region Commands
/// <summary>
@@ -90,6 +104,8 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
#region Properties
+ public IStudioApplicationManager ApplicationManager { get; set; }
+
private bool _isWorking;
/// <summary>
/// Gets or sets a value indicating whether this instance is working.
@@ -146,11 +162,29 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
#endregion
+ #region Event Handlers
+
+ private void Comparer_Progress(object sender, string e)
+ {
+ if (_mainView == null)
+ {
+ _mainView = ServiceLocator.Current.GetInstance<MainViewVM>();
+ _mainView.Log = String.Empty;
+ }
+
+ _mainView.Log += ("[" + DateTime.Now.ToTimeString() + "] " + e + Environment.NewLine);
+ }
+
+ #endregion
+
#region Private Methods
+ /// <summary>
+ /// Compares the selected machine against the remote database.
+ /// </summary>
private void Compare()
{
- if (SelectedMachine.SerialNumber != ApplicationManager.ConnectedMachine.SerialNumber)
+ if (SelectedMachine.SerialNumber != ApplicationManager.ConnectedMachine.As<ExternalBridgeTcpClient>().SerialNumber)
{
if (!_notification.ShowQuestion("The selected machine serial number does not match the connected machine. Are you sure you want to continue?"))
{
@@ -195,6 +229,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
using (_notification.PushTaskItem("Comparing database..."))
{
_comparer = new LocalDBComparer(new SQLiteDataBase(_masterDBFile), new SQLiteDataBase(_slaveDBFile));
+ _comparer.Progress += Comparer_Progress;
var diffs = _comparer.Compare();
Differences = new ObservableCollection<Diff>(diffs);
@@ -236,6 +271,10 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+
+ /// <summary>
+ /// Synchronizes the selected machine with the remote database.
+ /// </summary>
private void Synchronize()
{
if (IsClearMachine)
@@ -313,11 +352,19 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Displays an error message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowError(String message)
{
InvokeUINow(() => _notification.ShowError(message));
}
+ /// <summary>
+ /// Displays an information message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowInfo(String message)
{
InvokeUINow(() => _notification.ShowInfo(message));
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 9c805cca4..2621f622a 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
@@ -1,4 +1,5 @@
-using Microsoft.Win32;
+using Microsoft.Practices.ServiceLocation;
+using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -19,6 +20,10 @@ using Tango.Synchronization.Local;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
+ /// <summary>
+ /// Represents the 'Local Synchronization' view model.
+ /// </summary>
+ /// <seealso cref="Tango.SharedUI.ViewModel" />
public class LocalSynchronizationViewVM : ViewModel
{
private SyncNavigationManager _navigation;
@@ -27,6 +32,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
private LocalDBComparer _comparer;
private INotificationProvider _notification;
private bool _isWorking;
+ private MainViewVM _mainView;
#region Constructors
@@ -166,8 +172,26 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
#endregion
+ #region Event Handlers
+
+ private void Comparer_Progress(object sender, string e)
+ {
+ if (_mainView == null)
+ {
+ _mainView = ServiceLocator.Current.GetInstance<MainViewVM>();
+ _mainView.Log = String.Empty;
+ }
+
+ _mainView.Log += ("[" + DateTime.Now.ToTimeString() + "] " + e + Environment.NewLine);
+ }
+
+ #endregion
+
#region Private Methods
+ /// <summary>
+ /// Cleans the slave database.
+ /// </summary>
private async void CleanSlave()
{
if (_notification.ShowQuestion("Are you sure you want to erase all data on slave database?"))
@@ -205,9 +229,13 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
}
}
+ /// <summary>
+ /// Compares the master and slave database files.
+ /// </summary>
private void Compare()
{
_comparer = new LocalDBComparer(new SQLiteDataBase(MasterDBFile), new SQLiteDataBase(SlaveDBFile));
+ _comparer.Progress += Comparer_Progress;
Task.Factory.StartNew(() =>
{
@@ -248,6 +276,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Commits the selected difference.
+ /// </summary>
private void Commit()
{
Task.Factory.StartNew(() =>
@@ -277,6 +308,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Commits all the differences.
+ /// </summary>
private void CommitAll()
{
Task.Factory.StartNew(() =>
@@ -314,6 +348,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Browse for slave database file.
+ /// </summary>
private void BrowseSlaveDB()
{
String file = BrowseForFilePath();
@@ -325,6 +362,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
}
}
+ /// <summary>
+ /// Browse for master database file.
+ /// </summary>
private void BrowseMasterDB()
{
String file = BrowseForFilePath();
@@ -336,6 +376,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
}
}
+ /// <summary>
+ /// Browse for database file.
+ /// </summary>
private String BrowseForFilePath()
{
OpenFileDialog dlg = new OpenFileDialog();
@@ -348,11 +391,19 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
return null;
}
+ /// <summary>
+ /// Displays an error message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowError(String message)
{
InvokeUINow(() => _notification.ShowError(message));
}
+ /// <summary>
+ /// Displays an information message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowInfo(String message)
{
InvokeUINow(() => _notification.ShowInfo(message));
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
index c392aee1a..987b9ac4d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/MainViewVM.cs
@@ -8,17 +8,18 @@ using Tango.SharedUI;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
+ /// <summary>
+ /// Represents the synchronization module main view, view model.
+ /// </summary>
+ /// <seealso cref="Tango.SharedUI.ViewModel" />
public class MainViewVM : ViewModel
{
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MainViewVM"/> class.
+ /// </summary>
public MainViewVM()
{
- MainViewLogger logger = new MainViewLogger();
- logger.NewLog += (output) =>
- {
- Log += output + Environment.NewLine;
- };
-
- LogManager.RegisterLogger(logger);
+ Log = "Synchronization module started...";
}
private String _log;
@@ -30,32 +31,5 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
get { return _log; }
set { _log = value; RaisePropertyChanged(nameof(Log)); }
}
-
- #region Custom Logger
-
- public class MainViewLogger : ILogger
- {
- public bool Enabled { get; set; }
- public bool Immediate { get; set; }
- public event Action<String> NewLog;
-
- public MainViewLogger()
- {
- Enabled = true;
- Immediate = true;
- }
-
- public void OnError(LogItemBase output)
- {
- NewLog?.Invoke(output.TimeStamp.ToTimeString() + ": " + output.GetMessage());
- }
-
- public void OnTrace(LogItemBase output)
- {
- NewLog?.Invoke(output.TimeStamp.ToTimeString() + ": " + output.GetMessage());
- }
- }
-
- #endregion
}
}
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 0fe510f36..efc6ec900 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
@@ -9,10 +9,18 @@ using Tango.SharedUI;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
+ /// <summary>
+ /// Represents the synchronization module main menu view, view model.
+ /// </summary>
+ /// <seealso cref="Tango.SharedUI.ViewModel" />
public class MenuViewVM : ViewModel
{
private SyncNavigationManager _navigation;
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MenuViewVM"/> class.
+ /// </summary>
+ /// <param name="navigation">The navigation.</param>
public MenuViewVM(SyncNavigationManager navigation)
{
_navigation = navigation;
@@ -22,10 +30,19 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
StartDirectRemoteSyncCommand = new RelayCommand(() => { _navigation.NavigateTo(NavigationView.DirectSynchronizationView); });
}
+ /// <summary>
+ /// Gets or sets the start local synchronize command.
+ /// </summary>
public RelayCommand StartLocalSyncCommand { get; set; }
+ /// <summary>
+ /// Gets or sets the start remote synchronize command.
+ /// </summary>
public RelayCommand StartRemoteSyncCommand { get; set; }
+ /// <summary>
+ /// Gets or sets the start direct remote synchronize command.
+ /// </summary>
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 e14b0ffb9..0f427643f 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
@@ -10,7 +10,7 @@ using System.Threading;
using System.Threading.Tasks;
using Tango.Core.Commands;
using Tango.DAL.Local.DB;
-using Tango.DAL.Observables;
+using Tango.Integration.Observables;
using Tango.DAL.Remote.DB;
using Tango.Logging;
using Tango.MachineStudio.Common.Notifications;
@@ -21,9 +21,15 @@ using Tango.SharedUI;
using Tango.Synchronization;
using Tango.Synchronization.Local;
using Tango.Synchronization.Remote;
+using Microsoft.Practices.ServiceLocation;
namespace Tango.MachineStudio.Synchronization.ViewModels
{
+ /// <summary>
+ /// Represents the 'Semi Remote Synchronization' view model.
+ /// </summary>
+ /// <seealso cref="Tango.SharedUI.ViewModel" />
+ /// <seealso cref="Tango.MachineStudio.Common.StudioApplication.IShutdownRequestBlocker" />
public class RemoteSynchronizationViewVM : ViewModel, IShutdownRequestBlocker
{
private SyncNavigationManager _navigation;
@@ -33,6 +39,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
private RemoteDBComparer _comparer;
private RemoteDB _remoteDB;
private LocalDB _localDB;
+ private MainViewVM _mainView;
#region Constructors
@@ -104,6 +111,21 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
#endregion
+ #region Event Handlers
+
+ private void Comparer_Progress(object sender, string e)
+ {
+ if (_mainView == null)
+ {
+ _mainView = ServiceLocator.Current.GetInstance<MainViewVM>();
+ _mainView.Log = String.Empty;
+ }
+
+ _mainView.Log += ("[" + DateTime.Now.ToTimeString() + "] " + e + Environment.NewLine);
+ }
+
+ #endregion
+
#region Properties
private ObservableCollection<Diff> _differences;
@@ -158,6 +180,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
#region Private Methods
+ /// <summary>
+ /// Cleans the slave database file.
+ /// </summary>
private async void CleanSlave()
{
if (_notification.ShowQuestion("Are you sure you want to erase all data on slave database?"))
@@ -195,6 +220,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
}
}
+ /// <summary>
+ /// Compares the remote database with the selected database file.
+ /// </summary>
private void Compare()
{
Task.Factory.StartNew(() =>
@@ -211,6 +239,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
_remoteDB = RemoteDB.CreateDefault();
_localDB = new LocalDB(SlaveDBFile);
_comparer = new RemoteDBComparer(_remoteDB, _localDB, SelectedMachine.SerialNumber);
+ _comparer.Progress += Comparer_Progress;
_isWorking = true;
InvalidateRelayCommands();
Thread.Sleep(1500);
@@ -243,6 +272,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Commits the selected difference.
+ /// </summary>
private void Commit()
{
Task.Factory.StartNew(() =>
@@ -274,6 +306,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Commits all the differences.
+ /// </summary>
private void CommitAll()
{
Task.Factory.StartNew(() =>
@@ -325,6 +360,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
});
}
+ /// <summary>
+ /// Browse for slave database file.
+ /// </summary>
private void BrowseSlaveDB()
{
String file = BrowseForFilePath();
@@ -336,6 +374,9 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
}
}
+ /// <summary>
+ /// Browse for database file.
+ /// </summary>
private String BrowseForFilePath()
{
OpenFileDialog dlg = new OpenFileDialog();
@@ -348,16 +389,28 @@ namespace Tango.MachineStudio.Synchronization.ViewModels
return null;
}
+ /// <summary>
+ /// Displays an error message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowError(String message)
{
InvokeUINow(() => _notification.ShowError(message));
}
+ /// <summary>
+ /// Displays an information message.
+ /// </summary>
+ /// <param name="message">The message.</param>
private void ShowInfo(String message)
{
InvokeUINow(() => _notification.ShowInfo(message));
}
+ /// <summary>
+ /// Called when the application is shutting down.
+ /// </summary>
+ /// <returns></returns>
public Task<bool> OnShutdownRequest()
{
if (_comparer != null)
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
index 67501743b..b7f37b022 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/Views/MenuView.xaml
@@ -10,74 +10,76 @@
d:DesignHeight="720" d:DesignWidth="1280" DataContext="{x:Static global:ViewModelLocator.MenuViewVM}">
<Grid>
<Grid>
- <UniformGrid Columns="3">
- <Grid VerticalAlignment="Center">
- <StackPanel>
- <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
- <TextBlock TextAlignment="Center" FontSize="25">Local Synchronization</TextBlock>
- <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize two SQLite local database files.</TextBlock>
- </StackPanel>
- <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
- <Grid Width="450">
- <StackPanel>
- <StackPanel Orientation="Horizontal">
- <Image Source="../Images/sqlite.png" Width="160"></Image>
- <Image Source="../Images/arrow_right.png" Width="100" RenderTransformOrigin="0.5,0.5"></Image>
- <Image Source="../Images/sqlite.png" Width="130"></Image>
+ <Viewbox MaxWidth="1600">
+ <UniformGrid Columns="3">
+ <Grid VerticalAlignment="Center">
+ <StackPanel>
+ <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
+ <TextBlock TextAlignment="Center" FontSize="25">Local Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize two SQLite local database files.</TextBlock>
+ </StackPanel>
+ <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
+ <Grid Width="450">
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <Image Source="../Images/sqlite.png" Width="160"></Image>
+ <Image Source="../Images/arrow_right.png" Width="100" RenderTransformOrigin="0.5,0.5"></Image>
+ <Image Source="../Images/sqlite.png" Width="130"></Image>
+ </StackPanel>
+
+ <Button Command="{Binding StartLocalSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
</StackPanel>
+ </Grid>
+ </Viewbox>
+ </StackPanel>
+ </Grid>
- <Button Command="{Binding StartLocalSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
- </StackPanel>
- </Grid>
- </Viewbox>
- </StackPanel>
- </Grid>
+ <Grid VerticalAlignment="Center">
+ <StackPanel>
+ <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
+ <TextBlock TextAlignment="Center" FontSize="25">Direct Remote Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Connect and synchronized a Tango machine over the network.</TextBlock>
+ </StackPanel>
+ <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
+ <Grid Width="450">
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <Image Source="../Images/remote-db.png" Width="200"></Image>
+ <Image Source="../Images/arrow_right.png" Width="100"></Image>
+ <Image Source="../Images/machine-trans.png" Width="120"></Image>
+ </StackPanel>
- <Grid VerticalAlignment="Center">
- <StackPanel>
- <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
- <TextBlock TextAlignment="Center" FontSize="25">Direct Remote Synchronization</TextBlock>
- <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Connect and synchronized a Tango machine over the network.</TextBlock>
- </StackPanel>
- <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
- <Grid Width="450">
- <StackPanel>
- <StackPanel Orientation="Horizontal">
- <Image Source="../Images/remote-db.png" Width="200"></Image>
- <Image Source="../Images/arrow_right.png" Width="100"></Image>
- <Image Source="../Images/machine-trans.png" Width="120"></Image>
+ <Button Command="{Binding StartDirectRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
</StackPanel>
+ </Grid>
+ </Viewbox>
+ </StackPanel>
+ </Grid>
- <Button Command="{Binding StartDirectRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
- </StackPanel>
- </Grid>
- </Viewbox>
- </StackPanel>
- </Grid>
+ <Grid VerticalAlignment="Center">
+ <StackPanel>
+ <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
+ <TextBlock TextAlignment="Center" FontSize="25">Semi Remote Synchronization</TextBlock>
+ <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize local SQLite database file with the remote Twine database.</TextBlock>
+ </StackPanel>
+ <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
+ <Grid Width="450">
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <Image Source="../Images/remote-db.png" Width="200"></Image>
+ <Image Source="../Images/arrow_right.png" Width="100"></Image>
+ <Image Source="../Images/sqlite.png" Width="120"></Image>
+ </StackPanel>
- <Grid VerticalAlignment="Center">
- <StackPanel>
- <StackPanel HorizontalAlignment="Center" Margin="0 0 0 30">
- <TextBlock TextAlignment="Center" FontSize="25">Semi Remote Synchronization</TextBlock>
- <TextBlock TextAlignment="Center" FontSize="14" Foreground="#303030">Synchronize local SQLite database file with the remote Twine database.</TextBlock>
- </StackPanel>
- <Viewbox RenderOptions.BitmapScalingMode="Fant" Width="400">
- <Grid Width="450">
- <StackPanel>
- <StackPanel Orientation="Horizontal">
- <Image Source="../Images/remote-db.png" Width="200"></Image>
- <Image Source="../Images/arrow_right.png" Width="100"></Image>
- <Image Source="../Images/sqlite.png" Width="120"></Image>
+ <Button Command="{Binding StartRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
</StackPanel>
+ </Grid>
+ </Viewbox>
+ </StackPanel>
+ </Grid>
- <Button Command="{Binding StartRemoteSyncCommand}" Height="80" Margin="0 20 0 0" HorizontalAlignment="Center" Padding="10" FontSize="20" Width="200">START</Button>
- </StackPanel>
- </Grid>
- </Viewbox>
- </StackPanel>
- </Grid>
-
- </UniformGrid>
+ </UniformGrid>
+ </Viewbox>
</Grid>
</Grid>
</UserControl>