author: Sven Konings
title: Manipulating Java states as graphs
topics: Algorithms and Data Structures , Graphs
committee: Arend Rensink
started: April 2017
end: July 2017
type: Research Project


Many problem domains let themselves be described in terms of graph-like structures; examples are data structures, traffic flows, computer networks, games. The graph transformation tool GROOVE offers an easy and intuitive way to declare how such graphs evolve, on the basis of graph transformation rules, as well as functionality to automatically simulate such rules and model check the resulting state space. In doing so, GROOVE uses its own underlying graph class; this is the data structure that it actually manipulates.

In this assignment, you are asked to enable the transformation of actual Java objects instead. That is, through Java annotations you should define which classes constitute the nodes of your graph and which associations the edges of your graph, as well as which methods are available for their manipulation. Subsequently, you should adapt the GROOVE implementation so that it accesses the graphs through these annotated methods.

The following steps of the assignment can be foreseen:

  1. Understanding the concept of graph transformation and getting familiar with the GROOVE tool
  2. Designing a set of Java annotations that can serve the purpose of identifying the node/edge classes and their manipulation methods, as described above
  3. Coding the appropriate GROOVE extension
  4. Validating the solution by applying it to a pre-defined test suite

As inspiration, you can take a look at an annotation library that was created for the same purpose in another context; see


  1. de Mol, M.J. and Rensink, A. and Hunt, J.J. (2012) Graph Transforming Java Data. In: Proceedings of the 15th International Conference on Fundamental Approaches to Software Engineering (FASE 2012), 26-29 Mar 2012, Talinn, Estonia. pp. 209-223. Lecture Notes in Computer Science 7212. (Digital version available here)