[Uml-devel] u2 diagram bs
Andrew Sutton
ansutton at kent.edu
Thu Apr 17 09:46:23 UTC 2003
okay... plentry of discussion on diagrams and visualization and what have you.
its time to move on.
we need to establish a basic design for how this is going to work. lets assume
for the time being that we'll be using karbon14 as our drawing framework. i
think it passes the test. we need to establish a basic design that defines
the following:
- document model (alright... diagram model) for uml diagrams
- graphical artifacts (not just uml stuff)
- alternate notations for an artifact (consider interfaces and classes)
- dialogs for presentaiton options
- dialogs for data manipulation
- plugin structure
- how this is going to be stored
- representing tools for modifying diagrams
my thought is that we're going to introduce a pseudo-metamodel into the core
library to handle this stuff. its going to need to tie into the the
reflective layer at some level for xmi integration and object-diagram
relationships. how that's going to work, we'll have to see - i've got a
decent idea for it. we should probably specialize the diagram types. maybe
one plugin per diagram. that would be kind of cool. because we could build
the whole thing piece-wise (class diagrams first :) and publish beta or minor
releases as we finalize stuff for each type of diagram.
on the artifact side, we basically need to identify various graphical things
that we want to put on diagram. each type of notation or artifact could be a
provider. that means that we're going to need some kind of class that could
provide a selection mechanism for artifacts with alternative notations. for
example, if we stereotype something as a boundary object, we might choose to
draw that very, very differently. see the uml standard - profile for software
development processes for examples of notations. i suppose we could define
some kind of virtual VShape or whatever as the container for actual notations
(which would also be derived from VShape).
for presentaiton options, we clearly have one for the virtual notation
provider - being able to select the actual provider. we might be able to put
some other things in there like color to could be passed as parameters to
actual providers. each actual should might have its own presentation dialogs.
we can probably identify common properties among gfx providers to reduce the
amount of code for the dialogs.
we already know that most metamodel objects are going to have data dialogs.
we'll just have to figure out how to group the attributes that are being set
in order to minimize the amount of code we right for them (shouldn't be too
hard).
as for storage - we might be able to use the karbon14 document model - unless
that's all svg, but i don't think it is (i haven't looked yet). essentially,
we're storing a collection of objects that a) store display settings and b)
optionally reference a single data element (probably via an xmi.idref xml
attribute). if we build the diagram stuff as a psuedo-metamodel and tie it
into the reflective layer, we can basically associate diagrams as contained
by any object derived from RefObject (like packages and classes). that's
good.
on the tool side of things, we'll probably need to define a set of KActions
that represent the modification of a diagram. we also need to figure out
exactly how these operations are going to to react with the underlying
document - which contains the model and of course, all the diagrams. this
might be a little more complicated that we think because we want to allocate
space for persistent UML databases so we can talk about truly collaborative
modeling. also, we can use this mechanism to implement some form of
round-trip engineering. think kdevelop publishing various actions to modify a
uml model as code changes. moreover, the much un-discussed xmi difference
engine could use these actions to modify the model and/or diagrams. i think
on this topic, we basically end up with two distinct actions - one to alter
the model and one to alter the diagram (if we're changing the diagram) -
think translating <XMI.difference/> elements into KActions. this event-driven
modification could be pretty useful... i hope.
so... does somebody want to throw together a prototype design? i really don't
have the time right now. i've got to finish my paper, make a presentation for
it, write a bottom up operator precedence parser (4 hours :), tutor some
people in computer org and assembly, try to find funding to go to a
healthcare industry conference, go to the conference (1 week), and then i
have finals. busy busy busy. ah the life of a grad student ;)
we just need to get started on it, but i'm not really available to truly get
started just yet.
andy
More information about the umbrello-devel
mailing list