Changes in Islandora 7
With the a new stable release of Islandora 7.x nearly one month old, we sat down with Jonathan Green, Chief Technology Officer at discoverygarden, to find out a little more about new features, architecture changes, and anything else that has changed between Islandora 6 and Islandora 7.
Can you describe how the content model architecture has changed between Islandora 6 & 7?
Jonathan: In Islandora 6, we had a content model architecture where the content model had its own object, and within that object was an XML datastream that described the location of PHP code to execute. In Islandora 7 the content model still exists as an object in Fedora, but it employs the Fedora ECM architecture - basically, (for those familiar with Islandora 6) the Islandora_CM stream is no longer used. That said, having Islandora_CM in Fedora is not going to break Islandora during an upgrade.
Instead of using that datastream, the PHP code to be executed is now defined by the drupal hook system and lives in Drupal.
What are the benefits to using the hook system instead of a Content Model datastream?
Jonathan: It makes debugging easier in Drupal 7 because there is no longer indirection from PHP to XML back to PHP. Architecture is easier to understand, and we can use Drupal’s modular hook system.
Are there other major architectural changes?
Jonathan: The most important change is the addition of Tuque to the system. The repository layer is now abstracted to Tuque API - which is easier and cleaner. That abstraction creates a layer between us and the repository, allowing us to potentially hook up to different repositories it allows all repository code to live in one place, and it provides consistent and well tested APIs to access the repository, reducing bugs and improving performance. Makes it an easier project for others to contribute to.
One of the more interesting offshoots of this change is that the API is actually being used by others who are not using Islandora.
What’s new with the viewer architecture?
Jonathan: In version 6 of Islandora all the viewers were baked into the solution packs. In the Drupal 7 release of Islandora we have tried to take a very model-view-controller approach where the viewer is taken out of the business logic and lives in its own module, so that we’re able to use the viewers in multiple modules, and we can plug different viewers in solution packs without re-writing the business logic of that pack. You can see the results at work with the large image, book, and audio solution packs. It allows the user to choose a viewer for the solution pack at configuration time - and admins and developers have even more options.
Are there changes in the basic behavior of solution packs?
Jonathan: Everything is a solution pack, and what a “solution pack” includes is more fleshed out in Islandora 7: a content model or set of content models and all the codes that implement the hooks for those content models. We’ve also associated the forms.
A lot of the work we’ve done in 7 is to implement everything as a Drupal hook, providing hooks for things like forms (before, we directly pushed them into the Drupal database). Now, we define a hook in the form builder that lets solution packs have forms. This is more Drupal-y and extendible. It allows modules to be plugged in an easier fashion and reduces interdependence between modules.
We’ve also tried very hard to implement everything as at theme function. What helped a great deal in the original sprints was having Kris Bulman from UPEI with us - he has a strong views about how modules should interact with the theme layer, and he shaped how Islandora interacts with Drupal themes. Everything is templated and theme functions are used. In other words, Islandora 7 is way more available to theming functions than 6. We’ve drank the Drupal Kool-Aid.
It’s interesting, because it’s both a move closer and further together to Drupal. The parts of Islandora that interact with Drupal are very Drupal-y, but we’ve drawn the line at the bottom part of the stack across Fedora. We have been able to imagine where we hook up with Drupal and where we don’t. This policy change has made things much easier for developers. Again, the idea is that we have a framework to which others can more easily contribute.
Have XML forms changed at all?
Jonathan: Nope. Same old Islandora 6 XML forms.
What about differences between the Islandora 7 beta, and the new stable release?
Jonathan: There has been a lot of work done to ingest. A big change from the beta to this version is pulling the active ingesting out of XML forms and putting it into Islandora core. So, there are hooks in Islandora core that define how things can be ingested and XML forms responds to those as any other module would. This gives us a consistent way to ingest.
There has also been a lot of code cleanup, and renaming of functions, so that function names are consistent. We extended our coding standards to show people how to name files in Islandora. This will be available with the new release. We took the approach of overriding all of the major functions in order to integrate Tuque in a Drupal fashion. We extended all of the tuque-based classes to create a light wrapper that calls Drupal hooks, allowing users of add-on modules to respond to actions taken in Fedora.
Do you have any advice for people that are moving from Islandora 6 to Islandora 7? What roadblocks could you expect?
Jonathan: Developers need to get themselves into a new mindset, but development is going to be a million times easier.
For users, the UI is better and more intuitive. Migration shouldn’t be very hard. Almost all content models are compatible - Drupal 7 and Islandora can be pointed to the same repository and present the content properly. There are a few non-critical differences - for instance, the PDF solution pack now generates a medium sized thumbnail that is displayed as the main image. Since that piece isn’t there in Islandora 6, the image will just show up as a link in Islandora 7. It doesn’t look as nice, but it still works.
So there's the scoop on Islandora 7.x-1.1. More Tuque-y, more Drupal-y, and all around a jump ahead for Islandora.