As an ArgoUML contributor I'm going to blog my activities here, so that they may draw interest by other developers or help other developers when doing tasks similar to what I've done. AND(!) the grand vision that makes an Argonaut what he is, TO THRIVE IN THE BIG DANGEROUS WORLD, TAKING THE Argo TO A GOOD SHORE ;-))

Saturday, June 28, 2008

ArgoUML 0.26 enters alpha

Recently ArgoUML 0.26.alpha1 was released. This is another step forward to a much anticipated ArgoUML 0.26. It contains some new things and one of these is the profile subsystem, to which I made a modest contribution.

I'm now working in priority 2 issues of the profile subsystem, which block the stable release. I'm also working in documenting this subsystem, first in the cookbook and then I'll do updates to the user manual. I hope I can still give a bit of of attention to the C++ module...

So, here is a list of things I would like to try to fix before 0.26:

  1. issue #4994: Editing loaded profile should be prevented

    ExplorerPopup.isRelatedToProfiles(Project, Object) is used to detect if a element is related to the profiles configured in the current project. In the same package is the support for drag-n-drop, class DnDExplorerTree, which method isValidDrag(TreePath destinationPath, Transferable tf) contains the validation of valid and invalid drags. We may make impossible for profile model elements to be dragged by checking if the Transferable contents contain profile model elements. On the other hand, this would make it impossible to add a profile contained model element to a diagram and this would limit the usefulness of the profiles. FigNodeModelElement is the base class of many of the model element figures in the diagrams. Here the are two things needed: disable the menus that can modify the model element and disable the editability of the model element in-place. Such as the editing of names.

  2. issue #5017: profile model elements are absent from diagrams on reload
  3. issue #4991: Profiles subsystem missing in the cookbook
  4. issue #4992 – this is the one related to the update of the user manual for inclusion of the profile related functionality
  5. issue #3771: Add tag definitions for tags used by the cpp generator – for this it is only needed to update the user manual to reflect the usage of the UML profile for C++ instead of the previous way of copying into the model the model elements of the included profile.
  6. issue #27 of argouml-cpp: anarres-cpp: dependencies caused ArgoUML loading failure – I thought I had fixed this, but, in 0.26.alpha1 there is still the following warning:
     2008-06-27 19:17:48,526 ERROR: Unable to find required class while
          loading org.anarres.cpp.Main$Option - may indicate an obsolete
          extension module or an unresolved dependency ( 
    java.lang.NoClassDefFoundError: gnu/getopt/LongOpt at 
    java.lang.ClassLoader.defineClass1(Native Method) at 
    java.lang.ClassLoader.defineClass(Unknown Source) at Source) at Source) at$000(Unknown Source) at$ Source) at Method) at Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) at 
    sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) at 
    org.argouml.moduleloader.ModuleLoader2.addClass( at 
    org.argouml.moduleloader.ModuleLoader2.processEntry( at 
    org.argouml.moduleloader.ModuleLoader2.processJarFile( at 
    org.argouml.moduleloader.ModuleLoader2.huntModulesFromNamedDirectory( at 
    org.argouml.moduleloader.ModuleLoader2.huntForModulesFromExtensionDir( at 
    org.argouml.moduleloader.ModuleLoader2.huntForModules( at 
    org.argouml.moduleloader.ModuleLoader2.doInternal( at 
    org.argouml.moduleloader.ModuleLoader2.doLoad( at 
    org.argouml.moduleloader.InitModuleLoader.init( at 
    org.argouml.application.SubsystemUtility.initSubsystem( at
    org.argouml.application.Main.initializeSubsystems( at 
    org.argouml.application.Main.main( Caused by: 
    java.lang.ClassNotFoundException: gnu.getopt.LongOpt at$ Source) at Method) at Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) at 
    sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at 
    java.lang.ClassLoader.loadClass(Unknown Source) at 
    java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 24 more 2008-06-27 
    19:17:48,546 ERROR: Failed to find any loadable ArgoUML modules in      jar 
    X:\ArgoUML\0.26.ALPHA_1\ext\anarres-cpp-no-dependencies-1.2.3.jar     (
  7. There is a problem in JCPP from anarres that it doesn't close the files when the contained CppReader is told to close itself. This is causing 5 tests in argouml-cpp to fail with an error, when the tearDown() is trying to delete the files.
  8. There are some more argouml-cpp issues I would like to solve, but, this is a fair cry...

Google Summer of Code 2008

I'm a Google Summer of Code 2008 mentor for ArgoUML. It is fun and, as stated over and over, one learns a lot by teaching and in my case mentoring.

The student I'm mentoring is Bogdan Szanto and he is working in fixing diagram usability issues. This includes fixing some existing problems and adding new features, that hopefully will make ArgoUML users happier.

Bogdan already helped fix some problems found in the new sequence diagrams implementation – argouml-core-diagrams-sequence2. I was a bit late in this game, because he started working in this during the community bonding period and we both wanted him to “bond” with other developers than me. But, now it is long finished and I started supporting his work directly by reviewing patches and testing code and learning about the specifics of the implementation. So, while I was debugging I found the following issues that must go into the DB:

  • Summary: Broom causes ClassCastException when used in a seq2 diagram that contains a Note “connected” to a ClassifierRole

    ModeBroomMessages thinks that all edges in the diagram are messages, but, there can be connections between Notes and ClassifierRoles. The following exception happens when the Broom is used in a seq2 diagram that contains a Note “connected” to a classifier role:

     java.lang.ClassCastException: org.argouml.uml.diagram.static_structure.ui.FigEdgeNote
     at org.argouml.uml.diagram.sequence2.ui.ModeBroomMessages.getAllFigMessages(
     at org.argouml.uml.diagram.sequence2.ui.ModeBroomMessages.getAllFigMessagesDownward(
  • Summary: destroy action cleans the lifeline of the caller

    When a destroy action is created between two classifier roles, the lifeline of the caller becomes fully dashed. I think that the opposite shouldn't also occur, but, that the lifeline of the callee either should become dashed from the point where the message arrives onward or that it should finish there (preferable).

    See the attached figure “destroy-action-clears-lifeline-of-caller.png”.

  • Summary: selected create Action + “Alt” key cause repositioning of created CR

    When you draw a create Action between two classifier roles, leaving it selected, and, afterwards press the “Alt” key, the created CR is repositioned in the top position. If the create Action isn't selected this problem doesn't occur.

Reader Shared items