package net.coding.program.model; import com.loopj.android.http.RequestParams; import net.coding.program.R; import net.coding.program.common.Global; import org.json.JSONObject; import java.io.Serializable; import java.util.regex.Pattern; /** * Created by yangzhen on 2014/10/25. * 项目文档中的文件 */ public class AttachmentFileObject implements Serializable { public static final int ROLE_TYPE_OWNER = 100; public static final String RESULT = "AttachmentFileObject"; public static final String ACTION_EDIT = "ACTION_EDIT"; public static final String ACTION_DELETE = "ACTION_DELETE"; // .file-icon.doc,.file-icon.docx{background-color:#4a83dc} // .file-icon.ppt,.file-icon.pptx{background-color:#fcba17} // .file-icon.pdf{background-color:#ff0034} // .file-icon.xls,.file-icon.xlsx{background-color:#00c075} // .file-icon.txt{background-color:#b5bbc4} // .file-icon.rar,.file-icon.zip{background-color:#8e6dd2} // .file-icon.html,.file-icon.markd,.file-icon.markdown,.file-icon.md,.file-icon.mdown{background-color:#c5f0e9} private static final String SAVE_NAME_SPLIT = "|||"; public static String imagePatternStr = "(gif|png|jpeg|jpg|GIF|PNG|JPEG|JPG)"; // /\.(gif|png|jpeg|jpg)$/ static Pattern imagePattern = Pattern.compile(imagePatternStr); static String docPatternStr = "(doc|docx)"; static Pattern docPattern = Pattern.compile(docPatternStr); static String pptPatternStr = "(ppt|pptx)"; static Pattern pptPattern = Pattern.compile(pptPatternStr); static String pdfPatternStr = "(pdf)"; static Pattern pdfPattern = Pattern.compile(pdfPatternStr); static String xlsPatternStr = "(xls|xlsx)"; static Pattern xlsPattern = Pattern.compile(xlsPatternStr); static String txtPatternStr = "(sh|txt)"; static Pattern txtPattern = Pattern.compile(txtPatternStr); static String zipPatternStr = "(rar|zip|7z)"; static Pattern zipPattern = Pattern.compile(zipPatternStr); static String htmlPatternStr = "(html|htm)"; static Pattern htmlPattern = Pattern.compile(htmlPatternStr); static String mdPatternStr = "(markd|markdown|md|mdown)"; static Pattern mdPattern = Pattern.compile(mdPatternStr); static String aiPatternStr = "(ai)"; static Pattern aiPattern = Pattern.compile(aiPatternStr); static String apkPatternStr = "(apk)"; static Pattern apkPattern = Pattern.compile(apkPatternStr); static String psdPatternStr = "(psd)"; static Pattern psdPattern = Pattern.compile(psdPatternStr); static String soundPatternStr = "(mp3|aac|m4a|wma|flac|ape|wav|ogg)"; static Pattern soundPattern = Pattern.compile(soundPatternStr); static String videoPatternStr = "(3gp|mp4|rmvb|avi|wmv|flv|rm|mkv)"; static Pattern videoPattern = Pattern.compile(videoPatternStr); public long created_at; public int current_user_role_id; public String fileType = "";// "xlsx" public String file_id = ""; public UserObject owner = new UserObject(); public String owner_id = ""; /* https://coding.net/api/project/1/files/70699/imagePreview * 可以看到图片的原图,如果是其它类型的文件 * 就需要去掉 imagePreview,推荐的用法是拼接url出来, * https://coding.net/api/project/1/files/70699/download */ public String owner_preview = ""; public String parent_id = ""; public String preview = ""; public String storage_key = ""; public String storage_type = ""; public int type; public long updated_at; public boolean isSelected = false; public boolean isFolder = false; public boolean isDownload = false; public long downloadId = 0L; public int[] bytesAndStatus; public AttachmentFolderObject folderObject; private String name = ""; private int size = 0; private int history_id; // private Share share = new Share(); private String share_url = ""; public AttachmentFileObject() { } public AttachmentFileObject(JSONObject json) { created_at = json.optLong("created_at"); current_user_role_id = json.optInt("current_user_role_id"); fileType = json.optString("fileType"); file_id = json.optString("file_id"); name = json.optString("name"); if (json.has("owner")) { owner = new UserObject(json.optJSONObject("owner")); } owner_id = json.optString("owner_id"); owner_preview = json.optString("owner_preview"); parent_id = json.optString("parent_id"); preview = json.optString("preview"); size = json.optInt("size"); storage_key = json.optString("storage_key"); storage_type = json.optString("storage_type"); type = json.optInt("type"); updated_at = json.optLong("updated_at"); history_id = json.optInt("history_id"); share_url = json.optString("share_url"); } // public void setShare(Share shareParam) { // share = shareParam; // } public static AttachmentFileObject parseFileObject(AttachmentFolderObject folderObject) { AttachmentFileObject returnFileObject = new AttachmentFileObject(); returnFileObject.created_at = folderObject.created_at; //current_user_role_id = json.optString("current_user_role_id"); returnFileObject.fileType = "dir"; returnFileObject.isFolder = true; returnFileObject.file_id = folderObject.file_id; returnFileObject.name = folderObject.getNameCount(); /*if (json.has("owner")) { owner = new UserObject(json.getJSONObject("owner")); }*/ returnFileObject.owner_id = folderObject.owner_id; //owner_preview = json.optString("owner_preview"); returnFileObject.parent_id = folderObject.parent_id; //preview = json.optString("preview"); //size = json.optInt("size"); //storage_key = json.optString("storage_key"); //storage_type = json.optString("storage_type"); //type = json.optInt("type"); returnFileObject.updated_at = folderObject.updated_at; returnFileObject.folderObject = folderObject; return returnFileObject; } public boolean isShared() { return !share_url.isEmpty(); } public String getShareLink() { // return share.url; return share_url; } public void setShereLink(String link) { if (link == null) { link = ""; } share_url = link; } public int getHistory_id() { return history_id; } // 保存在本地的名字 public static final int INFO_COUNT = 4; public String getSaveName(int projectId) { // 修改字段要记得修改 INFO_COUNT return projectId + SAVE_NAME_SPLIT + file_id + SAVE_NAME_SPLIT + history_id + SAVE_NAME_SPLIT + name; } public RequestData getHttpShareLinkOn(ProjectObject projectObject) { String url = Global.HOST_API + "/share/create"; RequestParams params = new RequestParams(); params.put("resourceId", file_id); params.put("resourceType", 0); params.put("projectId", projectObject.getId()); params.put("accessType", 0); return new RequestData(url, params); } public String getHttpShareLinkOff() { int pos = share_url.lastIndexOf("/"); if (pos == -1) { return ""; } String hash = share_url.substring(pos + 1); return Global.HOST_API + "/share/" + hash; } public String getName() { return name; } public void setName(String s) { name = s; } public int getSize() { return size; } public boolean isImage() { return isImage(fileType); } public static boolean isImage(String suffix) { return imagePattern.matcher(suffix.toLowerCase()).find(); } public boolean isGif() { return this.fileType.toLowerCase().equals("gif"); } public static boolean isDoc(String fileName) { return docPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isPpt(String fileName) { return pptPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isPdf(String fileName) { return pdfPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isXls(String fileName) { return xlsPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isTxt(String fileName) { return txtPattern.matcher(fileName.toLowerCase()).find(); } public boolean needJump() { return isTxt(fileType) || isMd(fileType) || isImage(); } public static boolean isZip(String fileName) { return zipPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isHtml(String fileName) { return htmlPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isMd(String fileName) { return mdPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isAi(String fileName) { return aiPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isApk(String fileName) { return apkPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isPsd(String fileName) { return psdPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isSound(String fileName) { return soundPattern.matcher(fileName.toLowerCase()).find(); } public static boolean isVideo(String fileName) { return videoPattern.matcher(fileName.toLowerCase()).find(); } public int getIconResourceId() { return getIconResourceId(fileType); } public static int getIconResourceId(String fileName) { if (AttachmentFileObject.isAi(fileName)) { return R.drawable.ic_file_ai; } else if (AttachmentFileObject.isApk(fileName)) { return R.drawable.ic_file_apk; } else if (AttachmentFileObject.isDoc(fileName)) { return R.drawable.ic_file_docx; } else if (AttachmentFileObject.isHtml(fileName)) { return R.drawable.ic_file_html; } else if (AttachmentFileObject.isMd(fileName)) { return R.drawable.ic_file_md; } else if (AttachmentFileObject.isPdf(fileName)) { return R.drawable.ic_file_pdf; } else if (AttachmentFileObject.isPpt(fileName)) { return R.drawable.ic_file_ppt; } else if (AttachmentFileObject.isPsd(fileName)) { return R.drawable.ic_file_psd; } else if (AttachmentFileObject.isSound(fileName)) { return R.drawable.ic_file_sound; } else if (AttachmentFileObject.isTxt(fileName)) { return R.drawable.ic_file_txt; } else if (AttachmentFileObject.isVideo(fileName)) { return R.drawable.ic_file_video; } else if (AttachmentFileObject.isXls(fileName)) { return R.drawable.ic_file_x; } else if (AttachmentFileObject.isZip(fileName)) { return R.drawable.ic_file_zip; } else { return R.drawable.ic_file_unknown; } } public boolean isOwner() { return current_user_role_id == ROLE_TYPE_OWNER; } public static class Share implements Serializable { /** * resource_type : 0 * resource_id : 308811 * user_id : 7074 * access_type : 0 * project_id : 126848 * overdue : 0 * created_at : 1440992709000 * hash : 572e7ead-8b42-4e2f-9d18-b74b48d2195a * url : https://coding.net/s/572e7ead-8b42-4e2f-9d18-b74b48d2195a */ int resource_type; int resource_id; int user_id; int access_type; int project_id; int overdue; long created_at; String hash = ""; String url = ""; public Share() { } public Share(JSONObject json) { resource_type = json.optInt("resource_type"); resource_id = json.optInt("resource_id"); user_id = json.optInt("user_id"); access_type = json.optInt("access_type"); project_id = json.optInt("project_id"); overdue = json.optInt("overdue"); created_at = json.optLong("created_at"); hash = json.optString("hash"); url = json.optString("url"); } public String getUrl() { return url; } } }