EngineKey.java revision 8acb4cc63588cdf595357bb60ac1ac79d3985893
1package com.bumptech.glide.load.engine; 2 3import com.bumptech.glide.load.Encoder; 4import com.bumptech.glide.load.Key; 5import com.bumptech.glide.load.ResourceDecoder; 6import com.bumptech.glide.load.ResourceEncoder; 7import com.bumptech.glide.load.Transformation; 8import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; 9 10import java.io.UnsupportedEncodingException; 11import java.nio.ByteBuffer; 12import java.security.MessageDigest; 13 14@SuppressWarnings("rawtypes") 15class EngineKey implements Key { 16 private static final String FORMAT = "UTF-8"; 17 18 private final String id; 19 private final int width; 20 private final int height; 21 private final ResourceDecoder cacheDecoder; 22 private final ResourceDecoder decoder; 23 private final Transformation transformation; 24 private final ResourceEncoder encoder; 25 private final ResourceTranscoder transcoder; 26 private final Encoder sourceEncoder; 27 private String stringKey; 28 private int hashCode; 29 private OriginalEngineKey originalKey; 30 31 public EngineKey(String id, int width, int height, ResourceDecoder cacheDecoder, ResourceDecoder decoder, 32 Transformation transformation, ResourceEncoder encoder, ResourceTranscoder transcoder, 33 Encoder sourceEncoder) { 34 this.id = id; 35 this.width = width; 36 this.height = height; 37 this.cacheDecoder = cacheDecoder; 38 this.decoder = decoder; 39 this.transformation = transformation; 40 this.encoder = encoder; 41 this.transcoder = transcoder; 42 this.sourceEncoder = sourceEncoder; 43 } 44 45 public Key getOriginalKey() { 46 if (originalKey == null) { 47 originalKey = new OriginalEngineKey(id); 48 } 49 return originalKey; 50 } 51 52 @Override 53 public boolean equals(Object o) { 54 if (this == o) { 55 return true; 56 } 57 if (o == null || getClass() != o.getClass()) { 58 return false; 59 } 60 61 EngineKey engineKey = (EngineKey) o; 62 63 if (!id.equals(engineKey.id)) { 64 return false; 65 } else if (height != engineKey.height) { 66 return false; 67 } else if (width != engineKey.width) { 68 return false; 69 } else if (!transformation.getId().equals(engineKey.transformation.getId())) { 70 return false; 71 } else if (!decoder.getId().equals(engineKey.decoder.getId())) { 72 return false; 73 } else if (!cacheDecoder.getId().equals(engineKey.cacheDecoder.getId())) { 74 return false; 75 } else if (!encoder.getId().equals(engineKey.encoder.getId())) { 76 return false; 77 } else if (!transcoder.getId().equals(engineKey.transcoder.getId())) { 78 return false; 79 } else { 80 return sourceEncoder.getId().equals(engineKey.sourceEncoder.getId()); 81 } 82 } 83 84 @Override 85 public int hashCode() { 86 if (hashCode == 0) { 87 hashCode = id.hashCode(); 88 hashCode = 31 * hashCode + width; 89 hashCode = 31 * hashCode + height; 90 hashCode = 31 * hashCode + cacheDecoder.getId().hashCode(); 91 hashCode = 31 * hashCode + decoder.getId().hashCode(); 92 hashCode = 31 * hashCode + transformation.getId().hashCode(); 93 hashCode = 31 * hashCode + encoder.getId().hashCode(); 94 hashCode = 31 * hashCode + transcoder.getId().hashCode(); 95 hashCode = 31 * hashCode + sourceEncoder.getId().hashCode(); 96 } 97 return hashCode; 98 } 99 100 @Override 101 public String toString() { 102 if (stringKey == null) { 103 stringKey = new StringBuilder() 104 .append(id) 105 .append(width) 106 .append(height) 107 .append(cacheDecoder.getId()) 108 .append(decoder.getId()) 109 .append(transformation.getId()) 110 .append(encoder.getId()) 111 .append(transcoder.getId()) 112 .append(sourceEncoder) 113 .toString(); 114 } 115 return stringKey; 116 } 117 118 @Override 119 public void updateDiskCacheKey(MessageDigest messageDigest) throws UnsupportedEncodingException { 120 byte[] dimensions = ByteBuffer.allocate(8) 121 .putInt(width) 122 .putInt(height) 123 .array(); 124 messageDigest.update(id.getBytes(FORMAT)); 125 messageDigest.update(dimensions); 126 messageDigest.update(cacheDecoder.getId().getBytes(FORMAT)); 127 messageDigest.update(decoder.getId().getBytes(FORMAT)); 128 messageDigest.update(transformation.getId().getBytes(FORMAT)); 129 messageDigest.update(encoder.getId().getBytes(FORMAT)); 130 messageDigest.update(sourceEncoder.getId().getBytes(FORMAT)); 131 } 132} 133