jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com 1 What is jCleanCim and where to find it? What: – jCleanCim is an open source tool – – Developed to support validation and documentation generation from Enterprise Architect CIM UML models* A Java application, but platform dependent due to usage of applications available on MS Windows only: – Copyright is provided on the download site, as heading in each source file, and as link from every javadoc page Enterprise Architect MS Word A console application, currently without any GUI Where: – Hosted by the CIM Tools group on the CIM Users Group web site for the CIM users community http://cimug.ucaiug.org/Groups/Tools/Shared%20Documents/Forms/AllItems.aspx 2 jCleanCim June 2010 * And also IEC61850 UML model that ABB donated to IEC TC57 in October 2009 jCleanCim directory @ CIMug Use latest version 3 jCleanCim June 2010 Who should use jCleanCim and when? Who: – Primarily those who edit CIM UML and publish its documentation, thus: When: – If you are already a user of the excellent CIMTool, you may wonder where within the process of CIM development and maintenance the jCleanCim fits: 4 jCleanCim June 2010 Official IEC CIM model editors, responsible for maintaining the CIM information model (UML) and for generating official IEC documents, and, Those who define custom non-standard CIM extensions who want to ensure they have followed standard CIM rules and who want to generate documentation for those extensions. You would first use jCleanCim to validate correctness of the CIM information model (UML), and if required, to generate the information model documentation in MS Word format, as required by IEC process. You would then use CIMTool to create CIM profiles (XSD, RDF, OWL) and their documentation (HTML) from the imported CIM UML model, and to validate instance files created based on those profiles. Documentation Start from readme.html available at the SharePoint Once you unzip a jCleanCim distribution (or import the eclipse-dependent one as eclipse project), full documentation is available: – – – 5 jCleanCim June 2010 As javadoc in doc/api/index.html For binary distribution, also as pdf (auto-generated from the javadoc) For source distributions, also build targets dependencies Selecting distribution -bin – -eclipse – jCleanCim June 2010 For jCleanCim developer, packager and user, with eclipse IDE -src – 6 For jCleanCim user For jCleanCim developer, packager and user, with Apache ant Note for CIMTool users CIMTool is an eclipse-based application with a GUI, while jCleanCim only uses eclipse for development and building (it is a simple console application, without GUI) The most comfortable way to use jCleanCim is however with –eclipse.zip distribution, because: – – If you develop in Java with eclipse, you already have what is needed If you have downloaded the CIMTool that contains an eclipse runtime: – – – 7 jCleanCim June 2010 You click to run jCleanCim instead of typing commands in the console window Eclipse gives a nice console output (you can copy/paste and scroll it easily) Using that installation of eclipse (runtime) is not sufficient, because it is only runtime, without support for Java code development You must have an SDK (software development kit) to automatically build the jCleanCim application from sources On eclipse download site, the minimum required distribution is “Eclipse IDE for Java developers”. (you can then install CIMTool plug-in in this version of eclipse) jCleanCim functions jCleanCim first creates in-memory representation of the whole content of UML from .eap file On the fly, it analyses the model and calculates a bunch of things, including effective dependencies and logs that all into log files under log directory, automatically created on the first run After that, depending on what is set in properties (see next slide), one or more of the following gets executed and logged: – Validation of a UML model provided in an .eap file – – – Calculation and printing of statistics of the UML model Generation of MS Word documentation from the UML model (deprecated) Bulk updating of the UML model 8 jCleanCim June 2010 UML of standard IEC CIM, base and extensions UML of IEC61850 donated to IEC TC57 Custom extensions of any of these Was necessary for model cleanup after moving from Rational Rose to Enterprise Architect in 2008 Likely to be removed soon jCleanCim configuration 9 jCleanCim June 2010 Use file config/config.properties Minimum configuration for CIM* validation and stats: Minimum configuration for CIM* doc generation: model = base-small.eap validate = true statistics = true scope = model = base-small.eap docgen = true inTemplate = base-small-template.doc outDocument = base-small.doc analysePlaceholders = true * UML of IEC61850 needs more than this, see doc in config.properties file jCleanCim input files For any function, you need at least an .eap model file For MS Word document generation, you also need an MS Word template (regular .doc file) with particular jCleanCim placeholders All distributions contain two sets of files in the project’s input directory: – – 10 jCleanCim June 2010 base-small – small subset of base CIM with lots of buggy constructs, on purpose, to show DON’T’s noScl-small – small subset of UML of IEC61850 that validates You should copy your own .eap and .doc files in the project’s input directory Recommended UML model structure (1/2) One root (“Model”) – Any number of model packages under the root – – 11 jCleanCim June 2010 (example from basesmall.eap, does not reflect the full model, just small part of it) Currently, jCleanCim ignores everything but the first root in the .eap project Each with either CIM on NON_CIM nature NON_CIM nature must be explicitly specified in config.properties, with nonCimNature property Any number of top-level packages (per WG owner) under the model package – A top-level package expected to contain a version class with correct name nonCimNature = IEC61850_SCL_mappings, MyNonCimExtensions Recommended UML model structure (2/2) Rationale – – Preserves the current standard CIM “place” in the .eap project Clearly separates CIM and non-CIM models – Clearly separates standard UML and non-standard extensions 12 jCleanCim June 2010 (example from basesmall.eap, does not reflect the full model, just small part of it) – Nature need not be encoded in UML, but in properties file Easy to evolve/update/merge standard model as it evolves Easy to independently evolve/update/merge variations of custom extensions, without interfering with the standard UML Top-level packages may be associated with IEC TC57 WGs (or to projects, for custom extensions) Standard UML top-package owners WG13 WG16 – WG10* (example from basesmall.eap, does not reflect the full model, just small part of it) 13 jCleanCim June 2010 * potentially Currently, jCleanCim encodes the mapping of top-level packages and IEC TC57 owners: WG13, WG14, WG16, WG10, WG19 All other UML packages and elements get assigned the owner “OTHER” If more flexibility needed, we have to redesign this in jCleanCim Functionality - validation & stats, doc generation - 14 Validation: Minimum configuration You must specify the UML model file name and enable validation Copy your own model file(s) into the project’s input directory model = base-small.eap validate = true 15 jCleanCim June 2010 * UML of IEC61850 needs more than this, see doc in config.properties file Validation: Overview (1/2) Validators for 7 kinds of UML elements – – – – – – – Validators deal with: – – – – 16 jCleanCim June 2010 Associations Attributes Classes Packages Diagrams Dependencies (hand-drawn in UML), and Operations (for UML of IEC61850 only) – Model consistency CIM UML design rules Potential model editor errors Identifying remains from Rose Illegal/redundant UML constructs (that EA allows…) Validation: Overview (2/2) Each validator is a class – – – Full list of validators currently implemented is on the next two slides, with a couple of annotated examples for class validators – – – 17 jCleanCim June 2010 Inheriting from a common abstract class, and implementing an interface Javadoc in package org.iec.tc57.jcleancim.validation provides guidelines on how to add a validator It is easy to add a new validator on need! List is copied from the javadoc of the package org.iec.tc57.jcleancim.validation Javadoc also contains UML for all the classes (not shown below) Some validators apply in general, some apply to CIM models only, and some to UML of IEC61850 only Validation: Associations, attributes and classes Model inconsiste ncies Remain s from Rose CIM rules EA allows for this 18 jCleanCim June 2010 Editor’s error Validation: Dependencies (hand-drawn), diagrams, operations, packages UML of IEC61850 only 19 jCleanCim June 2010 Validation: Console logging Extract from validation log with base-small.eap UML model – – In some future release, we could implement storing this in a csv file, to enable loading into a spreadsheet and sorting for analysis – 20 jCleanCim June 2010 ERROR 2 classes with <diagnosis> Next 2 lines identify classes with error/warning and details of error/warning Or, if we keep our std CIM UML clean, this may not be necessary! Validation: Fine tuning If you leave scope property empty, the full content of the UML will be validated – – – Sub-options for validation, to select only kind of UML element to validate – 21 jCleanCim June 2010 To validate only some top level packages (per IEC WG), specify them in a comma-separated list Example is for validating IEC61970 and IEC61968, everything else does not get validated Recommendation: Before releasing std model, do full validation, to ensure nothing has been broken Example for validating only associations involving WG13 and WG14 packages model = base-small.eap validate = true statistics = true scope = WG13, WG14 # ---------------------------# Validation sub-options make sense # only if validate = true. To disable # validation for certain UML element # types, set the ones to ignore to false # or leave them blank. # ---------------------------validatePackages = validateClasses = validateAssociations = true validateAttributes = validateOperations = validateDependencies = validateDiagrams = Statistics: Minimum configuration You must specify the UML model file name and enable statistics Copy your own model file(s) into the project’s input directory model = base-small.eap statistics = true 22 jCleanCim June 2010 * UML of IEC61850 needs more than this, see doc in config.properties file Statistics: Overview Currently, two main kinds of statistics get logged to the console: – – 23 jCleanCim June 2010 On CIM-specific constructs On actual (direct and derived) dependencies Statistics: On CIM-specific constructs 24 jCleanCim June 2010 Example of CIM-specific constructs from base-small.eap: Statistics: On actual dependencies On actual (direct and derived) dependencies among top-level packages (i.e., among WG owners), through: – – – – – Inheritance from IdentifiedObject and dependency on stereotyped types from Domain package not shown on purpose: – 25 jCleanCim June 2010 Inheritance (e.g., from PowerSystemResource) Type of attribute (e.g., usage of datatypes, enums, primitives, compounds) Associations Hand-drawn package and class dependencies Class’ operation parameters and exceptions (UML of IEC61850 only) To show them as well, set the two ignore* properties to false, or leave them empty ignoreIdObjectInheritance = ignoreDomainClassAttributes = Statistics: TODOs Filtering per WG not fully implemented IEC61850-specific statistics not implemented Note: – – – 26 jCleanCim June 2010 As previously said, the in-memory representation of the UML from .eap file contains a lot of analysed information about the model It all gets logged with DEBUG level (i.e., stored in the log file at each run) – see examples below for ConnectivityNode, ApparentPower, BasicIntervalSchedule If needed, better structured presentation can be provided and stored 2010-06-06 14:05:21,984 [main] DEBUG UmlModel - (796) WG13 CIM class Topology::ConnectivityNode, 1 superclasses=[IdentifiedObject], 4 associations; associated classes (bi-directional): asTarget=[Topology::BusNameMarker, Core::Terminal] asSource=[Core::ConnectivityNodeContainer, Topology::TopologicalNode] … 2010-06-06 14:05:21,984 [main] DEBUG UmlModel - (616) WG13 CIM Datatype <<Datatype>> Domain::ApparentPower, 3 attributes; afferent classes: byAttr=[BasePower];; efferent classes: byAttr=[Float, UnitMultiplier, UnitSymbol] … 2010-06-06 14:05:21,984 [main] DEBUG UmlModel - (865) WG13 CIM class Core::BasicIntervalSchedule, 1 superclasses=[IdentifiedObject], 2 subclasses=[IrregularIntervalSchedule, RegularIntervalSchedule], 5 attributes; efferent classes: byAttr=[AbsoluteDateTime, UnitMultiplier, UnitSymbol] afferent = depends on me efferent = I depend on Doc generation: Minimum configuration You must specify the UML model file name and enable doc generation You must specify also the input (template) and the output (result) MS Word file names Copy your own model file(s) and template(s) into the project’s input directory model = base-small.eap docgen = true inTemplate = base-small-template.doc outDocument = base-small.doc analysePlaceholders = true 27 jCleanCim June 2010 See slide “File and package placeholders” * UML of IEC61850 needs more than this, see doc in config.properties file Doc generation: Overview The template file is a regular MS Word document (not Word template with .dot extension) – – When generating documentation, jCleanCim will: – – – – jCleanCim June 2010 Copy your template file into the projects output directory, created automatically the first time you run the document generation, Rename the copied file as given in the properties file, and Fill it with the contents from the EA model. You can safely run document generation several times with the same name of the output file, without overwriting existing output files – 28 You put in that template jCleanCim-recognised placeholders (see next slide) They control what should be picked from the UML model and printed into MS Word document If the output file exists, jCleanCim will rename it by appending a system nanosecond time The disadvantage is that you will need to delete those discarded files from the output directory from time to time, but at least nothing gets lost without your control Resulting file is available in the project’s output directory Doc generation: Placeholders The tokens enclosed in curly braces are the names of UML elements designating what needs to be inserted in place of the whole placeholder. startUmlDiagram.{packageName}.{diagramName}.endUml Inserts diagram startUmlAttribute.{className}.{attributeName}.endUml Inserts value of attribute (for version classes) startUmlFile..endUml Inserts name of .eap file startUmlDocPackage.{packageName}.endUml startUmlDataIndex.{packageName}.endUml Inserts recursively given package and all of its sub-packages (IEC 61850-7-4,-3) Inserts data semantics tables startUmlSpecialPackage.{packageName}.endUml (IEC 61850-7-4) Inserts Domain61850 tables startUmlPackage.{packageName}.endUml 29 jCleanCim June 2010 (IEC 61970-301) Inserts package doc only - may be removed in the future Doc generation: Attribute and diagram placeholders 30 jCleanCim June 2010 Placeholder from template gets replaced with some content If placeholder is not recognised or has typos, error gets printed instead of content template result Doc generation: File and package placeholders If problem with the placeholder for package (in the heading paragraph), only error gets printed instead of the package content Doc generation (in particular for UML package content, recursively) takes long – – – 31 jCleanCim June 2010 To ensure you have correct placeholders for packages, set property analysePlaceholders= true This will skip (time consuming) printing of the full content of packages After debugging the template, leave analysePlaceholders empty to get the full content template result Doc generation: Data index placeholder Required for IEC61850 documents – – – jCleanCim June 2010 If needed, (named) association ends could be added For this to work, you must specify the desired package name (or multiple comma-separated package names) in the property packagesWithDataIndex – 32 From base-small.eap example: attribute basePower used in classes BaseVoltage and BasePower Currently, only attributes – template Prints all usages of a name for attribute – Can be handy for CIM series as well, and for custom extensions Can be used for “model debugging” and consistency check For this base-small.eap example, we have set packagesWithDataIndex = Core To print this index for base CIM, set packagesWithDataIndex = IEC61970 result Doc generation: Automatically added items (1/2) Sub-clause “General” – Figure reference and text, and figure caption – 33 jCleanCim June 2010 To avoid hanging paragraphs (i.e., text without containing clause) Automatically numbered, consistent with existing figures in the template Doc generation: Automatically added items (2/2) Table reference and text for attributes and association ends – 34 jCleanCim June 2010 Automatically numbered, consistent with existing figures in the template Doc generation: MS Word styles considerations IEC templates contain IEC-specific styles For custom extensions, you need not use these – Essential: – – – – 35 jCleanCim June 2010 jCleanCim tries to use IEC styles, and if those are not defined, it uses default MS Word styles – see next slide Use correct styles for paragraphs containing figure and table captions in the template jCleanCim must deduce the number of figures and tables already existing in the template to calculate on the fly the correct numbering for new figures and tables (when inserting/appending the documentation for the UML model elements and diagrams) If jCleanCim throws an exception during document generation, it is very likely that the MS Word threw exception due to wrong/inexisting/negative number for the figure or table caption Note: We cannot check those numbers from within the code, because the MS Word automation API does not provide reliable access to them. In the worst case, when we catch an exception from MS Word, we attempt to gracefully exit, after closing both the MS Word document and the EA model file. Doc generation: IEC styles mappings to MS Word defaults 36 jCleanCim June 2010 Extract from the code: static { STYLES.put(Style.para, STYLES.put(Style.fig, STYLES.put(Style.figcapt, STYLES.put(Style.tabcapt, STYLES.put(Style.tabhead, STYLES.put(Style.tabcell, STYLES.put(Style.h1, STYLES.put(Style.h2, STYLES.put(Style.h3, STYLES.put(Style.h4, STYLES.put(Style.h5, STYLES.put(Style.h6, STYLES.put(Style.h7, STYLES.put(Style.h8, STYLES.put(Style.h9, } IEC styles new new new new new new new new new new new new new new new StyleInfo("PARAGRAPH", StyleInfo("Picture", StyleInfo("FIGURE-title", StyleInfo("TABLE-title", StyleInfo("TABLE-col-heading", StyleInfo("TABLE-cell", StyleInfo("Heading 1", StyleInfo("Heading 2", StyleInfo("Heading 3", StyleInfo("Heading 4", StyleInfo("Heading 5", StyleInfo("Heading 6", StyleInfo("Heading 7", StyleInfo("Heading 8", StyleInfo("Heading 9", MS Word defaults wdStyleNormal)); wdStyleNormal)); wdStyleCaption)); wdStyleCaption)); wdStyleNormalTable)); wdStyleNormalTable)); wdStyleHeading1)); wdStyleHeading2)); wdStyleHeading3)); wdStyleHeading4)); wdStyleHeading5)); wdStyleHeading6)); wdStyleHeading7)); wdStyleHeading8)); wdStyleHeading9)); Doc generation: Misc For IEC61850 document generation, more properties need to be set – See comments in config.properties file jCleanCim doc generation design – The UML packages content to be printed in MS Word actually gets calculated and stored in in-memory objects before interacting with MS Word, on purpose – 37 jCleanCim June 2010 This processing is very fast Except for diagram printing (from clipboard, through EA API), this is also detached from the .eap file If needed, it would be relatively easy and fast to implement writing to another format (instead of MS Word) Instead of conclusion 38 Time considerations Each function ends with time elapsed logged to the console [main] INFO built model(s) 'IEC61970_IEC61968_combined CIM, IEC61850_SCL_mappings NON_CIM, MyCimExtensions CIM, MyNonCimExtensions NON_CIM' in 0:00:11. Java APIs to COM (for Enterprise Architect and for MS Word) are terribly slow On ThinkPad T60p: – Full standard CIM UML building (from .eap) takes ~2 min – – 39 jCleanCim June 2010 With UML of IEC61850 and mappings to CIM: ~4 min Doc generation of DCIM (IEC61968, ~100 classes and ~20 additional figures) takes ~20 min Java processing for validation and stats is below 1sec for each, despite fully enabled logging So, plan your coffee and lunch breaks Known issues Related to doc generation only – due to troubles with MS Word automation API – With some IEC templates, automatic update of tables of contents/tables/figures does not work properly – Word pop-up window "memory insufficient. Do you want to continue?“ – 40 jCleanCim June 2010 Workaround: Before doc generation, in the input template, disable spell checking and change tracking Exceptions when using localised versions of MS Word, due to style names Workaround: After doc generation, do manual update of all TOCs Workaround: Define IEC document styles, or at least regular English styles Normal and Caption If acceptable by IEC, we may want to try docbook for editing (http://www.docbook.org/) Success stories We have successfully generated: – – 41 jCleanCim June 2010 IEC 61970-301 Ed.4 (base CIM14), and IEC 61968-11 Ed.1 (DCIM10) Want more features? jCleanCim is being developed on volunteering basis Consequently: – The policy is to first support the immediate needs of official IEC TC57 UML models’ editors, for their tasks of UML model management: – This includes: 42 jCleanCim June 2010 For the IEC process, and, For the user community. Bug fixes New features that are easy to add (e.g., new validators, improved logging, better validation filtering and such) If you want more advanced features (like GUI): – Get involved – any help is welcome ! Credits Lars-Ola Osterlund (ABB, Sweden) encouraged development of documentation generation for IEC 61850 UML model donated to IEC TC 57, to illustrate at least one benefit of using UML in WG10. Kendall Demaree (Areva, US), while being CIM model manager in 2008, developed open source CIMinEA application that helped us move standard CIM from Rational Rose to Enterprise Architect, and which allowed document generation for IEC 61970-301, Ed. 3. That work inspired some of the functionality related to document generation in jCleanCim. Kendall has also been the first known user of jCleanCim and actively provided feedback on features. He indeed encouraged the move from CIMinEA to jCleanCim for doc generation, since: – – 43 jCleanCim June 2010 jCleanCim also has validation and statistics functions, and jCleanCim is written in Java (CIM community, including developers, could thus easier contribute to further development and maintenance of jCleanCim).