package cn.trinea.android.common.service.impl;
import cn.trinea.android.common.service.FileNameRule;
import cn.trinea.android.common.util.FileUtils;
import cn.trinea.android.common.util.StringUtils;
/**
* File name rule, used when saving images in {@link cn.trinea.android.common.service.impl.ImageSDCardCache}
* <ul>
* <li>use image url as file name, replace char with _ if not letter or number</li>
* <li>use file suffix in url as target file suffix</li>
* <li>use {@link #setFileExtension(String)} set file extension</li>
* </ul>
*
* @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-11-21
*/
public class FileNameRuleImageUrl implements FileNameRule {
private static final long serialVersionUID = 1L;
/** default file name if image url is empty **/
public static final String DEFAULT_FILE_NAME = "ImageSDCardCacheFile.jpg";
/** max length of file name, not include suffix **/
public static final int MAX_FILE_NAME_LENGTH = 127;
private String fileExtension = null;
@Override
public String getFileName(String imageUrl) {
if (StringUtils.isEmpty(imageUrl)) {
return DEFAULT_FILE_NAME;
}
String ext = (fileExtension == null ? FileUtils.getFileExtension(imageUrl) : fileExtension);
String fileName = (imageUrl.length() > MAX_FILE_NAME_LENGTH ? imageUrl.substring(imageUrl.length()
- MAX_FILE_NAME_LENGTH, imageUrl.length()) : imageUrl).replaceAll("[\\W]", "_");
return StringUtils.isEmpty(ext) ? fileName : (new StringBuilder().append(fileName).append(".")
.append(ext.replaceAll("[\\W]", "_")).toString());
}
public FileNameRuleImageUrl setFileExtension(String fileExtension) {
this.fileExtension = fileExtension;
return this;
}
}