Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 44855784 authored by Harald Martini's avatar Harald Martini
Browse files

added DocumentViewModelFactory, added constructor for simulation only viewmodel

parent 6e0e5671
No related branches found
No related tags found
No related merge requests found
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Ninject.Extensions.Factory;
using Ninject.Extensions.NamedScope;
using Ninject.Modules;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
using TUGraz.VectoCore.InputData.Reader;
using TUGraz.VectoCore.Utils;
using TUGraz.VectoCore.Utils.Ninject;
using VECTO3GUI2020.Helper;
using VECTO3GUI2020.Ninject.Util;
using VECTO3GUI2020.ViewModel.Implementation.Common;
using VECTO3GUI2020.ViewModel.Implementation.Document;
using VECTO3GUI2020.ViewModel.Implementation.JobEdit;
using VECTO3GUI2020.ViewModel.Interfaces.Document;
using VECTO3GUI2020.ViewModel.Interfaces.JobEdit;
using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
using VECTO3GUI2020.ViewModel.MultiStage.Interfaces;
namespace VECTO3GUI2020.Ninject
{
public class DocumentViewModelFactoryModule : NinjectModule
{
#region Overrides of NinjectModule
public const string DocumentViewModelFactoryScope = nameof(IDocumentViewModelFactory);
public const string MultistepInputScope = nameof(IMultiStepInputViewModelFactory);
public const string DeclarationViewModelScope = nameof(IDeclarationInputViewModelFactory);
public const string NewDocumentViewModelScope = nameof(INewDocumentViewModelFactory);
public const string PrimaryAndStageInputScope = nameof(IPrimaryAndStageInputViewModelFactory);
public override void Load()
{
Bind<IDocumentViewModelFactory>().To<DocumentViewModelFactory>().DefinesNamedScope(DocumentViewModelFactoryScope);
#region MultistepViewModel
Bind<IMultiStepInputViewModelFactory>().ToFactory().Named(MultistepInputScope);
Bind<IDocumentViewModel>().To<MultiStageJobViewModel_v0_1>().WhenParentNamed(MultistepInputScope);
#endregion
#region DeclarationInputData
Bind<IDeclarationInputViewModelFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
new [] {
new CombineArgumentsToNameInstanceProvider.MethodSettings() {
methods = new []{typeof(IDeclarationInputViewModelFactory).GetMethod(nameof(IDeclarationInputViewModelFactory.CreateDeclarationViewModel))},
takeArguments = 1,
combineToNameDelegate = (arguments) => {
if (arguments == null || arguments.Length < 1) {
throw new ArgumentException("Invalid number of arguments");
}
if (arguments[0] is IDeclarationInputDataProvider inputData) {
var name = $"{inputData.JobInputData.Vehicle.DataSource.SourceVersion}:{inputData.JobInputData.Vehicle.DataSource.Type}";
return name;
}
throw new ArgumentException($"Invalid argument of type {arguments[0].GetType()}");
}
},
}
)
).Named(DeclarationViewModelScope);
Bind<IDocumentViewModel>().To<SimulationOnlyDeclarationJob>().WhenParentNamed(DeclarationViewModelScope);
var StageInputXMLVersions = new [] {
new { XMLDeclarationConventionalCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE},
new { XMLDeclarationHevCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE},
new { XMLDeclarationPEVCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE},
new { XMLDeclarationExemptedCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE},
new { XMLDeclarationIepcCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE},
};
foreach (var version in StageInputXMLVersions) {
var name = $"{version.NAMESPACE_URI.GetVersionFromNamespaceUri()}:{version.XSD_TYPE}";
Bind<IDocumentViewModel>().To<StageInputViewModel>().WhenParentNamed(DeclarationViewModelScope)
.Named(name);
}
#endregion
#region NewViewModels
Bind<INewDocumentViewModelFactory>().ToFactory().Named(NewDocumentViewModelScope);
Bind<IDocumentViewModel>().ToConstructor<StageInputViewModel>(
constructorArgs => new StageInputViewModel(
constructorArgs.Inject<bool>(),
constructorArgs.Inject<IMultiStageViewModelFactory>(),
constructorArgs.Inject<IAdditionalJobInfoViewModel>()))
.WhenParentNamed(NewDocumentViewModelScope)
.NamedLikeFactoryMethod((INewDocumentViewModelFactory f) => f.GetCreateNewStepInputViewModel(false)); ;
Bind<IDocumentViewModel>().ToConstructor<CreateVifViewModel>(
constructorArgs => new CreateVifViewModel(
constructorArgs.Inject<bool>(),
constructorArgs.Inject<IDialogHelper>(),
constructorArgs.Inject<IXMLInputDataReader>(),
constructorArgs.Inject<IAdditionalJobInfoViewModel>()))
.WhenParentNamed(NewDocumentViewModelScope)
.NamedLikeFactoryMethod((INewDocumentViewModelFactory f) => f.GetCreateNewVifViewModel(false));
#endregion
Bind<IPrimaryAndStageInputViewModelFactory>().ToFactory().Named(PrimaryAndStageInputScope);
Bind<IDocumentViewModel>().To<CreateVifViewModel>().WhenParentNamed(PrimaryAndStageInputScope);
}
#endregion
}
}
using System;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
using TUGraz.VectoCore.Utils;
using VECTO3GUI2020.ViewModel.Interfaces.Document;
using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
using VECTO3GUI2020.Views.Multistage;
namespace VECTO3GUI2020.ViewModel.Implementation.Document
{
public class DocumentViewModelFactory : IDocumentViewModelFactory
{
private readonly IMultiStepInputViewModelFactory _multistepInputFactory;
private readonly IDeclarationInputViewModelFactory _declarationInputViewModelFactory;
private readonly INewDocumentViewModelFactory _newDocumentViewModelFactory;
private readonly IPrimaryAndStageInputViewModelFactory _primaryAndStageViewModelFactory;
public DocumentViewModelFactory(
IMultiStepInputViewModelFactory multiStepInputFactory,
IDeclarationInputViewModelFactory declarationInputViewModelFactory,
INewDocumentViewModelFactory newDocumentViewModelFactory,
IPrimaryAndStageInputViewModelFactory primaryAndStageFactory)
{
_multistepInputFactory = multiStepInputFactory;
_declarationInputViewModelFactory = declarationInputViewModelFactory;
_newDocumentViewModelFactory = newDocumentViewModelFactory;
_primaryAndStageViewModelFactory = primaryAndStageFactory;
}
public IDocumentViewModel CreateDocumentViewModel(IInputDataProvider inputData)
{
switch (inputData)
{
case IMultistepBusInputDataProvider multiStep:
return CreateMultistageViewModel(multiStep);
case IMultistageVIFInputData createVifInput:
return CreateVifViewModel(createVifInput);
case IMultistagePrimaryAndStageInputDataProvider primaryAndStep:
return CreatePrimaryAndStageDocumentViewModel(primaryAndStep);
case IDeclarationInputDataProvider declarationInputDataProvider:
return CreateDeclarationInputDocumentViewModel(declarationInputDataProvider);
}
throw new Exception($"{inputData.DataSource.SourceFile} could not be opened");
}
/// <summary>
/// Attempts the creation of a viewmodel for the provided input data, in case no matching binding is found, a <see cref="SimulationOnlyDeclarationJob"/> is created, to allow simulation but no editing
/// </summary>
/// <param name="declarationInputDataProvider"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
private IDocumentViewModel CreateDeclarationInputDocumentViewModel(IDeclarationInputDataProvider declarationInputDataProvider)
{
return _declarationInputViewModelFactory.CreateDeclarationViewModel(declarationInputDataProvider);
}
private IDocumentViewModel CreatePrimaryAndStageDocumentViewModel(IMultistagePrimaryAndStageInputDataProvider primaryAndStep)
{
return _primaryAndStageViewModelFactory.CreateDeclarationViewModel(primaryAndStep);
}
private IDocumentViewModel CreateMultistageViewModel(IMultistepBusInputDataProvider inputData)
{
return _multistepInputFactory.CreateMultistepViewModel(inputData);
}
/// <summary>
/// Viewmodel to create VIF out of VIF + step input
/// </summary>
/// <returns></returns>
private IDocumentViewModel CreateVifViewModel(IMultistageVIFInputData createVif)
{
throw new NotImplementedException();
}
public IDocumentViewModel GetCreateNewStepInputViewModel(bool exemptedVehicle)
{
return _newDocumentViewModelFactory.GetCreateNewStepInputViewModel(exemptedVehicle);
}
public IDocumentViewModel GetCreateNewVifViewModel(bool completed)
{
return _newDocumentViewModelFactory.GetCreateNewVifViewModel(completed);
}
//public IDocumentViewModel GetCreateNewVifViewModel()
//{
// return _newDocumentViewModelFactory.GetCreateNewVifViewModel();
//}
}
}
\ No newline at end of file
......@@ -65,6 +65,13 @@ namespace VECTO3GUI2020.ViewModel.Implementation.Document
_documentName = name;
}
public SimulationOnlyDeclarationJob(IDeclarationInputDataProvider inputData)
{
_documentType = XmlDocumentType.DeclarationJobData;
_dataSource = inputData.DataSource;
_documentName = inputData.JobInputData.JobName;
}
}
}
\ No newline at end of file
using TUGraz.VectoCore.Utils;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.Utils;
using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
namespace VECTO3GUI2020.ViewModel.Interfaces.Document
{
public interface IDocumentViewModelFactory
public interface IDocumentViewModelFactory : INewDocumentViewModelFactory
{
/*
public enum XmlDocumentType
......@@ -20,8 +22,36 @@ namespace VECTO3GUI2020.ViewModel.Interfaces.Document
}
*/
IDocumentViewModel CreateDocumentViewModel(XmlDocumentType xmlDocumentType, string sourcefile);
IDocumentViewModel CreateDocumentViewModel(IInputDataProvider declarationInput);
}
public interface IMultiStepInputViewModelFactory
{
IDocumentViewModel CreateMultistepViewModel(IMultistepBusInputDataProvider inputData);
}
public interface ICreateVifViewModelFactory
{
IDocumentViewModel CreateVifViewModel(IMultistageVIFInputData multistep);
}
public interface IDeclarationInputViewModelFactory
{
IDocumentViewModel CreateDeclarationViewModel(IDeclarationInputDataProvider inputData);
}
public interface IPrimaryAndStageInputViewModelFactory
{
IDocumentViewModel CreateDeclarationViewModel(IMultistagePrimaryAndStageInputDataProvider inputData);
}
public interface INewDocumentViewModelFactory
{
IDocumentViewModel GetCreateNewStepInputViewModel(bool exemptedVehicle);
IDocumentViewModel GetCreateNewVifViewModel(bool completed);
//IDocumentViewModel GetCreateNewVifViewModel();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment