private void DoMigrate(IServerConnection source, IServerConnection target, string resourceId, string[] dependentResourceIds, bool overwrite) { var diag = new ProgressDialog(); diag.CancelAbortsThread = true; var method = new ProgressDialog.DoBackgroundWork((worker, e, args) => { var src = (IServerConnection)args[0]; var dst = (IServerConnection)args[1]; var resId = (string)args[2]; var dependents = (string[])args[3]; var overwriteExisting = (bool)args[4]; var cb = new LengthyOperationProgressCallBack((sender, cbe) => { worker.ReportProgress(cbe.Progress, cbe.StatusMessage); }); var migrator = new ResourceMigrator(source, target); migrator.MigrateResource(resId, dependentResourceIds, overwriteExisting, cb); return(true); }); diag.RunOperationAsync(Workbench.Instance, method, source, target, resourceId, dependentResourceIds, overwrite); }
public void ResourceMigratorTest() { var source = new Mock <IServerConnection>(); var target = new Mock <IServerConnection>(); Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(null, null)); Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(source.Object, null)); Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(null, target.Object)); var mig = new ResourceMigrator(source.Object, target.Object); Assert.NotNull(mig.Source); Assert.NotNull(mig.Target); }
private static int DoMigrate(OSGeo.MapGuide.MaestroAPI.IServerConnection source, OSGeo.MapGuide.MaestroAPI.IServerConnection target, CopyMoveToServerDialog migrate) { var diag = new ProgressDialog(); diag.CancelAbortsThread = true; var method = new ProgressDialog.DoBackgroundWork((worker, e, args) => { var src = (IServerConnection)args[0]; var dst = (IServerConnection)args[1]; var ids = (string[])args[2]; var folder = (string)args[3]; var overwrite = (bool)args[4]; var act = (MigrationAction)args[5]; var cb = new LengthyOperationProgressCallBack((sender, cbe) => { worker.ReportProgress(cbe.Progress, cbe.StatusMessage); }); var migrator = new ResourceMigrator(source, target); int affected = 0; switch (act) { case MigrationAction.Copy: affected = migrator.CopyResources(ids, folder, overwrite, cb); break; case MigrationAction.Move: affected = migrator.MoveResources(ids, folder, overwrite, cb); break; } return(affected); }); return((int)diag.RunOperationAsync(Workbench.Instance, method, source, target, migrate.SourceResourceIds, migrate.TargetFolder, migrate.OverwriteResources, migrate.SelectedAction)); }
public void CopyResourcesWithOverwriteTest() { var sr = new Mock <IResourceService>(); var tr = new Mock <IResourceService>(); var tc = new Mock <IConnectionCapabilities>(); tc.Setup(c => c.GetMaxSupportedResourceVersion(It.IsAny <string>())).Returns(new Version(1, 0, 0)); var source = new Mock <IServerConnection>(); var target = new Mock <IServerConnection>(); var emptyDataList = new ResourceDataList() { ResourceData = new System.ComponentModel.BindingList <ResourceDataListResourceData>() }; string [] resources = { "Library://Test/Data.FeatureSource", "Library://Test/Data1.FeatureSource", "Library://Test/Data2.FeatureSource", "Library://Test/Data3.FeatureSource", "Library://Test/Data4.FeatureSource", }; var res1 = new Mock <IResource>(); var res2 = new Mock <IResource>(); var res3 = new Mock <IResource>(); var res4 = new Mock <IResource>(); var res5 = new Mock <IResource>(); res1.Setup(r => r.ResourceID).Returns(resources[0]); res2.Setup(r => r.ResourceID).Returns(resources[1]); res3.Setup(r => r.ResourceID).Returns(resources[2]); res4.Setup(r => r.ResourceID).Returns(resources[3]); res5.Setup(r => r.ResourceID).Returns(resources[4]); sr.Setup(r => r.EnumerateResourceData(It.IsAny <string>())).Returns(emptyDataList); sr.Setup(r => r.GetResource(resources[0])).Returns(res1.Object); sr.Setup(r => r.GetResource(resources[1])).Returns(res2.Object); sr.Setup(r => r.GetResource(resources[2])).Returns(res3.Object); sr.Setup(r => r.GetResource(resources[3])).Returns(res4.Object); sr.Setup(r => r.GetResource(resources[4])).Returns(res5.Object); //tr.Setup(r => r.ResourceExists(It.IsAny<string>())).Returns(false); source.Setup(c => c.ResourceService).Returns(sr.Object); target.Setup(c => c.ResourceService).Returns(tr.Object); target.Setup(c => c.Capabilities).Returns(tc.Object); var mig = new ResourceMigrator(source.Object, target.Object); Assert.NotNull(mig.Source); Assert.NotNull(mig.Target); int migrated = mig.CopyResources(resources, "Library://Migrated/", true, null); Assert.Equal(5, migrated); sr.Verify(c => c.GetResource(resources[0]), Times.Once); sr.Verify(c => c.GetResource(resources[1]), Times.Once); sr.Verify(c => c.GetResource(resources[2]), Times.Once); sr.Verify(c => c.GetResource(resources[3]), Times.Once); sr.Verify(c => c.GetResource(resources[4]), Times.Once); sr.Verify(c => c.EnumerateResourceData(resources[0]), Times.Once); sr.Verify(c => c.EnumerateResourceData(resources[1]), Times.Once); sr.Verify(c => c.EnumerateResourceData(resources[2]), Times.Once); sr.Verify(c => c.EnumerateResourceData(resources[3]), Times.Once); sr.Verify(c => c.EnumerateResourceData(resources[4]), Times.Once); tr.Verify(c => c.SaveResourceAs(It.IsAny <IResource>(), It.IsAny <string>()), Times.Exactly(5)); }
internal string[] CopyResourcesToFolder(RepositoryHandle[] data, string targetConnectionName, string folderId) { string rootSourceParent = GetCommonParent(data); //There is an implicit assumption here that all items dropped come from the same connection var sourceConn = data.First().Connection; var targetConn = _connManager.GetConnection(targetConnectionName); var migrator = new ResourceMigrator(sourceConn, targetConn); //Collect all source ids var sourceIds = new List <string>(); foreach (var resId in data.Select(x => x.ResourceId.ToString())) { if (ResourceIdentifier.IsFolderResource(resId)) { sourceIds.AddRange(GetFullResourceList(sourceConn, resId)); } else { sourceIds.Add(resId); } } var targets = new List <string>(); foreach (var resId in sourceIds) { var dstId = resId.Replace(rootSourceParent, folderId); System.Diagnostics.Trace.TraceInformation($"{resId} => {dstId}"); //NOXLATE targets.Add(dstId); } bool overwrite = true; var existing = new List <string>(); foreach (var resId in targets) { if (targetConn.ResourceService.ResourceExists(resId)) { existing.Add(resId); } } if (existing.Count > 0) { overwrite = MessageService.AskQuestion(string.Format(Strings.PromptOverwriteOnTargetConnection, existing.Count)); } var wb = Workbench.Instance; var dlg = new ProgressDialog(); var worker = new ProgressDialog.DoBackgroundWork((w, evt, args) => { LengthyOperationProgressCallBack cb = (s, cbe) => { w.ReportProgress(cbe.Progress, cbe.StatusMessage); }; return(migrator.CopyResources(sourceIds.ToArray(), targets.ToArray(), overwrite, new RebaseOptions(rootSourceParent, folderId), cb)); }); var result = (string[])dlg.RunOperationAsync(wb, worker); RefreshModel(targetConn.DisplayName, folderId); ExpandNode(targetConn.DisplayName, folderId); return(result); }