/// <summary> /// Loads the model. /// </summary> public void LoadModel() { Dataservices = DataContextObject.Services; var providerFactory = new DataproviderFactory(Dataservices); providerFactory.InitDataProvider(); Feedback = string.Format(@"Press ""{0}"" to begin", ButtonCaption); Application.Current.DoEvents(); Feedback = String.Empty; using (var conn = Dataservices.ConnectionFactory()) { try { using (var cmd = conn.CreateCommand()) { cmd.CommandText = string.Format("select count(*) from [{0}]", Dataservices.Configuration.SelectFrom); conn.Open(); var temp = (int)cmd.ExecuteScalar(); CurrentProgress = new ProgressState(0, temp); // TODO: based on line count and then perform multi-threading for validating and importing dataset. } } finally { conn.Close(); } } }
public void LoadModel() { Dataservices = DataContextObject.Services; DataSetName = DataContextObject.SelectedDataType.DataTypeName; DataSetDate = DataContextObject.Entry.TimePeriod; CurrentProgress = new ProgressState(0, DataContextObject.TargetsToImport.Count); var fi = new FileInfo(DataContextObject.DatasourceDefinition.CurrentFile); FileSize = fi.Length; FileName = DataContextObject.DatasourceDefinition.CurrentFile; DatabaseErrorMessages = 0; RunImport(); }
/// <summary> /// For when yous need to set up some values that can't be directly bound to UI elements. /// </summary> public override void BeforeShow() { _isLoading = true; Dataservices = DataContextObject.Services; var providerFactory = new DataproviderFactory(Dataservices); providerFactory.InitDataProvider(); var stage = new ImportStageModel(providerFactory); var temp = stage.SourceFields.Select(fld => new MOriginalField { Name = fld.Name, Values = new ObservableCollection <string>(stage.GetColumnValues(fld.Name, true)), FieldOrder = fld.Order }).ToList(); var original = new ObservableCollection <MOriginalField>(temp); var factory = ServiceLocator.Current.GetInstance <IDomainSessionFactoryProvider>().SessionFactory; int positionIndex = 0; using (var session = factory.OpenSession()) { DataContextObject.TargetElements = session.Query <Element>() .Where(elem => elem.Owner.Id == DataContextObject.SelectedDataType.Target.Id) .ToList(); } var targetFields = DataContextObject.TargetElements .Where(ElementFilter) .Select(elem => new MTargetField(elem, original) { Position = positionIndex++, IsRequired = elem.IsRequired }) .ToList(); //TargetFields = MakeView(targetFields); DataTypeRequiredFieldCount = MappedFieldsCount = targetFields.Count(f => f.IsRequired); TargetFields = new ListCollectionView(targetFields); SourceFields = MakeView(temp); TotalSourceFields = SourceFields.Count; //ReconcileTargets(); ReconcileTargets2(); foreach (var f in SourceFields.OfType <MOriginalField>()) { f.MappingChanged += f_MappingChanged2; } FilterText = string.Empty; ShowEnumeration = new ObservableCollection <string> { ALL, AUTOMAPPED, MAPPED, UNMAPPED }; SelectedShow = ShowEnumeration[0]; FieldSortOrder = new ObservableCollection <string> { ORDER, NAME }; SelectedSortOrder = FieldSortOrder[0]; TargetFieldModels.ToList().Clear(); var newList = TargetFieldModels.Where(field => !SourceFields.OfType <MOriginalField>() .ToList() .Any(f => f.TargetField != null && f.TargetField.Name.EqualsIgnoreCase(field.Name))) .ToList(); _targetFields = new ListCollectionView(newList); var requiredFields = TargetFieldModels.Where(f => f.IsRequired).OrderBy(f => f.Name).ToList(); RequiredTargetFields = new ListCollectionView(requiredFields) { CustomSort = new MTargetFieldComparer() }; var optionalFields = TargetFieldModels.Where(f => !f.IsRequired).OrderBy(f => f.Name).ToList(); OptionalTargetFields = new ListCollectionView(optionalFields) { CustomSort = new MTargetFieldComparer() }; _isLoading = false; }
/// <summary> /// Perform file operation when loaded /// </summary> public void Loaded() { Dataservices = DataContextObject.Services; var providerFactory = new DataproviderFactory(Dataservices); providerFactory.InitDataProvider(); InitModel(); if (DataContextObject.Histogram != null) { return; } var worker = new BackgroundWorker(); var sync = new object(); var interimProgress = new ProgressState(0, CurrentProgress.Total); Action notifyAction = () => { { lock (sync) { CurrentProgress = interimProgress; Status = string.Format("Progress: {0}", interimProgress.Ratio.ToString("P0")); } } }; var timer = new Timer((state) => { NotifyProgress(this, new ExtendedEventArgs <Action>(notifyAction)); }, null, 1, 1000); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.DoWork += (o, e) => { RunWorker(worker, e); }; worker.ProgressChanged += (o, e) => { var temp = (e.UserState as ProgressState) ?? ProgressState.Empty; if (temp.Current > interimProgress.Current) { lock (sync) { interimProgress = temp; } } }; worker.RunWorkerCompleted += (o, e) => { _isValid = !Cancelled; timer.Dispose(); timer = null; NotifyProgress(this, new ExtendedEventArgs <Action>(notifyAction)); if (_isValid) { Verified(this, EventArgs.Empty); } OnPropertyChanged(); // WPF CommandManager periodically calls IsValid to see if the Next/Done button should be enabled. // In multi-threaded wizard steps, IsValid returns the value of the Done flag. Call InvalidateRequerySuggested here // on the UI thread after setting the Done flag to force WPF to call IsValid now so the Next/Done button will become enabled. //Application.Current.DoEvents(); CommandManager.InvalidateRequerySuggested(); }; ServiceLocator.Current.GetInstance <IEventAggregator>() .GetEvent <WizardCancelEvent>().Subscribe(evnt => { Cancelled = true; if (worker.CancellationPending) { return; } worker.CancelAsync(); }); ServiceLocator.Current.GetInstance <IEventAggregator>() .GetEvent <WizardBackEvent>().Subscribe(evnt => { Cancelled = true; if (worker.CancellationPending) { return; } worker.CancelAsync(); }); worker.RunWorkerAsync(new Func <ProgressState>(() => interimProgress)); Thread.Sleep(0); }
/// <summary> /// Initializes a new instance of the <see cref="DataproviderFactory"/> class. /// </summary> /// <param name="services">The services.</param> public DataproviderFactory(IDataContextServices services) { Services = services; }