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

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

added XMLComponentFactory to read airdrag components from own file

parent 0bd8d089
No related branches found
No related tags found
No related merge requests found
......@@ -83,6 +83,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory
IXMLAirdragDeclarationInputData CreateAirdragData(
string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile);
IComponentInputData CreateComponentData(string version, XmlNode componentNode, string sourceFile);
IXMLGearboxDeclarationInputData CreateGearboxData(
string version, IXMLDeclarationVehicleData vehicle, XmlNode componentNode, string sourceFile);
......
......@@ -29,7 +29,9 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.Xml;
using Ninject.Modules;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
......@@ -57,6 +59,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules
Bind<IXMLAirdragDeclarationInputData>().To<XMLDeclarationAirdragDataProviderV10>().Named(
XMLDeclarationAirdragDataProviderV10.QUALIFIED_XSD_TYPE);
Bind<IComponentInputData>().ToConstructor<XMLDeclarationAirdragDataProviderV10>((syntax) => new XMLDeclarationAirdragDataProviderV10(null, syntax.Inject<XmlNode>(), syntax.Inject<string>()))
.Named(XMLDeclarationAirdragDataProviderV10.QUALIFIED_XSD_TYPE);
Bind<IXMLAngledriveInputData>().To<XMLDeclarationAngledriveDataProviderV10>().Named(
XMLDeclarationAngledriveDataProviderV10.QUALIFIED_XSD_TYPE);
......
......@@ -29,7 +29,9 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System.Xml;
using Ninject.Modules;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader;
......@@ -57,6 +59,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.NinjectModules
Bind<IXMLAirdragDeclarationInputData>().To<XMLDeclarationAirdragDataProviderV20>().Named(
XMLDeclarationAirdragDataProviderV20.QUALIFIED_XSD_TYPE);
Bind<IComponentInputData>().ToConstructor<XMLDeclarationAirdragDataProviderV20>((args) =>
new XMLDeclarationAirdragDataProviderV20(null, args.Inject<XmlNode>(), args.Inject<string>())
).Named(XMLDeclarationAirdragDataProviderV20.QUALIFIED_XSD_TYPE);
Bind<IXMLAngledriveInputData>().To<XMLDeclarationAngledriveDataProviderV20>().Named(
XMLDeclarationAngledriveDataProviderV20.QUALIFIED_XSD_TYPE);
......
......@@ -77,6 +77,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Reader.Impl
protected IElectricStorageSystemDeclarationInputData _electricStorageSystemInputData;
protected IIEPCDeclarationInputData _iepcDeclarationInputData;
[Inject]
public IDeclarationInjectFactory Factory { protected get; set; }
......
......@@ -53,4 +53,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML
IDeclarationInputDataProvider CreateDeclaration(XmlReader inputData);
}
/// <summary>
/// Create a single Component from an XMLSource
/// </summary>
public interface IXMLComponentInputReader
{
IAirdragDeclarationInputData CreateAirdrag(string filename);
IAirdragDeclarationInputData CreateAirdrag(Stream inputData);
IAirdragDeclarationInputData CreateAirdrag(XmlReader inputData);
}
}
......@@ -37,6 +37,7 @@ using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Factory;
using TUGraz.VectoCore.InputData.FileIO.XML.Engineering.Factory;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.Utils;
using XmlDocumentType = TUGraz.VectoCore.Utils.XmlDocumentType;
......@@ -203,4 +204,101 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML
}
public class XMLComponentInputDataFactory : IXMLComponentInputReader
{
private readonly IDeclarationInjectFactory _declarationFactory;
public XMLComponentInputDataFactory(IDeclarationInjectFactory declFactory)
{
_declarationFactory = declFactory;
}
#region Implementation of IXMLComponentInputReader
public IAirdragDeclarationInputData CreateAirdrag(string filename)
{
return CreateFromFile<IAirdragDeclarationInputData>(filename);
}
private TOut CreateFromFile<TOut>(string filename) where TOut : class
{
using (var reader = XmlReader.Create(filename)) {
return CreateFromXmlReader<TOut>(reader, filename);
}
}
private TOut CreateFromStream<TOut>(Stream inputData) where TOut : class
{
using (var reader = XmlReader.Create(inputData)) {
return CreateFromXmlReader<TOut>(reader, null);
}
}
private TOut CreateFromXmlReader<TOut>(XmlReader reader, string filename) where TOut : class
{
var result = ReadXMLDoc(reader, filename);
var typedResult = result as TOut;
if (typedResult is null)
{
throw new VectoException("Error creating XMLComponentInput {0}", filename);
}
return typedResult;
}
public IAirdragDeclarationInputData CreateAirdrag(Stream inputData)
{
throw new NotImplementedException();
}
public IAirdragDeclarationInputData CreateAirdrag(XmlReader inputData)
{
throw new NotImplementedException();
}
#endregion
private IComponentInputData ReadXMLDoc(XmlReader inputData, string fileName)
{
var xmlDoc = new XmlDocument();
xmlDoc.Load(inputData);
if (xmlDoc.DocumentElement == null)
{
throw new VectoException("empty xml document!");
}
var documentType = XmlDocumentType.DeclarationComponentData; //<- TODO HM 27.03.23: remove hardcoding
//Cannot handle Declaration Component
//var documentType = XMLHelper.GetDocumentTypeFromRootElement(xmlDoc.DocumentElement.LocalName);
//if (documentType == null)
//{
// throw new VectoException("unknown xml file! {0}", xmlDoc.DocumentElement.LocalName);
//}
bool valid = new XMLValidator(xmlDoc, null, XMLValidator.CallBackExceptionOnError).ValidateXML(documentType);
var xNode = xmlDoc.DocumentElement?.FirstChild?.FirstChild;
//Document -> Component -> ComponentData
var versionNumber = XMLHelper.GetXsdType(xNode?.SchemaInfo.SchemaType);
try
{
var input = _declarationFactory.CreateComponentData(versionNumber, xNode, fileName);
//input.Reader = _declarationFactory.CreateInputReader(versionNumber, input, xmlDoc.FirstChild);
return input;
}
catch (Exception e)
{
throw new VectoException("Failed to read Declaration job version {0}", e, versionNumber);
}
return null;
}
}
}
......@@ -41,6 +41,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML
public override void Load()
{
Bind<IXMLInputDataReader>().To<XMLInputDataFactory>();
Bind<IXMLComponentInputReader>().To<XMLComponentInputDataFactory>();
LoadModule<XMLDeclarationReaderInjectModule>();
......
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