Giter VIP home page Giter VIP logo

jetuml's Introduction

JetUML

GitHub release License: GPL v3 GitHub all releases GitHub Repo stars GitHub contributors

A lightweight desktop application for interactively creating and editing diagrams in the Unified Modeling Language. JetUML supports the sketching of software design ideas with a minimum of fuss. Diagrams can be saved in JSON, exported to popular image formats, and copied to the system clipboard for integration with other tools. Supports class diagrams, sequence diagrams, state diagrams, object diagrams, and use case diagrams.

JetUML Class Diagram

Endorsements

I do a fair bit of modeling with some commercial tools which can be quite heavyweight. Whenever I need to quickly sketch out a design before writing code I prefer JetUML in most cases. โ€” Randall Hudson, Mitre Corporation

Download

JetUML is available both as a self-contained application and as a Java archive file under the terms of the GNU General Public License v3. Download the application from the latest release page and if necessary see the installation guide. Please consider supporting the project by starring this repo and by writing an endorsement.

Privacy Policy

JetUML does not collect any information, personal or otherwise. The application only accesses the network to open web pages via the commands in the Help menu.

Documentation

JetUML in the Literature

  • M.P. Robillard and K. Kutschera. Lessons Learned in Migrating from Swing to JavaFX. IEEE Software, 37 (3), 2020. Reports on the experience of migrating the GUI to JavaFX. (pdf)
  • F. Pfahler, R. Minelli, C. Nagy, M. Lanza. Visualizing Evolving Software Cities. In Proceedings of the 8th Working Conference on Software Visualization, 2020. Discusses the evolution of the JetUML code base. (pdf)
  • D. Marmsoler and A. Petrovska. Detecting Architectural Erosion using Runtime Verification. In Proceedings of the 12th Interaction and Concurrency Experience Workshop, 2019. Applies a verification method to JetUML. (pdf)
  • Q. Wang, Y. Brun, A. Orso. Behavioral Execution Comparison: Are Tests Representative of Field Behavior?. In Proceedings of the 10th IEEE International Conference on Software Testing, Verification, and Validation, 2017. Analyzes JetUML's test suite. (pdf)
  • M.P. Robillard. Sustainable Software Design. In Proceedings of the 24th ACM SIGSOFT International Symposium on the Foundations of Software Engineering, 2016. Discusses some of JetUML's design decisions. (pdf)

jetuml's People

Contributors

arthuswqz avatar benthillerkus avatar bl0ckeduser avatar cc-21 avatar charlottexiaoyeding avatar delphinepilon avatar ejbq avatar farihatanjin avatar henray avatar jackz11 avatar jc-chen157 avatar jiahao-c avatar joelchev avatar kkutschera avatar laurieprince avatar lberardelli avatar lercerss avatar lotsofish avatar maddy0218 avatar nima200 avatar oliviergl avatar prmr avatar ruoyudeng avatar stephenchen avatar whitecat avatar yannsartori avatar yingjie-xu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jetuml's Issues

Test and refactor class BentStyle

There is an opportunity for polymorphism in that giant if and the switching on bent styles in general. Since we'll be playing with this code a lot when working on the routing algorithms, it will be nice if it's clean.

Make it possible to remove node from a list of selected graph elements

Using the control key it's possible to add to a list of selected elements. It should be possible to remove selected elements in the same way. In Violet 0.21 that is only possible for nodes so we'll replicate this behavior for now but ultimately this should be more consistent across nodes and edges. This should be based on a cleanup of the mouse handling in GraphPanel, which is a bit unprincipled right now.

Improve the recent files menu

  • Disables the menu if there are no recent files.
  • Enable a maximum number of recent files (5).
  • Add a file to the recent files menu when saving as.
  • Test whether files exist before adding them to the recent files menu.
  • Produce a better message when a file is not found.

NPE when loading previous file with unsaved changes

Steps to reproduce:

  1. Create a save a file call it A.violet
  2. Restart the application
  3. Create a new diagram
  4. File -> Recent Files -> a.violet
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.horstmann.violet.framework.EditorFrame.open(EditorFrame.java:666)
    at com.horstmann.violet.framework.EditorFrame.access$6(EditorFrame.java:658)
    at com.horstmann.violet.framework.EditorFrame$24.actionPerformed(EditorFrame.java:798)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

ClassCastException upon launch

Launching raises the following exception, which does not appear to impede the program:

Exception in thread "main" java.lang.ClassCastException: javax.swing.JInternalFrame cannot be cast to com.horstmann.violet.framework.GraphFrame
    at com.horstmann.violet.framework.EditorFrame.setTitle(EditorFrame.java:750)
    at com.horstmann.violet.framework.EditorFrame.readArgs(EditorFrame.java:651)
    at com.horstmann.violet.UMLEditor.main(UMLEditor.java:52)

Better image format handling

Make it more explicit that files can only be exported in .jpg and .png format. Deal with format individually with the optionalFilters as opposed to parsing the pipe-separated list of extensions. Simplify ExtensionFilter to only deal with a single extension.

Empty Property Editor

In the framework, it is possible to bring up a properties editor even for an object that has no properties. For example, an note edge. This should not happen: if the object has no property, the behavior should default to do nothing.

Fix Look and Feel

Try to use the Nimbus LAF and set this as the only LAF. Let's keep the laf property for now in case we change our mind, but we'll unhook the menu.
Make the grid grey.

Translating Children Nodes of Parent Nodes not working properly

Steps to reproduce:

  1. Use the lasso to select an Object Node with a Field Node inside it.
  2. Try to move the selection around. The Field Node becomes temporarily "unhooked" from the Object Node and wiggles around in space while you move. It snaps back into place on release of the mouse.

This issue is caused by the translation being done twice for children nodes.

In GraphPanelMouseMotionListener, the code goes through the entire selection and does n.translate(dx, dy);.

However, the selection includes a parent node and all its children. However, the code for translate dynamically dispatches to AbstractNode.translate:

public void translate(double pDeltaX, double pDeltaY)
{
for(Node node : aChildren)
{
node.translate(pDeltaX, pDeltaY);
}
}
which goes through all the children (again!) so basically the error is caused by the children nodes being translated twice.

Remove old applet-supporting code

Some of the code and design complexity (e.g., the FileService class hierarchy) is only there to support applet mode, which we will not be supporting. This code should be removed and the result refactored to simplify.

I will also cleanup the business with the file extensions.

Clean up dead branches

A last thing to do before closing the milestone, @JoelChev and @EJBQ please delete your dead branches.

For some reason the discontinuity in the master branch corrupted branch 40. I'll just copy the changes over into a fresh branch from master.

Order properties in the PropertyEditor

Since the refactoring of the graph framework, properties appear in a strange order in the properties editor. This is because the properties editor is sensitive to the arbitrary order in which properties are discovered by the JavaBeans framework, and the fact that the priority property is not used by the comparator in the constructor of PropertySheet

Update the style file to reflect the current code

However, don't overfit. Checks for some types of problems (like the use of raw types) should be left in, and we'll improve these as we go. If you have any doubt about what rules should be dropped or changed, post here.

Modernize the graph framework

For classes Graph Node, and Edge and their implementers:

  • Use generics
  • Clean up the code
  • Make UML documents
  • Move into its own package graph

File format incompatibility

There were some changes to the Graph framework that rendered the existing files unreadable (e.g., I can't load any data from the files in /testdata. What were these changes and how can we recover from them? I need to be able to make all the test diagram files I have work with the current version.

Resolve bugs with Sequence Diagrams in Copy/Cut+Paste

This will likely be encompassed in the larger re-design of the Diagrams and the Parent-Child relationships of their Nodes that we will be tackling later on, but for now I just want to make sure that the issue is not forgotten.

Steps to reproduce:

  1. Create a new sequence diagram with a Call Edge between two ImplicitParameterNodes.
  2. Copy/Cut it.
  3. Paste it.

The Call Nodes behave erratically and don't seem to be fixed properly to their lifelines. Again, this is something that will likely be addressed in a larger redesign, but I just want to make sure it is addressed.

Relevant: https://github.com/prmr/JetUML/wiki/Parent-Child-Relation

Rename all packages

We should rename the packages to ca.mcgill.cs.stg.* to avoid clashes with the original Violet code. Let's do this last to avoid merge conflicts.

File path gets lost during file save

Steps to reproduce:

  1. Create a diagram, save as testdata/Mydiagram...
  2. Close it
  3. Open the diagram with Recent Files
  4. Save it using Save

It gets saved in the root directory, not in testdata, clearly the path part of the file name has been lost.

Change branding

Change the tool name and branding information everywhere, respecting the copyrights.

Create a Welcome Panel

The welcome panel should appear whenever there are no diagram, and should support creating new diagrams or opening recent files. Probably a good idea to add this after we switch over to the tabbed panel.

Screen capture feature

With the click of a button the current graph should be copied to the clipboard as in 0.21

Rip out the serialization support

The serialization of diagrams relies on the JavaBeans framework as opposed to binary serialization. It looks like we can get rid of all the binary serialization-related code.

Clean up the persistence code

The persistence support in EditorFrame can be improved:

  • The behavior is in static methods that could be moved to a specialized and testable class.
  • There is some old workaround code for a JDK bug that has been fixed. We might be able to use the more straightforward strategy.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.