MappingListeners
The mapping listeners service allows you to listen to when mappings are applied to any Workspace
.
Listening to mapping operations
Just call addMappingApplicationListener(MappingApplicationListener)
with your listener implementation.
Here is an example implementation with some comments explaining the contents of the mapping results model:
class ExampleMappingListener implements MappingApplicationListener {
@Override
public void onPreApply(@Nonnull MappingResults mappingResults) {
// The mappings that were used to create the results
Mappings mappings = mappingResults.getMappings();
// All names of classes *affected* by mappings can be iterated over.
//
// If a class was not renamed, but had contents inside it that point to renamed content
// it will be included in this map and the key/value will be equal.
// Otherwise, the post-map-name will be the class's renamed name.
mappingResults.getMappedClasses().forEach((preMapName, postMapName) -> {
ClassPathNode preMappingPath = mappingResults.getPreMappingPath(preMapName);
ClassPathNode postMappingPath = mappingResults.getPostMappingPath(postMapName);
// The 'results' model already has the contents of classes after mapping is applied.
// They just have not been copied back into the workspace yet.
ClassInfo preMappedClass = preMappingPath.getValue();
ClassInfo postMappedClass = postMappingPath.getValue();
});
}
@Override
public void onPostApply(@Nonnull MappingResults mappingResults) {
// The results model is the same as the 'onPreApply' but the workspace has now been
// updated to replace old classes with the updated instances.
}
}