code: public boolean isConfigured(final boolean throwException) throws IllegalStateException,
              UnconfiguredConfiguredPropertyException {
          if (_datastoreConnection == null) {
              if (throwException) {
                  throw new IllegalStateException("No Datastore or DatastoreConnection set");
              }
              return false;
          }
  
          if (_sourceColumns.isEmpty()) {
              if (throwException) {
                  throw new IllegalStateException("No source columns in job");
              }
              return false;
          }
  
          if (_analyzerJobBuilders.isEmpty()) {
              if (throwException) {
                  throw new IllegalStateException("No Analyzers in job");
              }
              return false;
          }
  
          for (FilterJobBuilder<?, ?> fjb : _filterJobBuilders) {
              if (!fjb.isConfigured(throwException)) {
                  return false;
              }
          }
  
          for (TransformerJobBuilder<?> tjb : _transformerJobBuilders) {
              if (!tjb.isConfigured(throwException)) {
                  return false;
              }
          }
  
          for (AnalyzerJobBuilder<?> ajb : _analyzerJobBuilders) {
              if (!ajb.isConfigured(throwException)) {
                  return false;
              }
          }
  
          return true;
      }
docs: Used to verify whether or not the builder's configuration is valid and
  all properties are satisfied.
  
  @param throwException
  whether or not an exception should be thrown in case of
  invalid configuration. Typically an exception message will
  contain more detailed information about the cause of the
  validation error, whereas a boolean contains no details.
  @return true if the analysis job builder is correctly configured
  @throws IllegalStateException