/** Creates a ResourceBundle based on the supplied definition information. */
 protected ResourceBundle createResourceBundle(
     String setType, String path, List<ResourceBundle> dlist) {
   if (setType.equals(FILE_SET_TYPE)) {
     FileResourceBundle bundle = createFileResourceBundle(getResourceFile(path), true, _unpack);
     if (!bundle.isUnpacked() || !bundle.sourceIsReady()) {
       dlist.add(bundle);
     }
     return bundle;
   } else if (setType.equals(NETWORK_SET_TYPE)) {
     return createNetworkResourceBundle(_networkRootPath, path, getResourceList());
   } else {
     throw new IllegalArgumentException("Unknown set type: " + setType);
   }
 }
  /**
   * Resolve the specified bundle (the bundle file must already exist in the appropriate place on
   * the file system) and return it on the specified result listener. Note that the result listener
   * may be notified before this method returns on the caller's thread if the bundle is already
   * resolved, or it may be notified on a brand new thread if the bundle requires unpacking.
   */
  public void resolveBundle(String path, final ResultListener<FileResourceBundle> listener) {
    File bfile = getResourceFile(path);
    if (bfile == null) {
      String errmsg = "ResourceManager not configured with resource directory.";
      listener.requestFailed(new IOException(errmsg));
      return;
    }

    final FileResourceBundle bundle = new FileResourceBundle(bfile, true, _unpack);
    if (bundle.isUnpacked()) {
      if (bundle.sourceIsReady()) {
        listener.requestCompleted(bundle);
      } else {
        String errmsg = "Bundle initialization failed.";
        listener.requestFailed(new IOException(errmsg));
      }
      return;
    }

    // start a thread to unpack our bundles
    ArrayList<ResourceBundle> list = Lists.newArrayList();
    list.add(bundle);
    Unpacker unpack =
        new Unpacker(
            list,
            new InitObserver() {
              public void progress(int percent, long remaining) {
                if (percent == 100) {
                  listener.requestCompleted(bundle);
                }
              }

              public void initializationFailed(Exception e) {
                listener.requestFailed(e);
              }
            });
    unpack.start();
  }