Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

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

added possibility to set nameCombinationMethod per MethodInfo, updated...

added possibility to set nameCombinationMethod per MethodInfo, updated VehicleTypeAndArchitectureStringHelpers
parent f031a1ed
No related branches found
No related tags found
No related merge requests found
Showing with 209 additions and 126 deletions
...@@ -20,6 +20,11 @@ namespace TUGraz.VectoCore.InputData.Reader ...@@ -20,6 +20,11 @@ namespace TUGraz.VectoCore.InputData.Reader
ArchitectureID archId, bool exempted, bool iepc, bool ihpc); ArchitectureID archId, bool exempted, bool iepc, bool ihpc);
IVectoRunDataFactory CreateDeclarationRunDataFactory(VehicleCategory vehicleType, VectoSimulationJobType jobType, IVectoRunDataFactory CreateDeclarationRunDataFactory(VehicleCategory vehicleType, VectoSimulationJobType jobType,
ArchitectureID archId, bool exempted, bool iepc, bool ihpc); ArchitectureID archId, bool exempted, bool iepc, bool ihpc);
IVectoRunDataFactory CreateDeclarationRunDataFactory(VehicleTypeAndArchitectureStringHelperRundata.VehicleClassification vehicleClassification,
IDeclarationInputDataProvider dataProvider,
IDeclarationReport report);
} }
...@@ -86,13 +91,15 @@ namespace TUGraz.VectoCore.InputData.Reader ...@@ -86,13 +91,15 @@ namespace TUGraz.VectoCore.InputData.Reader
//TODO: encapsulate arguments into object //TODO: encapsulate arguments into object
var vehicle = declDataProvider.JobInputData.Vehicle; var vehicle = declDataProvider.JobInputData.Vehicle;
try { try {
return _internalFactory.CreateDeclarationRunDataFactory(
var ihpc = (vehicle.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0; new VehicleTypeAndArchitectureStringHelperRundata.VehicleClassification(vehicle), declDataProvider,
var iepc = (vehicle.Components?.IEPC != null); report);
return _internalFactory.CreateDeclarationRunDataFactory(declDataProvider.JobInputData.Vehicle.VehicleCategory, //var ihpc = (vehicle.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0;
declDataProvider.JobInputData.JobType, //var iepc = (vehicle.Components?.IEPC != null);
declDataProvider.JobInputData.Vehicle.ArchitectureID, //return _internalFactory.CreateDeclarationRunDataFactory(declDataProvider.JobInputData.Vehicle.VehicleCategory,
declDataProvider.JobInputData.Vehicle.ExemptedVehicle, iepc, ihpc); // declDataProvider.JobInputData.JobType,
// declDataProvider.JobInputData.Vehicle.ArchitectureID,
// declDataProvider.JobInputData.Vehicle.ExemptedVehicle, iepc, ihpc, declDataProvider, report);
} catch (Exception ex) { } catch (Exception ex) {
throw new Exception( throw new Exception(
$"Could not create RunDataFactory for Vehicle Category{declDataProvider.JobInputData.Vehicle.VehicleCategory} {declDataProvider.JobInputData.Vehicle.ArchitectureID}", ex); $"Could not create RunDataFactory for Vehicle Category{declDataProvider.JobInputData.Vehicle.VehicleCategory} {declDataProvider.JobInputData.Vehicle.ArchitectureID}", ex);
......
...@@ -8,6 +8,7 @@ using Ninject.Modules; ...@@ -8,6 +8,7 @@ using Ninject.Modules;
using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.InputData.Reader.Impl;
using TUGraz.VectoCore.OutputData;
using TUGraz.VectoCore.Utils.Ninject; using TUGraz.VectoCore.Utils.Ninject;
namespace TUGraz.VectoCore.InputData.Reader namespace TUGraz.VectoCore.InputData.Reader
...@@ -15,7 +16,8 @@ namespace TUGraz.VectoCore.InputData.Reader ...@@ -15,7 +16,8 @@ namespace TUGraz.VectoCore.InputData.Reader
public class VectoRunDataFactoryNinjectModule : AbstractNinjectModule public class VectoRunDataFactoryNinjectModule : AbstractNinjectModule
{ {
private IVehicleTypeAndArchitectureStringHelper _vehicleStringHelper = new VehicleTypeAndArchitectureStringHelperRundata(); private VehicleTypeAndArchitectureStringHelperRundata _vehicleStringHelper = new VehicleTypeAndArchitectureStringHelperRundata();
#region Overrides of NinjectModule #region Overrides of NinjectModule
...@@ -26,17 +28,34 @@ namespace TUGraz.VectoCore.InputData.Reader ...@@ -26,17 +28,34 @@ namespace TUGraz.VectoCore.InputData.Reader
Bind<IInternalRunDataFactoryFactory>().ToFactory( Bind<IInternalRunDataFactoryFactory>().ToFactory(
() => new CombineArgumentsToNameInstanceProvider( () => new CombineArgumentsToNameInstanceProvider(
_vehicleStringHelper.CreateName, new CombineArgumentsToNameInstanceProvider.MethodSettings() {
6, 6, combineToNameDelegate = _vehicleStringHelper.CreateName,
methods = new [] {
typeof(IInternalRunDataFactoryFactory) typeof(IInternalRunDataFactoryFactory)
.GetMethod(nameof(IInternalRunDataFactoryFactory .GetMethod(nameof(IInternalRunDataFactoryFactory
.CreateDeclarationRunDataFactory)), .CreateDeclarationRunDataFactory),
new []
{
typeof(VehicleTypeAndArchitectureStringHelperRundata.VehicleClassification),
typeof(IDeclarationInputDataProvider),
typeof(IDeclarationReport)
}
),
typeof(IInternalRunDataFactoryFactory) typeof(IInternalRunDataFactoryFactory)
.GetMethod(nameof(IInternalRunDataFactoryFactory .GetMethod(nameof(IInternalRunDataFactoryFactory
.CreateDeclarationCompletedBusRunDataFactory)) .CreateDeclarationCompletedBusRunDataFactory)//,
//new []
//{
// typeof(VehicleTypeAndArchitectureStringHelperRundata.VehicleClassification),
// typeof(IDeclarationInputDataProvider),
// typeof(IDeclarationReport)
//}
) )
) },
.InSingletonScope(); skipArguments = 1,
takeArguments = 1,
}
)).InSingletonScope();
#region Lorries #region Lorries
......
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/ */
#if(MOCKUP)
using System.IO;
using System.Reflection;
#endif
using Ninject.Modules; using Ninject.Modules;
using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.Reader; using TUGraz.VectoCore.InputData.Reader;
...@@ -98,12 +102,6 @@ namespace TUGraz.VectoCore ...@@ -98,12 +102,6 @@ namespace TUGraz.VectoCore
var assembly = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"VectoMockup.dll")); var assembly = Assembly.LoadFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"VectoMockup.dll"));
//var assembly = Assembly.LoadFile("VectoMockup.dll"); //var assembly = Assembly.LoadFile("VectoMockup.dll");
Kernel.Load(new Assembly[]{assembly}); Kernel.Load(new Assembly[]{assembly});
#endif #endif
......
...@@ -25,8 +25,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation ...@@ -25,8 +25,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
public override void Load() public override void Load()
{ {
LoadModule<ContextPreservationModule>(); LoadModule<ContextPreservationModule>();
Bind<ICustomerInformationFileFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(MRFNinjectModule.VehicleTypeAndArchitectureStringHelper.CreateName, 6, 6, typeof(ICustomerInformationFileFactory).GetMethod(nameof(ICustomerInformationFileFactory Bind<ICustomerInformationFileFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
.GetCustomerReport)))).InSingletonScope(); new CombineArgumentsToNameInstanceProvider.MethodSettings()
{
combineToNameDelegate = VehicleTypeAndArchitectureStringHelper.CreateName,
skipArguments = 6,
takeArguments = 6,
methods = new[] {
typeof(ICustomerInformationFileFactory).GetMethod(
nameof(ICustomerInformationFileFactory.GetCustomerReport))
}
})).InSingletonScope();
#region Lorry CIF #region Lorry CIF
Bind<IXMLCustomerReport>().To<ConventionalLorry_CIF>().Named(MRFNinjectModule.VehicleTypeAndArchitectureStringHelper.CreateName(MRFNinjectModule.VehicleTypeAndArchitectureStringHelper.ToParams(VehicleCategoryHelper.Lorry, VectoSimulationJobType.ConventionalVehicle, Bind<IXMLCustomerReport>().To<ConventionalLorry_CIF>().Named(MRFNinjectModule.VehicleTypeAndArchitectureStringHelper.CreateName(MRFNinjectModule.VehicleTypeAndArchitectureStringHelper.ToParams(VehicleCategoryHelper.Lorry, VectoSimulationJobType.ConventionalVehicle,
......
...@@ -34,8 +34,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. ...@@ -34,8 +34,17 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
public override void Load() public override void Load()
{ {
LoadModule<ContextPreservationModule>(); LoadModule<ContextPreservationModule>();
Bind<IManufacturerReportFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(VehicleTypeAndArchitectureStringHelper.CreateName, Bind<IManufacturerReportFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
6, 6, typeof(IManufacturerReportFactory).GetMethod(nameof(IManufacturerReportFactory.GetManufacturerReport)))).InSingletonScope(); new CombineArgumentsToNameInstanceProvider.MethodSettings() {
combineToNameDelegate = VehicleTypeAndArchitectureStringHelper.CreateName,
skipArguments = 6,
takeArguments = 6,
methods = new[] {
typeof(IManufacturerReportFactory).GetMethod(
nameof(IManufacturerReportFactory.GetManufacturerReport))
}
})).InSingletonScope();
Bind<IXMLManufacturerReport>().To<ConventionalLorryManufacturerReport>() Bind<IXMLManufacturerReport>().To<ConventionalLorryManufacturerReport>()
.NamedLikeFactoryMethod((IManufacturerReportFactory f) => f.GetConventionalLorryManufacturerReport()); .NamedLikeFactoryMethod((IManufacturerReportFactory f) => f.GetConventionalLorryManufacturerReport());
......
...@@ -22,13 +22,31 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF ...@@ -22,13 +22,31 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationF
{ {
LoadModule<ContextPreservationModule>(); LoadModule<ContextPreservationModule>();
Bind<IVIFReportInterimFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(VehicleTypeAndArchitectureStringHelper.CreateName, Bind<IVIFReportInterimFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
6, 6, new CombineArgumentsToNameInstanceProvider.MethodSettings()
typeof(IVIFReportInterimFactory).GetMethod(nameof(IVIFReportInterimFactory.GetInterimVIFReport)) )).InSingletonScope(); {
combineToNameDelegate = VehicleTypeAndArchitectureStringHelper.CreateName,
skipArguments = 6,
takeArguments = 6,
methods = new[] {
typeof(IVIFReportInterimFactory).GetMethod(
nameof(IVIFReportInterimFactory.GetInterimVIFReport))
}
})).InSingletonScope();
Bind<IVIFReportFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(
new CombineArgumentsToNameInstanceProvider.MethodSettings()
{
combineToNameDelegate = VehicleTypeAndArchitectureStringHelper.CreateName,
skipArguments = 6,
takeArguments = 6,
methods = new[] {
typeof(IVIFReportFactory).GetMethod(
nameof(IVIFReportFactory.GetVIFReport))
}
})).InSingletonScope();
Bind<IVIFReportFactory>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(VehicleTypeAndArchitectureStringHelper.CreateName,
6, 6, typeof(IVIFReportFactory).GetMethod(nameof(IVIFReportFactory.GetVIFReport))
)).InSingletonScope();
#region Primary Vehicle Information File Reports #region Primary Vehicle Information File Reports
......
...@@ -12,34 +12,50 @@ using TUGraz.VectoCommon.Exceptions; ...@@ -12,34 +12,50 @@ using TUGraz.VectoCommon.Exceptions;
namespace TUGraz.VectoCore.Utils.Ninject namespace TUGraz.VectoCore.Utils.Ninject
{ {
internal class CombineArgumentsToNameInstanceProvider : StandardInstanceProvider public class CombineArgumentsToNameInstanceProvider : StandardInstanceProvider
{ {
public class MethodSettings
{
/// <summary>
/// This delegate is used to create a name out of the parameters
/// </summary>
public CombineToName combineToNameDelegate;
/// <summary>
/// Specifies the number of arguments that not passed to the constructor
/// </summary>
public int skipArguments;
/// <summary>
/// Specifies the number of arguments that are passed to the <see cref="combineToNameDelegate"/>
/// </summary>
public int takeArguments;
/// <summary>
/// Sets the methods for which these settings apply, leave empty for default settings
/// </summary>
public MethodInfo[] methods;
}
public delegate string CombineToName(params object[] arguments); public delegate string CombineToName(params object[] arguments);
private CombineToName _combinationDelegate = null; private Dictionary<MethodInfo, MethodSettings> _methodSettings = new Dictionary<MethodInfo, MethodSettings>();
private readonly int _skipArgumentsNr;
private readonly int _numberOfArguments;
private HashSet<MethodInfo> _methodInfos = new HashSet<MethodInfo>();
/// <summary> /// <summary>
/// Constructor for CombineArgumentsToNameInstanceProvider /// Constructor for CombineArgumentsToNameInstanceProvider
/// </summary> /// </summary>
/// <param name="combinationDelegate">this delegate is to combine numberOfArguments arguments to a name</param>
/// <param name="numberOfArguments">the number of arguments that are used to create the name</param> public CombineArgumentsToNameInstanceProvider(params MethodSettings[] settings)
/// <param name="methods">the name is only resolved with the combinationDelegate if one of these methods was called, otherwise the standard instance provider is used</param>
/// <param name="skipArgumentsNr">defines the number of arguments that are skipped and not passed to the constructor</param>
public CombineArgumentsToNameInstanceProvider(CombineToName combinationDelegate, int numberOfArguments, int skipArgumentsNr, params MethodInfo[] methods)
{ {
_numberOfArguments = numberOfArguments; if (settings != null && settings.Any(s => s.methods == null)) {
_skipArgumentsNr = skipArgumentsNr; throw new ArgumentException($"At least one method has to be specified in the MethodSetting");
_combinationDelegate = combinationDelegate; }
if (methods != null) {
foreach (var method in methods) { if (settings != null) {
_methodInfos.Add(method); foreach (var setting in settings) {
foreach (var method in setting.methods) {
_methodSettings.Add(method, setting);
} }
} }
}
} }
#region Overrides of StandardInstanceProvider #region Overrides of StandardInstanceProvider
...@@ -50,29 +66,31 @@ namespace TUGraz.VectoCore.Utils.Ninject ...@@ -50,29 +66,31 @@ namespace TUGraz.VectoCore.Utils.Ninject
{ {
return base.GetInstance(instanceResolver, methodInfo, arguments); return base.GetInstance(instanceResolver, methodInfo, arguments);
} }
catch (Exception e) catch (Exception e) {
{ var name = GetName(methodInfo, arguments);
throw new VectoException("failed to create instance for '{1}' via '{0}' version '{2}'", e, methodInfo.Name, methodInfo.ReturnType.Name, arguments[0]); throw new VectoException("failed to create instance for '{1}' via '{0}' version '{2}' name'{3}'", e, methodInfo.Name, methodInfo.ReturnType.Name, arguments[0], name);
//throw e; //throw e;
} }
} }
protected override string GetName(MethodInfo methodInfo, object[] arguments) protected override string GetName(MethodInfo methodInfo, object[] arguments)
{ {
if (!_methodInfos.Contains(methodInfo)) { if (!_methodSettings.TryGetValue(methodInfo, out var methodSettings)) {
return base.GetName(methodInfo, arguments); return base.GetName(methodInfo, arguments);
} }
return _combinationDelegate.Invoke(arguments.Take(_numberOfArguments).ToArray()); return methodSettings.combineToNameDelegate.Invoke(arguments.Take(methodSettings.takeArguments).ToArray());
} }
protected override IConstructorArgument[] GetConstructorArguments(MethodInfo methodInfo, object[] arguments) protected override IConstructorArgument[] GetConstructorArguments(MethodInfo methodInfo, object[] arguments)
{ {
if (!_methodInfos.Contains(methodInfo)) { if (!_methodSettings.TryGetValue(methodInfo, out var methodSettings)) {
return base.GetConstructorArguments(methodInfo, arguments); return base.GetConstructorArguments(methodInfo, arguments);
} }
return base.GetConstructorArguments(methodInfo, arguments).Skip(_skipArgumentsNr).ToArray();
return base.GetConstructorArguments(methodInfo, arguments).Skip(methodSettings.skipArguments).ToArray();
} }
#endregion #endregion
......
using System; using System;
using System.Linq;
using System.Data.Common; using System.Data.Common;
using System.Diagnostics;
using System.Threading; using System.Threading;
using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
...@@ -7,7 +9,7 @@ using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile ...@@ -7,7 +9,7 @@ using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile
namespace TUGraz.VectoCore.Utils.Ninject namespace TUGraz.VectoCore.Utils.Ninject
{ {
internal interface IVehicleTypeAndArchitectureStringHelper public interface IVehicleTypeAndArchitectureStringHelperReport
{ {
string GetName(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId = ArchitectureID.UNKNOWN, string GetName(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId = ArchitectureID.UNKNOWN,
bool exempted = false, bool iepc = false, bool ihpc = false); bool exempted = false, bool iepc = false, bool ihpc = false);
...@@ -18,33 +20,11 @@ namespace TUGraz.VectoCore.Utils.Ninject ...@@ -18,33 +20,11 @@ namespace TUGraz.VectoCore.Utils.Ninject
CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; }
} }
internal abstract class VehicleTypeAndArchitectureStringHelperReportBase : IVehicleTypeAndArchitectureStringHelper
{
public string GetName(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId = ArchitectureID.UNKNOWN,
bool exempted = false, bool iepc = false, bool ihpc = false)
{
return CreateName(ToParams(vehicleType, jobType, archId, exempted, iepc, ihpc));
}
public object[] ToParams(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId, public class VehicleTypeAndArchitectureStringHelperReport : IVehicleTypeAndArchitectureStringHelperReport
bool exempted, bool iepc, bool ihpc)
{ {
if (!VehicleCategoryHelper.SuperCategories.Contains(vehicleType)) { public CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = (arguments => {
throw new Exception(
$"String provided for {nameof(vehicleType)} must match the strings in {nameof(VehicleCategoryHelper.SuperCategories)}");
};
return new[] { (object)vehicleType, jobType, archId, exempted, iepc, ihpc};
}
public abstract CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; }
}
internal class VehicleTypeAndArchitectureStringHelperReport : VehicleTypeAndArchitectureStringHelperReportBase
{
public override CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = (arguments => {
//may be called with first argument of type string (when defining the bindings) or VehicleCategory when using the factory //may be called with first argument of type string (when defining the bindings) or VehicleCategory when using the factory
string vehicleType = arguments[0] as string; string vehicleType = arguments[0] as string;
...@@ -90,37 +70,82 @@ namespace TUGraz.VectoCore.Utils.Ninject ...@@ -90,37 +70,82 @@ namespace TUGraz.VectoCore.Utils.Ninject
return result; return result;
}); });
public virtual string GetName(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId = ArchitectureID.UNKNOWN,
bool exempted = false, bool iepc = false, bool ihpc = false)
{
return CreateName(ToParams(vehicleType, jobType, archId, exempted, iepc, ihpc));
} }
internal class VehicleTypeAndArchitectureStringHelperRundata : VehicleTypeAndArchitectureStringHelperReportBase
public virtual object[] ToParams(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId,
bool exempted, bool iepc, bool ihpc)
{ {
public override CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = (arguments => { if (!VehicleCategoryHelper.SuperCategories.Contains(vehicleType))
string identifier = "";
//may be called with first argument of type string (when defining the bindings) or VehicleCategory when using the factory
string vehicleType = arguments[0] as string;
if (arguments[0] is VehicleCategory vehicleCategory)
{ {
vehicleType = vehicleCategory.GetVehicleType(); throw new Exception(
$"String provided for {nameof(vehicleType)} must match the strings in {nameof(VehicleCategoryHelper.SuperCategories)}");
};
return new[] { (object)vehicleType, jobType, archId, exempted, iepc, ihpc };
}
} }
public class VehicleTypeAndArchitectureStringHelperRundata
{
public CombineArgumentsToNameInstanceProvider.CombineToName CreateName { get; } = arguments => {
if (arguments[0] is VehicleClassification classification) {
return classification.GetHashCode().ToString();
} else {
throw new ArgumentException($"{nameof(arguments)}[0] must be of type {typeof(VehicleClassification)}");
}
};
#region Overrides of VehicleTypeAndArchitectureStringHelperReportBase
VectoSimulationJobType jobType = (VectoSimulationJobType)arguments[1]; private string GetName(VehicleClassification classification)
ArchitectureID archId = (ArchitectureID)arguments[2]; {
bool exempted = (bool)arguments[3]; return classification.GetHashCode().ToString();
bool iepc = (bool)arguments[4]; }
bool ihpc = (bool)arguments[5];
var vehicleClassification = new VehicleClassification(jobType, archId, vehicleType, exempted, iepc, ihpc);
public string GetName(string vehicleType, VectoSimulationJobType jobType, ArchitectureID archId = ArchitectureID.UNKNOWN,
bool exempted = false, bool iepc = false, bool ihpc = false)
{
return GetName(new VehicleClassification(jobType, archId, vehicleType, exempted, iepc, ihpc));
}
#endregion
public struct VehicleClassification
{
return vehicleClassification.GetHashCode().ToString(); private VectoSimulationJobType JobType { get; }
}); private ArchitectureID ArchId { get; }
private string VehicleType { get; }
private bool Exempted { get; }
private bool Iepc { get; }
private bool Ihpc { get; }
private struct VehicleClassification public VehicleClassification(VectoSimulationJobType jobType, ArchitectureID archId, string vehicleType, bool exempted, bool iepc, bool ihpc)
{ {
#region Equality members Iepc = iepc;
Ihpc = ihpc;
Exempted = exempted;
VehicleType = vehicleType;
ArchId = archId;
JobType = jobType;
}
public VehicleClassification(IVehicleDeclarationInputData inputData)
{
Iepc = (inputData.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0;
Ihpc = (inputData.Components?.IEPC != null);
Exempted = inputData.ExemptedVehicle;
VehicleType = inputData.VehicleCategory.GetVehicleType();
ArchId = inputData.ArchitectureID;
JobType = inputData.VehicleType;
}
public bool Equals(VehicleClassification other) public bool Equals(VehicleClassification other)
{ {
...@@ -134,7 +159,8 @@ namespace TUGraz.VectoCore.Utils.Ninject ...@@ -134,7 +159,8 @@ namespace TUGraz.VectoCore.Utils.Ninject
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked { unchecked
{
var hashCode = (int)JobType; var hashCode = (int)JobType;
hashCode = (hashCode * 397) ^ (int)ArchId; hashCode = (hashCode * 397) ^ (int)ArchId;
hashCode = (hashCode * 397) ^ (VehicleType != null ? VehicleType.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (VehicleType != null ? VehicleType.GetHashCode() : 0);
...@@ -144,27 +170,6 @@ namespace TUGraz.VectoCore.Utils.Ninject ...@@ -144,27 +170,6 @@ namespace TUGraz.VectoCore.Utils.Ninject
return hashCode; return hashCode;
} }
} }
#endregion
private VectoSimulationJobType JobType { get; }
private ArchitectureID ArchId { get; }
private string VehicleType { get; }
private bool Exempted { get; }
private bool Iepc { get; }
private bool Ihpc { get; }
public VehicleClassification(VectoSimulationJobType jobType, ArchitectureID archId, string vehicleType, bool exempted, bool iepc, bool ihpc)
{
ArchId = archId;
JobType = jobType;
ArchId = archId;
VehicleType = vehicleType;
Exempted = exempted;
Iepc = iepc;
Ihpc = ihpc;
}
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment