1
22
23 package com.liferay.documentlibrary.util;
24
25 import com.liferay.portal.kernel.util.FileUtil;
26 import com.liferay.portal.kernel.util.StringPool;
27 import com.liferay.portal.kernel.util.StringUtil;
28
29 import java.io.File;
30
31
36 public class AdvancedFileSystemHook extends FileSystemHook {
37
38 protected void buildPath(StringBuilder sb, String fileNameFragment) {
39 if (fileNameFragment.length() <= 2) {
40 return;
41 }
42
43 if (getDepth(sb.toString()) > 3) {
44 return;
45 }
46
47 sb.append(fileNameFragment.substring(0, 2) + StringPool.SLASH);
48
49 buildPath(sb, fileNameFragment.substring(2));
50 }
51
52 protected int getDepth(String path) {
53 String[] fragments = StringUtil.split(path, StringPool.SLASH);
54
55 return fragments.length;
56 }
57
58 protected File getDirNameDir(
59 long companyId, long repositoryId, String dirName) {
60
61 File repositoryDir = getRepositoryDir(companyId, repositoryId);
62
63 return new File(repositoryDir + StringPool.SLASH + dirName);
64 }
65
66 protected File getFileNameVersionFile(
67 long companyId, long repositoryId, String fileName, double version) {
68
69 String ext = StringPool.PERIOD + FileUtil.getExtension(fileName);
70
71 int pos = fileName.lastIndexOf(StringPool.SLASH);
72
73 if (pos == -1) {
74 StringBuilder sb = new StringBuilder();
75
76 String fileNameFragment = removeExtension(fileName);
77
78 if (fileNameFragment.startsWith("DLFE-")) {
79 fileNameFragment = fileNameFragment.substring(5);
80
81 sb.append("DLFE" + StringPool.SLASH);
82 }
83
84 buildPath(sb, fileNameFragment);
85
86 File repositoryDir = getRepositoryDir(companyId, repositoryId);
87
88 return new File(
89 repositoryDir + StringPool.SLASH + sb.toString() +
90 StringPool.SLASH + fileNameFragment + ext +
91 StringPool.SLASH + fileNameFragment +
92 StringPool.UNDERLINE + version + ext);
93 }
94 else {
95 File fileNameDir = getDirNameDir(companyId, repositoryId, fileName);
96
97 String fileNameFragment = removeExtension(
98 fileName.substring(pos + 1));
99
100 return new File(
101 fileNameDir + StringPool.SLASH + fileNameFragment +
102 StringPool.UNDERLINE + version + ext);
103 }
104 }
105
106 protected String removeExtension(String fileName) {
107 String ext = FileUtil.getExtension(fileName);
108
109 if (ext != null) {
110 fileName = fileName.substring(
111 0, fileName.length() - ext.length() - 1);
112 }
113
114 return fileName;
115 }
116
117 }