code: @Override
      public GranularityFactory getGranularityFactory()
              throws DataSourceReadException {
          initializeIfNeeded();
          GranularityFactory result = null;
          DataSourceBackend b = null;
          for (DataSourceBackend backend : getBackends()) {
              result = backend.getGranularityFactory();
              b = backend;
              break;
          }
          assert result != null : "no granularity factory returned from "
                  + b.getClass() + "!";
          return result;
      }
docs: Returns an object for accessing the granularity of returned data from the
  schema adaptor for this data source.
  
  @return a {@link GranularityFactory}, or <code>null</code> if the data
  source could not be initialized or the schema adaptor returned a null
  GranularityFactory.
  @throws TerminologyAdaptorInitializationException if the terminology
  adaptor could not be initialized.
  @throws SchemaAdaptorInitializationException if the schema adaptor could
  not be initialized.
  @see SchemaAdaptor#getGranularityFactory()