Skip to content

Commit

Permalink
display association ends, check elements inside packages
Browse files Browse the repository at this point in the history
  • Loading branch information
JanBliznicenko committed Jul 22, 2024
1 parent 32172b9 commit 39b39f7
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 50 deletions.
24 changes: 19 additions & 5 deletions repository/OpenPonk-ClassEditor/OPUmlNavigatorAdapter.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,25 @@ OPUmlNavigatorAdapter >> displayFor: anObject [

{ #category : 'accessing' }
OPUmlNavigatorAdapter >> displayMapping [
^ {(OPUMLGeneralization
-> [ :o | o specific name , ' => ' , o general name ]).
(OPUMLPackageImport
-> [ :o | o importedPackage name , ' --> ' , o importingNamespace name ]).
(OPUMLElement -> #name)}

^ {
(OPUMLAssociation -> [ :a |
String streamContents: [ :s |
a name ifNotNil: [ :name | s << name ].
a memberEnds size = 2 ifTrue: [
| names |
names := a memberEnds asArray collect: [ :property |
((property type ifNotNil: [ :type | type name ])
ifNil: [ '' ]) truncateWithElipsisTo: 20 ].
s << ' [ '.
names printOn: s delimiter: ' -> '.
s << ' ]' ] ] ]).
(OPUMLGeneralization
-> [ :o | o specific name , ' => ' , o general name ]).
(OPUMLPackageImport
-> [ :o |
o importedPackage name , ' --> ' , o importingNamespace name ]).
(OPUMLElement -> #name) }
]

{ #category : 'accessing' }
Expand Down
108 changes: 63 additions & 45 deletions repository/OpenPonk-ClassEditor/OPUmlPackageDiagramController.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,36 @@ Class {
#tag : 'Controllers'
}

{ #category : 'figures' }
{ #category : 'as yet unclassified' }
OPUmlPackageDiagramController >> allShowableElements [
"Should return all elements that could be directly hidden on diagram"

^ Array streamContents: [ :stream |
self allShowableElementsIn: self model on: stream ]
]

{ #category : 'as yet unclassified' }
OPUmlPackageDiagramController >> allShowableElementsIn: aPackage on: aCollectionStream [
"Should return all elements that could be directly hidden on diagram"

| elementsToShow |
elementsToShow := self elementsToShowInside.
^ elementsToShow , ((elementsToShow select: [ :each |
(each isKindOf: OPUMLClass) | (each isKindOf: OPUMLStereotype) ])
flatCollect: [ :each |
each ownedAttributes , each ownedOperations ])
,
((elementsToShow select: [ :each |
each isKindOf: OPUMLEnumeration ]) flatCollect: [ :each |
each ownedLiterals ])
, (model packagedElements select: [ :each |
each oclIsKindOf: #Association ])
elementsToShow := self elementsToShowInside: aPackage.
aCollectionStream nextPutAll: elementsToShow.
elementsToShow
select: [ :each | each oclIsKindOf: #Class ]
thenDo: [ :each |
aCollectionStream nextPutAll: each ownedAttributes.
aCollectionStream nextPutAll: each ownedOperations ].
elementsToShow
select: [ :each | each oclIsKindOf: #Enumeration ]
thenDo: [ :each | aCollectionStream nextPutAll: each ownedLiterals ].
aCollectionStream nextPutAll:
(aPackage packagedElements select: [ :each |
each oclIsKindOf: #Association ]).
aPackage packagedElements
select: [ :each | each oclIsKindOf: #Package ]
thenDo: [ :each |
self allShowableElementsIn: each on: aCollectionStream ]
]

{ #category : 'adding' }
Expand Down Expand Up @@ -126,46 +139,51 @@ OPUmlPackageDiagramController >> disableRefresh [

{ #category : 'figures' }
OPUmlPackageDiagramController >> elementsToShowInside [

^ self elementsToShowInside: self model
]

{ #category : 'figures' }
OPUmlPackageDiagramController >> elementsToShowInside: aPackage [

| queue priority |
queue := OrderedCollection new.
priority := {(OPUMLPackage -> 1).
(OPUMLProfile -> 1).
(OPUMLClass -> 2).
(OPUMLStereotype -> 3).
(OPUMLEnumeration -> 4)} asDictionary.
queue addAll: (self model packagedElements reject: [:each | each oclIsKindOf: #Association ]).
self model packagedElements
priority := {
(OPUMLPackage -> 1).
(OPUMLProfile -> 1).
(OPUMLClass -> 2).
(OPUMLStereotype -> 3).
(OPUMLEnumeration -> 4) } asDictionary.
queue addAll: (aPackage packagedElements reject: [ :each |
each oclIsKindOf: #Association ]).
aPackage packagedElements
select: [ :each | each oclIsKindOf: #Package ]
thenDo: [ :each |
each packageImports
do: [ :import |
queue addIfNotPresent: import importedPackage.
queue add: import ] ].
self model packagedElements
select:
[ :each | (each isKindOf: OPUMLClass) | (each isKindOf: OPUMLStereotype) ]
thenDo: [ :each |
each generalizations
do: [ :gen |
queue addIfNotPresent: gen general.
queue add: gen ].
(each ownedAttributes
select:
[ :attr | (attr isKindOf: OPUMLProperty) and: [ attr association isNotNil ] ])
thenDo: [ :each |
each packageImports do: [ :import |
queue addIfNotPresent: import importedPackage.
queue add: import ] ].
aPackage packagedElements
select: [ :each |
(each isKindOf: OPUMLClass) | (each isKindOf: OPUMLStereotype) ]
thenDo: [ :each |
each generalizations do: [ :gen |
queue addIfNotPresent: gen general.
queue add: gen ].
(each ownedAttributes select: [ :attr |
(attr isKindOf: OPUMLProperty) and: [ attr association isNotNil ] ])
do: [ :attr | queue addIfNotPresent: attr association ] ].
self model packagedElements
aPackage packagedElements
select: [ :each | each isKindOf: OPUMLStereotype ]
thenDo: [ :each |
thenDo: [ :each |
each ownedAttributes
select: [ :attr |
attr association isNotNil
and: [ attr association isKindOf: OPUMLExtension ] ]
select: [ :attr |
attr association isNotNil and: [
attr association isKindOf: OPUMLExtension ] ]
thenDo: [ :attr | queue add: attr type ] ].
^ (queue asSet asArray
sorted: [ :a :b |
(priority at: a class ifAbsent: [ 100 ])
< (priority at: b class ifAbsent: [ 100 ]) ])
select: [ :each | self hasSupportForModel: each ]
^ (queue asSet asArray sorted: [ :a :b |
(priority at: a class ifAbsent: [ 100 ])
< (priority at: b class ifAbsent: [ 100 ]) ]) select: [ :each |
self hasSupportForModel: each ]
]

{ #category : 'userinterface' }
Expand Down

0 comments on commit 39b39f7

Please sign in to comment.