43
1 jCleanCim introduction June 2010 [email protected]. com

1 jCleanCim introduction June 2010 [email protected]

Embed Size (px)

Citation preview

Page 1: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

1

jCleanCim introduction

June 2010

[email protected]

Page 2: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

2jCleanCimJune 2010

What is jCleanCim and where to find it?

What:– jCleanCim is an open source tool

Copyright is provided on the download site, as heading in each source file, and as link from every javadoc page

– 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:

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

* And also IEC61850 UML model that ABB donated to IEC TC57 in October 2009

Page 3: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

3jCleanCimJune 2010

jCleanCim directory @ CIMug

Use latest version

Page 4: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

4jCleanCimJune 2010

Who should use jCleanCim and when?

Who:– Primarily those who edit CIM UML and publish its documentation, thus:

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.

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:

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.

Page 5: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

5jCleanCimJune 2010

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:

– 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

Page 6: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

6jCleanCimJune 2010

Selecting distribution

-bin– For jCleanCim user

-eclipse– For jCleanCim

developer, packager and user, with eclipse IDE

-src– For jCleanCim

developer, packager and user, with Apache ant

Page 7: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

7jCleanCimJune 2010

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:

– 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)

If you develop in Java with eclipse, you already have what is needed If you have downloaded the CIMTool that contains an eclipse runtime:

– 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)

Page 8: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

8jCleanCimJune 2010

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 UML of standard IEC CIM, base and extensions UML of IEC61850 donated to IEC TC57 Custom extensions of any of these

– 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

Was necessary for model cleanup after moving from Rational Rose to Enterprise Architect in 2008

Likely to be removed soon

Page 9: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

9jCleanCimJune 2010

Use file config/config.properties

Minimum configuration for CIM* validation and stats:

Minimum configuration for CIM* doc generation:

jCleanCim configuration

model = base-small.eapvalidate = truestatistics = truescope =

model = base-small.eapdocgen = trueinTemplate = base-small-template.docoutDocument = base-small.docanalysePlaceholders = true

* UML of IEC61850 needs more than this, see doc in config.properties file

Page 10: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

10jCleanCimJune 2010

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:

– 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

jCleanCim input files

Page 11: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

11jCleanCimJune 2010

One root (“Model”)– Currently, jCleanCim ignores

everything but the first root in the .eap project

Any number of model packages under the root

– 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

Recommended UML model structure (1/2)

nonCimNature = IEC61850_SCL_mappings, MyNonCimExtensions

(example from base-small.eap, does not reflect the full model, just small part of it)

Page 12: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

12jCleanCimJune 2010

Rationale– Preserves the current standard CIM

“place” in the .eap project– Clearly separates CIM and non-CIM

models Nature need not be encoded in UML,

but in properties file– Clearly separates standard UML and

non-standard extensions 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)

Recommended UML model structure (2/2)

(example from base-small.eap, does not reflect the full model, just small part of it)

Page 13: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

13jCleanCimJune 2010

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

Standard UML top-package owners

WG10*

WG16WG13

* potentially

(example from base-small.eap, does not reflect the full model, just small part of it)

Page 14: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

14

Functionality- validation & stats, doc generation -

Page 15: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

15jCleanCimJune 2010

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.eapvalidate = true

* UML of IEC61850 needs more than this, see doc in config.properties file

Page 16: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

16jCleanCimJune 2010

Validation:Overview (1/2)

Validators for 7 kinds of UML elements– Associations– Attributes– Classes– Packages– Diagrams– Dependencies (hand-drawn in UML), and– Operations (for UML of IEC61850 only)

Validators deal with:– Model consistency– CIM UML design rules– Potential model editor errors– Identifying remains from Rose– Illegal/redundant UML constructs (that EA allows…)

Page 17: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

17jCleanCimJune 2010

Validation:Overview (2/2)

Each validator is a class– 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!

Full list of validators currently implemented is on the next two slides, with a couple of annotated examples for class validators

– 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

Page 18: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

18jCleanCimJune 2010

Validation:Associations, attributes and classes

EA allows for this

Editor’s error

CIM rules

Model inconsistencies

Remains from Rose

Page 19: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

19jCleanCimJune 2010

Validation:Dependencies (hand-drawn), diagrams, operations, packages

UML of IEC61850 only

Page 20: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

20jCleanCimJune 2010

Validation:Console logging

Extract from validation log with base-small.eap UML model– ERROR 2 classes with <diagnosis>– Next 2 lines identify classes with error/warning and details of

error/warning In some future release, we could implement storing this in a csv

file, to enable loading into a spreadsheet and sorting for analysis

– Or, if we keep our std CIM UML clean, this may not be necessary!

Page 21: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

21jCleanCimJune 2010

Validation:Fine tuning

If you leave scope property empty, the full content of the UML will be validated

– 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

Sub-options for validation, to select only kind of UML element to validate

– Example for validating only associations involving WG13 and WG14 packages

model = base-small.eapvalidate = truestatistics = truescope = 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 = truevalidateAttributes =validateOperations =validateDependencies =validateDiagrams =

Page 22: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

22jCleanCimJune 2010

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

* UML of IEC61850 needs more than this, see doc in config.properties file

model = base-small.eapstatistics = true

Page 23: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

23jCleanCimJune 2010

Currently, two main kinds of statistics get logged to the console:– On CIM-specific constructs– On actual (direct and derived) dependencies

Statistics:Overview

Page 24: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

24jCleanCimJune 2010

Example of CIM-specific constructs from base-small.eap:

Statistics:On CIM-specific constructs

Page 25: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

25jCleanCimJune 2010

Statistics:On actual dependencies

On actual (direct and derived) dependencies among top-level packages (i.e., among WG owners), through:

– 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) Inheritance from IdentifiedObject and

dependency on stereotyped types from Domain package not shown on purpose:

– To show them as well, set the two ignore* properties to false, or leave them empty

ignoreIdObjectInheritance =ignoreDomainClassAttributes =

Page 26: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

26jCleanCimJune 2010

Statistics:TODOs

Filtering per WG not fully implemented IEC61850-specific statistics not implemented Note:

– 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 stored2010-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 meefferent = I depend on

Page 27: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

27jCleanCimJune 2010

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

* UML of IEC61850 needs more than this, see doc in config.properties file

model = base-small.eapdocgen = true

inTemplate = base-small-template.docoutDocument = base-small.doc

analysePlaceholders = true See slide “File and package placeholders”

Page 28: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

28jCleanCimJune 2010

Doc generation:Overview

The template file is a regular MS Word document (not Word template with .dot extension)

– 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 When generating documentation, jCleanCim will:

– 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

– 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

Page 29: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

29jCleanCimJune 2010

startUmlDiagram.{packageName}.{diagramName}.endUml

startUmlAttribute.{className}.{attributeName}.endUml

startUmlFile..endUml

startUmlDocPackage.{packageName}.endUml

startUmlPackage.{packageName}.endUml

startUmlDataIndex.{packageName}.endUml

startUmlSpecialPackage.{packageName}.endUml

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.

(IEC 61850-7-4,-3) Inserts data semantics tables

(IEC 61970-301) Inserts package doc only - may be removed in the future

(IEC 61850-7-4) Inserts Domain61850 tables

Inserts recursively given package and all of itssub-packages

Inserts value of attribute (for version classes)

Inserts diagram

Inserts name of .eap file

Page 30: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

30jCleanCimJune 2010

Doc generation:Attribute and diagram placeholders

Placeholder from template gets replaced with some content

If placeholder is not recognised or has typos, error gets printed instead of content

template

result

Page 31: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

31jCleanCimJune 2010

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

– 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

Page 32: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

32jCleanCimJune 2010

Doc generation:Data index placeholder

Required for IEC61850 documents– Can be handy for CIM series as well,

and for custom extensions– Can be used for “model debugging”

and consistency check Prints all usages of a name for

attribute– From base-small.eap example:

attribute basePower used in classes BaseVoltage and BasePower

Currently, only attributes– 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

– For this base-small.eap example, we have set packagesWithDataIndex = Core

– To print this index for base CIM, set packagesWithDataIndex = IEC61970

template

result

Page 33: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

33jCleanCimJune 2010

Doc generation:Automatically added items (1/2)

Sub-clause “General”

– To avoid hanging paragraphs (i.e., text without containing clause)

Figure reference and text, and figure caption

– Automatically numbered, consistent with existing figures in the template

Page 34: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

34jCleanCimJune 2010

Doc generation:Automatically added items (2/2)

Table reference and text for attributes and association ends

– Automatically numbered, consistent with existing figures in the template

Page 35: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

35jCleanCimJune 2010

Doc generation:MS Word styles considerations

IEC templates contain IEC-specific styles For custom extensions, you need not use these

– jCleanCim tries to use IEC styles, and if those are not defined, it uses default MS Word styles – see next slide

Essential:– 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.

Page 36: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

36jCleanCimJune 2010

Doc generation:IEC styles mappings to MS Word defaults

Extract from the code:

static { STYLES.put(Style.para, new StyleInfo("PARAGRAPH", wdStyleNormal)); STYLES.put(Style.fig, new StyleInfo("Picture", wdStyleNormal)); STYLES.put(Style.figcapt, new StyleInfo("FIGURE-title", wdStyleCaption)); STYLES.put(Style.tabcapt, new StyleInfo("TABLE-title", wdStyleCaption)); STYLES.put(Style.tabhead, new StyleInfo("TABLE-col-heading", wdStyleNormalTable)); STYLES.put(Style.tabcell, new StyleInfo("TABLE-cell", wdStyleNormalTable)); STYLES.put(Style.h1, new StyleInfo("Heading 1", wdStyleHeading1)); STYLES.put(Style.h2, new StyleInfo("Heading 2", wdStyleHeading2)); STYLES.put(Style.h3, new StyleInfo("Heading 3", wdStyleHeading3)); STYLES.put(Style.h4, new StyleInfo("Heading 4", wdStyleHeading4)); STYLES.put(Style.h5, new StyleInfo("Heading 5", wdStyleHeading5)); STYLES.put(Style.h6, new StyleInfo("Heading 6", wdStyleHeading6)); STYLES.put(Style.h7, new StyleInfo("Heading 7", wdStyleHeading7)); STYLES.put(Style.h8, new StyleInfo("Heading 8", wdStyleHeading8)); STYLES.put(Style.h9, new StyleInfo("Heading 9", wdStyleHeading9));}

IEC styles MS Word defaults

Page 37: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

37jCleanCimJune 2010

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

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)

Page 38: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

38

Instead of conclusion

Page 39: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

39jCleanCimJune 2010

Time considerations

Each function ends with time elapsed logged to the console

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 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

[main] INFO built model(s) 'IEC61970_IEC61968_combined CIM, IEC61850_SCL_mappings NON_CIM, MyCimExtensions CIM, MyNonCimExtensions NON_CIM' in 0:00:11.

Page 40: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

40jCleanCimJune 2010

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

Workaround: After doc generation, do manual update of all TOCs– Word pop-up window "memory insufficient. Do you want to

continue?“ 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: 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/)

Page 41: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

41jCleanCimJune 2010

Success stories

We have successfully generated:– IEC 61970-301 Ed.4 (base CIM14), and– IEC 61968-11 Ed.1 (DCIM10)

Page 42: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

42jCleanCimJune 2010

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:

For the IEC process, and, For the user community.

– This includes: 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 !

Page 43: 1 jCleanCim introduction June 2010 tatjana.kostic@ch.abb.com

43jCleanCimJune 2010

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:

– 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).