class AsyncPackageDataModelOracleImpl implements AsyncPackageDataModelOracle {

    @Override
    public void getSuperTypes(final String factType,
                              final Callback<List<String>> callback) {
        final List<String> superTypes = filteredSuperTypes.get(factType);

        //Load incremental content
        if (superTypes == null) {
            service.call(new RemoteCallback<PackageDataModelOracleIncrementalPayload>() {

                @Override
                public void callback(final PackageDataModelOracleIncrementalPayload dataModel) {
                    AsyncPackageDataModelOracleUtilities.populateDataModelOracle(AsyncPackageDataModelOracleImpl.this,
                                                                                 dataModel);
                    callback.callback(filteredSuperTypes.get(factType));
                }
            }).getUpdates(resourcePath,
                          imports,
                          factType);
        } else {
            callback.callback(superTypes);
        }
    }

    @Inject public  AsyncPackageDataModelOracleImpl(final Caller<IncrementalDataModelService> service,
                                           final Instance<DynamicValidator> validatorInstance);

}