blob: f5bd201ca3f95305aabbd27f471d267f5b3fbdd0 [file] [log] [blame]
package com.bumptech.glide.load;
import com.bumptech.glide.load.engine.Resource;
import java.util.Arrays;
import java.util.Collection;
/**
* A transformation that applies one or more transformations in iteration order to a resource.
*
* @param <T> The type of {@link com.bumptech.glide.load.engine.Resource} that will be transformed.
*/
public class MultiTransformation<T> implements Transformation<T> {
private final Collection<? extends Transformation<T>> transformations;
private String id;
@SafeVarargs
public MultiTransformation(Transformation<T>... transformations) {
if (transformations.length < 1) {
throw new IllegalArgumentException("MultiTransformation must contain at least one Transformation");
}
this.transformations = Arrays.asList(transformations);
}
public MultiTransformation(Collection<? extends Transformation<T>> transformationList) {
if (transformationList.size() < 1) {
throw new IllegalArgumentException("MultiTransformation must contain at least one Transformation");
}
this.transformations = transformationList;
}
@Override
public Resource<T> transform(Resource<T> resource, int outWidth, int outHeight) {
Resource<T> previous = resource;
for (Transformation<T> transformation : transformations) {
Resource<T> transformed = transformation.transform(previous, outWidth, outHeight);
if (previous != null && !previous.equals(resource) && !previous.equals(transformed)) {
previous.recycle();
}
previous = transformed;
}
return previous;
}
@Override
public String getId() {
if (id == null) {
StringBuilder sb = new StringBuilder();
for (Transformation<T> transformation : transformations) {
sb.append(transformation.getId());
}
id = sb.toString();
}
return id;
}
}