You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libiec61850/tools/model_generator_dotnet/SCLParser/src/SclEquipmentFunctions.cs

193 lines
5.5 KiB
C#

/*
* Copyright 2013-2025 Michael Zillgith, MZ Automation GmbH
*
* This file is part of MZ Automation IEC 61850 SDK
*
* All rights reserved.
*/
using System;
using System.Collections.Generic;
using System.Xml;
namespace IEC61850.SCL
{
public class SclAbstractEqFuncSubFunc : SclPowerSystemResource
{
public string Type
{
get
{
return XmlHelper.GetAttributeValue(xmlNode, "type");
}
set
{
XmlHelper.SetAttributeCreateIfNotExists(xmlDocument, xmlNode, "type", value);
}
}
private List<SclEqSubFunction> sclEqSubFunctions;
private List<SclGeneralEquipment> sclGeneralEquipments;
public bool RemoveEqSubFunction(SclEqSubFunction node)
{
try
{
XmlNode parent = node.xmlNode.ParentNode;
if (parent != null)
{
parent.RemoveChild(node.xmlNode);
}
sclEqSubFunctions.Remove(node);
return true;
}
catch (Exception)
{
return false;
}
}
public bool RemoveGeneralEquipment(SclGeneralEquipment node)
{
try
{
XmlNode parent = node.xmlNode.ParentNode;
if (parent != null)
{
parent.RemoveChild(node.xmlNode);
}
sclGeneralEquipments.Remove(node);
return true;
}
catch (Exception)
{
return false;
}
}
private void parseEqSubFunction()
{
XmlNodeList nodes = xmlNode.SelectNodes("scl:EqSubFunction", nsManager);
sclEqSubFunctions = new List<SclEqSubFunction>();
foreach (XmlNode node in nodes)
{
SclEqSubFunction lNode = new SclEqSubFunction(xmlDocument, sclDocument, node, nsManager);
sclEqSubFunctions.Add(lNode);
}
}
private void parseGeneralEquipment()
{
XmlNodeList nodes = xmlNode.SelectNodes("scl:GeneralEquipment", nsManager);
sclGeneralEquipments = new List<SclGeneralEquipment>();
foreach (XmlNode node in nodes)
{
SclGeneralEquipment lNode = new SclGeneralEquipment(xmlDocument, sclDocument, node, nsManager);
sclGeneralEquipments.Add(lNode);
}
}
public List<SclEqSubFunction> EqSubFunctions
{
get { return sclEqSubFunctions; }
}
public SclEqSubFunction AddNewEqSubFunction()
{
SclEqSubFunction newgeneralEquipment = new SclEqSubFunction(xmlDocument, sclDocument, nsManager);
XmlNode newNode = newgeneralEquipment.xmlNode;
if (newNode.OwnerDocument != xmlDocument)
{
newNode = xmlDocument.ImportNode(newgeneralEquipment.xmlNode.CloneNode(true), true);
}
if (EqSubFunctions.Count > 0)
{
int lastIndex = EqSubFunctions.Count - 1;
SclEqSubFunction lastLNode = EqSubFunctions[lastIndex];
XmlNode parent = lastLNode.xmlNode.ParentNode;
parent.InsertAfter(newNode, lastLNode.xmlNode);
}
else
{
XmlNode parent = XmlNode;
parent.AppendChild(newNode);
}
try
{
newgeneralEquipment = new SclEqSubFunction(xmlDocument, sclDocument, newNode, nsManager);
EqSubFunctions.Add(newgeneralEquipment);
return newgeneralEquipment;
}
catch (SclParserException e)
{
Console.WriteLine("Failed to add Substation");
Console.WriteLine(e.ToString());
return null;
}
}
public List<SclGeneralEquipment> GeneralEquipments
{
get { return sclGeneralEquipments; }
}
internal SclAbstractEqFuncSubFunc(XmlDocument xmlDocument, SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager)
: base(xmlDocument, sclDocument, xmlNode, nsManager)
{
parseEqSubFunction();
parseGeneralEquipment();
}
}
public class SclEqSubFunction : SclAbstractEqFuncSubFunc
{
internal SclEqSubFunction(XmlDocument xmlDocument, SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager)
: base(xmlDocument, sclDocument, xmlNode, nsManager)
{
}
public SclEqSubFunction(XmlDocument xmlDocument, SclDocument sclDocument, XmlNamespaceManager nsManager)
: base(xmlDocument, sclDocument, xmlDocument.CreateElement("EqSubFunction", SclDocument.SCL_XMLNS), nsManager)
{
}
}
public class SclEqFunction : SclAbstractEqFuncSubFunc
{
internal SclEqFunction(XmlDocument xmlDocument, SclDocument sclDocument, XmlNode xmlNode, XmlNamespaceManager nsManager)
: base(xmlDocument, sclDocument, xmlNode, nsManager)
{
}
public SclEqFunction(XmlDocument xmlDocument, SclDocument sclDocument, XmlNamespaceManager nsManager)
: base(xmlDocument, sclDocument, xmlDocument.CreateElement("EqFunction", SclDocument.SCL_XMLNS), nsManager)
{
}
}
}