Every session creating and closing starts and commits the model editing transaction. The com.nomagic.uml2.transaction.TransactionCommitListener is a special listener, which is notified when the all changes inside a transaction are done and the transaction is closed.
The TransactionCommitListener contains transactionCommited(java.util.Collection<java.beans.PropertyChangeEvent>) method, which provides a collection of all java.beans.PropertyChangeEvent(s) that were executed in a transaction.
Create a custom transaction commit listener:
public class MyTransactionListener implements TransactionCommitListener { public Runnable transactionCommited(final Collection<PropertyChangeEvent> events) { return new Runnable() { public void run() { for (PropertyChangeEvent event : events) { if (UML2MetamodelConstants.INSTANCE_CREATED.equals(event.getPropertyName())) { Object source = event.getSource(); if (source instanceof Property) { Property property = (Property) source; Element owner = property.getOwner(); if (owner instanceof Classifier) { Classifier propertyOwner = (Classifier) owner; propertyOwner.setName("Contains (" + propertyOwner.getAttribute().size() + ") attributes"); } // additionally for this Property we register listener to listen for any property changes in this Element properties. property.addPropertyChangeListener(new DerivedValuePropertyChangeListener()); } } } } }; } }
This “transaction commit listener” checks, if a new property is created in a classifier and updates the classifier’s (a property owner) name. All changes are done in the same session.
Register the custom “transaction commit listener” into the project
MyTransactionListener transactionListener = new MyTransactionListener(); TransactionManager transactionManager = project.getRepository().getTransactionManager(); transactionManager.addTransactionCommitListener(transactionListener);
Related pages