chanegd taggedValue syntax
git-svn-id: file:///Users/arjan/backup/gaphor/trunk/gaphor@589 a8418922-720d-0410-834f-a69b97ada669
This commit is contained in:
parent
942679d09c
commit
8fb91b2961
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
||||
2005-10-24 Arjan Molenaar <arjanmolenaar@hetnet.nl>
|
||||
|
||||
* setup.py: bumped version to 0.7.2, since data model has undergone some
|
||||
changes.
|
||||
* gaphor/UML/uml2.gaphor: added taggedValue to NamedElement as 0..*.
|
||||
* gaphor/storage.py, gaphor/UML/umllex.py,
|
||||
gaphor/diagram/association.py, gaphor/diagram/attribute.py,
|
||||
gaphor/diagram/diagramline.py, gaphor/diagram/operation.py:
|
||||
Changed to support NamedElement.taggedValue[*].
|
||||
* utils/genUML2.py: parse new taggedValues properly.
|
||||
|
||||
2005-10-24 wrobell <wrobell@pld-linux.org>
|
||||
* gaphor/diagram/util.py: added functions which
|
||||
- determine subject's class of fork and decision UI elements
|
||||
|
File diff suppressed because one or more lines are too long
@ -108,8 +108,10 @@ def parse_attribute(self, s):
|
||||
self.upperValue.value = None
|
||||
if self.defaultValue:
|
||||
self.defaultValue.value = None
|
||||
if self.taggedValue:
|
||||
self.taggedValue.value = None
|
||||
#if self.taggedValue:
|
||||
# self.taggedValue.value = None
|
||||
for tv in self.taggedValue:
|
||||
tv.unlink()
|
||||
else:
|
||||
from uml2 import LiteralSpecification
|
||||
create = self._factory.create
|
||||
@ -128,9 +130,17 @@ def parse_attribute(self, s):
|
||||
if not self.defaultValue:
|
||||
self.defaultValue = create(LiteralSpecification)
|
||||
self.defaultValue.value = g('default')
|
||||
if not self.taggedValue:
|
||||
self.taggedValue = create(LiteralSpecification)
|
||||
self.taggedValue.value = g('tags')
|
||||
#if not self.taggedValue:
|
||||
# self.taggedValue = create(LiteralSpecification)
|
||||
#self.taggedValue.value = g('tags')
|
||||
for tv in self.taggedValue:
|
||||
tv.unlink()
|
||||
tags = g('tags')
|
||||
if tags:
|
||||
for t in map(str.strip, tags.split(',')):
|
||||
tv = create(LiteralSpecification)
|
||||
tv.value = t
|
||||
self.taggedValue = tv
|
||||
#print g('vis'), g('derived'), g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags')
|
||||
|
||||
def parse_association_end(self, s):
|
||||
@ -150,9 +160,17 @@ def parse_association_end(self, s):
|
||||
if not self.upperValue:
|
||||
self.upperValue = create(LiteralSpecification)
|
||||
self.upperValue.value = g('mult_u')
|
||||
if not self.taggedValue:
|
||||
self.taggedValue = create(LiteralSpecification)
|
||||
self.taggedValue.value = g('tags')
|
||||
#if not self.taggedValue:
|
||||
# self.taggedValue = create(LiteralSpecification)
|
||||
#self.taggedValue.value = g('tags')
|
||||
while self.taggedValue:
|
||||
self.taggedValue[0].unlink()
|
||||
tags = g('tags')
|
||||
if tags:
|
||||
for t in map(str.strip, tags.split(',')):
|
||||
tv = create(LiteralSpecification)
|
||||
tv.value = t
|
||||
self.taggedValue = tv
|
||||
# We have multiplicity
|
||||
else:
|
||||
#print 'namematch'
|
||||
@ -177,10 +195,18 @@ def parse_association_end(self, s):
|
||||
if not self.upperValue:
|
||||
self.upperValue = create(LiteralSpecification)
|
||||
self.upperValue.value = g('mult_u')
|
||||
if g('tags'):
|
||||
if not self.taggedValue:
|
||||
self.taggedValue = create(LiteralSpecification)
|
||||
self.taggedValue.value = g('tags')
|
||||
#if g('tags'):
|
||||
# if not self.taggedValue:
|
||||
# self.taggedValue = create(LiteralSpecification)
|
||||
# self.taggedValue.value = g('tags')
|
||||
tags = g('tags')
|
||||
if tags:
|
||||
while self.taggedValue:
|
||||
self.taggedValue[0].unlink()
|
||||
for t in map(str.strip, tags.split(',')):
|
||||
tv = create(LiteralSpecification)
|
||||
tv.value = t
|
||||
self.taggedValue = tv
|
||||
|
||||
def parse_property(self, s):
|
||||
if self.association:
|
||||
@ -218,10 +244,17 @@ def parse_operation(self, s):
|
||||
p.upperValue = create(LiteralSpecification)
|
||||
p.upperValue.value = g('mult_u')
|
||||
# FIXME: Maybe add to Operation.ownedRule?
|
||||
if not p.taggedValue:
|
||||
p.taggedValue = create(LiteralSpecification)
|
||||
p.taggedValue.value = g('tags')
|
||||
#print g('vis'), g('name'), g('type'), g('mult_l'), g('mult_u'), g('tags')
|
||||
#if not p.taggedValue:
|
||||
# p.taggedValue = create(LiteralSpecification)
|
||||
#p.taggedValue.value = g('tags')
|
||||
while self.taggedValue:
|
||||
self.taggedValue[0].unlink()
|
||||
tags = g('tags')
|
||||
if tags:
|
||||
for t in map(str.strip, tags.split(',')):
|
||||
tv = create(LiteralSpecification)
|
||||
tv.value = t
|
||||
p.taggedValue = tv
|
||||
|
||||
pindex = 0
|
||||
params = g('params')
|
||||
@ -248,9 +281,16 @@ def parse_operation(self, s):
|
||||
if not p.defaultValue:
|
||||
p.defaultValue = create(LiteralSpecification)
|
||||
p.defaultValue.value = g('default')
|
||||
if not p.taggedValue:
|
||||
p.taggedValue = create(LiteralSpecification)
|
||||
p.taggedValue.value = g('tags')
|
||||
#if not p.taggedValue:
|
||||
# p.taggedValue = create(LiteralSpecification)
|
||||
#p.taggedValue.value = g('tags')
|
||||
while self.taggedValue:
|
||||
self.taggedValue[0].unlink()
|
||||
if tags:
|
||||
for t in map(str.strip, tags.split(',')):
|
||||
tv = create(LiteralSpecification)
|
||||
tv.value = t
|
||||
p.taggedValue = tv
|
||||
self.formalParameter = p
|
||||
|
||||
#print ' ', g('dir') or 'in', g('name'), g('type'), g('mult_l'), g('mult_u'), g('default'), g('tags')
|
||||
@ -337,8 +377,13 @@ def render_attribute(self, visibility=False, is_derived=False, type=False,
|
||||
if default and self.defaultValue and self.defaultValue.value:
|
||||
s.write(' = %s' % self.defaultValue.value)
|
||||
|
||||
if tags and self.taggedValue and self.taggedValue.value:
|
||||
s.write(' { %s }' % self.taggedValue.value)
|
||||
#if tags and self.taggedValue and self.taggedValue.value:
|
||||
# s.write(' { %s }' % self.taggedValue.value)
|
||||
if self.taggedValue:
|
||||
tvs = ', '.join(filter(None, map(getattr, self.taggedValue,
|
||||
['value'] * len(self.taggedValue))))
|
||||
if tvs:
|
||||
s.write(' { %s }' % tvs)
|
||||
s.reset()
|
||||
return s.read()
|
||||
|
||||
@ -364,8 +409,13 @@ def render_association_end(self):
|
||||
m.write('%s..%s' % (self.lowerValue.value, self.upperValue.value))
|
||||
else:
|
||||
m.write('%s' % self.upperValue.value)
|
||||
if self.taggedValue and self.taggedValue.value:
|
||||
m.write(' {%s}' % self.taggedValue.value)
|
||||
#if self.taggedValue and self.taggedValue.value:
|
||||
# m.write(' {%s}' % self.taggedValue.value)
|
||||
if self.taggedValue:
|
||||
tvs = ',\n '.join(filter(None, map(getattr, self.taggedValue,
|
||||
['value'] * len(self.taggedValue))))
|
||||
if tvs:
|
||||
m.write(' { %s }' % tvs)
|
||||
m.reset()
|
||||
mult = m.read()
|
||||
|
||||
@ -421,8 +471,12 @@ def render_operation(self, visibility=False, type=False, multiplicity=False,
|
||||
s.write('[%s]' % p.upperValue.value)
|
||||
if default and p.defaultValue and p.defaultValue.value:
|
||||
s.write(' = %s' % p.defaultValue.value)
|
||||
if tags and p.taggedValue and p.taggedValue.value:
|
||||
s.write(' { %s }' % p.taggedValue.value)
|
||||
#if tags and p.taggedValue and p.taggedValue.value:
|
||||
# s.write(' { %s }' % p.taggedValue.value)
|
||||
if p.taggedValue:
|
||||
tvs = ', '.join(filter(None, map(getattr, p.taggedValue,
|
||||
['value'] * len(p.taggedValue))))
|
||||
s.write(' { %s }' % tvs)
|
||||
if p is not self.formalParameter[-1]:
|
||||
s.write(', ')
|
||||
|
||||
@ -437,8 +491,13 @@ def render_operation(self, visibility=False, type=False, multiplicity=False,
|
||||
s.write('[%s..%s]' % (rr.lowerValue.value, rr.upperValue.value))
|
||||
else:
|
||||
s.write('[%s]' % rr.upperValue.value)
|
||||
if tags and rr.taggedValue and rr.taggedValue.value:
|
||||
s.write(' { %s }' % rr.taggedValue.value)
|
||||
#if tags and rr.taggedValue and rr.taggedValue.value:
|
||||
# s.write(' { %s }' % rr.taggedValue.value)
|
||||
if rr.taggedValue:
|
||||
tvs = ', '.join(filter(None, map(getattr, rr.taggedValue,
|
||||
['value'] * len(rr.taggedValue))))
|
||||
if tvs:
|
||||
s.write(' { %s }' % tvs)
|
||||
s.reset()
|
||||
return s.read()
|
||||
|
||||
|
@ -780,7 +780,7 @@ class AssociationEnd(diacanvas.CanvasItem, diacanvas.CanvasEditable, DiagramItem
|
||||
DiagramItem.on_subject_notify(self, pspec,
|
||||
notifiers + ('aggregation', 'visibility',
|
||||
'name', 'lowerValue.value',
|
||||
'upperValue.value', 'taggedValue.value',
|
||||
'upperValue.value', 'taggedValue',
|
||||
'owningAssociation', 'class_', 'interface_'))
|
||||
#print 'w/ assoc', self.subject and self.subject.association
|
||||
self.set_text()
|
||||
@ -805,8 +805,8 @@ class AssociationEnd(diacanvas.CanvasItem, diacanvas.CanvasEditable, DiagramItem
|
||||
self.set_text()
|
||||
self.parent.request_update()
|
||||
|
||||
def on_subject_notify__taggedValue_value(self, tagged_value, pspec):
|
||||
log.debug('New value for taggedValue.value: %s' % tagged_value and self.subject.taggedValue.value)
|
||||
def on_subject_notify__taggedValue(self, tagged_value, pspec):
|
||||
#log.debug('New value for taggedValue.value: %s' % tagged_value and self.subject.taggedValue.value)
|
||||
self.set_text()
|
||||
self.parent.request_update()
|
||||
|
||||
|
@ -30,7 +30,7 @@ class AttributeItem(FeatureItem):
|
||||
'upperValue.value',
|
||||
'defaultValue.value',
|
||||
'typeValue.value',
|
||||
'taggedValue.value',
|
||||
'taggedValue',
|
||||
'association')
|
||||
+ notifiers)
|
||||
#self._expression.set_text(self.subject.render() or '')
|
||||
@ -47,7 +47,7 @@ class AttributeItem(FeatureItem):
|
||||
on_subject_notify__upperValue_value = on_subject_notify__name
|
||||
on_subject_notify__defaultValue_value = on_subject_notify__name
|
||||
on_subject_notify__typeValue_value = on_subject_notify__name
|
||||
on_subject_notify__taggedValue_value = on_subject_notify__name
|
||||
on_subject_notify__taggedValue = on_subject_notify__name
|
||||
|
||||
def on_subject_notify__association(self, subject, pspec):
|
||||
"""Make sure we update the attribute compartment (in case
|
||||
|
@ -51,10 +51,10 @@ class DiagramLine(diacanvas.CanvasLine, DiagramItem):
|
||||
save_func('points', points)
|
||||
c = self.handles[0].connected_to
|
||||
if c:
|
||||
save_func('head_connection', c, reference=True)
|
||||
save_func('head-connection', c, reference=True)
|
||||
c = self.handles[-1].connected_to
|
||||
if c:
|
||||
save_func('tail_connection', c, reference=True)
|
||||
save_func('tail-connection', c, reference=True)
|
||||
|
||||
def load (self, name, value):
|
||||
if name == 'points':
|
||||
@ -63,9 +63,9 @@ class DiagramLine(diacanvas.CanvasLine, DiagramItem):
|
||||
self.set_property('tail_pos', points[1])
|
||||
for p in points[2:]:
|
||||
self.set_property ('add_point', p)
|
||||
elif name == 'head_connection':
|
||||
elif name in ('head_connection', 'head-connection'):
|
||||
self._load_head_connection = value
|
||||
elif name == 'tail_connection':
|
||||
elif name in ('tail_connection', 'tail-connection'):
|
||||
self._load_tail_connection = value
|
||||
else:
|
||||
DiagramItem.load(self, name, value)
|
||||
|
@ -53,7 +53,7 @@ class OperationItem(FeatureItem):
|
||||
self.request_update()
|
||||
|
||||
on_subject_notify__visibility = on_subject_notify__name
|
||||
on_subject_notify__taggedValue_value = on_subject_notify__name
|
||||
on_subject_notify__taggedValue = on_subject_notify__name
|
||||
|
||||
def on_update(self, affine):
|
||||
# Render the operation on every update, since we can't monitor
|
||||
|
@ -170,6 +170,7 @@ def load_elements_generator(elements, factory, gaphor_version=None):
|
||||
|
||||
# Fix version inconsistencies
|
||||
version_0_6_2(elements, factory, gaphor_version)
|
||||
version_0_7_2(elements, factory, gaphor_version)
|
||||
|
||||
# First create elements and canvas items in the factory
|
||||
# The elements are stored as attribute 'element' on the parser objects:
|
||||
@ -315,6 +316,34 @@ def load_generator(filename, factory=None):
|
||||
raise
|
||||
|
||||
|
||||
def version_0_7_2(elements, factory, gaphor_version):
|
||||
"""Before 0.7.2, only Property and Parameter elements had taggedValues.
|
||||
Since 0.7.2 all NamedElements are able to have taggedValues. However,
|
||||
the multiplicity of taggedValue has changed from 0..1 to *, so all elements
|
||||
should be converted to a list.
|
||||
"""
|
||||
from gaphor.misc.uniqueid import generate_id
|
||||
|
||||
if tuple(map(int, gaphor_version.split('.'))) < (0, 7, 2):
|
||||
for elem in elements.values():
|
||||
try:
|
||||
if type(elem) is parser.element \
|
||||
and elem.type in ('Property', 'Parameter') \
|
||||
and elem.taggedValue:
|
||||
tvlist = []
|
||||
tv = elements[elem.taggedValue]
|
||||
if tv.value:
|
||||
for t in map(str.strip, str(tv.value).split(',')):
|
||||
log.debug("Tagged value: %s" % t)
|
||||
newtv = parser.element(generate_id(),
|
||||
'LiteralSpecification')
|
||||
newtv.values['value'] = t
|
||||
elements[newtv.id] = newtv
|
||||
tvlist.append(newtv.id)
|
||||
elem.references['taggedValue'] = tvlist
|
||||
except Exception, e:
|
||||
log.error('Error while updating taggedValues', e)
|
||||
|
||||
|
||||
def version_0_7_1(elements, factory, gaphor_version):
|
||||
"""Before version 0.7.1, there were two states for association
|
||||
|
@ -12,12 +12,12 @@ rem set GAPHOR_WIN32_LIBS=c:\msys\1.0\target
|
||||
|
||||
rem Where is Python installed?
|
||||
|
||||
set PYTHONHOME=c:\Python23
|
||||
set PYTHONHOME=c:\Python24
|
||||
|
||||
rem Should have to change these:
|
||||
|
||||
set PATH=%GAPHOR_WIN32_LIBS%\bin;%PYTHONHOME%;%PATH%
|
||||
|
||||
set PYTHONPATH=%GAPHOR_WIN32_LIBS%\lib\python23
|
||||
set PYTHONPATH=%GAPHOR_WIN32_LIBS%\lib\python24
|
||||
|
||||
python setup.py run %1 %2 %3 %4
|
||||
|
2
setup.py
2
setup.py
@ -8,7 +8,7 @@
|
||||
|
||||
MAJOR_VERSION = 0
|
||||
MINOR_VERSION = 7
|
||||
MICRO_VERSION = 1
|
||||
MICRO_VERSION = 2
|
||||
|
||||
VERSION = '%d.%d.%d' % ( MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION )
|
||||
|
||||
|
@ -166,13 +166,12 @@ class Writer:
|
||||
|
||||
derived = int(head.isDerived or 0)
|
||||
|
||||
#lower, upper, subsets, redefines = parse_association_multiplicity(head.lowerValue)
|
||||
#print head.id, head.lowerValue
|
||||
upper = head.upperValue and head.upperValue.value or '*'
|
||||
lower = head.lowerValue and head.lowerValue.value or upper
|
||||
if lower == '*':
|
||||
lower = 0
|
||||
subsets, redefines = parse_association_tags(head.taggedValue and head.taggedValue.value or '')
|
||||
subsets, redefines = parse_association_tags(head.taggedValue)
|
||||
|
||||
# Add the values found. These are used later to generate derived unions.
|
||||
head.derived = derived
|
||||
@ -252,53 +251,26 @@ def parse_association_name(name):
|
||||
name = name[1:]
|
||||
return derived, name
|
||||
|
||||
def parse_association_multiplicity(mult):
|
||||
subsets = []
|
||||
redefines = None
|
||||
tag = None
|
||||
if '{' in mult:
|
||||
# we have tagged values
|
||||
mult, tag = map(string.strip, mult.split('{'))
|
||||
if tag[-1] == '}':
|
||||
tag = tag[:-1]
|
||||
else:
|
||||
mult = mult.strip()
|
||||
|
||||
mult = mult.split('.')
|
||||
lower = mult[0]
|
||||
upper = mult[-1]
|
||||
if lower == '*':
|
||||
lower = 0
|
||||
#if upper == '*':
|
||||
# upper = "'*'"
|
||||
|
||||
if tag and tag.find('subsets') != -1:
|
||||
# find the text after 'subsets':
|
||||
subsets = tag[tag.find('subsets') + len('subsets'):]
|
||||
# remove all whitespaces and stuff
|
||||
subsets = subsets.replace(' ', '').replace('\n', '').replace('\r', '')
|
||||
subsets = subsets.split(',')
|
||||
if tag and tag.find('redefines') != -1:
|
||||
# find the text after 'redefines':
|
||||
redefines = tag[tag.find('redefines') + len('redefines'):]
|
||||
# remove all whitespaces and stuff
|
||||
redefines = redefines.replace(' ', '').replace('\n', '').replace('\r', '')
|
||||
l = redefines.split(',')
|
||||
assert len(l) == 1
|
||||
redefines = l[0]
|
||||
|
||||
return lower, upper, subsets, redefines
|
||||
|
||||
def parse_association_tags(tag):
|
||||
subsets = []
|
||||
redefines = None
|
||||
|
||||
# subsets has a comma separated syntax. Add all taggedValues together
|
||||
if type(tag) is type([]):
|
||||
tag = ', '.join(filter(None, map(getattr, tag, ['value'] * len(tag))))
|
||||
elif tag:
|
||||
tag = tag.value
|
||||
|
||||
print 'scanning tags: %s' % tag
|
||||
|
||||
if tag and tag.find('subsets') != -1:
|
||||
# find the text after 'subsets':
|
||||
subsets = tag[tag.find('subsets') + len('subsets'):]
|
||||
# remove all whitespaces and stuff
|
||||
subsets = subsets.replace(' ', '').replace('\n', '').replace('\r', '')
|
||||
subsets = subsets.split(',')
|
||||
|
||||
if tag and tag.find('redefines') != -1:
|
||||
# find the text after 'redefines':
|
||||
redefines = tag[tag.find('redefines') + len('redefines'):]
|
||||
@ -308,6 +280,7 @@ def parse_association_tags(tag):
|
||||
assert len(l) == 1
|
||||
redefines = l[0]
|
||||
|
||||
print 'found', subsets, redefines
|
||||
return subsets, redefines
|
||||
|
||||
def generate(filename, outfile=None, overridesfile=None):
|
||||
|
Loading…
x
Reference in New Issue
Block a user