ls1intum / apollon Goto Github PK
View Code? Open in Web Editor NEWUML Modeling Editor written in React
Home Page: https://apollon-library.readthedocs.io
License: MIT License
UML Modeling Editor written in React
Home Page: https://apollon-library.readthedocs.io
License: MIT License
In modeling team exercises, a sentry error is reoccuring:
Assumption: Editor is already destroyed when we try to emit an action -> maybe redrawing mechanism in Artemis is causing that. Fix: when comparing old model with current model in debounce, check if the editor still exists. Interrupt check and do safe cancel (no error needs to be emitted)
The user can't differenciate between implemented and abstract methods.
It's possible to define abstract methods (possibly with a checkbox?)
There is no real alternative in Apollon
When adding an actor to an usecase diagramm, the Alignment of the vertical contactpoint is of by 1/2 'Box', due to the standard height of the actor being an uneven number..
no crooked arrows
- OS: Windows - Browser Chrome - Version latest included in Artemis
I have a feature request for Apollon (related ArTEMiS ls1intum/Artemis#539):
For the interactive instructions of the programming exercises I want to switch from plantUML to the more user friendly Apollon.
The instructions are updated with the build result, indicating in the UML which implementations are successful, are false, etc.:
planUML is using markup, so I set up a placeholder for the test color:
class Context {
-color:testsColor(testAttributes[Context])dates: List
+color:testsColor(testMethods[Context])sort()
}
The placeholder is then replaced on parsing with the appropriate color (red if failed, etc.).
To switch to Apollon I would need the following functionality:
Ideally for both I would not have to go through the element, but could just query the diagram:
E.g.
attributes = diagram.get('testAttributes[Context]');
diagram.setColor(attributes, 'red')
Right now its not possible to share diagrams with other users. A simple Import + Export could solve this problem.
Export:
User can click a button to export diagram. Once clicked a .json file is downloaded which represents the current depicted UML diagram.
Import:
A user can click a button to import a diagram. Once clicked a file uploader popup opens in which the user can select a .json file to be imported. When an exported diagram .json file is selected, the representation of the diagram must be the same!
Include a server for Apollon and make it possible to share diagrams with other users over the server
When creating a diagram, the relationship between UML elements are sometimes not layouted in a good looking way
Make layout of relationships between UML elements more flexible (not drawn automatically). Use layout from current algorithm as default position for elements. Add possibility to add waypoints, similar to screenshot.
After saving a diagram (in my case - activity diagram) as .png, it doesn't save about 30% of the diagram and other 70% are depicted in the wrong way.
It's expected that the diagram in .png is the same as in the tab of the browser.
- OS: Win10 - Browser Chrome - Version 83
It is stated somewhere what kind of relation this is. If you are provided with a non editable diagram (e.g. in an assessing situation) you can't move the usecase in order to see the stereotype.
- OS: Windows 10 Pro - Browser: Chrome v81.0.4044.138
When a text area contains a "<", the "File" tab stops working. (Also an error is thrown in the background)
The image saves normally and displays "<" properly.
- OS: [Windows] - Browser [chromei] - Version [84]
vendors.431d7ea33266092bf838.js:69 Uncaught Event {isTrusted: true, type: "error", target: null, currentTarget: null, eventPhase: 0, …}bubbles: falsecancelBubble: falsecancelable: falsecomposed: falsecurrentTarget: nulldefaultPrevented: falseeventPhase: 0isTrusted: truepath: [img]returnValue: truesrcElement: nulltarget: nulltimeStamp: 625033.1900000019type: "error"__proto__: Event (anonymous) @ vendors.431d7ea33266092bf838.js:69 setTimeout (async) r @ vendors.431d7ea33266092bf838.js:69 t.error @ vendors.431d7ea33266092bf838.js:85 t._error @ vendors.431d7ea33266092bf838.js:85 t.error @ vendors.431d7ea33266092bf838.js:85 t.notifyError @ vendors.431d7ea33266092bf838.js:111 t._error @ vendors.431d7ea33266092bf838.js:274 t.error @ vendors.431d7ea33266092bf838.js:85 e.observe @ vendors.431d7ea33266092bf838.js:37 t.dispatch @ vendors.431d7ea33266092bf838.js:243 t._execute @ vendors.431d7ea33266092bf838.js:213 t.execute @ vendors.431d7ea33266092bf838.js:327 t.flush @ vendors.431d7ea33266092bf838.js:63 t.schedule @ vendors.431d7ea33266092bf838.js:327 e.schedule @ vendors.431d7ea33266092bf838.js:278 t.schedule @ vendors.431d7ea33266092bf838.js:63 t.scheduleMessage @ vendors.431d7ea33266092bf838.js:243 t._error @ vendors.431d7ea33266092bf838.js:243 t.error @ vendors.431d7ea33266092bf838.js:85 t.notifyError @ vendors.431d7ea33266092bf838.js:111 t._error @ vendors.431d7ea33266092bf838.js:274 t.error @ vendors.431d7ea33266092bf838.js:85 t.notifyError @ vendors.431d7ea33266092bf838.js:111 t._error @ vendors.431d7ea33266092bf838.js:274 t.error @ vendors.431d7ea33266092bf838.js:85 t.notifyError @ vendors.431d7ea33266092bf838.js:111 t._error @ vendors.431d7ea33266092bf838.js:274 t.error @ vendors.431d7ea33266092bf838.js:85 (anonymous) @ vendors.431d7ea33266092bf838.js:87 Promise.then (async) t @ vendors.431d7ea33266092bf838.js:87 e._trySubscribe @ vendors.431d7ea33266092bf838.js:39 e.subscribe @ vendors.431d7ea33266092bf838.js:39 o @ vendors.431d7ea33266092bf838.js:327 t._innerSub @ vendors.431d7ea33266092bf838.js:264 t._tryNext @ vendors.431d7ea33266092bf838.js:264 t._next @ vendors.431d7ea33266092bf838.js:264 t.next @ vendors.431d7ea33266092bf838.js:85 t._next @ vendors.431d7ea33266092bf838.js:37 t.next @ vendors.431d7ea33266092bf838.js:85 t._next @ vendors.431d7ea33266092bf838.js:37 t.next @ vendors.431d7ea33266092bf838.js:85 t._next @ vendors.431d7ea33266092bf838.js:161 t.next @ vendors.431d7ea33266092bf838.js:85 e.observe @ vendors.431d7ea33266092bf838.js:37 t.dispatch @ vendors.431d7ea33266092bf838.js:243 t._execute @ vendors.431d7ea33266092bf838.js:213 t.execute @ vendors.431d7ea33266092bf838.js:327 t.flush @ vendors.431d7ea33266092bf838.js:63 t.schedule @ vendors.431d7ea33266092bf838.js:327 e.schedule @ vendors.431d7ea33266092bf838.js:278 t.schedule @ vendors.431d7ea33266092bf838.js:63 t.scheduleMessage @ vendors.431d7ea33266092bf838.js:243 t._next @ vendors.431d7ea33266092bf838.js:243 t.next @ vendors.431d7ea33266092bf838.js:85 t.next @ vendors.431d7ea33266092bf838.js:105 t.next @ vendors.431d7ea33266092bf838.js:105 (anonymous) @ vendors.431d7ea33266092bf838.js:116 (anonymous) @ vendors.431d7ea33266092bf838.js:53 t.exportDiagram @ main.3072832468657050d596.js:1 onClick @ main.3072832468657050d596.js:1 (anonymous) @ vendors.431d7ea33266092bf838.js:294 (anonymous) @ vendors.431d7ea33266092bf838.js:294 c @ vendors.431d7ea33266092bf838.js:294 s @ vendors.431d7ea33266092bf838.js:323 p @ vendors.431d7ea33266092bf838.js:323 (anonymous) @ vendors.431d7ea33266092bf838.js:323 y @ vendors.431d7ea33266092bf838.js:323 ot @ vendors.431d7ea33266092bf838.js:323 it @ vendors.431d7ea33266092bf838.js:323 st @ vendors.431d7ea33266092bf838.js:323 pt @ vendors.431d7ea33266092bf838.js:323 N @ vendors.431d7ea33266092bf838.js:323 F @ vendors.431d7ea33266092bf838.js:323 $t @ vendors.431d7ea33266092bf838.js:323 Xt @ vendors.431d7ea33266092bf838.js:323 t.unstable_runWithPriority @ vendors.431d7ea33266092bf838.js:11 zi @ vendors.431d7ea33266092bf838.js:323 A @ vendors.431d7ea33266092bf838.js:323 Jt @ vendors.431d7ea33266092bf838.js:323 Show 49 more frames [apollon.ase.in.tum.de-1595765286813.log](https://github.com/ls1intum/Apollon/files/4977546/apollon.ase.in.tum.de-1595765286813.log)
If a popover contains unsaved changes, like a new attribute or method for UML class elements, and the user dismisses the popover by clicking anywhere outside the popover, the changes are not saved.
Save the changes on dismissing the popover.
Apollon 2.0.0-rc.4
The "Snapping Feature" of all Diagram-Boxes is bugged. They don't snap onto the background grid. It is sometimes impossible to align multiple boxes on the same grid-line, because there often is a misalignment by ~1-5 pixels. This is certainly a bug and it doesn't look right.
This Problem affects the Firefox Browser, the Chrome Brower and probably other Browsers as well.
This Problem affects Artemis-Diagrams.
When placing the boxes on the board, they should snap to the little boxes in the background.
See Screenshots below.
- OS: Windows - Browser: Firefox - Version 78.0.2 (64-bit)
- OS: Windows - Browser: Chrome - Version 84.0.4147.89 (Offizieller Build) (64-Bit)
[REPLACE THIS WITH YOUR INFORMATION]
Currently only the current diagram is saved in browser storage, but if I want to load former created UML diagrams, there's no possibility
The user should have the possibility to store a diagram by clicking a save button. It then lives in the local browser storage until that is cleared or the user deletes a diagram from the history. There should also be a loading functionality, so that the user can select which former created diagram he/she wants to load.
Adding a server to Apollon which stores the UML diagrams in a database
Not able to create a straight line with certain component sizes.
Straight line.
This might actually be the issue of #100
(see second screenshot). This always happens when a resizable UML element has an odd hight and the other one an even height. (Same v.v. and regarding the width).
When copying items via the clipboard and pasting in to a diagram, the type of the item is not checked before inserting it into the document. It is thus possible to paste, for example, UMLUseCaseActor
s into class diagrams, or UMLComponent
s into activity diagrams, etc.
Diagram elements of other types are not pasted.
- OS: macOS 10.15 Catalina - Browser Chrome 84.0.4147.89
Right now, resize is only available in the bottom right corner of an element. This can be frustrating with resizing packages. Therefore enable resize handlers on each corner of an element.
When trying to delete multiple component using keyboard-only input (DELETE/BACKSPACE key), it only deletes the currently selected component. When it is deleted, the previous component looks like it is in focus but cannot be deleted using DELETE/BACKSPACE.
Tested within communication diagram, should be the same across all diagrams
although the original component is highlighted after the duplicate has been deleted, it cannot be deleted using the keyboard. I have to click the component before I can delete it. I assume, this is due to incorrect focus / focus not being updated after deletion.
When hitting DELETE/BACKSPACE multiple times, components should be deleted one after one. The order might be the order in which they were in focus last.
- OS: macOS 10.15.5 (19F101) - Browser Chrome - Version 84.0.4147.89 (Official Build) (64-bit)
When connecting elements this error sometimes occurs. It happens on pointer up (when letting connection go on target)
happend for the very first time on 19.04.2020 - Artemis 4.0.0
- OS: windows - Browser chrome - Version [e.g. 22]
[REPLACE THIS WITH YOUR INFORMATION]
It is not possible to rescale the fork and join nodes in activity diagrams.
Length of join/fork node is changed
- OS: macOs 10.15.5 - Browser latest Safari Version
Currently its not possible to copy and paste a diagram from one application to another e.g. one browser window to another.
"Copy" should copy a diagram representation in different formats to the clipboard so that it can be pasted to any application.
Supported formats:
I can increase only the length of the "condition" node. But i also would like to increase the height of it.
After dragging up/down, it's expected that the height of this node will also change.
After step 3.
https://gyazo.com/32138cba84e761b1bd504b86ad2d7cf9
- OS: Win10 - Browser Chrome - Version 83
If two nodes are positioned under each other, labels/multiplicities of connectors between the nodes overlap with the connector making them difficult to read.
See screenshots.
Display label beside the connector, not on top of it.
Ability to include Apollon via LTI (Learning Tools Interoperability) in other systems
Caused by cdb97e1#r34443788.
This was one issue I had this morning with the L13E03: Adding new methods and attributes to a UML Class does not work when pressing enter.
Browser: Safari and Chrome on macOS Catalina and Mojave.
It's not possible to remove a sterotype from a node within a deployment diagram by leaving the input field empty.
"<<>>" is not shown when the field is empty
- OS: Windows 10 Pro - Browser: Chrome v83.0.4103.97
When dragging one of the blue connection corners to that of another element, the resulting connection is not between those two connection corners but instead between two seemingly random ones.
The connection to consistently match the one provided when dragging.
- OS: elementary OS 5.1.4 Hera, Built on Ubuntu 18.04.4 LTS, Linux 4.15.0-99-generic - Browser Firefox 75.0
none
Deployment diagram: It is possible to select Deployment-Association for an interface. In fact it's the default for that diagram so users who do not change that selected the wrong association by default. This is not desired, it should be impossible for users to select invalid relationship types. As a side effect it also causes a weird visual representation
Select one correct interface type: Provided Interface or Required Interface
- OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22]
[REPLACE THIS WITH YOUR INFORMATION]
It should be possible to override the default position of ports (blue half circles allowing to create relationships). Right now, the default is the middle of each edge of the bounding box.
I hope you don't mind me reporting tiny nitpicks like this. :-)
When trying out Apollon, I notices the following minor UI issues:
...
to indicate overflowing content.Best Regards,
Jannis
Instructors have the option in Artemis to add a max number of how often the score of a grading instruction should be counted in the total score.
The property is called usageCount
in Artemis.
In order to correctly calculate the total score in respect of this property, we must reference the instruction in the feedback on which the instruction was applied.
This was done for text and file upload exercises as the feedback is created in Artemis but as for modelling exercises the feedback is created in Apollon so the reference must be created in Apollon (on drop of an instruction in Apollon's assessment editor) in order to support this feature.
For more context please review updateFeedbackWithStructuredGradingInstructionEvent
method in Artemis where the above explained solution is already implemented for text and file upload exercises.
Underscores under object names are being overlapped by the characters above. This only occures in Firefox.
Underscores are completly visible.
- OS: Windows 10 - Browser: Firefox - Version: 76.0
When dragging an entity while not dragging it far enough for it to update its position, the entity retains its opacity as if it is still being dragged, although it was dropped and the mouse click is no longer held.
The problem couldn't be reproduced deterministically and only occurs in Firefox (Version 61.0.1).
It can be fixed if the entity is moved by at least a square of the grid.
The opacity is dependent on the variable isDragging
and is set in the file src/gui/components/Canvas/Entity/index.tsx
in the function computeContainerStyle()
.
The required interface in a component/deloyment diagram has exactly a semicircle however if you have two required interfaces attached on opposite directions on a provided interface it becomes a full circle and makes it hard to see what the actual provided and that the required ones are.
See screenshots, if not reproducable let me know then I'll provide more details
You can clearly see the differences. The solution would be to make the line length shorter to probably one quarter of a circle.
Large graphs can quickly become unorganized and confusing. Restructuring takes a lot of effort, especially if the graph is still changing. Thus, some editors support the automatic restructuring of graphs, which makes the graph planar (if possible) and minimizes edge bends.
Implement different auto-layout functions. An overview of graph drawing algorithms can be found here:
http://cs.brown.edu/people/rtamassi/papers/gd-tutorial/gd-constraints.pdf
An example of such functionality is shown here:
https://www.visual-paradigm.com/support/documents/vpuserguide/1283/28/6047_automaticdia.html
Updating the typescript version, brings compiler errors with it. Currently we have a lot to do in Apollon, so this ticket is used to describe the changes which need to be done at a later point.
For breaking changes, see: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#breaking-changes
Especially relevant for us: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#stricter-checks-on-intersections-and-optional-properties
With this change we have 56 compiler errors at first sight related to transpiling typescript to javascript. There are more issues, because fixing one of the issues resolves often in a chain of issues which need to be resolved
Causes:
This brings some problems, e.g. multiline.tsx:
The problem here is, that we have the property x and y coming multiple times in the tsx, one time from textProps and directly specified in the tsx. This should be easily solvable by manually handling the default value
The same problem applies to various places, where we have intersection types which include properties from different types with different type annotations for certain properties
Also the types of event annotations have changed:
so e.g. FormEvent<HTMLInputElement>
-> ChangeEvent<HTMLTextAreaElement>
for onChange of text input fields
we now have to give a manual type declaration, because the inferred is marked as a compiler error . Be careful, just using type any
will not solve the issue, because we want to achieve type safety and not disable typechecking use something like props: Props & { theme: Styles }
With overlapping connections between components in class diagrams, it is possible to have associations with different connection types drawn on top of each other.
This is a non-issue for connections of the same type (e.g. 2x aggregation with overlapping diamonds), but can be problematic when an aggregation connection including the diamond is drawn on top of e. g. a regular association - it makes the association look like an aggregation.
Connections of different types do not get drawn on top of each other, but rather offset to the side. The behaviour can sometimes be mitigated by choosing a different orientation/layout of the components, but this is not always practical or possible.
See this example:
The GameBoardUI's association arrow is drawn underneath the Player's aggregation diamond, making it unclear what is being modelled here. It looks like both classes are connected via aggregation, when in fact only the Player is.
Of course, in this example, we can easily reorder, but this is not always the case.
Expected:
- OS: macOS 10.15.5 Catalina - Browser Chrome 83.0.4103.116
A few courses cover modeling with Petri nets, which currently needs to be done by pen and paper. It would be great if Petri nets could be modeled directly in Artemis (Apollon).
Petri-nets only consists of 3 components:
Places and transitions should support the addition of comments (see red text in the example).
Further semantics are extensively described in the literature and the internet.
Although the example uses different colors, a black and white version with only the comments displayed in another color would be the preferred realization.
We only require basic support for Petri nets over natural numbers and boolean Petri nets. Advanced semantics, like colored Petri nets, are not required (at least not by our lecture).
It would be great if this feature could be realized until mid-November 2020
Unclean representation of multiple required interfaces on an interface in deployment or component diagram
Everything worked for me as well!
I have one suggestions:
is it possible for 3 or 4 required interfaces to keep the ones across to each other like they are and add an extra space to the other so that it looks like this?
Usability for interfaces
Working as intended however since this only applied when having three required interfaces this means that you still have the issue with two required interfaces.
It's not a big deal but as you can see in the screenshot the required interface intersects the line from the provided interface (right):
Clean representation
Currently, the feedback icons are rendered at the top right corner of the bounding box of an element. This leads to bad positioning of icons for relationships. See ls1intum/Artemis#445 for more details.
Update all dependencies to highest available version
In the context of Petri nets, a second diagram type is needed to describe the reachability of states within a Petri net. A reachability graph is a simple graph consisting of nodes containing a numeric vector (comma separated list) connected by simple arrows. No multiplicities are needed, but instead, an annotation of the arrows should be possible to show which transition caused the state change. The start state is marked by an arrow pointing to the node representing the start state. Since dangling arrows are probably difficult to realize using drawing tools, I suggest implementing this as an attribute (checkbox) of the nodes.
Create a new diagram type for reachability graphs. I suggest using activity diagrams as a baseline and only use the action node type.
TypeError: Cannot read property 'type' of undefined in apollon-editor.ts
0:47
var umlAssessments = Object.keys(assessments).map(function (id) {
return ({
modelElementId: id,
elementType: elements[id].type,
score: assessments[id].score,
feedback: assessments[id].feedback,
});
});
When deleting messages of communication links the popup does not match the displayed values
popup content matches displayed values in diagram
- OS: Linux Mint 19 - Browser: chrome - Version 83.0.4103.61
[REPLACE THIS WITH YOUR INFORMATION]
Create a bamboo build plan for automatic deployment to production server
CommunicationLink + Messages are currently implemented in a way, that they are not kept normalized in the application state.
This does not cause a problem right now, but potentially in the future.
Usually the application state is normalized. So CommunicationLink should reference its CommunicationLinkMessages by id. Currently the CommunicationLink has a full refernce to the element. This leads to inconsistency in the application state, e.g.:
If a CommunicationLinkMessage is updated via the UMLElementRepository.update function,
the changes are not communicated to the parent, i.e. the CommunicationLink. Thus when accessing the message later again via the CommunicationMessage, it will not contain the messages.
CommunicationLink should update CommunicationLinkMessages by id. The drawback of this is, that it would change the data model and we would lose backwards compatibility, meaning previous created CommunicationDiagrams may not work anymore
At some point in the future this should be fixed, when we need to change the DataModel anyway
Connecting UML elements does not work in Firefox in the lower right corner of the drawing area -> pointer event coordinates which should be relative to viewports, are incorrect -> wrong target port of connection is calculated
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.