P
Paul Wells
This white paper abstract is published 1st March 2004. Any comments upon it can be sent via our
website www.modelistic.com or responding on this newsgroup. This forms part of the technical
specification for a new product called Modelistic JME, as created by Modelistic Software Ltd in the
UK. The contents are copyrighted © Modelistic Software Ltd., all rights reserved.
The product is packaged as a plugin for the Eclipse (www.eclipse.org) platform, and centres upon the
creation of UML class diagram, for use by Java programmers, and driven directly from the Eclipse
Java Development Tooling (JDT) model.
There are two major innovations in this product. Firstly, Modelistic JME has no need to store any
more information than the name of the class, and where it is positioned on the diagram; the members
of the class are populated from the JDT model as the diagram is opened. Diagram information is
stored in XML.
The second innovation is that the user is permitted to define sets of model elements, in so called
"profile files" which are written in XML. There are a range of attributes which qualify elements to
a set including, name, package, Javadoc tag, owner superclass, signature and others. Sets can be
built up using inclusion and exclusion rules applied to the attributes. Sets may also be combined to
create other sets, or control the qualification by attributes of elements in other sets.
Appearance of model elements on a diagram are defined through colors, colorset and a range of
element and line styles. These are used to build up abstract sets of directives for displaying a
Java model element.
Finally, mappings may be created to instruct Modelistic JME to present elements conforming to a
particular element set using a declared appearance. This in turn can be used to view class diagrams
with filtering, ordering, grouping and highlighting as driven by the profile file suited to the
particular Java technology being used by the Java programmer.
Below is the factory (out of the box) profile as an example.
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file contains the factory settings which control the look and
feel of the Modelistic JME plugin for Eclipse. Project specific classes and
files should not be mentioned here, as they are beyond the reach of the
refactoring functions. Project specific profiles should be kept under the project
directory to indicate that they belong to the project and should be included in
refactoring operations.
-->
<jmeProfile>
<!-- colors -->
<color id="defaultProfile.color.black" value="#000000"/>
<color id="defaultProfile.color.white" value="#FFFFFF"/>
<color id="defaultProfile.color.lightGray" value="#CCCCCC"/>
<color id="defaultProfile.color.darkGray" value="#666666"/>
<color id="defaultProfile.color.lightYellow" value="#FFFFBB"/>
<color id="defaultProfile.color.darkYellow" value="#FFFF99"/>
<color id="defaultProfile.color.buff" value="#FFCC66"/>
<color id="defaultProfile.color.lightBlue" value="#CCCCFF"/>
<color id="defaultProfile.color.darkBlue" value="#000077"/>
<color id="defaultProfile.color.mediumBlue" value="#0000DD"/>
<color id="defaultProfile.color.deepRed" value="#770000"/>
<!-- color sets -->
<colorset
id="defaultProfile.colorset.defaultBackground"
normal="defaultProfile.color.lightYellow"
selected="defaultProfile.color.darkYellow"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultBorder"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.lightGray"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultNameText"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.black"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTypeText"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.deepRed"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTitleBar"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.darkBlue"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTitleText"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.white"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultIconBackgroud"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.white"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultLine"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.black"
print="defaultProfile.color.black"/>
<!-- text styles -->
<textStyle
id="defaultProfile.textStyle.defaultName"
colors="defaultProfile.colorset.defaultNameText"
bold="true"
italic="false"/>
<textStyle
id="defaultProfile.textStyle.defaultType"
colors="defaultProfile.colorset.defaultTypeText"
bold="false"
italic="true"/>
<textStyle
id="defaultProfile.textStyle.defaultTitle"
colors="defaultProfile.colorset.defaultTitleText"
bold="true"
italic="false"/>
<textStyle
id="defaultProfile.textStyle.defaultOther"
colors="defaultProfile.colorset.defaultNameText"
bold="false"
italic="false"/>
<!-- element sets -->
<elementSet id="defaultProfile.elementSet.all" defaultInclude="true"/>
<elementSet id="defaultProfile.elementSet.allTypes">
<types/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allFields">
<fields/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allMethods">
<methods/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allInitializers">
<initializers/>
</elementSet>
<!-- member orders -->
<memberOrder id="defaultProfile.memberOrder.default">
<memberDivision visibleMembers="defaultProfile.elementSet.allFields">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allMethods">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allInitializers">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allTypes">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
</memberOrder>
<!-- member display styles -->
<classDisplayStyle
id="defaultProfile.classDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
colors.titleBar="defaultProfile.colorset.defaultTitleBar"
colors.iconBackground="defaultProfile.colorset.defaultIconBackgroud"
show.icon="yes"
show.package="yes"
textStyle.name="defaultProfile.textStyle.defaultTitle"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<fieldDisplayStyle
id="defaultProfile.fieldDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
show.type="yes"
show.typePackage="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.type="defaultProfile.textStyle.defaultType"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<methodDisplayStyle
id="defaultProfile.methodDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
show.exceptionPackages="yes"
show.exceptions="yes"
show.parameterNames="yes"
show.parameterTypePackages="yes"
show.parameterTypes="yes"
show.returnType="yes"
show.returnTypePackage="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.exception="defaultProfile.textStyle.defaultType"
textStyle.parameterName="defaultProfile.textStyle.defaultName"
textStyle.parameterType="defaultProfile.textStyle.defaultType"
textStyle.returnType="defaultProfile.textStyle.defaultType"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<initializerDisplayStyle
id="defaultProfile.initializerDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<!-- line styles -->
<lineStyle id="defaultProfile.lineStyle.default" color="defaultProfile.colorset.defaultLine"/>
<!-- diagram styles -->
<diagramStyle
id="defaultProfile.diagramStyle.default"
name="Default Diagram Style"
description="Shows all elements with default colors"
backgroundColor="defaultProfile.color.white"
offLimitsColor="defaultProfile.color.lightGray"
margin="40"
uml="yes">
<mapping
elementSet="defaultProfile.elementSet.allTypes"
ordering="defaultProfile.memberOrder.default"
style="defaultProfile.classDisplayStyle.default"/>
<mapping
elementSet="defaultProfile.elementSet.allFields"
style="defaultProfile.fieldDisplayStyle.default"/>
<mapping
elementSet="defaultProfile.elementSet.allMethods"
style="defaultProfile.methodDisplayStyle.default"/>
<mapping elementSet="defaultProfile.elementSet.allInitializers"
style="defaultProfile.initializerDisplayStyle.default"/>
<lineMapping
fromSet="defaultProfile.elementSet.all"
toSet="defaultProfile.elementSet.all"
type="inheritance"
style="defaultProfile.lineStyle.default"/>
<lineMapping
fromSet="defaultProfile.elementSet.all"
toSet="defaultProfile.elementSet.all"
type="field"
style="defaultProfile.lineStyle.default"/>
</diagramStyle>
</jmeProfile>
website www.modelistic.com or responding on this newsgroup. This forms part of the technical
specification for a new product called Modelistic JME, as created by Modelistic Software Ltd in the
UK. The contents are copyrighted © Modelistic Software Ltd., all rights reserved.
The product is packaged as a plugin for the Eclipse (www.eclipse.org) platform, and centres upon the
creation of UML class diagram, for use by Java programmers, and driven directly from the Eclipse
Java Development Tooling (JDT) model.
There are two major innovations in this product. Firstly, Modelistic JME has no need to store any
more information than the name of the class, and where it is positioned on the diagram; the members
of the class are populated from the JDT model as the diagram is opened. Diagram information is
stored in XML.
The second innovation is that the user is permitted to define sets of model elements, in so called
"profile files" which are written in XML. There are a range of attributes which qualify elements to
a set including, name, package, Javadoc tag, owner superclass, signature and others. Sets can be
built up using inclusion and exclusion rules applied to the attributes. Sets may also be combined to
create other sets, or control the qualification by attributes of elements in other sets.
Appearance of model elements on a diagram are defined through colors, colorset and a range of
element and line styles. These are used to build up abstract sets of directives for displaying a
Java model element.
Finally, mappings may be created to instruct Modelistic JME to present elements conforming to a
particular element set using a declared appearance. This in turn can be used to view class diagrams
with filtering, ordering, grouping and highlighting as driven by the profile file suited to the
particular Java technology being used by the Java programmer.
Below is the factory (out of the box) profile as an example.
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file contains the factory settings which control the look and
feel of the Modelistic JME plugin for Eclipse. Project specific classes and
files should not be mentioned here, as they are beyond the reach of the
refactoring functions. Project specific profiles should be kept under the project
directory to indicate that they belong to the project and should be included in
refactoring operations.
-->
<jmeProfile>
<!-- colors -->
<color id="defaultProfile.color.black" value="#000000"/>
<color id="defaultProfile.color.white" value="#FFFFFF"/>
<color id="defaultProfile.color.lightGray" value="#CCCCCC"/>
<color id="defaultProfile.color.darkGray" value="#666666"/>
<color id="defaultProfile.color.lightYellow" value="#FFFFBB"/>
<color id="defaultProfile.color.darkYellow" value="#FFFF99"/>
<color id="defaultProfile.color.buff" value="#FFCC66"/>
<color id="defaultProfile.color.lightBlue" value="#CCCCFF"/>
<color id="defaultProfile.color.darkBlue" value="#000077"/>
<color id="defaultProfile.color.mediumBlue" value="#0000DD"/>
<color id="defaultProfile.color.deepRed" value="#770000"/>
<!-- color sets -->
<colorset
id="defaultProfile.colorset.defaultBackground"
normal="defaultProfile.color.lightYellow"
selected="defaultProfile.color.darkYellow"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultBorder"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.lightGray"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultNameText"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.black"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTypeText"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.deepRed"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTitleBar"
normal="defaultProfile.color.darkGray"
selected="defaultProfile.color.darkBlue"
print="defaultProfile.color.black"/>
<colorset
id="defaultProfile.colorset.defaultTitleText"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.white"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultIconBackgroud"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.white"
print="defaultProfile.color.white"/>
<colorset
id="defaultProfile.colorset.defaultLine"
normal="defaultProfile.color.lightGray"
selected="defaultProfile.color.black"
print="defaultProfile.color.black"/>
<!-- text styles -->
<textStyle
id="defaultProfile.textStyle.defaultName"
colors="defaultProfile.colorset.defaultNameText"
bold="true"
italic="false"/>
<textStyle
id="defaultProfile.textStyle.defaultType"
colors="defaultProfile.colorset.defaultTypeText"
bold="false"
italic="true"/>
<textStyle
id="defaultProfile.textStyle.defaultTitle"
colors="defaultProfile.colorset.defaultTitleText"
bold="true"
italic="false"/>
<textStyle
id="defaultProfile.textStyle.defaultOther"
colors="defaultProfile.colorset.defaultNameText"
bold="false"
italic="false"/>
<!-- element sets -->
<elementSet id="defaultProfile.elementSet.all" defaultInclude="true"/>
<elementSet id="defaultProfile.elementSet.allTypes">
<types/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allFields">
<fields/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allMethods">
<methods/>
</elementSet>
<elementSet id="defaultProfile.elementSet.allInitializers">
<initializers/>
</elementSet>
<!-- member orders -->
<memberOrder id="defaultProfile.memberOrder.default">
<memberDivision visibleMembers="defaultProfile.elementSet.allFields">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allMethods">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allInitializers">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
<memberDivision visibleMembers="defaultProfile.elementSet.allTypes">
<orderBy set="defaultProfile.elementSet.all" qualifier="name"/>
</memberDivision>
</memberOrder>
<!-- member display styles -->
<classDisplayStyle
id="defaultProfile.classDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
colors.titleBar="defaultProfile.colorset.defaultTitleBar"
colors.iconBackground="defaultProfile.colorset.defaultIconBackgroud"
show.icon="yes"
show.package="yes"
textStyle.name="defaultProfile.textStyle.defaultTitle"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<fieldDisplayStyle
id="defaultProfile.fieldDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
show.type="yes"
show.typePackage="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.type="defaultProfile.textStyle.defaultType"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<methodDisplayStyle
id="defaultProfile.methodDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
show.exceptionPackages="yes"
show.exceptions="yes"
show.parameterNames="yes"
show.parameterTypePackages="yes"
show.parameterTypes="yes"
show.returnType="yes"
show.returnTypePackage="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.exception="defaultProfile.textStyle.defaultType"
textStyle.parameterName="defaultProfile.textStyle.defaultName"
textStyle.parameterType="defaultProfile.textStyle.defaultType"
textStyle.returnType="defaultProfile.textStyle.defaultType"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<initializerDisplayStyle
id="defaultProfile.initializerDisplayStyle.default"
colors.background="defaultProfile.colorset.defaultBackground"
colors.border="defaultProfile.colorset.defaultBorder"
show.icon="yes"
textStyle.name="defaultProfile.textStyle.defaultName"
textStyle.other="defaultProfile.textStyle.defaultOther"/>
<!-- line styles -->
<lineStyle id="defaultProfile.lineStyle.default" color="defaultProfile.colorset.defaultLine"/>
<!-- diagram styles -->
<diagramStyle
id="defaultProfile.diagramStyle.default"
name="Default Diagram Style"
description="Shows all elements with default colors"
backgroundColor="defaultProfile.color.white"
offLimitsColor="defaultProfile.color.lightGray"
margin="40"
uml="yes">
<mapping
elementSet="defaultProfile.elementSet.allTypes"
ordering="defaultProfile.memberOrder.default"
style="defaultProfile.classDisplayStyle.default"/>
<mapping
elementSet="defaultProfile.elementSet.allFields"
style="defaultProfile.fieldDisplayStyle.default"/>
<mapping
elementSet="defaultProfile.elementSet.allMethods"
style="defaultProfile.methodDisplayStyle.default"/>
<mapping elementSet="defaultProfile.elementSet.allInitializers"
style="defaultProfile.initializerDisplayStyle.default"/>
<lineMapping
fromSet="defaultProfile.elementSet.all"
toSet="defaultProfile.elementSet.all"
type="inheritance"
style="defaultProfile.lineStyle.default"/>
<lineMapping
fromSet="defaultProfile.elementSet.all"
toSet="defaultProfile.elementSet.all"
type="field"
style="defaultProfile.lineStyle.default"/>
</diagramStyle>
</jmeProfile>