webbeta /
Serializer
| 1 | package es.webbeta.serializer; |
||
| 2 | |||
| 3 | import es.webbeta.serializer.base.Cache; |
||
| 4 | import es.webbeta.serializer.base.MetadataAccessor; |
||
| 5 | |||
| 6 | import java.io.File; |
||
| 7 | |||
| 8 | public class CacheMetadataAccessor extends FileMetadataAccessor implements MetadataAccessor { |
||
| 9 | |||
| 10 | private static final String KEY_TPL = "serializer_metadata___%s"; |
||
| 11 | |||
| 12 | private Cache cache; |
||
| 13 | |||
| 14 | public CacheMetadataAccessor(Cache cache) { |
||
| 15 | super(); |
||
| 16 | |||
| 17 | this.cache = cache; |
||
| 18 | } |
||
| 19 | |||
| 20 | private String generateKey(Class<?> klass) { |
||
| 21 | return generateKey(klass.getCanonicalName()); |
||
| 22 | } |
||
| 23 | |||
| 24 | private String generateKey(String canonical) { |
||
| 25 | return String.format(KEY_TPL, canonical); |
||
| 26 | } |
||
| 27 | |||
| 28 | private String getFilenameWithoutExtension(String fileName) { |
||
| 29 | if (fileName.indexOf(".") > 0) { |
||
|
0 ignored issues
–
show
|
|||
| 30 | return fileName.substring(0, fileName.lastIndexOf(".")); |
||
| 31 | } else { |
||
| 32 | return fileName; |
||
| 33 | } |
||
| 34 | } |
||
| 35 | |||
| 36 | @Override |
||
| 37 | public Boolean hasMetadata(Class<?> klass) { |
||
| 38 | return super.hasMetadata(klass); |
||
| 39 | } |
||
| 40 | |||
| 41 | @Override |
||
| 42 | public String getMetadataContent(Class<?> klass) { |
||
| 43 | String key = generateKey(klass); |
||
| 44 | if (cache.get(key) != null) |
||
| 45 | return cache.get(key); |
||
| 46 | else { |
||
| 47 | if (super.hasMetadata(klass)) { |
||
| 48 | String metadata = super.getMetadataContent(klass); |
||
| 49 | cache.set(key, metadata); |
||
| 50 | return metadata; |
||
| 51 | } else |
||
| 52 | return null; |
||
| 53 | } |
||
| 54 | } |
||
| 55 | |||
| 56 | /** |
||
| 57 | * Removes all cache entries |
||
| 58 | */ |
||
| 59 | public void clearMetadataCache() { |
||
| 60 | File dir = this.metadataPath.toFile(); |
||
| 61 | if (dir == null) return; |
||
| 62 | File[] files = dir.listFiles(); |
||
| 63 | if (files == null) return; |
||
| 64 | |||
| 65 | for (final File fileEntry : files) { |
||
| 66 | if (!fileEntry.isFile()) continue; |
||
| 67 | |||
| 68 | String canonical = getFilenameWithoutExtension(fileEntry.getName()); |
||
| 69 | String cacheKey = generateKey(canonical); |
||
| 70 | |||
| 71 | if (cache.get(cacheKey) != null) |
||
| 72 | cache.remove(cacheKey); |
||
| 73 | } |
||
| 74 | } |
||
| 75 | |||
| 76 | } |
||
| 77 |
If you are just looking for the presence of a string in another string, consider using
contains().Should really want to test if a string is there, but not before a specific position, consider using this overload of
indexOf()