All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bumptech.glide.provider.ResourceDecoderRegistry Maven / Gradle / Ivy

package com.bumptech.glide.provider;

import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.util.Synthetic;
import java.util.ArrayList;
import java.util.List;

/**
 * Contains an ordered list of {@link ResourceDecoder}s capable of decoding arbitrary data types
 * into arbitrary resource types from highest priority decoders to lowest priority decoders.
 */
@SuppressWarnings("rawtypes")
public class ResourceDecoderRegistry {
  private final List> decoders = new ArrayList<>();

  @SuppressWarnings("unchecked")
  public synchronized  List> getDecoders(Class dataClass,
      Class resourceClass) {
    List> result = new ArrayList<>();
    for (Entry entry : decoders) {
      if (entry.handles(dataClass, resourceClass)) {
        result.add((ResourceDecoder) entry.decoder);
      }
    }
    // TODO: cache result list.

    return result;
  }

  @SuppressWarnings("unchecked")
  public synchronized  List> getResourceClasses(Class dataClass,
      Class resourceClass) {
    List> result = new ArrayList<>();
    for (Entry entry : decoders) {
      if (entry.handles(dataClass, resourceClass)) {
        result.add((Class) entry.resourceClass);
      }
    }
    return result;
  }

  public synchronized  void append(ResourceDecoder decoder, Class dataClass,
      Class resourceClass) {
    decoders.add(new Entry<>(dataClass, resourceClass, decoder));
  }

  public synchronized  void prepend(ResourceDecoder decoder, Class dataClass,
      Class resourceClass) {
    decoders.add(0, new Entry<>(dataClass, resourceClass, decoder));
  }

  private static class Entry {
    private final Class dataClass;
    @Synthetic final Class resourceClass;
    @Synthetic final ResourceDecoder decoder;

    public Entry(Class dataClass, Class resourceClass, ResourceDecoder decoder) {
      this.dataClass = dataClass;
      this.resourceClass = resourceClass;
      this.decoder = decoder;
    }

    public boolean handles(Class dataClass, Class resourceClass) {
      return this.dataClass.isAssignableFrom(dataClass) && resourceClass
          .isAssignableFrom(this.resourceClass);
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy