I wrote a web tool in Java EE, performing the following subtasks:
- Reverse engineer the project file (zip-File with an XML describing the project and folders containing the device drivers)
- Reverse engineer the XML file representing the entire project (i.e. house)
- Reverse engineer the XML structure representing programs the installers wrote for old and new proxy versions
- Create models for old and new proxies
- Create a mapping between these models
- Provide an online tool where installers can upload a project which is then migrated to the new versions:
- replace the old drivers with new ones
- configure them accordingly
- automatically re-implement programs using the new interfaces
- clean up invalid parts of the project file
- be as fault-tolerant as possible: migrate as many drivers/devices as possible; inform the installer about parts that failed to migrate
- Iterative process: based on failed migrations, learn more about the internal workings of the project file and improve the migration tool accordingly