From 39c7ef8285562df6b3423fd05e43eda8b03220a2 Mon Sep 17 00:00:00 2001 From: Abdelaziz Said Date: Sun, 2 Jan 2022 07:29:24 +0200 Subject: [PATCH] - Add the Runtime module and the IEC61850-Bean library to Protocol_Converter project. --- .../com/beanit/iec61850bean/FcModelNode.java | 2 +- .../java/com/beanit/iec61850bean/Report.java | 3 +- .../iec61850bean/ServerAssociation.java | 59 ++++--------------- .../com/beanit/iec61850bean/ServerSap.java | 9 +-- .../iec61850bean/clientgui/ClientGui.java | 31 +++------- .../iec61850bean/internal/scl/DoType.java | 2 +- .../iec61850bean/internal/scl/EnumVal.java | 2 +- .../com/beanit/jositransport/TConnection.java | 10 +--- 8 files changed, 29 insertions(+), 89 deletions(-) diff --git a/src/main/java/com/beanit/iec61850bean/FcModelNode.java b/src/main/java/com/beanit/iec61850bean/FcModelNode.java index aa6ae9c..1447f4d 100644 --- a/src/main/java/com/beanit/iec61850bean/FcModelNode.java +++ b/src/main/java/com/beanit/iec61850bean/FcModelNode.java @@ -76,7 +76,7 @@ public abstract class FcModelNode extends ModelNode { } class SelectResetTask extends TimerTask { - ServerAssociation association; + final ServerAssociation association; SelectResetTask(ServerAssociation association) { this.association = association; diff --git a/src/main/java/com/beanit/iec61850bean/Report.java b/src/main/java/com/beanit/iec61850bean/Report.java index 80f1c42..038cf29 100644 --- a/src/main/java/com/beanit/iec61850bean/Report.java +++ b/src/main/java/com/beanit/iec61850bean/Report.java @@ -14,6 +14,7 @@ package com.beanit.iec61850bean; import com.beanit.iec61850bean.internal.HexString; + import java.util.List; public class Report { @@ -172,7 +173,7 @@ public class Report { sb.append("\nEntry ID: ").append(HexString.fromBytes(entryId.getValue())); } if (confRev != null) { - sb.append("\nConfiguration revision: ").append(confRev.toString()); + sb.append("\nConfiguration revision: ").append(confRev); } sb.append("\nReported data set members:"); int index = 0; diff --git a/src/main/java/com/beanit/iec61850bean/ServerAssociation.java b/src/main/java/com/beanit/iec61850bean/ServerAssociation.java index dde88d3..e10e5a3 100644 --- a/src/main/java/com/beanit/iec61850bean/ServerAssociation.java +++ b/src/main/java/com/beanit/iec61850bean/ServerAssociation.java @@ -13,84 +13,45 @@ */ package com.beanit.iec61850bean; -import static java.nio.charset.StandardCharsets.UTF_8; - import com.beanit.asn1bean.ber.ReverseByteArrayOutputStream; import com.beanit.asn1bean.ber.types.BerInteger; import com.beanit.asn1bean.ber.types.BerNull; import com.beanit.asn1bean.ber.types.string.BerVisibleString; import com.beanit.iec61850bean.internal.BerBoolean; import com.beanit.iec61850bean.internal.NamedThreadFactory; -import com.beanit.iec61850bean.internal.mms.asn1.AccessResult; -import com.beanit.iec61850bean.internal.mms.asn1.ConfirmedErrorPDU; -import com.beanit.iec61850bean.internal.mms.asn1.ConfirmedRequestPDU; -import com.beanit.iec61850bean.internal.mms.asn1.ConfirmedResponsePDU; -import com.beanit.iec61850bean.internal.mms.asn1.ConfirmedServiceRequest; -import com.beanit.iec61850bean.internal.mms.asn1.ConfirmedServiceResponse; -import com.beanit.iec61850bean.internal.mms.asn1.Data; -import com.beanit.iec61850bean.internal.mms.asn1.DataAccessError; -import com.beanit.iec61850bean.internal.mms.asn1.DefineNamedVariableListRequest; -import com.beanit.iec61850bean.internal.mms.asn1.DefineNamedVariableListResponse; -import com.beanit.iec61850bean.internal.mms.asn1.DeleteNamedVariableListRequest; -import com.beanit.iec61850bean.internal.mms.asn1.DeleteNamedVariableListResponse; -import com.beanit.iec61850bean.internal.mms.asn1.GetNameListRequest; -import com.beanit.iec61850bean.internal.mms.asn1.GetNameListResponse; +import com.beanit.iec61850bean.internal.mms.asn1.*; import com.beanit.iec61850bean.internal.mms.asn1.GetNameListResponse.ListOfIdentifier; -import com.beanit.iec61850bean.internal.mms.asn1.GetNamedVariableListAttributesResponse; -import com.beanit.iec61850bean.internal.mms.asn1.GetVariableAccessAttributesRequest; -import com.beanit.iec61850bean.internal.mms.asn1.GetVariableAccessAttributesResponse; -import com.beanit.iec61850bean.internal.mms.asn1.Identifier; -import com.beanit.iec61850bean.internal.mms.asn1.InitiateRequestPDU; -import com.beanit.iec61850bean.internal.mms.asn1.InitiateResponsePDU; -import com.beanit.iec61850bean.internal.mms.asn1.Integer16; -import com.beanit.iec61850bean.internal.mms.asn1.Integer32; -import com.beanit.iec61850bean.internal.mms.asn1.Integer8; -import com.beanit.iec61850bean.internal.mms.asn1.MMSpdu; -import com.beanit.iec61850bean.internal.mms.asn1.ObjectName; import com.beanit.iec61850bean.internal.mms.asn1.ObjectName.DomainSpecific; -import com.beanit.iec61850bean.internal.mms.asn1.ParameterSupportOptions; -import com.beanit.iec61850bean.internal.mms.asn1.ReadRequest; -import com.beanit.iec61850bean.internal.mms.asn1.ReadResponse; import com.beanit.iec61850bean.internal.mms.asn1.ReadResponse.ListOfAccessResult; import com.beanit.iec61850bean.internal.mms.asn1.ServiceError.ErrorClass; -import com.beanit.iec61850bean.internal.mms.asn1.ServiceSupportOptions; -import com.beanit.iec61850bean.internal.mms.asn1.TypeDescription; import com.beanit.iec61850bean.internal.mms.asn1.TypeDescription.Structure; import com.beanit.iec61850bean.internal.mms.asn1.TypeDescription.Structure.Components; -import com.beanit.iec61850bean.internal.mms.asn1.TypeSpecification; -import com.beanit.iec61850bean.internal.mms.asn1.Unsigned32; -import com.beanit.iec61850bean.internal.mms.asn1.VariableAccessSpecification; -import com.beanit.iec61850bean.internal.mms.asn1.VariableDefs; -import com.beanit.iec61850bean.internal.mms.asn1.WriteRequest; -import com.beanit.iec61850bean.internal.mms.asn1.WriteResponse; import com.beanit.josistack.AcseAssociation; import com.beanit.josistack.ByteBufferInputStream; import com.beanit.josistack.DecodingException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.ByteArrayInputStream; import java.io.EOFException; import java.io.IOException; import java.net.SocketTimeoutException; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; +import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeoutException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + +import static java.nio.charset.StandardCharsets.UTF_8; final class ServerAssociation { private static final Logger logger = LoggerFactory.getLogger(ServerAssociation.class); private static final WriteResponse.CHOICE writeSuccess = new WriteResponse.CHOICE(); - private static String[] mmsFcs = { - "MX", "ST", "CO", "CF", "DC", "SP", "SG", "RP", "LG", "BR", "GO", "GS", "SV", "SE", "EX", "SR", - "OR", "BL" + private static final String[] mmsFcs = { + "MX", "ST", "CO", "CF", "DC", "SP", "SG", "RP", "LG", "BR", "GO", "GS", "SV", "SE", "EX", "SR", + "OR", "BL" }; static { diff --git a/src/main/java/com/beanit/iec61850bean/ServerSap.java b/src/main/java/com/beanit/iec61850bean/ServerSap.java index 722de00..e1aa9a2 100644 --- a/src/main/java/com/beanit/iec61850bean/ServerSap.java +++ b/src/main/java/com/beanit/iec61850bean/ServerSap.java @@ -15,13 +15,14 @@ package com.beanit.iec61850bean; import com.beanit.josistack.AcseAssociation; import com.beanit.josistack.ServerAcseSap; + +import javax.net.ServerSocketFactory; import java.io.IOException; import java.net.InetAddress; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import java.util.Timer; -import javax.net.ServerSocketFactory; /** * The ServerSap class represents the IEC 61850 service access point for server @@ -340,11 +341,7 @@ public final class ServerSap { bdaMirror.setValueFrom(bda); synchronized (bdaMirror.chgRcbs) { for (Urcb urcb : bdaMirror.chgRcbs) { - if (bdaMirror.dupd && urcb.getTrgOps().isDataUpdate()) { - urcb.report(bdaMirror, true, false, true); - } else { - urcb.report(bdaMirror, true, false, false); - } + urcb.report(bdaMirror, true, false, bdaMirror.dupd && urcb.getTrgOps().isDataUpdate()); } } } else if (bdaMirror.dupd && bdaMirror.dupdRcbs.size() != 0) { diff --git a/src/main/java/com/beanit/iec61850bean/clientgui/ClientGui.java b/src/main/java/com/beanit/iec61850bean/clientgui/ClientGui.java index a981eca..dc21245 100644 --- a/src/main/java/com/beanit/iec61850bean/clientgui/ClientGui.java +++ b/src/main/java/com/beanit/iec61850bean/clientgui/ClientGui.java @@ -18,11 +18,13 @@ import com.beanit.iec61850bean.ClientSap; import com.beanit.iec61850bean.ServerModel; import com.beanit.iec61850bean.ServiceError; import com.beanit.iec61850bean.clientgui.util.Counter; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; + +import javax.swing.*; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; @@ -32,23 +34,6 @@ import java.io.InputStream; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JSeparator; -import javax.swing.JTextField; -import javax.swing.JTree; -import javax.swing.ToolTipManager; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; public class ClientGui extends JFrame implements ActionListener, TreeSelectionListener { @@ -416,7 +401,7 @@ public class ClientGui extends JFrame implements ActionListener, TreeSelectionLi for (int i = 0; i < node.getChildCount(); i++) { y.increment(); DataObjectTreeNode childNode = (DataObjectTreeNode) node.getChildAt(i); - showDataDetails(childNode, pre + "." + childNode.toString(), y); + showDataDetails(childNode, pre + "." + childNode, y); detailsPanel.add(new JSeparator()); addDetailsComponent(new JSeparator(), 0, y.getValue(), 3, 1, 1, 0); } diff --git a/src/main/java/com/beanit/iec61850bean/internal/scl/DoType.java b/src/main/java/com/beanit/iec61850bean/internal/scl/DoType.java index 81ee192..0a0a567 100644 --- a/src/main/java/com/beanit/iec61850bean/internal/scl/DoType.java +++ b/src/main/java/com/beanit/iec61850bean/internal/scl/DoType.java @@ -27,7 +27,7 @@ public final class DoType extends AbstractType { public List das = new ArrayList<>(); public List sdos = new ArrayList<>(); - private String cdc; + private final String cdc; public DoType(Node xmlNode) throws SclParseException { diff --git a/src/main/java/com/beanit/iec61850bean/internal/scl/EnumVal.java b/src/main/java/com/beanit/iec61850bean/internal/scl/EnumVal.java index 6be1024..1bcb476 100644 --- a/src/main/java/com/beanit/iec61850bean/internal/scl/EnumVal.java +++ b/src/main/java/com/beanit/iec61850bean/internal/scl/EnumVal.java @@ -20,7 +20,7 @@ import org.w3c.dom.Node; public final class EnumVal { private final String id; - private int ord; + private final int ord; public EnumVal(String id, int ord) { this.id = id; diff --git a/src/main/java/com/beanit/jositransport/TConnection.java b/src/main/java/com/beanit/jositransport/TConnection.java index 8cd6e71..97f628c 100644 --- a/src/main/java/com/beanit/jositransport/TConnection.java +++ b/src/main/java/com/beanit/jositransport/TConnection.java @@ -14,12 +14,8 @@ package com.beanit.jositransport; import com.beanit.iec61850bean.internal.util.SequenceNumber; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.EOFException; -import java.io.IOException; + +import java.io.*; import java.net.Socket; import java.net.SocketTimeoutException; import java.nio.ByteBuffer; @@ -37,7 +33,7 @@ public final class TConnection { private final ServerThread serverThread; public byte[] tSelRemote = null; public byte[] tSelLocal = null; - private int srcRef; + private final int srcRef; private int dstRef; private int maxTPduSizeParam; private int maxTPduSize;