From 50115191ccaeb55b247117d134c00c2e7be99a39 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Sat, 26 Dec 2015 12:15:53 +0100 Subject: [PATCH] - SCL parser/modeviewer: show unused types --- tools/model_generator/modelviewer.jar | Bin 0 -> 83139 bytes .../libiec61850/scl/model/DataAttribute.java | 4 +++ .../com/libiec61850/scl/model/DataObject.java | 3 +++ .../libiec61850/scl/model/LogicalNode.java | 3 +++ .../com/libiec61850/scl/types/SclType.java | 9 +++++++ .../com/libiec61850/tools/ModelViewer.java | 25 ++++++++++++++++-- 6 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 tools/model_generator/modelviewer.jar diff --git a/tools/model_generator/modelviewer.jar b/tools/model_generator/modelviewer.jar new file mode 100644 index 0000000000000000000000000000000000000000..27a0c016a24e1fc82d38cbb461db4fd3d33f33d4 GIT binary patch literal 83139 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 z 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≧̸(VR4o7A)kuR^(p*iX+ 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 Lgt7o@Q<(n;=|y2- literal 0 HcmV?d00001 diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java index 44193d78..8362d86e 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataAttribute.java @@ -87,6 +87,8 @@ public class DataAttribute implements DataModelNode { if (!(this.sclType instanceof EnumerationType)) throw new SclParserException("Wrong type definition for enumerated data attribute"); + + this.sclType.setUsed(true); } private void createConstructedAttribute(DataAttributeDefinition daDefinition, TypeDeclarations typeDeclarations) @@ -98,6 +100,8 @@ public class DataAttribute implements DataModelNode { if (!(this.sclType instanceof DataAttributeType)) throw new SclParserException("Wrong type definition for constructed data attribute"); + + this.sclType.setUsed(true); DataAttributeType dataAttributeType = (DataAttributeType) this.sclType; diff --git a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java index 818bfadd..c7fae5e0 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/DataObject.java @@ -55,6 +55,9 @@ public class DataObject implements DataModelNode { if (sclType == null) throw new SclParserException("type declaration missing for data object."); + + /* mark type as used */ + sclType.setUsed(true); createDataAttributes(typeDeclarations, sclType); diff --git a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java index 6033732f..021dfc80 100644 --- a/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java +++ b/tools/model_generator/src/com/libiec61850/scl/model/LogicalNode.java @@ -82,6 +82,9 @@ public class LogicalNode implements DataModelNode { dataObjects = new LinkedList(); LogicalNodeType type = (LogicalNodeType) sclType; + + /* mark type as used */ + type.setUsed(true); List doDefinitions = type.getDataObjectDefinitions(); diff --git a/tools/model_generator/src/com/libiec61850/scl/types/SclType.java b/tools/model_generator/src/com/libiec61850/scl/types/SclType.java index f6edac4a..fab834bb 100644 --- a/tools/model_generator/src/com/libiec61850/scl/types/SclType.java +++ b/tools/model_generator/src/com/libiec61850/scl/types/SclType.java @@ -30,6 +30,7 @@ public abstract class SclType { private String id = null; private String description; + private boolean isUsed = false; public SclType(Node xmlNode) throws SclParserException { this.id = ParserUtils.parseAttribute(xmlNode, "id"); @@ -51,4 +52,12 @@ public abstract class SclType { public String getDesc() { return description; } + + public void setUsed(boolean isUsed) { + this.isUsed = isUsed; + } + + public boolean isUsed() { + return this.isUsed; + } } diff --git a/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java b/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java index d364959f..b1059043 100644 --- a/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java +++ b/tools/model_generator/src/com/libiec61850/tools/ModelViewer.java @@ -26,7 +26,7 @@ import com.libiec61850.scl.types.TypeDeclarations; public class ModelViewer { - private static void showTypes(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName) + private static void showTypes(InputStream stream, String icdFile, PrintStream output, String iedName, String accessPointName, boolean unusedOnly) throws SclParserException { SclParser sclParser = new SclParser(stream, false); @@ -34,6 +34,12 @@ public class ModelViewer { TypeDeclarations typeDecl = sclParser.getTypeDeclarations(); for (SclType type : typeDecl.getTypeDeclarations()) { + + if (unusedOnly) { + if (type.isUsed() == true) + continue; + } + output.print(type.getId()); if (type.getClass() == LogicalNodeType.class) @@ -45,6 +51,10 @@ public class ModelViewer { else if (type.getClass() == EnumerationType.class) output.print(" : Enumeration"); + if (!unusedOnly) + if (type.isUsed() == false) + System.out.print(" UNUSED TYPE!"); + output.println(); } } @@ -175,6 +185,7 @@ public class ModelViewer { System.out.println(" -ied select IED"); System.out.println(" -ap select AP"); System.out.println(" -t print type list"); + System.out.println(" -u print list of unused types"); System.out.println(" -s print IED device model structure"); System.out.println(" -a print list of data attributes (object references)"); System.exit(1); @@ -188,6 +199,7 @@ public class ModelViewer { String iedName = null; boolean printTypeList = false; + boolean printUnusedTypes = false; boolean printModelStructure = false; boolean printDataAttribtues = false; @@ -225,6 +237,12 @@ public class ModelViewer { i++; + } + else if (args[i].equals("-u")) { + printUnusedTypes = true; + + i++; + } else { outputStream = new PrintStream(new FileOutputStream(new File(args[i]))); @@ -237,7 +255,10 @@ public class ModelViewer { try { if (printTypeList) - showTypes(stream, icdFile, outputStream, iedName, accessPointName); + showTypes(stream, icdFile, outputStream, iedName, accessPointName, false); + + if (printUnusedTypes) + showTypes(stream, icdFile, outputStream, iedName, accessPointName, true); if (printModelStructure) printModelStructure(stream, icdFile, outputStream, iedName, accessPointName);