private ExtRepositoryFileVersionAdapter _toExtRepositoryFileVersionAdapter(
      ExtRepositoryFileEntryAdapter extRepositoryFileEntryAdapter,
      ExtRepositoryFileVersion extRepositoryFileVersion)
      throws PortalException {

    ExtRepositoryAdapterCache extRepositoryAdapterCache = ExtRepositoryAdapterCache.getInstance();

    String extRepositoryModelKey = extRepositoryFileVersion.getExtRepositoryModelKey();

    ExtRepositoryFileVersionAdapter extRepositoryVersionAdapter =
        extRepositoryAdapterCache.get(extRepositoryModelKey);

    if (extRepositoryVersionAdapter == null) {
      RepositoryEntry repositoryEntry = getRepositoryEntry(extRepositoryModelKey);

      extRepositoryVersionAdapter =
          new ExtRepositoryFileVersionAdapter(
              this,
              repositoryEntry.getRepositoryEntryId(),
              repositoryEntry.getUuid(),
              extRepositoryFileEntryAdapter,
              extRepositoryFileVersion);

      extRepositoryAdapterCache.put(extRepositoryVersionAdapter);
    }

    return extRepositoryVersionAdapter;
  }
  @SuppressWarnings("unchecked")
  private <T extends ExtRepositoryObjectAdapter<?>> T _toExtRepositoryObjectAdapter(
      ExtRepositoryObjectAdapterType<T> extRepositoryObjectAdapterType,
      ExtRepositoryObject extRepositoryObject)
      throws PortalException {

    ExtRepositoryAdapterCache extRepositoryAdapterCache = ExtRepositoryAdapterCache.getInstance();

    String extRepositoryModelKey = extRepositoryObject.getExtRepositoryModelKey();

    ExtRepositoryObjectAdapter<?> extRepositoryObjectAdapter =
        extRepositoryAdapterCache.get(extRepositoryModelKey);

    if (extRepositoryObjectAdapter == null) {
      RepositoryEntry repositoryEntry = getRepositoryEntry(extRepositoryModelKey);

      if (extRepositoryObject instanceof ExtRepositoryFolder) {
        ExtRepositoryFolder extRepositoryFolder = (ExtRepositoryFolder) extRepositoryObject;

        extRepositoryObjectAdapter =
            new ExtRepositoryFolderAdapter(
                this,
                repositoryEntry.getRepositoryEntryId(),
                repositoryEntry.getUuid(),
                extRepositoryFolder);
      } else {
        ExtRepositoryFileEntry extRepositoryFileEntry =
            (ExtRepositoryFileEntry) extRepositoryObject;

        extRepositoryObjectAdapter =
            new ExtRepositoryFileEntryAdapter(
                this,
                repositoryEntry.getRepositoryEntryId(),
                repositoryEntry.getUuid(),
                extRepositoryFileEntry);

        _forceGetFileVersions((ExtRepositoryFileEntryAdapter) extRepositoryObjectAdapter);

        _checkAssetEntry((ExtRepositoryFileEntryAdapter) extRepositoryObjectAdapter);
      }

      extRepositoryAdapterCache.put(extRepositoryObjectAdapter);
    }

    if (extRepositoryObjectAdapterType == ExtRepositoryObjectAdapterType.FILE) {

      if (!(extRepositoryObjectAdapter instanceof ExtRepositoryFileEntryAdapter)) {

        throw new NoSuchFileEntryException(
            "External repository object is not a file " + extRepositoryObject);
      }
    } else if (extRepositoryObjectAdapterType == ExtRepositoryObjectAdapterType.FOLDER) {

      if (!(extRepositoryObjectAdapter instanceof ExtRepositoryFolderAdapter)) {

        throw new NoSuchFolderException(
            "External repository object is not a folder " + extRepositoryObject);
      }
    } else if (extRepositoryObjectAdapterType != ExtRepositoryObjectAdapterType.OBJECT) {

      throw new IllegalArgumentException(
          "Unsupported repository object type " + extRepositoryObjectAdapterType);
    }

    return (T) extRepositoryObjectAdapter;
  }