docs: @SuppressWarnings("unchecked")
      private static ReadConfiguration getLocalConfiguration(File file) {
          Preconditions.checkArgument(file != null && file.exists() && file.isFile() && file.canRead(),
                  "Need to specify a readable configuration file, but was given: %s", file.toString());
  
          try {
              PropertiesConfiguration configuration = new PropertiesConfiguration(file);
  
              final File tmpParent = file.getParentFile();
              final File configParent;
  
              if (null == tmpParent) {
                  /*
                   * null usually means we were given a Titan config file path
                   * string like "foo.properties" that refers to the current
                   * working directory of the process.
                   */
                  configParent = new File(System.getProperty("user.dir"));
              } else {
                  configParent = tmpParent;
              }
  
              Preconditions.checkNotNull(configParent);
              Preconditions.checkArgument(configParent.isDirectory());
  
              // TODO this mangling logic is a relic from the hardcoded string days; it should be deleted and rewritten as a setting on ConfigOption
              final Pattern p = Pattern.compile("(" +
                      Pattern.quote(STORAGE_NS.getName()) + "\\..*" +
                              "(" + Pattern.quote(STORAGE_DIRECTORY.getName()) + "|" +
                                    Pattern.quote(STORAGE_CONF_FILE.getName()) + ")"
                      + "|" +
                      Pattern.quote(INDEX_NS.getName()) + "\\..*" +
                              "(" + Pattern.quote(INDEX_DIRECTORY.getName()) + "|" +
                                    Pattern.quote(INDEX_CONF_FILE.getName()) +  ")"
              + ")");
  
              final Iterator<String> keysToMangle = Iterators.filter(configuration.getKeys(), new Predicate<String>() {
                  @Override
                  public boolean apply(String key) {
                      if (null == key)
                          return false;
                      return p.matcher(key).matches();
                  }
              });
  
              while (keysToMangle.hasNext()) {
                  String k = keysToMangle.next();
                  Preconditions.checkNotNull(k);
                  String s = configuration.getString(k);
                  Preconditions.checkArgument(StringUtils.isNotBlank(s),"Invalid Configuration: key %s has null empty value",k);
                  configuration.setProperty(k,getAbsolutePath(configParent,s));
              }
              return new CommonsConfiguration(configuration);
          } catch (ConfigurationException e) {
              throw new IllegalArgumentException("Could not load configuration at: " + file, e);
          }
      }