19fc12334a7d14347cd6951d0653264b2597bd3a0Sam Juddpackage com.bumptech.glide.load; 29f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 3b7c7c2b2505f996dbda219faeb0d08dc1c9982d7Sam Juddimport com.bumptech.glide.load.engine.Resource; 49f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 59f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Juddimport java.util.List; 69f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 79f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd/** 89f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd * A transformation that applies an ordered array of one or more transformations to an image. 99f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd */ 1031b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Juddpublic class MultiTransformation<T> implements Transformation<T> { 1131b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd private Transformation<T>[] transformations; 1231b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd private List<Transformation<T>> transformationList; 13be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd private String id; 149f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 1531b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd public MultiTransformation(Transformation<T>... transformations) { 169f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd if (transformations.length < 1) { 179f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd throw new IllegalArgumentException("MultiTransformation must contain at least one Transformation"); 189f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 199f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd this.transformations = transformations; 209f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 219f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 2231b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd public MultiTransformation(List<Transformation<T>> transformationList) { 239f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd if (transformationList.size() < 1) { 249f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd throw new IllegalArgumentException("MultiTransformation must contain at least one Transformation"); 259f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 269f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd this.transformationList = transformationList; 279f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 289f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 299f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd @Override 3031b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd public Resource<T> transform(Resource<T> resource, int outWidth, int outHeight) { 31063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd Resource<T> previous = resource; 329f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 339f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd if (transformations != null) { 3431b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd for (Transformation<T> transformation : transformations) { 35063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd Resource<T> transformed = transformation.transform(previous, outWidth, outHeight); 36063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd if (transformed != previous && previous != resource && previous != null) { 37063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd previous.recycle(); 38063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd } 39063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd previous = transformed; 409f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 419f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } else { 4231b60a4ba485dcc22e5edd19c6768e1141c32f4eSam Judd for (Transformation<T> transformation : transformationList) { 43063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd Resource<T> transformed = transformation.transform(previous, outWidth, outHeight); 44063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd if (transformed != previous && previous != resource && previous != null) { 45063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd previous.recycle(); 46063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd } 47063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd previous = transformed; 489f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 499f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 509f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 51063020db301f9a3d96c8aa6a7f0b0bc1651ba45eSam Judd return previous; 529f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 539f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd 549f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd @Override 559f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd public String getId() { 56be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd if (id == null) { 57be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd StringBuilder sb = new StringBuilder(); 58be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd if (transformations != null) { 59be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd for (Transformation transformation : transformations) { 60be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd sb.append(transformation.getId()); 61be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd } 62be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd } else { 63be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd for (Transformation transformation : transformationList) { 64be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd sb.append(transformation.getId()); 65be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd } 66be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd } 67be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd id = sb.toString(); 689f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 69be180a0eb61b3e4c088cec44c69cde5f91cbe7b9Sam Judd return id; 709f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd } 719f0bef767aca7d0e40f9eba8c1ea52159bed2091Sam Judd} 72