The Graph interface does not expose transactions or index operations, so defining the blueprints graph database in terms of it would require casts or some changes to avoid relying on those features (and I think we should demand indexes and transactions, right?)
Unfortunately we cannot define the variable as "something that implements both IndexedGraphDatabase and TransactionalGraphDatabase" but we could do that as a bound on a type parameter. Once I get the tests passing again I will attempt to refactor to a generic base class like:
abstract class BlueprintsGraphDatabase<DB extends IndexedGraphDatabase, TransactionalGraphDatabase> {
private DB graphDatabase;
public DB createDatabase();
}
Hopefully this won't be too burdensome on implementers, otherwise we can just fall back to casts.